本文对比以下几种常见框架:
TF Lite,TEngine ,paddle lite ,mnn ,nnpack ,qnnpack ,ncnn ,FeatherCNN 以及MACE。
本文为本人阅览资料总结而出,若对本文有任何疑问,欢迎评论区讨论,相互进步。
nnpack与qnnpack
从nnpack与qnnpack说起,两者均由facebook推出,常用于pytorch,caffe2中。与其说是完整的推理框架,不如说是两个加速库 Lib 更合适。
nnpack的加速原理是:用FFT与Winograd变换替换im2col的矩阵卷积操作。这确实会给大矩阵提供较大的加速,但缺点也十分明显:两种算法均仅能用于fp32,而不能用于int8以及二三值的模型,同时,只有较大kernel size时才能提供较大加速,这使得nnpack的提速领域十分受限。(当然也存在使两种算法应用于Int8的变式算法,在此不再赘述)。
qnnpack的加速原理是:间接卷积+GEMM,在推出后也同时发了文章。间接卷积,简单来说就是利用指针将矩阵数值间接引用出来使用,而不是原先im2col中直接copy,这样有效地减小了内存消耗并成功提速。
qnnpack与nnpack仅为库,而非完整的移动端框架,因此,若运用两者的推理框架中没有较好的图优化,算法优化等加速方法的话,速度一般是难以与其他专门为移动端设计的推理框架相比较的。
ncnn与FeatherCNN
ncnn与FeatherCNN均为腾讯推出,FeatherCNN来自腾讯AI平台部,ncnn来自腾讯优图。从目前的使用情况看来,ncnn的性能要在大部分场景下略好于FeatherCNN。
MNN vs NCNN vs MACE vs TF LITE vs Tengine vs PaddleLite
近些年各种移动端框架横空出世,其中包括百度的Paddle Lite,阿里的MNN,小米的MACE,腾讯的NCNN以及OPEN AI LAB的Tengine,看看这些框架与“老大哥” TF LITE 的对比吧。
MNN的开源时间较迟,据网友们反应,MNN确实具有“后起之势”,整体框架较为稳定,优化算法该有的都有,整体速度在官方数据上,也确实优于NCNN,MACE框架。
Paddle Lite褒贬不一,有人吹上天,也有人认为不好用。其中一大原因,我认为是框架不是很稳定:不用docker编译Paddle Lite的话,很难成功编译,也不晓得目前是否已经完善。但总体来说,paddle Lite也是非常优异的推理框架,这源于它迅速的推理速度。
MACE,NCNN两者开源得早,稳定性肯定是优于前两者的,若十分看中这一点,建议选择这两者。
Tegine的官方数据上,其推理速度是优于MNN的,但是由于Tegine目前仍然是部分开源,因此在此不多做评价。
TF LITE虽说是老大哥,但是推理速度确实不敢苟同,大多框架的数据对比,都会顺带上一个基准线:TF LITE,也可见在移动端推理上,Tensorflow有待改善。