近年来,“开源”成为开发者社区新的流行趋势。尤其是深度学习框架,自2017年腾讯开源ncnn以来,各大AI实验室都“大手笔”开源了自己的框架,实现了比较快速的创新。今年6月10日,腾讯宣布基于ncnn设计的深度学习推理框架TNN也将开源。TNN开源后,很多开发者将其与ncnn、MNN等开源框架进行了比较。TNN的性能稍微好一点,它“指向”移动端;MNN的通用性更好。TNN一方面是为了增加计算能力而设计的,另一方面又强调了对移动设备的支持。否则,用户没必要放弃生态良好的MNN和熟悉的ncnn去使用TNN。TNN是在ncnn的基础上发展而来,并进行了重构和升级。除了算力的大幅提升,基于TNN的开发者还可以将深度学习算法移植到手机上,开发移动端AI产品。为了比较MNN、ncnn和TNN的性能,在以下主流平台上做了测试:可以看出TNN在性能上还是有优势的。但是在某些环境下的测试其实和MNN不相上下。阿里的开发团队也表示,TNN的性能刺激了MNN的提升,但相比当年2000ms到700ms的跨越几乎毫无意义。TNN性能提升的关键是低精度计算。前面说到不能移植到移动端的本质原因是手机处理器比较弱,所以框架适配中低端手机很重要。TNN在这方面做得很好,在中低端机器上的性能都有20%左右的提升。通用性和可移植性也是TNN框架的亮点之一,它解决了一些不同框架之间的模型转换问题。但是TNN的模型转换需要基于ONNX,不能像MNN那样直接支持。操作只是多了一步,通用性大打折扣。MNN在通用性方面的优势也是不可否认的。MNN在其多功能性方面投入了大量精力。通过查看支持的运算符数量,您可以看出这是MNN的一项关键工作。在算子实现方面,MNN在计算后端也有最广泛的支持。除了ARMv8.2之外,MNN在对GPU算子的支持方面也远优于其他两个框架。先说开源的一个重要问题:代码可读性。尽管TNN和ncnn在CPU代码框架上非常相似,但它们的风格和结构远优于ncnn,使其更易于阅读。MNN在这方面也做得很好。MNN和TNN在代码结构上还是有很多相似之处的。这些相似性使得从MNN到TNN的代码迁移变得不那么复杂。总的来说,ncnn作为2017年第一个开源框架,非常经典。当TNN和MNN的性能差距不大的时候,选择哪个框架就是个体差异的问题,各有各的优势。从ncnn开始,深度学习框架开源成为大趋势。虽然企鹅最近因为一些花边新闻被吐槽,但是在深度学习框架的开源方面,真的要感谢ncnn,这个傻白甜鹅在2017年7月开源了它,几乎掀起了“热潮””的开源深度学习框架。经过业界各方三年不懈努力(向内滚动),VGG16在RK3399上的单核推理速度已经从2000ms+压缩到700ms+。也正是因为开源,才能汇集所有人的智慧,得到如此出色的性能提升。作为老牌级框架,ncnn本身就是为针对移动平台优化的高性能神经网络推理计算而开发的。从设计之初,ncnn就经过深思熟虑,以便在手机上部署和使用。ncnn目前在很多腾讯应用中都有使用,包括大家熟悉的微信、QQ等,MNN也是一个具有重要意义的开源框架。MNN是一个高效、轻量级的深度学习框架。支持深度模型推理和训练,尤其是在设备端推理和训练性能方面。目前,MNN已经应用于阿里巴巴旗下的手机淘宝、手机天猫、优酷、钉钉、闲鱼等20个应用。MNN在性能提升方面做出了突出贡献,因此成为开发者的首选框架。TNN作为鹅厂2020年开源的移动端推理框架,具有高性能、轻量级的特点,具有跨平台、高性能、模型压缩、代码裁剪等诸多优势。目前TNN已经在手Q、微视、Ptu等应用落地。除了这三个主流框架之外,还有一些常用的框架,比如PPL。但是PPL还没有开源,或许商汤科技还想“储备”。其实ncnn开源的时候,PPL就出来了,说他们性能更好。PPL其实是开发者经常使用的框架之一。百度开源了一个名为Padle-Lite的框架。Paddle-Mobile是一个开源深度学习框架,旨在简化移动、嵌入式和物联网设备上的推理。它与来自PaddlePaddle和其他来源的预训练模型兼容。开源框架中甚至还有雷总。小米的主营业务还是在硬件方面。开源框架确实非常难得。MACE是一个深度学习推理框架,针对Android、iOS、Linux和Windows设备上的移动异构计算进行了优化。最后为了方便大家放上开源框架大礼包:ncnn:https://github.com/Tencent/ncnnMNN:https://github.com/alibaba/MNNTNN:https://github.com/Tencent/TNNPL:https://github.com/PaddlePaddle/Paddle-LiteMACE:https://github.com/XiaoMi/mace
