TVM、Openvino、TNN、NCNN前向推理框架使用心得

TVM、Openvino、TNN、NCNN前向推理框架使用心得

  • 仅是个人开发过程中的一些心得, 不同的开发者应该有不同意见,当然我可能会有一些理解程度不够深入的地方,希望各位指正批评.
  • 一共五分,★★★☆☆表示得三分,其中"-"表示接触的不多,无法提供相关的使用心得
TVM OpenVino TNN NCNN
API友好 ★★☆☆☆ ★★★★★ ★★★★☆ ★★★★☆
社区 ★★★☆☆ ★★★★★ ★★★☆☆ -
开发难度 ★★★★★ ★★★☆☆ ★★★☆☆ ★★★☆☆
速度性能 ★★★★★ ★★★★☆ ★★★☆☆ -
硬件支持 ★★★★★ ★★★☆☆ ★★★★☆ -

tvm

我用的是tvm0.6, 在使用tvm开发时需要具备的知识体量还是比较大的,但是在能成功运行第一个demo以后就算突破一个瓶颈.个人感觉TVM的设计上比较偏向"开发者",而非"函数接口调用者",比如在开发过程中我想得到RetinaFace算法结果输出landmark的数值, 我找了很久都没有找到直接获取的函数,只能通过index间接获取( 或许是存在一个比较好的函数而我没有找到), 这index对于不了解算法的工程组同志就就太难了,RetinaFace有9个输出,把index对应上都得蜕层皮.

m_get_output = mod.GetFunction("get_output");
landmark_output = m_get_output(index);

而openvino这个方面就方便太多了,直接输入名字便可以获取

Blob::Ptr output = infer_request->GetBlob(name);

相关讨论:TVM发展最大的瓶颈是不是易用性?

但是,熟练掌握TVM的套路以后你会发现-------真香!!!

  • 1.速度提升远超其他框架, 还有auto tune,不仅支持本地tune还有rpc模式,tune完成后速度还能再次提升.
  • 2.支持的后端硬件比较广泛,在本工程中CPU和GPU上可以用同一套代码,只需更换对应的模型即可! 在同时支持GPU、CPU的需求下,可能会采用GPU(tenorrt、cuda)+CPU(ncnn、openvino),代码都要写两套!是不是想起了那些苦难的日子!!!

openvino

各方面都是相当的均衡,充分的文档、友好的API使得新手非常容易上手,项目周期变得可控,但是intel出品的openvino是针对自家硬件产品(intel-cpu)的,可以部署的硬件就有一定的限制,当然也可以选择intel有神经网络加速棒(Stick 2, 可以理解为插在USB上的显卡),如下图所示:TVM、Openvino、TNN、NCNN前向推理框架使用心得_第1张图片

TNN

tnn是在ncnn基础上进行的改良,文档、社区、API、都非常的赞,并且在编译时可以选择openvino、TensorRT的编译选项.
TVM、Openvino、TNN、NCNN前向推理框架使用心得_第2张图片
TVM、Openvino、TNN、NCNN前向推理框架使用心得_第3张图片

NCNN

ncnn我使用的并不多,在生产开发时,主要是给手机端的算法进行加速,

总结

TVM:带来的加速效果非常的可观,对硬件的支持非常宽泛, 但是对新手不友好, 需要熟练掌握算法输入输出结构,并且熟知TVM API函数的情况下,可以使用TVM对算法进行加速,否则项目周期会变得不可控.

OpenVino:对新手友好,但对部署的硬件有一定的要求,如果算法可以在intel-cpu、神经网络加速棒(Stick 2)上部署,那么OpenVino是一个不错选择.

TNN:对新手友好,单纯使用TNN加速带来的加速效果一般,可以按照TNN的文档对算法进行一次优化;在编译时可以选择openvino、TensorRT编译选项,对硬件的支持就宽泛.

NCNN:加速PC端加速效果并不理想,手机端的使用比较多一些.

其他

RetinaFace使用TNN、TVM、NCNN、Openvino实现

你可能感兴趣的:(前向推理,模型转换,深度学习,神经网络)