yolo v3制作自己的数据_6. YOLOv3与RFSong在人手检测数据集的对比

前言:

上一篇文章说到了自己最近学习的YOLO剪枝项目,自己的复现效果不是很理想,水平太菜了,还得多学学相关知识再去调调看:

Lam1360/YOLOv3-model-pruning​github.com
aea85054219a9d00fa94cd4ff5f2326c.png

之前自己将YOLO架构放到SSD上进行了实验比较,这一篇文章则是直接对比YOLOv3及其剪枝与自己行人检测文章改进的RFSong,看看YOLO进行剪枝之后的效果与RFSong相比究竟如何。

数据准备:

首先还是看看网络输入为448GT框的分布情况:

3f6ed372303ca67efd8d1c19ab3cad93.png

分析可得:

  1. 主要是中小目标,,因此可以适当减少检测层数目,适当增大网络的输入分辨率。这里我就去掉最后两个检测层了,实现了下采样64倍,因此输入分辨率可以设置为64的倍数,这里为了方便跟yolo416进行比较,网络输入分辨率设置为了448.
  2. 比例变化较大,从0.3-3都有,因此比例得稍微多设置一些

具体配置如下:

933f687c0bac08f4b681f997306e8746.png

自己还利用kmeans聚类进行了SSD的anchor设置尝试

lars76/kmeans-anchor-boxes​github.com
fe1946257489a3e7075c4a0314efcd2d.png

聚类出来后的设置如下,感觉聚类出来的anchor尺度变化更小一些了,而且好像不太能体现SSD的多尺度检测了。效果也大打折扣,降了1.2个点,还不如自己根据GT框分布自己大概设置。

VOC_Config 

RFSong网络:

51cfc0fb57f49d314144ef5562d5a492.png
只有四个检测层,下采样了64倍,因此支持64倍的输入

网络在行人检测代码RFSong7993上进行了修改,因为发现0.99MB版本与这个版本速度测出来都是200FPS(发现是推理时间0.99MB版本稍快一点点,但是由于精度下降,NMS处理的时间增加了),这也说明通道减少有时候对模型的加速还是有限的:

songwsx/RFSong-7993​github.com
2a5d8668bc66f8ea9744fd6ca3519d8f.png

这里由于还去掉了最后的一些卷积层,虽然输入分辨率从300变为了448,速度应该也还是非常快的。

这里调参的一个重要的地方就是匹配的iou阈值调低,这样对于小目标更加友好,匹配更多小目标进行训练:

e640d8d67dbd6757d5cfab14ad3856ee.png

实验结果:

速度对比:

YOLO v3剪枝项目的介绍:

用 YOLOv3 模型在一个开源的人手检测数据集oxford hand上做人手检测,并在此基础上做模型剪枝。对于该数据集,对 YOLOv3 进行 channel pruning 之后,模型的参数量、模型大小减少 80% ,FLOPs 降低 70%,前向推断的速度可以达到原来的 200%,同时可以保持 mAP 基本不变。

需要注意的是,项目代码的速度均是直接随机产生数据进行模拟输入,这样得到的推理速度不是真正的速度。因此前向推理速度达到两倍的话,速度上肯定还是RFSong胜出。

精度对比:

61734044c87237a4c00b7b30ba8fdfc5.png

作者达到的精度是77.5,自己经过多次调参,终于从一开始的72达到了77.7,不过非常不稳定,也就出现一次77.7。不过群里朋友有经过剪枝达到79.1的,虽然剪的比较少一些。因此,YOLO的最好成绩是79.1。

利用自己修改的的RFSong,则比较稳定的能达到79.5,精度上也还是RFSong略高一点。

b791403985aeefa66f7ed0c07a5c05c2.png

train from scratch对比:

自己对YOLO适当删减通道后进行了从头训练,最高只能达到50的AP,感觉YOLO从头训难度比RFBNet大,不是很方便自己设计,可能得先去coco数据集或者其他检测数据集进行一些预训练。当然这个剪枝的思路也是非常好的,非常感谢作者的开源。

RFSong还是train from scratch的,因此进行修改设计非常的方便,并且在这种比较小的数据集表现依旧很好,就是训练的epoch数目多很多,这里我训练了140个epoch,花了三四个小时。

总结:

YOLOv3效果不如修改的RFSongt好,原因也可能是本身这个Pytorch的YOLO实现精度没有那么好, kevinCK大佬说是没有达到指标。

KevinCK:目标检测——YOLO V3简介及代码注释(附github代码——已跑通)​zhuanlan.zhihu.com
31c17d359a294f2f74c35d9997062b61.png

不过综合来看,RFBNet还是很优秀啊!!自己稍加修改的RFSong在其他数据集上表现也都非常好,还是比较实用的。

本人水平较菜,欢迎大家批评指正,也非常欢迎进群一起交流:云深不知处-目标检测 763679865(代码和模型权重都放在群文件了)

更新:

对下面这个版本的yolov3源码进行了阅读,发现这个源码实现不够完备,不过非常简洁易懂,适合学习:

eriklindernoren/PyTorch-YOLOv3​github.com
00428de9f27db7dbebeb85d4d29b92d0.png

实验结果(开启多尺度):78.0

2d3179f92ddab762d9214da824000f5d.png

这个实现之所以没有达到非常好的表现,可能有以下原因:

  1. 数据增广太少,不完整,并且多尺度训练的尺度变化也较小一些(320-512)
  2. 学习率直接默认,没有warm up和decay
  3. loss的加权处理不符合,有些甚至没有设置
  4. anchor匹配策略,这里对应每个yolo层都去匹配一个iou最大的

自己又采用了下面这个yolo实现,这个实现效果更好,推荐使用:

https://github.com/ultralytics/yolov3​github.com

实验结果(开启多尺度):81.5

147fdea2580f9ab2cf6fe5351659e185.png

ultralytics/yolov3实现更加完备一些,效果也比之前的提高了3.5个点,相比RFSong也高了两个点。这也更加符合一般认识,小目标iou0.5下YOLO效果更好一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值