- YOLO总体特点:
相比先提出候选框再做检测的two-stage方法,yolo是一种one-stage的检测方法,所以具有速度优势。
将物体检测转化为回归问题,输出每个网格对应的归一化 xywh+置信度+类别onehot
feature map,每个网格的feature map对应输出的回归 y
损失函数:分类损失+有目标损失+无目标损失+矩形框损失
- YOLOV1:
对PASCAL VOC数据划分7*7网格,每个网格预测两个框xywh,但只能预测一个class
最小物体检测效果欠佳
- YOLOV2:
FCN全卷积层,无dropout,采用BN
anchor机制以解决每个网格只能预测一个class的缺点,k-means聚类得到anchors size
分类误差,softmax->logistic
- YOLOV3:
Darknet-53 网络
多尺度检测,8倍下采样的feature map适合检测小物体
开源
自从yolov5开源以来,(不管因为啥原因算是)深受瞩目,最近我用tensorflow实现了其主要部分。就孤陋的我看来,是第一个纯正的tensorfow2版本,欢迎try and star:
https://github.com/LongxingTan/Yolov5
之前在工作中接触过yolov3(跑过demo应该就算接触过了),效果惊艳。我在视觉领域只是个新人(悲伤的是我一个中年人却在哪儿哪儿都TM是新人),能力有限,疏漏难免。从头开始实现,对我来说是一次不错的经历,遇到和解决了一些细节问题。
如readme中所指出的,主要特点如下:
- 纯tensorflow2的实现
- 用yaml文件来配置模型和控制模型大小
- 支持自定义数据训练
- 马赛克数据增强
- 通过iou或长宽比匹配anchor
- 相邻正样本增强
- 支持多GPU训练
- 相对详细的代码注释
- 缺点多,提升空间巨大
原理
结合代码简单回顾一下其主要原理和改进。当然知乎上已经有不少非常不错的解析文章可以参考,尤其是下面列举的。当然,如有可能,读代码应该是更清晰、细节的了。
- https://zhuanlan.zhihu.com/p/172121380
- https://zhuanlan.zhihu.com/p/183838757
- https://mp.weixin.qq.com/s/yXcoRK6btznOdxMjAncIlQ
损失函数部分,还没有完全和v5的设置一样。v5中做了一些优化,如不同scale的平衡,如目标confidence损失的权重等。
效果
如果想要效果最佳,还是推荐原版pytorch,毕竟一直在更新中,v4和v5的作者也一直还在发力优化。如果对tensorflow有谜之爱好,或者想通过代码了解yolov5,我觉得我的版本写的更清楚一些(与之相应的代价是可能有细节遗漏甚至不对的地方),总之欢迎大家尝试。
在MNIST检测数据上的效果:
在voc2012数据集上的效果(效果还有待加强):
再大的数据集我就跑不动啦,毕竟只有1080Ti可用。