方法名称 | 主要贡献 | 局限性 | 本文解决方法 | 文献索引 | 备注 | 我的观点 |
---|---|---|---|---|---|---|
经典目标检测器 | 使用滑动窗口方法来进行目标检测 | 1分类器尺度固定,对大小不同的物体检测时,效率非常低下。2执行较复杂的分类器时,比较费时。 | 训练好对应目标的分类器,不断移动窗口,并将窗口喂给分类器,使用IOU,NMS机制可获得最终概率最大的分类结果。 | 4,5,8,37 | 包括HOG,DPMs等 | |
one-stage检测器 | 速度较快 | 准确率较低 | 1直接产生物体的类别概率和位置坐标值,经过单次检测即可直接得到最终的检测结果。 | 22,26,27 | 包括YOLO,SSD,YOLOv2,YOLOv3,RetinaNet | |
twe-stage检测器 | 准确率较高,识别错误率较低 | 速度较慢,不能满足实时检测场景 | 检测问题划分为两个阶段:首先产生候选区域(region proposals),然后使用卷积神经网络对候选区域分类(一般还需要对位置精修) | 11,35 | 包括R-CNN, Fast R-CNN, Faster R-CNN,Mask R-CNN家族。 | 本文在于研究一级探测器在以相近或更快的速度运行时,其是否性能是否能与二级检测器相当或超越它。 |
工作名称 | 工作阐述 | 面临困难 | 一般解决方案 | 本文解决方法 | 文献索引 | 我的观点 |
---|---|---|---|---|---|---|
前景背景比例严重失衡 | 检测器在图片中评估大量候选位置,但只有极少量的位置包含正确目标。 | 1学习效率低下。因为大多数位置都是easy negative,而它们不会产生有用的学习信号。2这些easy negative会淹没训练,并导致模型退化。 | 困难样本挖掘或采用更有效的采样方法,但是方法不够自然。 | 本文提出的Focal Loss能更自然地处理类别不平衡问题,并允许在没有采样的情况下有效训练所有的样本,不容易导致easy example淹没损失和计算梯度消失。 | 33、37、8、31、22、2 | |
抗差评估(Rubost Estimation) | 在误差不可避免的情况下,选择适当的估计方法使未知量估值得出最准确的估值。 | 误差损失较大 | 通过降低困难样本损失的权重,来设计稳健损失函数,(如Huber损失)。 | 本文提出的Focal Loss不是来处理outliers,而是通过降低easy examples的权重来处理类别不平衡,这样即使它们的数量很大,它们对总损失的贡献也很小。 | 13 | Focal Loss扮演者与稳健损失相反的角色:它将训练集中在一组稀疏的hard examples上。 |
由于大多数都是简单易分的负样本(属于背景的样本),使得训练过程不能充分学习到属于那些有类别样本的信息;其次简单易分的负样本太多,可能掩盖其他有类别样本的作用(简单易分的负样本仍产生一定幅度的loss,见下图蓝色曲线,数量多会对loss起主要贡献作用,因此就主导了梯度的更新方向,掩盖重要的信息)
思想:在OHEM中,利用每个样本的loss对其进行从大到小排序,然后采用非最大性抑制,选取前N个loss最高的样本。
缺点:OHEM算法虽然增加了错分类样本的权重,但是忽略了easy example。也就是说,loss高的样本同时包括难分类样本和容易分类的样本,应该更多的去保留hard example,而不是easy example。
一般的Two-stage 检测器利用交叉熵损失方法,通过以下两个机制来解决正负样本不平衡问题:
具体步骤为:
贡献名称 | 贡献方法 | 输入 | 输出 | 图片索引 | 我的观点 |
---|---|---|---|---|---|
Focal Loss | Focal loss能动态地缩放交叉熵,使模型能更多地集中于hard examples进行学习。 | pt | pt的Focal loss | Eq.4 |
RetinaNet由一个骨干网和两个特定任务的子网组成。主干网负责计算整个输入图像上的卷积特征映射。第一个子网对骨干网的输出进行对象分类;第二个子网进行边框回归。
RetinaNet框架如下图:
利用一个非参数边框回归器,用更少的参数同时能得到良好的性能。方法步骤为:对于每个空间位置的A锚,利用每个金字塔层上的FCN网络,对于每个空间位置的每个A个锚点,这4个输出预测锚和ground-truth框之间的相对偏移,获得其(x,y,w,h)值,即可完成定位。与其他工作不同,本文使用类不可知的边界框回归量,它使用更少的参数并且同样有效。对象分类子网和边框回归子网虽然共享一个共同的结构,但使用单独的参数。
焦点损失旨在解决一阶段对象检测场景,其中在训练期间前景和背景类之间存在极端不平衡(例如,1:1000)。从二元分类的交叉熵(CE)损失开始引入焦点损失:
在上面的y 属于正负1中指定了地面实况类并且p 属于[0; 1]是模型的标签y = 1的类的估计概率。为了符号方便,我们定义了pt:
联合以上两式,CE可写做为:
解决类不平衡的常用方法是引入加权因子a对于类别1属于[0; 1],对于类别2属于类别-1。在实践中 a 可以通过逆类频率设置或者作为超参数来设置以通过交叉验证来设置。为了符号方便,我们定义类似于我们如何定义pt。我们将 a-balanced CE损失写为:
这种损失是CE的简单扩展,作为Focal loss的baseline。
Focal Loss是为了解决训练期间前景类和背景类之间存在极端不平衡(例如1:1000)的one-stage目标检测问题。
其公式如下:
Binary分类模型是默认初始化为对于y=-1和y=1有相同的概率。在这样的初始化之下,由于正负样本类别不平衡,会导致频率高的类别主导总的损失,在训练早期结果不稳定的问题。
为了解决此问题,作者提出“优先”的概念,在训练开始时,每个锚都应标记为前景,其置信度为0.01。这样,防止大量背景锚在第一次迭代训练中产生较大的、不稳定的损失值。
这是模型初始化的改变,而不是损失函数的改变。作者发现这点能改进训练的稳定性(在负样本极不平衡时,这能提高交叉熵和focal loss的训练稳定性)。
作者利用translation-invariant锚定框(与RPN的变体相似),这个anchor在金字塔层P3到P7有相对应的的区域。在每个金字塔层,作者用的长宽比是 {1:2, 1:1, 2:1}。在每层,对于三个长宽比上,添加 {20,21/3, 22/3}倍大小anchor。这些锚服务于后面的分类和回归任务。
使用COCO数据集
本文在ResNet-50-FPN和ResNet-101-FPN为主干网络的基础上做实验。
RetinaNet的inference涉及把图片简单地在网络中前向传播。为了提升速度,作者只在每个FPN,从1k个top-scoring预测中提取box预测(在置信度阈值0.05处理之后)。多个层来的Top prediction聚在一起然后用NMS(非极大值抑制)以0.5为阈值。
RetinaNet是用SGD训练的。使用SGD在8个GPU上面同步训练,每个minibatch16张图,每个GPU2张图。所有模型都90K次迭代训练,初始学习率是0.01。
在大量随机图片中采用约107 个负样本和105个正样本;随后计算FL值,并归一化。对归一化的FL值排序并分别画出正负样本的累积分布函数图。
a) 20%的困难正样本贡献了约一半的损失值;当γ增加时,20%的贡献度更加明显;但是影响不是很大。
b) γ对于负样本的影响完全不同;γ = 0时CDF与正样本类似;当γ增加时,迅速的聚焦于困难负样本,当γ=2时,大量的易分类负样本仅仅贡献了少量损失。
实验结果如下图:
RetinaNet最好能在coco test-dev上达到 39.1AP,5Fps。
实验结果分析如下:
RetinaNet与其他方法在coco数据集上的AP与时间测试图如下:
本文将类不平衡确定为阻碍one-stage物体探测器超越最佳性能的two-stage检测器的主要障碍。为了解决这个问题,提出了Focal Loss方法,它将调制项应用于交叉熵损失,以便将学习重点放在hard negatives上。此方法简单而有效。通过设计一个完全卷积的one-stage检测器来证明其功效,表明它实现的最先进的精度和速度。
(可不看,此知识点供本人学习使用,与文章无关)
框架图
Fast R-CNN可将整个图像归一化后直接送入CNN网络,卷积层不进行候选区的特征提取,而是在最后一个池化层加入候选区域坐标信息,进行特征提取的计算。
对于普通网络,任意堆叠的两层网络,我们希望找到的是一个映射H(x)对应的残差元,添加一个快捷连接,从输入到输出,这里的快捷连接默认为恒等映射,此时的问题就从寻找映射H(x)到F(x);这里类似于在数学上,直接去解一个方程较为复杂,你就把它分解成两个简单问题和的形式,分别去解决。
ResNet的主要思想是在网络中增加了直连通道,即Highway Network的思想。此前的网络结构是性能输入做一个非线性变换,而Highway Network则允许保留之前网络层的一定比例的输出。ResNet的思想和Highway Network的思想也非常类似,允许原始输入信息直接传到后面的层中,如下图所示。
这一层的神经网络可以不用学习整个的输出,而是学习上一个网络输出的残差,因此ResNet又叫做残差网络。
ResNet如图:
简单讲,上采样、下采样就是采取某种让图像缩小或放大。细节…
IoU 的全称为交并比(Intersection over Union)。IoU 计算的是 “预测的边框” 和 “真实的边框” 的交集和并集的比值。
CNN的输入是图像,输出是一个结果,或者说是一个值,一个概率值。
FCN提出所追求的是,输入是一张图片是,输出也是一张图片, 学习像素到像素的映射 。
归一化/标准化实质是一种线性变换,线性变换有很多良好的性质,这些性质决定了对数据改变后不会造成“失效”,反而能提高数据的表现,这些性质是归一化/标准化的前提。比如有一个很重要的性质:线性变换不会改变原始数据的数值排序。
在使用梯度下降的方法求解最优化问题时, 归一化/标准化后可以加快梯度下降的求解速度,减少收敛所需要的迭代次数,提升模型的收敛速度。
神经网络是由一层一层构建的,每一层升维/降维、放大/缩小、旋转、平移、 “弯曲” 这 5 种操作,将输入空间投向另一个空间。
公式为:
解决方案:
目的其实就是为了控制变量。ablation study在同时提出多个思路提升某个模型的时候,为了验证这几个思路分别都是有效的,做的控制变量实验的工作。
输入层:
在输入层,如果是灰度图片,那就只有一个feature map;如果是彩色图片(RGB),一般就是3个feature map(红绿蓝)。
每层有多少个卷积核,经过卷积就会产生多少个feature map。
如下图:
因为随着网络的加深,feature map的长宽尺寸缩小,本卷积层的每个map提取的特征越具有代表性(精华部分),所以后一层卷积层需要增加feature map的数量,才能更充分的提取出前一层的特征,一般是成倍增加
feature map的目的:我们希望构造一组基,这组基能够形成对于一个事物完备的描述,具体来讲就是用多种不同的卷积核对图像进行卷积,得到不同核(这里的核可以理解为描述)上的响应,作为图像的特征。他们的联系在于形成图像在同一层次不同基上的描述。
roi pooling具体操作如下:
1)输入image,将roi映射到feature map对应位置;
2)将映射后的区域划分为相同大小的sections(sections 数量与输出唯独相同);
3)对每个sections进行max pooling操作;
这样我们就可以从不同大小的方框得到固定大小的相应的feature maps。
值得一提的是,输出的feature maps的大小取决于ROI 和卷积feature maps大小,roi pooling最大的好处就在于极大地提高了处理速度。
信息奠基人香农(Shannon)认为“信息是用来消除随机不确定性的东西”,也就是说衡量信息量的大小就是看这个信息消除不确定性的程度。
交叉熵公式如下:
H(x) = E[I(xi)] = E[ log(1/p(xi)) ] = -∑p(xi)log(p(xi))
其中,x表示随机变量,与之相对应的是所有可能输出的集合,定义为符号集,随机变量的输出用x表示。P(x)表示输出概率函数。变量的不确定性越大,熵也就越大,把它搞清楚所需要的信息量也就越大。为了保证有效性,这里约定当p(x)→0时,有p(x)logp(x)→0 。
抗差估计(Robust Estimation,有人译成“稳健估计”),实际是在粗差不可避免的情况下,选择适当的估计方法使未知量估值尽可能减免粗差的影响,得出正常模式下的最佳估值。