YOLOv2是YOLO的第二个版本,该物品检测系统仍然只需要“Look Once”,其整体结构如下所示:
yolo_main.png
其主要由两个部分构成:
YOLOv2的神经网络部分使用了一个带跳层的神经网络,具体结构如下所示:
yolo_net.png
神经网络的设计没有太大飞跃性的改变,相对于YOLOv1的神经网络设计主要有以下改变:
该网络最终输入图片尺寸为,416\times 416 \times 3输出向量尺寸为13 \times 13 \times 125。
YOLOv2使用了Anchor Box的方法,神经网络输出的向量尺寸是13\times 13 \times 125,其中13 \times 13是将图片划分为13行和13列共169个cell,每个cell有125数据。对于每个cell的125个数据,分解为125 = 5 \times (5+20),即每个cell包括5个anchor box,每个anchor cell包括25个数据,分别为物品存在置信度,物品中心位置(x,y),物品尺寸(w,h)和类别信息(20个)。如下图所示:
yolo_result.png
对于每个cell包括5个anchor box信息,每个anchor box包括25个数据,分别:
其中是否有物品的标记conf_{ijk}比较容易理解,表示位于i,jcell的第k个anchor box中有物品的置信度。20个物品种类向量也较好理解,哪一个数据最大即物品为对应的类别。
对于物品位置的四个数据分别为x_{ijk},y_{ijk},w_{ijk},h_{ijk},与物品位置中心点和尺寸的关系为:
$$b_x = f(x_{ijk}) + c_x \\ b_y = f(y_{ijk}) + c_y \\ b_w = p_w e^{w_{ijk}} \\ b_h = p_h e^{h_{ijk}}$$
其中,b_x,b_y为物品中心点的实际坐标,b_w,b_h为物品的尺寸(长宽)。c_x,c_y的为该cell(x行y列)距离图片左上角的像素数,f的含义推测为将范围为0~1的输入值缩放到0~cell长度。p_w和p_h为该anchor box的预设尺寸。如下图所示:
detection.PNG
每个cell包括5个anchor box,这5个anchor box有不同的预设尺寸,该预设尺寸可以手动指定也可以在训练集上训练获得。在YOLOv2中,预设尺寸是通过在测试集上进行类聚获得的。
神经网络部分基于模型Darknet-19,该模型的训练部分分为两个部分:预训练和训练部分
另外,在训练过程中,还引入了多尺寸训练,由于网络删除了全连接层,所以该网络并不关心图片的具体大小,训练时使用320~608尺寸的图像{320,352,....,608}。
YOLOv3是YOLO最新的更新,其主要的改进在以下方面:
网络结构如下所示:
YOLO3_net.PNG
网络结构明显参考了ResNet的设计,将低层的特征直接连接到高层。同时注意一点,网络可能没有使用pool层,而是使用stride=2的卷积层实现下采样。