yolo系列(2):yolov3论文笔记

又是被自己菜醒的一天

背景

概况

  • yolov3相对于v2的提升版本
  • 使用dimeansion分簇来得到anchor boxes
  • 每个框预测多标签的类别的时候使用2类的交叉熵作为损失函数
  • 跨图像规模的预测,即隔一段时间resize输入图像的大小
  • 特征提取网络结合了resNet的思想加入了shorcut,有53个卷积层。

方法

1. bounding box预测



  • 其中tx,ty,tw,th分别为网络预测层输出的框(的中心横坐标,纵坐标,框的宽度,框的高度,不对应该只是一个网络的输出并不是上述的含义,这个应该是借鉴faster RCNN的,等看了那篇论文再来解释,ok,上述第二图为解释tx,ty,tw,th的由来,截取自YOLOv2 论文笔记)作者这边不是用的这个方法计算的框的x和y,而是预测相对网格cell的位置,并且通过逻辑斯蒂归一化;pw,ph为先验框(anchor boxes)的宽度和高度;cx,cy为预测中心点所在cell相对图片左上角点的偏移;通过上图公式将预测输出最终转换为框的中心点左边bx,by,框的宽度和高度bw,bh

  • 如果一个先验框并不是最好的但是其覆盖ground true超过一定阈值,论文中取的是0.5,则忽略这个预测结果且不计算进损失中

2. 类预测
  • 每个框可能需要预测包含多标签的类,论文中没使用softmax而是用的独立的逻辑斯蒂分类。因为使用softmax的前提假设是一个框中只包含一个类,而现实情况并不是这样的。
3. box的跨尺度预测(针对之前yolo小目标检测不到的诟病)
  • yolov3在三个尺度上做预测

    • 参考的FPN(特征金字塔)网络,下图引自FPN最新的目标检测算法。每种尺度预测三个box,anchor的设计方式仍然使用聚类的方法得到9 个聚类中心,再将其按照大小均分给3种尺度。尺度1:在基础网络之后添加一些卷积层再输出box信息;尺度2:从尺度1中的倒数第二层的卷积层上采样再与最后一个16×16大小的特征图相加,再次通过多个卷积层后输出box信息,相比尺度1变大两倍;尺度3:与尺度2类似使用了32×32大小的特征图。可以参考网络结构定义文件yolov3.cfg。

      把高层特征做2倍上采样(最邻近上采样法),然后将其和对应的前一层特征结合(前一层要经过1 * 1的卷积核才能用,目的是改变channels,应该是要和后一层的channels相同),结合方式就是做像素间的加法。重复迭代该过程,直至生成最精细的特征图。



  • 论文使用kmean获得先验anchor boxes

4. 特征提取
  • Darknet53,53个卷积层,加上shorcut,下图为其网络结构


5. 训练
  • 训练方法和yolov2相同,多尺度(隔一段epoch改变输入的图片大小,有小有大),BN等

性能及总结

  • 性能



  • 总结

    • 改进后的yolov3能够更好的检测小目标(引入了跨尺度预测),但是相对的中中等及大尺寸的目标效果有所降低
    • 其他都很好哇,666