yolov2-cpu检测90ms每帧之tinier模型(3.5M)应用

时间:2022-01-06 15:05:40

        众所周知,yolov2是个很好的深度学习框架,是检测算法的得力助手。但是yolov2在windows下cpu的测试速度不尽如人意,原作者给出的模型有多种,如tiny-yolo,以及full-yolo。博主用的是tiny-yolo模型,模型大小为63.5M,i7处理器完成一帧图像(640x460)的检测需要1.4s,很难满足工程的需求。

        所以本博文意在解决的是yolo在windows-cpu下的应用问题。那么如何在尽量满足准确率的情况下完成yolov2的提速?

        可以从两方面着手:1)精简代码,优化代码。2)压缩网络,优化网络

        1)博主用c写了一个yolov2的前向工程,意在精简代码,同时修改了源代码众多无用的代码,使代码的性能从原来的1.4s优化至950ms(tiny-yolo测试)。如下图所示

 yolov2-cpu检测90ms每帧之tinier模型(3.5M)应用

        2)压缩网络的工程,博主做了20个实验,具体的做法是针对自己的数据(人肩数据集),先训练自己的网络(以下简称tinier),在得到一定的准确率后,对tinier模型进行fine-tune,最终得到的recall在85左右,模型大小为3.5M,基本满足工程需求。最终经过测试,该网络完成640x480图像的检测仅需要158ms左右。测试效果如下图所示:

yolov2-cpu检测90ms每帧之tinier模型(3.5M)应用

        经过测试,此测试效果满足应用要求,下图(1和2图从百度图片load)是tinier模型的测试效果:

yolov2-cpu检测90ms每帧之tinier模型(3.5M)应用

yolov2-cpu检测90ms每帧之tinier模型(3.5M)应用


*****************************************6.20更新**********************************

更新1、cpu代码优化加速,采用openblas对yolo卷积计算进行加速,目前前向时间从158ms缩减至90ms左右检测一帧图像。

更新2、gpu代码整理完成,将cpu的卷积操作用gpu完成,目前采用nvidia7301g显存,2.0计算能力)检测一帧图像耗时50ms左右,后续再进行加速操作。

*****************************************7.3更新**********************************

原始tiny模型(63.5M),经过代码修改调优,以及增加openblas卷积过程进行加速,再者使用openmppooling层进行多线程计算,可从原先cpu的检测时间1.4s优化至目前的150ms,精度不变,速度提升10倍!(硬件支持:intel cpu 8核)


任何问题请加唯一QQ2258205918(名称samylee)  !!!