有了前面两篇文章的铺垫,基本上YOLOV3的损失函数就比较明确了。然后在上一节还存在一个表述错误,那就是在坐标损失中针对bbox的宽度和高度仍然是MSE Loss,而针对bbox的左上角坐标,的损失则是我们YOLOV3损失函数再思考 Plus 推出来的BCE Loss。接下来我就完整的写一下根据DarkNet官方源码推出来的YOLOV3的Loss。
直接写出公式,注意带*
号的变量代表预测值,不带*
号的表示标签:
我们再来解释一下这个公式。
在YOLOV3中,Loss分成三个部分:
另外值得注意的一个点是网上大多数博客写这个损失的时候都加了,,参数,但我们打开「YOLOV3.cfg」发现,原版的YOLOV3中并没有这几个参数,并且代码中也没有体现,所以正确的公式应当去掉这几个参数。
yolov3.cfg
下面选几个留言区里面读者的问题来回答一下。
Q: 如果坐标中心点用BCE Loss的话,那么是怎么设置标签呢,BCE 的标签不是0或者1吗?A: 首先YOLOV3没有中心点一说,只有左上角的点。那么它是怎么设置标签呢?首先在YOLOV2/V3里面引入了一个直接坐标预测的概念,可以看看下面的几个图片:
】
图3
从图2可以看出,最终得到的边框坐标值是bx,by,bw,bh
,即边界框相对于特征图的位置和大小,是我们需要预测的输出坐标值。但是,网络实际上学习的东西是(这和损失函数公式里面的一致,前面已经说明),其中「tx,ty是预测的坐标偏移值,tw,th是尺度缩放」,有了这个偏移量自然可以根据前面的公式计算出真正的这4个坐标。
我们现在可以正面解答这位同学的问题了,标签该怎么设置呢?「BCE 的标签不是0或者1?」 在二分类问题并且使用One-Hot编码的情况下确实是这样的,「但是我们这里并不是分类」,我们要做的是预测出来的偏移值靠近原始的GT相对于于的偏移值,所以这个标签就是提前算好,代码如下:
标签偏移量计算
Q: YOLOV3置信度误差label中的置信度数值,也就是公式中的C,还是之前YOLOV1里面Ground Truth和预测得到的bbox之间的IOU吗?看到有些博客上说是当第个anchor box有目标时设为否则为0。对此有些疑惑,是否能解答一下?
A: 这个问题主要是没有对YOLOv3的匹配策略搞清楚,其实我们公众号出版的PDF说得很清楚了,如下:
「而YOLOV1的正负样本制定规则是啥呢?」
输入图片为,yolo将其划为为49()个cell, 每个cell只负责预测一个物体框, 如果这个物体的中心点落在了这个cell中,这个cell就负责预测这个物体,然后对于2个box来说,依然选择IOU最大的那个,当然YOLOV1的损失没有这么复杂,感兴趣可以去看我之前的文章。
有了匹配策略,你的问题自然就解决了,不过私以为最好的方式仍然是读源码。
本文分享自 GiantPandaCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!