对YOLOv3进行瘦身-行人检测

0 前言

前面用RFSong实现了GPU 200 FPS,并且测试结果发现在COCO上也只比YOLOv3低了六七个点左右,基本可以满足自己的使用需求了。因此下面想试试YOLO按照RFSong进行改进,看看能不能在精度只掉一点的情况下,实现更快的速度。

1. 确定基线

尝试对YOLO在VOC COCO的行人图片数据集进行从头训练,也就是不加载任何权重直接进行目标检测任务的训练(这里没有开启多尺度训练,因为太耗时了等最后再加)。不过说是从头训其实也没有完全从头训,因为感觉前面YOLO的设计还是比较给力的,削减channel和层数的空间不大,因此这里就加载了前面部分的参数(这里加载了前面25层):

只要对下面的代码进行修改即可:

最终在COCO2017 val上得到行人检测的AP大概在0.68

不过当利用YOLOv3 COCO预训练模型的时候,测试精度可以达到72,7的AP。

2. 对YOLO进行瘦身

原来的YOLO还是比较庞大的,但是如果只检测行人这一个类,其实削减一些参数精度也下降不会太多。这里我就试试将后面那两个8个模块堆叠的部分削薄了,都改成了4,。还有后面的一些chanel是1024,我这里最多就使用512。总的来说就是:

1. 削减一些层

2. 削减channel数目

3. 删去瓶颈层的大部分的relu。也就是前面channel多,经过这个卷积后,channel变少了,对于这的卷积后面就不加relu了。(参考mobilenetV2)

可以看到模型的参数量有了非常显著的下降:由原来的61.9 M变成了现在的21.2 M

最终的mAP也只差1.4个百分点,速度快了一倍(这里开启了多尺度)

速度对比:

GPU对比:

原始的YOLO v3速度测试,原来大概是40FPS的样子:

经过自己大致裁剪的YOLO模型的速度达到了59 FPS

 CPU对比:

原版YOLO CPU速度,去掉前面5张取平均为0.91 s

瘦身后的YOLOv3: 0.57 s

3. 加载COCO浅层权重进行训练

由于前面很多层其实也没做改动,因此其实完全可以加载部分参数。如果加载YOLOv3 COCO权重的前面25层(也就是前面没有改动的层)进行实验看看效果。代码发现人家已经实现了,这里只需要计算出加载的层就行:

发现前面多吃尺度训练还是很耗时,关掉后测得mAP为65.5,差了一个多点,其实可能就是多尺度造成的吧。使用YOLO v3 COCO权重发现比darknet53收敛快了不少,所以还是推荐用COCO训练的权重:

4. 增加SYSY数据集

最后一个epoch达到了69.2的AP,这比原来的YOLO还高了啊,可以啊。当然很有可能是YOLOv3从头训没有训好的原因

然后利用这个模型在只用COCO行人的数据集进行finetune几个epoch再去测试,最终达到了70的AP。

交流请加群 云深不知处-目标检测 763679865

发布了16 篇原创文章 · 获赞 37 · 访问量 8464

猜你喜欢

转载自blog.csdn.net/songwsx/article/details/102715082