YOLO系列
参考:https://blog.****.net/u014380165/article/details/77961414
参考:https://www.jiqizhixin.com/articles/2018-04-23-3
yolo v1
使用vgg16的basebone,将输入的图片分割成S x S 的grid cell(论文S为7),每个grid cell负责去检测那些中心点落在该各自内的目标,每个grid cell产生B个bounding box(论文B为2),用与object的ground truth最大IOU的bbox来预测属于该grid cell的object。
yolo v2
- batch normalization : 可以规范模型,收敛更快,故去掉dropout层
-
High Resolution Classifier :将224x224的输入提高到分辨率更高的448x448,并在ImageNet上预训练。
v1版本的yolo网络在预训练的时候采用的是224x224的输入(一般预训练的分类模型都是在ImageNet数据集上进行),然后在detection时采用的448x448的输入。这会导致从分类模型切换到检测模型时,模型还要适应图像分辨率的改变。而v2版本预训练分类两步:先用224x224的输入从头开始训练网络,大概160个epoch,然后将输入调整到448x448的图像再训练10个epoch,两步都是在ImageNet上进行。最后在检验数据集上fine turning,提高了4%的mAP。 -
Convolutional With Anchor Boxes :yolo v1利用全连接层直接预测bounding box的坐标,yolo v2借鉴fatser r-cnn引入anchor。
首先将yolo v1中的全连接层和最后一个pooling层去掉,使得最后的卷积层具有更高的分辨率的特征;然后用416x416的输入替代448x448,这样得到的特征图的大小为奇数,奇数大小的宽和高会使得每个特征图在划分cell的时候就只有一个center cell。网络最终将416x416的输入变成13x13的feature map输出,缩小了32倍。作者实验证明,虽然anchor使mAP下降了一点,但是提高了recall。 - Dimension Clusters :采用k-means的方式对训练集的bounding box做聚类,通过IOU定义的距离函数,使得误差和box的大小无关,,论文选择k=5,即最终每个grid cell选择了5个anchor box。
- Direct Location prediction :
…
yolo v3
bounding box
cx,cy为grid cell右上角的坐标,bx,by,bw,bh是预测框的坐标和尺寸,tx,ty,tw,th是网络的输出,pw,ph是anchor的尺寸。
网络结构
借(盗)图一用分为三个尺度feature map,1313, 2626, 52*52
其中进行识别的卷积核尺寸为1x1x(Bx(5+C)),B为一个grid cell中包含bounding box的数量(v3版本为3,v2版本为5),5为bounding box的坐标尺寸(tx,ty,tw,th)和物体的置信度,C为物体类别数(论文采用的coco数据集,C为80),故卷积核大小为1x1x255,也就是下图
各层解析
-
卷积层:
[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky -
跳过连接:与resnet结构相似,from=-3表示捷径层的输出会通过将之前层的和之前第三个层的输出的特征图与模块的输入相加而得出。
[shortcut]
from=-3
activation=linear -
上采样层:通过参数stride在前面层级中双线性上采样特征图
[upsample]
stride=2 -
route层:相当于concat层
[route]
layers = -4
[route]
layers = -1, 61
路由层的参数 layers 有一个或两个值。当只有一个值时,它输出这一层通过该值索引的特征图。在我们的实验中设置为了-4,所以层级将输出路由层之前第四个层的特征图。
当层级有两个值时,它将返回由这两个值索引的拼接特征图。在我们的实验中为-1 和 61,因此该层级将输出从前一层级(-1)到第 61 层的特征图,并将它们按深度拼接。 -
yolo层:通过33和11的卷积实现feature map之间的局部特征交互,区别于fc层是全局特征交互。论文有三个不同尺度的yolo层。
[yolo]
mask = 0,1,2
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=80
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1
YOLO 层级对应于上文所描述的检测层级。参数 anchors 定义了 9 组锚点,但是它们只是由 mask 标签使用的属性所索引的锚点。这里,mask 的值为 0、1、2 表示了第一个、第二个和第三个使用的锚点。而掩码表示检测层中的每一个单元预测三个框。总而言之,我们检测层的规模为 3,并装配总共 9 个锚点。