众所周知,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测试)。如下图所示
2)压缩网络的工程,博主做了20个实验,具体的做法是针对自己的数据(人肩数据集),先训练自己的网络(以下简称tinier),在得到一定的准确率后,对tinier模型进行fine-tune,最终得到的recall在85左右,模型大小为3.5M,基本满足工程需求。最终经过测试,该网络完成640x480图像的检测仅需要158ms左右。测试效果如下图所示:
经过测试,此测试效果满足应用要求,下图(1和2图从百度图片load)是tinier模型的测试效果:
*****************************************6.20更新**********************************
更新1、cpu代码优化加速,采用openblas对yolo卷积计算进行加速,目前前向时间从158ms缩减至90ms左右检测一帧图像。
更新2、gpu代码整理完成,将cpu的卷积操作用gpu完成,目前采用nvidia730(1g显存,2.0计算能力)检测一帧图像耗时50ms左右,后续再进行加速操作。
*****************************************7.3更新**********************************
原始tiny模型(63.5M),经过代码修改调优,以及增加openblas对卷积过程进行加速,再者使用openmp对pooling层进行多线程计算,可从原先cpu的检测时间1.4s优化至目前的150ms,精度不变,速度提升10倍!(硬件支持:intel cpu 8核)
任何问题请加唯一QQ2258205918(名称samylee) !!!