【目标检测 论文精读】……YOLO-V3 ……(搞笑向学术报告---An Incremental Improvement)

文章目录

  • 1.V1,V2回顾:
  • 2.Abstract(摘要)
  • 3.Introduction(引言)
  • 4.The Deal(处理)
  • 5.yolov3结构模型:
    • 主干网络的改进
  • 6.Things We Tried That Didn’t Work(待奏效策略)
  • 7.What This All Means (瞎聊)
  • Rebuttal (互喷)
  • 思考
    • 要生成三种不同的尺寸,到底谁来负责预测?
  • 小总结

YOLO系列:

  • yolov1精读
  • yolov2精读
  • yolov3精读

今天看一下yolov3吧,据说这是原yolo作者的最后一篇论文,v4,v5都是其他人写的了。
这篇并不算是一个严谨的论文,而是像一篇搞笑向学术报告,不过看上去格式还算正规,并没有像hinton大佬的那一篇dropout那样乱哈哈。

论文题目: An Incremental Improvement
论文下载地址:https://arxiv.org/pdf/1804.02767.pdf

1.V1,V2回顾:

一张表格回顾一下V1和V2版本:

yolov1 yolov2
一张图片划分为7 * 7的网格(grid cell) 一张图片划分为13 * 13的网格(grid cell)
每个grid cell 生成2个bbox框,与真实框IOU最大的那个框负责拟合真实框 每个grid cell 生成5个anchor框,通过IOU计算选一个anchor产生预测框去拟合真实框
输入448 * 448 * 3,输出7 * 7 * 30维的张量(30的含义:两组bbox的xywh和置信度+20个类别) 输入416 * 416 * 3 输出13 * 13 * 125维张量(125的含义:五组anchor的xywh和置信度+20个类别),

2.Abstract(摘要)

摘要中作者说了一下这篇文章的大概,对yolov2做了一些小改进,然后训练了一个更深的模型,准确度有所提升,并且依旧很快。

论文作者给出了一个图:
【目标检测 论文精读】……YOLO-V3 ……(搞笑向学术报告---An Incremental Improvement)_第1张图片
这是直接拿了RetinaNet的图,然后加上了自己的yolo曲线,可以看到yolo的线都已经弄到坐标轴外面去了,一个是懒,一个是用这种方法凸显自己模型的优越。
后面配的图注更搞笑,Can you cite your own paper? Guess who’s going to try, this guy → [16]. 你能引用你自己的论文吗? 猜猜谁会这样做,这家伙 → [16]。
笑死我了,果然这不是学术论文,大佬就是不一样,我们要是这么写,导师得直接给你除名哈哈。

3.Introduction(引言)

Sometimes you just kinda phone it in for a year, you know? I didn’t do a whole lot of research this year. Spent a lot of time on Twitter.有时候你只是打了一年电话,你知道吗?今年我没有做太多的研究。在Twitter上花了很多时间。
太逗了,我从未见过这样开头的引言,有意思。

后面一段作者也说这篇论文并不是论文,而是一篇TECH REPORT!学术报告!是为了给他们即将出现的新论文做引用的。

4.The Deal(处理)

这一章节就是介绍了一下yolov3干了什么。

本章第一小节回顾了一下v2版本,这里就不细说了。

正负样本:

在v1和v2中直接使用IOU作为置信度标签,很多预测框的IOU最大只有0.7,让0.7作为置信度标签,模型训练就得不到非常好的反馈,所以在v3中直接改进,将与GT的IOU最大的预测框负责拟合该GT,并且置信度标签设为1,就相当于告诉模型,这个是很好的,好好学他。
使用IOU作为置信度标签还有一个问题,对于COOC里面有很多小目标,而两个版本通病对于小目标检测比较差,IOU对像素偏移比较敏感,且小目标相对误差很大,导致学习效果变差,

阈值大于0.7的为正样本,小于0.5(或不负责预测gt的)为负样本,正样本对损失函数中的全部都产生影响,负样本仅对损失函数中的置信度产生影响。
所以最后正样本置信度标签设置为1,负样本设置为0。

每一个gt只选出来一个anchor负责预测,

后面又说了一下bbox和anchor,这些都是v2里面出现过的,而且就连图都是一模一样的,也不知道作者是为了凑字数还是咋回事。

作者提到了一个谷歌的OID数据集,这个数据集有一个特性就是一个框可能有很多个分类,比如一个框里一个女人,则对应分类可能是女人分类和人分类。所以作者对在之前的yolo版本使用的softmax进行了改造,原来就是所有类别的概率加一起是1,其中挑选出最大的,也就是这些类别之间是互斥的,只有一个能被选出来。
v3中改用各类别独立的逻辑回归,就是sigmoid的二分类,而不再使用softmax。这样就可以有多个高概率的标签输出。

5.yolov3结构模型:

作者说受到了FPN的启发,关于FPN可以看我之前整理的笔记-----FPN的论文笔记整理

yolo的作者也弄了一个类似于FPN的金字塔模型。

在b站找了张图,图源,知乎白老师。

左边解释了每个小方块的含义,比如CBL就是卷积和BN和Leaky relu的组合。

输入416 * 416 * 3尺寸,然后输出三种尺度的feature map,这里注意看图,不是最后分成了三种尺度,而是在卷积过程中的不同阶段输出了三种尺度,最后输出13 * 13 * 255、26 * 26 * 255 、52 * 52 * 255。

