【YOLO系列学习笔记2】yoloV2 有眼+深度学习基础就懂系列(讲得很详细适合初学者)

废话综述

在看完yolov1的网络文章后,大家一定对这个yolo系列的算法有一定的了解。没看的朋友一定要看完yolov1的文章再来看yolov2的这篇博客。
yolov1文章链接:
https://blog.csdn.net/weixin_42819084/article/details/107633798
yolov2这个版本相当于是yolov3版本发布前的试水,网络结构变化不大,在一些小结构的计算方式有一些小的创新,所以我们一定要把重点放在这几个点的理解上:
1.引入anchor框,k-means聚类得出的anchor框。
2.改变了ground truth 的编码方式(这里一定要完全理解,十分重要)
3.训练阶段采用联合训练
4.稍微改变了一下损失函数的计算方式(损失函数也要理解透彻,和yolov1基本类似)

Yolov2的网络框架

在这里插入图片描述
整体流程
一张图片进入网络层进过一系列的卷积,batch normalization,Leaky激活函数激活,max pooling等这些操作组合操作后,从608 * 608 * 3的张量变为了19 * 19 * 425的这个输出张量。425这个通道数还是老规矩代表 B * (C + 5)构成。B 表示 anchor 的个数,C 表示识别的类别个数,5 表示 Bbox 的坐标(4个)和 Bbox 的置信度(5 * (80 + 5)=425)。然后把最后这个输出张量放入损失函数中进行回归拟合,更新参数。

网络结构中与yolov1不同的地方
1.Batch Normalization代替了Dropout
2.取消了全连接层,用一个1 * 1卷积层代替全连接层
3.采用高分辨率的迁移学习,把imageNet中的 224 * 224的图片尺寸提升到448 * 448。
4.使用了Darknet-19作为中间提取特征的网络结构。
在这里插入图片描述
5.加入了一个一个V2模块,里面有一个PA(passthrough)操作,PA中空间维度缩小了一倍,但是信息没有损失。进过了这个模块等于特征空间维度缩小了一倍,通道数翻了五倍。
passthrough操作:
在这里插入图片描述

拿了个2 * 2的卷积,步长为2去扫特征图,把每个角(左上,右上,左下,右下)上的值组合为一个特征图。

anchor框

⾸先我们会将原始图⽚划分成 的区域,然后在每个“负责”区域上设定先验的 anchor 框。这些框的⻓宽⽐均不相同。框的中心点坐标就是物体在这个grid中gt框通过映射(gt除以32倍)的中心点。这些框的w和h是通过在coco数据集聚类得到的。定义k-means的距离作者是这么定义的:
在这里插入图片描述
它是先把coco数据集里面已经标注好的ground truth的w和h都拿出来。设定k=9。随机在这些框中选取9个聚类中心,固定每个框的左上角对齐。计算每个框和这9个聚类中心的IOU的值,然后给这些剩下的框根据IOU最大的进行分类。分类好的结果再把同类别的w和h取平均值,计算出新的聚类中心。一直迭代直到收敛为止得到的。

ground truth的编码方式

在这里插入图片描述
理解这个编码方式首先第一点我们要明确我们的已知的东西:ground truth在原图上的x,y,w,h,anchor框的w,h(通过上面kmeans聚类得到的,但不知道它的中心点坐标)。然后要明确我们的目标:我们要得到通过anchor框进过平移和缩放得到一个bounding box与ground truth的box作比较去拟合这个bounding box,让它能更准确的预测出物体的box。所以我们首先第一步要把anchor框和原图中的gt映射到我们提取完特征的特征图上,这个就是一个编码的过程。
gt框映射到特征图上很简单,因为原图是608 * 608的,特征图是19 * 19的,所以相当于缩减了32倍(608/19=32)。所以我只需要将gt的4个变量除以32就可以得到它在特征图上的映射了。然后我们知道图片被分成了19 * 19个小格子,这个gt的中心点落到哪个小格子内,它就负责预测这个物体。所以gt的中心点也是anchor框在这个小格子里的中心点。然后我们要对anchor进行编码映射,得到下面anchor框的偏移量:(注意cx,cy是grid中左上角的坐标,而不是feature map上的左上角坐标)
在这里插入图片描述
这样得到的anchor框的偏移量的取值范围和我们期望得到的预测框的取值范围是不一样的。我们期望得到的预测框的取值范围是负无穷到正无穷,而这里得到anchor框的偏移量x和y的取值范围是[0,1],因为在最后一个特征图上每个小格子就是1 * 1。长宽的缩放范围是0到正无穷。所以我们还需要进一步的编码。
在这里插入图片描述
sigmoid的取值范围是[0,1],log函数的取值范围是0到正无穷。这样转换一下就可以得到最终的结果。
在这里插入图片描述

损失函数

在这里插入图片描述

损失函数和yolov1中基本一样,不懂的可以看我yolov1的文章。
在这里插入图片描述

训练过程

多尺度训练:
由于是全卷积⽹络,其降采样的倍数是 32 。所以可以⽀持输⼊任何的 32 倍数尺⼨的图⽚。于是可以输⼊不同尺⼨的图⽚进⾏训练。
每10个batch之后,就将图⽚resize成{320, 352, …, 608}中的⼀种。
联合训练:
联合训练⽅法思路简单清晰,Yolov2中物体矩形框⽣成,不依赖于物理类别预测,⼆者同时独⽴进⾏。当输⼊是检测数据集时,标注信息有类别、有位置,那么对整个loss函数计算loss,进⾏反向传播;当输⼊图⽚只包含分类信息时,loss函数只计算分类loss,其余部分loss为零。当然,⼀般的训练策略为,先在检测数据集上训练⼀定的epoch,待预测框的loss基本稳定后,再联合分类数据集、检测数据集进⾏交替训练,同时为了分类、检测数据量平衡,作者对coco数据集进⾏了上采样,使得coco数据总数和 ImageNet ⼤致相同。

测试过程基本和yolov1一样。

总结

在yolov2中我觉得比较不是很重要,所以我写起来都比较随意。但是这个版本最重点的就是在引入了anchor框和gt的编码方式,这两个部分一定要搞懂!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值