小白也能弄得懂的YOLO系列之YOLOv1网络训练

上期给大家介绍了YOLO模型的检测系统和具体实现,YOLO是如何进行目标定位和目标分类的,这期主要给大家介绍YOLO是如何进行网络训练的,话不多说,马上开始!

前言:

输入图片首先被分成S*S个网格cell,每个网格会预测B个边界框bbox,这B个边界框来定位目标,每个边界框又包含5个预测:x,y,w,h和置信度confidence.那这取值有什么约束嘛?如下图所示:

黄色的圆圈代表了中间这个网格的中心点,红色的圆圈代表了这个红色方框的中心点,则x,y的取值是两个中心的偏移量和 cell 本身宽高的比值:

x = (bbox.x-cell.x)/cell.width
y = (bbox.y - cell.y)/cell.height

bbox 的宽高w,h是和整张图片的宽高的比值:

w = bbox.width / image.width
h = bbox.height / image.height

现在回到我们YOLO的训练上。

YOLO训练

YOLO先使用ImageNet数据集对前20层卷积神经网络进行预训练,然后使用完整的网络,在Pascal voc2007和2012数据集上进行对象识别和定位的训练和预测。网络结构图如下所示:

YOLO的最后一层采用线性激活函数,其它层都是Leaky Relu,训练过程中为了防止数据过拟合,数据过拟合的话对于外来检测的数据的检测效果会不好,采用了(drop out)正则化和数据增强(data augmentation)技术防止过拟合。

YOLO损失函数

损失就是网格实际输出值和样本标签之间的偏差:

总的来说就是,就是用网格输出与样本标签的各项内容的误差平方和作为一个样本的整体误差,损失函数中的五项分别对应于每一个网格的输出的30维相对应,边框中心xy,宽高wh,可以称为定位误差,以及边框是否有对象,和有对象时的分类误差,可以称为分类误差。 

  指的是第  个单元格存在目标,且该单元格中的第  个边界框负责预测,  指的是第  个单元格存在目标。这里特别说一下置信度的target值  ,如果是不存在目标,此时由于 ,那么  。如果存在目标,  ,此时需要确定  ,当然你希望最好的话,可以将IOU取1,这样  ,但是在YOLO实现中,使用了一个控制参数rescore(默认为1),当其为1时,IOU不是设置为1,而就是计算truth和pred之间的真实IOU,pi(c)则说明第i个单元格属于某个类的误差了。

注意1:  对于定位误差,即边界框坐标预测误差,采用较大的权重  。然后对于置信度误差,也就是边框是否含有目标,区分不包含目标的边界框与含有目标的边界框的置信度误差,对于不含有目标的边界框采用,采用较小的权重值  ,含有目标的权重值均设为1。然后所有均采用平方误差,其同等对待大小不同的边界框,但是实际上较小的边界框的坐标误差应该要比较大的边界框要更敏感。为了保证这一点,将网络的边界框的宽与高预测改为对其平方根的预测,即预测值变为  。

注意2:对于不存在对应目标的边界框,其误差项就是只有置信度,没有目标,则坐标项误差是没法计算的,只有当一个网格内确实存在目标时,也就是该网格存在边界框框柱目标,才计算分类误差项。

YOLO预测:

在上期中我已经讲解来了YOLO是如何进行目标定位和分类了,输入一张图片到我们已经训练好了的YOLO网络,将输出一个7*7*30的张量来表示图片中所有网格包含的对象(概率)以及该网格中对象可能的两个位置(bounding box)以及可信程度(置信度),就是说一张图片上最后会有98个边界框,那么如何找到最有可能的对象和位置呢? 如下图所示:

这就用到 交并比(Interp over union 和非极大值抑制(Non-max suppression )算法。

交并比: 

如下图,把A和B分别当做一个边界框,由于我们从预测结果中可以得到边界框的宽高和中心坐标,我们就可以计算边界框A和边界框B的面积,从而计算他们之间的交并比,又假如A是实际边界框,而B是预测框,那么当A和B之间的交并比大于0.5时,判断预测这个框预测正确,否则舍弃这个框。

那剩下还有许多边界框怎么办呢?

非极大值抑制:

这就要用到我们的非极大值抑制算法了,首先找到有目标对象的边界框中置信度得分最高的那个边界框,也就是最大,记为A,然后计算其它也框柱目标的边界框与该边界框的交并比IOU,IOU大于我们设置的阈值就说明这两个框重合多,都可以框柱目标,但是这个框柱目标的得分也就是置信度没有A高,所以就舍弃这个框,这样依次进行,直到将所有得分低的边界框删掉,只留下了一个框柱目标得分最高的那个框了。

最后附上TensorFlow版的YOLOv1的代码地址:下载好代码装好环境即可使用预训练好了的权重就可测试https://github.com/gliese581gg/YOLO_tensorflow,下载下来进行自己的训练吧!

参考:

https://zhuanlan.zhihu.com/p/32525231

https://segmentfault.com/a/1190000016692873?utm_source=tag-newest

往期推荐:

小白也能弄懂的目标检测之YOLO系列 - 第一期

小白也能弄懂的目标检测YOLO系列之YOLOV1 - 第二期

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值