Yolo系列架构

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/weixin_39610043/article/details/86536643

YOLO

yolov1 算法是纯CNN加FC网络,最后生成7x7x(10+class num)矩阵为输出,而7x7中每个grid cell只预测一个box,生成2个bounding box,而且此时的confidence如下:

confidence = Pr(object) X Iou

当该grid cell中包含目标则Pr(object)为1,否则为0。所以当最后计算recall和precision时判断标准还是iou,只不过不是原始iou。
在这里插入图片描述

参考:yolov1视频讲解

而loss的计算如下,是整个论文的最难部分,能力有限,就请各位自己学习吧:
在这里插入图片描述
参考:​yolov1介绍 https://blog.csdn.net/hrsstudy/article/details/70305791

Yolov2改进

1)batch normalization(批归一化)
2)使用高分辨率图像微调分类模型
3)采用先验框(Anchor Boxes)
4)聚类提取先验框尺度
5)约束预测边框的位置,使用sigmoid约束坐标
6)passthrough层检测细粒度特征

YOLO2引入一种称为passthrough层的方法在特征图中保留一些细节信息。具体来说,就是在最后一个pooling之前,特征图的大小是2626512,将其1拆4,直接传递(passthrough)到pooling后(并且又经过一组卷积)的特征图,两者叠加到一起作为输出的特征图。

7)多尺度图像训练
8)高分辨率图像的对象检测
参考知乎博客<机器爱学习>YOLOv2 / YOLO9000 深入理解

yolov3改进

  1. 新的网络结构Darknet-53
  2. 利用多尺度特征进行对象检测
  3. 对象分类用Logistic取代了softmax。
    架构如下:
    yolov3架构
    其中的conv2d block 5l filter网络结构如下,而图中的1024代表的是3x3卷积的通道数。
        DarknetConv2D_BN_Leaky(num_filters, (1, 1)),
        DarknetConv2D_BN_Leaky(num_filters * 2, (3, 3)),
        DarknetConv2D_BN_Leaky(num_filters, (1, 1)),
        DarknetConv2D_BN_Leaky(num_filters * 2, (3, 3)),
        DarknetConv2D_BN_Leaky(num_filters, (1, 1)))(x)

conv2d 3x3 + conv2d 1x1则代表先进行3x3的卷积,filter数量跟conv2d block 5l的filter数量相同,最深的为1024.代码如下

        DarknetConv2D_BN_Leaky(num_filters * 2, (3, 3)),
        DarknetConv2D(out_filters, (1, 1)))(x)

loss function论文中没有给出具体公式,只能从代码中看了,我看的是keras版本,具体如下,其中xy_loss为交叉熵,wh_loss为平方loss,confidence和class也是交叉熵。具体原作者的代码是否也是这样定义的,就不得而知了。

xy_loss = object_mask * box_loss_scale * K.binary_crossentropy(raw_true_xy, raw_pred[..., 0:2],
                                                               from_logits=True)
wh_loss = object_mask * box_loss_scale * 0.5 * K.square(raw_true_wh - raw_pred[..., 2:4])
confidence_loss = object_mask * K.binary_crossentropy(object_mask, raw_pred[..., 4:5], from_logits=True) + \
                  (1 - object_mask) * K.binary_crossentropy(object_mask, raw_pred[..., 4:5],
                                                            from_logits=True) * ignore_mask
class_loss = object_mask * K.binary_crossentropy(true_class_probs, raw_pred[..., 5:], from_logits=True)

xy_loss = K.sum(xy_loss) / mf
wh_loss = K.sum(wh_loss) / mf
confidence_loss = K.sum(confidence_loss) / mf
class_loss = K.sum(class_loss) / mf
loss += xy_loss + wh_loss + confidence_loss + class_loss

TODO
1.Yolo架构
2.Yolov3相对比yolov2有哪些提升
3.Yolov3的优化函数为Adam

猜你喜欢

转载自blog.csdn.net/weixin_39610043/article/details/86536643