一、目标检测之YOLOv3
YOLOv3: An Incremental Improvement
- 论文链接:https://arxiv.org/abs/1804.02767
- 论文翻译:https://zhuanlan.zhihu.com/p/34945787
- 论文详解:
1、https://blog.paperspace.com/tag/series-yolo/
2、https://blog.csdn.net/gzq0723/article/details/79936613 - 论文代码:
1、https://github.com/pjreddie/darknet
2、https://github.com/mystic123/tensorflow-yolo-v3
3、https://blog.csdn.net/haoqimao_hard/article/details/82109015
二、YOLOv3算法
YOLO V3在Pascal Titan X上处理608x608图像速度达到20FPS,在 COCO test-dev 上 mAP@0.5 达到 57.9%,与RetinaNet的结果相近,并且速度快了4倍。 YOLO V3的模型比之前的模型复杂了不少,可以通过改变模型结构的大小来权衡速度与精度。 速度对比如下:
YOLO算法的基本思想是:首先通过特征提取网络对输入图像提取特征,得到一定size的feature map,比如13×13,然后将输入图像分成13×13个grid cell,接着如果ground truth中某个object的中心坐标落在哪个grid cell中,那么就由该grid cell来预测该object,因为每个grid cell都会预测固定数量的bounding box(YOLO v1中是2个,YOLO v2中是5个,YOLO v3中是3个,这几个bounding box的初始size是不一样的),那么这几个bounding box中最终是由哪一个来预测该object?答案是:这几个bounding box中只有和ground truth的IOU最大的bounding box才是用来预测该object的。可以看出预测得到的输出feature map有两个维度是提取到的特征的维度,比如13×13,还有一个维度(深度)是B×(5+C),注:YOLO v1中是(B×5+C),其中B表示每个grid cell预测的bounding box的数量,比如YOLO v1中是2个,YOLO v2中是5个,YOLO v3中是3个,C表示bounding box的类别数(没有背景类,所以对于VOC数据集是20),5表示4个坐标信息和一个置信度(objectness score)。
改进之处:
- 多尺度预测;
- 更好的基础分类网络和分类器。
多尺度预测
每种尺度预测3个box, anchor的设计方式仍然使用聚类,得到9个聚类中心,将其按照大小均分给3中尺度。
-
尺度1:在基础网络之后添加一些卷积层再输出box信息;
-
尺度2:从尺度1中的倒数第二层的卷积层上采样(x2)再与最后一个16x16大小的特征图相加,再次通过多个卷积后输出box信息,相比尺度1变大两倍;
-
尺度3:与尺度2类似,使用了32x32大小的特征图。
分类器-类别预测:
YOLO V3不使用Softmax对每个框进行分类,主要考虑因素有两个:
-
Softmax使得每个框分配一个类别(score最大的一个),而对于Open Images这种数据集,目标可能有重叠的类别标签,因此Softmax不适用于多标签分类;
-
Softmax可被独立的多个logistic分类器替代,且准确率不会下降。 分类损失采用binary cross-entropy loss。
基础网络 Darknet-53
仿ResNet, 与ResNet-101或ResNet-152准确率接近,但速度更快.对比如下:
YOLO V3网络结构如下:
边框预测: