版权声明:转载请注明来源,谢谢。 https://blog.csdn.net/luke_sanjayzzzhong/article/details/89027208
文章目录
YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)阅读笔记
1. Abstract
- 一个网络可以预测边框和类别的概率,做到了end-to-end
- 速度非常快,能做到45 fps(frams per second).
- 可以学到更普遍的物体特征,不过个人感觉没啥用。速度快也意味着精度下降。
2. Introduction
-
YOLO的流程非常简单:
- 将图片resize到448x448
- 用一个神经网络训练
- 通过Non-max suppression
-
YOLO的三个优点:
- 速度快,在Titan X上跑达到45fps,小版本的更快
- YOLO能够看到整张图片,不像R-CNN只是提取部分区域。在背景检测方面YOLO比区域提取算法更好。
- YOLO在泛化方面做得更好,面对不是训练数据的分布时,更强。
3. Unified Detection
训练的时候
- 把输入的图片分成SxS个格子(grid)。如果一个物体的中心落在这个格子,那么这个格子就负责检测这个物体。
- 每个格子预测B个边框,同时给每个边框带上置信分数(confidence scores)。置信分数反映了边框含有预测物体的可能性大小,以及这个预测的边框的准确度。通常,这个置信度(confident)定义为:
。
也就是这个格子的分类概率乘于IOU。 - 每个预测出来的边框包含5个值: .其中 代表边框的中心点, 的坐标是相对一个格子而言的; 代表边框的宽和高,注意这里是相对整张图片而言的;最后confidence代表预测边框和真实边框的的IOU。个人觉得这里论文讲得有点矛盾,前面说confidence是 ,现在又这样说。
- 每个格子单元同时预测C个类别的概率,也就是后验概率 ,要注意的是,有多少类我们就预测多少个类别,不管有多少个边框B。这里的意思是,如果我们做10个类别的目标检测,那么就预测出10个类别的后验概率。
测试的时候
- 测试时,将每个预测类别的条件概率乘于每个边框的置信度:
,
这样就可以得出每个类别对应的边框的分数了。到这里作者就统一了,也就是置信度(confidence)是等于
。
这是论文给的图片:
网络设计
- 24层卷积层,最后两层是全连接层,和GoogLeNet很像,但是卷积核只用1x1的和3x3
的。另外还有一个快速版的YOLO,卷积层只有9层。
训练
- 预训练:用前20层去预训练
- 检测任务通常需要细粒度(fine-grained)的图像信息,因此增加图片的分辨率到448x448,原来是224x224
- 为了归一化,所以将边框的w和h设置为相对整张图片的宽和高,这样w和h的值就能落到(0,1)了;同理将边框的x和y设置为相对格子单元也是为了归一化。
- 最后一层没用激活函数,其他的都用了Leaky rectified lineage activation:
- loss function 如下:
具体训练参数还是到论文细看。
预测
- 预测的时候,在PASCAL VOC数据集上,每张图片预测了98个框,每个框都有相应类别的概率。
不足
- 检测小物体效果不好
- (这个不足看不懂)
- 对大框的错误和小框的错误同等对待,然而小框出错对IOU影响很大。
3. 和别的检测算法比较
- 总的来说就如下:比YOLO准确率高的没YOLO快,比YOLO快的没它的准确率高。
4. 实验
- 主要是和Fast R-CNN比较。
- 在艺术作品上的检测效果非常好,其他的检测算法效果与YOLO相比都相差甚远。
5. 野外实时检测
- https://pjreddie.com/darknet/yolo/ 这个网址有视频样例,看起来挺厉害的。
6. 总结
实时性很厉害,YOLO的实现还用了自己的框架,名字叫darknet
,真的是厉害啊。有机会看看用pytorch或tensorflow实现的源码。