255的含义:一个grid cell生成三个anchor,每个anchor里xywh+置信度+分类数(COCO数据集),所以就是3 * 85。

也要看到,在每一种维度输出之前还有一个分支就是和下一路进行concat拼接(上一层进行上采样后拼接)。这样加入残差思想,保留各种维度特征(底层像素+高层语义)。

三个尺度就可以预测各种不同大小的物体了。

这里注意,与V2里的看anchor的IOU策略不同,因为V3里是三种尺度,三种尺度里每一种尺度都有三个anchor,所以V3中是看那个anchor与gt的IOU最大,就由那个anchor所在的尺度负责预测,且由该尺度下的grid cell产生的anchor负责。

虽然图片放在三种尺度下对应的位置是一样的,但是对应的grid cell不同。

这里只是拿了个例子输入的416,其实也可以输入别的,毕竟输出尺度可以变化,假如输入的是256 * 256,则得到的三个张量维度就是, 8 * 8,16 * 16,32 * 32 。每个尺寸都没都是255。

其实就是输入的除以32/16/8.得到三个尺寸。

主干网络的改进

从R-CNN到yolov1、v2等这些目标检测分类分割啥的 ,主干网络都非常重要,在v2版本中用的darknet-19,v3的作者是将darknet-19里加入了restnet残差连接,改进之后的模型叫darknet-53。

2.4节作者还搞笑了一下,It has 53 convolutional layers so we call it.... wait for it..... Darknet-53!

后面做的一个实验,一条结论:当IOU阈值为0.5的时候,v3模型表现最好。

6.Things We Tried That Didn’t Work(待奏效策略)

这一章节主要是讲一些作者的改进或者方法,但是还没有奏效的。

没必要仔细扣,他都没work,知道有这么回事就行了。

总结几点:

  • 预测相对于初始anchor宽高倍数的偏移量;
  • 不用sigmoid,直接线性回归偏移量;
  • Focal loss(用于图像领域解决数据不平衡造成的模型性能问题,也就是正负样本不均衡,正样本少的问题);
  • 多IOU阈值;

7.What This All Means (瞎聊)

这一章已经几乎没有知识点了,都是作者的一些瞎聊。

第一段作者质疑了,或者说在为他的模型开脱?因为yolov3只有在IOU为0.5的时候表现最好,所以作者这一段我觉得像是为自己模型开脱。

后面就开始谈到目标检测的伦理道德问题,I guess at least we know the technology is in good hands and definitely won’t be used to harvest your personal information and sell it to.... wait, you’re saying that’s exactly what it will be used for?? Oh.直接暗示一波大公司用目标检测手机个人信息然后做不政党的交易。
作者还说可能被用于军方。这也是这个作者推出CV领域的一个原因。

Rebuttal (互喷)

这是参考文献后面的章节,在论文的最后。

没错~我将这一章节称为互喷集锦,作者以问答的方式,各种阴阳怪气的怼人,可以看一遍翻译,挺有意思的。

思考

要生成三种不同的尺寸,到底谁来负责预测?

与V2里的看anchor的IOU策略不同,因为V3里是三种尺度,三种尺度里每一种尺度都有三个不同的anchor,所以V3中是看那个anchor与gt的IOU最大,就由那个anchor所在的尺度负责预测。

个人理解:假如一直狗,狗的中心落在了某一个grid cell,找到该grid cell生成的三个anchor中与gt的iou最大的那个anchor,由该anchor去预测物体。通过不同尺寸的拼接,生成的三种不同尺寸的输出,在这个过程中anchor的尺寸也会发生改变,但原图片大小不变,grid cell的位置不变,但这是三个不同的grid cell,所以可以理解成有9个不同尺寸的anchor,这9个anchor谁与gt的IOU最大,就由那个尺寸下的grid cell所产生的anchor去负责预测物体。

也不知道理解的对不对,欢迎大佬们评论区指出。

小总结

我觉得这一篇论文对比v2改进的并不算多,没有v2对比v1改进的那么多。

V3主要改进:

  • 加入了多尺度预测FPN
  • 改进了骨干网络,加入残差结构
  • 改进了正负样本的置信度策略

一张表来对比一下v1v2v3三个版本:

yolov1 yolov2 yolov3
一张图片划分为7 * 7的网格(grid cell) 一张图片划分为13 * 13的网格(grid cell) 一张图划分成三个不同尺寸的网格,尺寸为输入尺寸 除以32,16,8
每个grid cell 生成2个bbox框,与真实框IOU最大的那个框负责拟合真实框 每个grid cell 生成5个anchor框,通过IOU计算选一个anchor产生预测框去拟合真实框 每个grid cell生成3个anchor框,通过与gt的IOU计算选一个anchor产生预测框去拟合真实框
输入448 * 448 * 3,输出7 * 7 * 30维的张量(30的含义:两组bbox的xywh和置信度+20个类别) 输入416 * 416 * 3 输出13 * 13 * 125维张量(125的含义:五组anchor的xywh和置信度+20个类别) 输出三个不同尺寸的张量,但最后都是255,比如S * S * 255,255含义:三组anchor里xywh+置信度+分类数(COCO数据集80个分类),所以就是3 * (80+5)。

预测框数量对比:

yolov1 yolov2 yolov3
7 * 7 *2 = 98个预测框 13 * 13 * 5 = 845个预测框 ( 52 * 52 + 26 * 26 +13 * 13) * 3 = 10647个预测框 (假设输入为416)

你可能感兴趣的:(论文精读+复现,个人笔记,人工智能,深度学习)