YOLO3个人理解

训练过程

yolo3的模型框架别的博客里很多可以参考,这里不解析网络,有兴趣的同学可以参考以下链接:
https://gitee.com/cungudafa/keras-yolo3/
https://www.paddlepaddle.org.cn/tutorials/projectdetail/1096708#anchor-32
众所周知,训练需要真实标签和预测结果之间计算误差,但是我一开始理解的yolo3的时候就是难以明白这样的单阶段检测网络模型输出结果的意义以及如何与真实标签进行匹配和计算。在查阅了众多CSDN大佬的博客之后终于在明白了其意义。这里真心推荐飞浆,我虽没用过这个框架,但是讲解的部分是真的详细。好了,话说多了,下面开始流程。

一.得到真实标签

1.将真实图像划区域。这里输入图像格式默认为(416,416),先将32×32个像素划分为一个区域,这样原图像就变成(13,13),同理将16×16个像素划分为一个区域,那么原图就变成(26,26).8×8个像素化为分一个区域,那么原图就变成(52,52)。这样,我们对原图进行简单划分就得到了三种不同尺度的图像。分别是(13,13),(26,26),(52,52)
在这里插入图片描述

2.生成锚框。这里拿尺度为(13,13)的图像举例,其他尺度的操作同上,一共有13×13个区域,以每一个区域为中心制作3种锚框。最终得到13×13×3个不同的锚框来涵盖图像的不同区域。此时的锚框位置和大小是固定的,以区域的左上角为中心,一组通过k聚类得到的anchor包含了各个尺度中锚框的大小。这里解释一下锚框的意思,我理解的就是预测物体的候选区。
在这里插入图片描述

3.对锚框进行标注。由于我们真实图像的选区是有标签的,现在就派上用场了。对于每一个真实选区,我们都找到对应的一个锚框,使得他们的交并比(IOU)在所有锚框中最大。记为objectness=1,作为正例。其余的锚框中,若有IOU大于给定的阈值,但不是最大的的锚框,记为objectness=-1,不参与计算loss。剩余的锚框记为objectness=0,作为反例。
在这里插入图片描述

4.计算锚框偏置的位置和大小以及所属类别。前面有讲到锚框的位置是固定的,而固定的锚框难以直接跟我们的真实选区恰好匹配。因此我们需要对IOU最大的锚框(即objectness=1的锚框)进行微调,其余的锚框不需要计算。调整中心点位置和宽高。锚框的位置信息用Cx,Cy,Cw,Ch分别表示中心点的x,y坐标以及锚框的宽和高。微调后的位置信息用Px,Py,Pw,Ph表示。两者之间微调的公式如下:
Cx + Sigmoid(tx) = Px
Cy + Sigmoid(ty) = Py
Cw × e^(tw) = Pw
Ch × e^(th) = Ph
其中tx,ty,tw,th为微调参数,当微调后的位置等于真实框的信息Bx,By,Bw,Bh时,带入上式,得到的微调参数记为。t*x,t*y,t*w,t*h,一共4维。这样我们就得到了一组位置标签信息,同时我们还需要类别信息。YOLO3是单标签分类。因此我们对样本类别采用one-hot独热编码。这里比较简单不多赘述。如果有80种类,那就需要80维去存储类别信息。因此对于13×13的图像,有13×13×3个锚框,共有13×13×3×(1+4+80),(objectness+t*x,t*y

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值