2、 SSD
YOLO 算法中的 7x7 网络结构让目标的定位不是很准确,让检测的精确度不是很高,SSD (Single Shot MultiBox Detector)算法结构模型就是将 YOLO 的回归方法和 Faster R-CNN 的 anchor box思想结合起来,并对整个图片的不同位置的不同尺度的区域特征进行回归操作,这样既可以保持 YOLO回归方法的快速检测的优势,又使用 Faster R-CNN 中的 anchor 机制保证窗口预测的准确度。
SSD网络主体设计的思想是特征分层提取,并依次进行BB边框回归和分类。因为不同层次的特征图能代表不同层次的语义信息,低层次的特征图能代表低层语义信息(含有更多的细节),能提高语义分割质量,适合小尺度目标的学习。高层次的特征图能代表高层语义信息,能光滑分割结果,适合对大尺度的目标进行深入学习。所以作者提出的SSD的网络理论上能适合不同尺度的目标检测。SSD网络中分为了6个stage,每个stage能学习到一个特征图,然后进行边框回归和分类。SSD网络以VGG16的前5层卷积网络作为第1个stage,然后将VGG16中的fc6和fc7两个全连接层转化为两个卷积层Conv6和Conv7作为网络的第2、第3个stage。接着在此基础上,继续增加了Conv8、Conv9、Conv10和Conv11四层网络,用来提取更高层次的语义信息。如图8为SSD的网络结构。在每个stage操作中,网络包含了多个卷积层操作,每个卷积层操作基本上都是小卷积。
图8. 两个检测模型的比较,SSD和YOLO。SSD模型在基础网络的末端增加了几个特征层,预测不同比例和长宽比的默认框的偏移量以及它们的相关置信度。在VOC2007测试中,输入尺寸为300×300的SSD在准确性上明显优于其448×448的YOLO对应模型,同时也提高了速度
在SSD中,作者充分的吸取了Faster R-CNN中的Anchor机制,在每个Stage中根据Feature Map的大小,按照固定的Scale和Radio生成Default Boxes。在每张特征图上得到许多Default Box后还需要生成相应的特征向量,用来进行边框回归和分类。对于分类,SSD网络采取为每个类别进行打分的策略,也就是说对于每个Default Box,SSD网络会计算出相应的每个类别的分数。假设数据集类别数为c,加上背景,那么总的类别数就是c+1类。SSD网络采用了c+1维向量来分别代表该Default Box对于每个类别所得到的分数。
SSD网络对于每个stage输出的特征图都进行边框回归和分类处理,SSD的损失包括类别损失和定位损失,其中,类别损失L_conf又分为正样本和负样本类别损失,联合损失函数如下:
为了提高检测准确度,作者还引入了四种辅助方法:
匹配策略:即ground truth和Default box的匹配。首先,根据最大的overlap将ground truth和default box进行匹配(根据ground truth找到default box中IOU最大的作为正样本);然后,将default boxes与overlap大于某个阈值(目标检测中通常选取0.5)的ground truth进行匹配。
Default boxes生成器:来自网络内不同层次的特征图具有不同的(经验)感受野大小。在SSD框架内,Default box不一定要对应于每一层的实际感受区,可以令特定的特征图学会对物体的特定比例作出反应。假设我们想使用m个特征图进行预测。每个特征图的default box的比例计算为:
Hard Negative Mining:经过匹配策略会得到大量的负样本,只有少量的正样本。这样导致了正负样本不平衡,作者经过试验表明,正负样本的不均衡是导致检测正确率低下的一个重要原因。所以,作者在训练过程中采用了Hard Negative Mining的策略,根据Confidence Loss对所有的box进行排序,使得正负样本的比例控制在1:3之内。
数据增强:这一步骤的目的是使得模型更加鲁棒。作者在文中具体采用的增强手段包括使用整张图像作为输入;使用IOU和目标物体为0.1、0.3、0.5、0.7和0.9的patch,这些patch在原图大小的[0.1, 1]之间,相应的宽高比在[1/2, 2]之间;随机采取一个patch;使用光学增强。
当前 SOTA!平台收录 SSD 共 27 个模型实现资源。
项目 | SOTA!平台项目详情页 |
SSD | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/ssd-4 |
3、 FPN
特征金字塔(Feature pyramids)是多尺度目标检测系统中一个重要组成部分,近年来,由于特征金字塔存在影响模型计算速度、占用内存等问题,大多数深度网络避免使用这个结构。在此之前,SSD模型提出了一个“内置的”特征金字塔解决了上面问题。但是SSD网络只采用自底向上的路径不够完美,此外,SSD舍弃了高分辨率的底层网络层,对小目标的检测效果不够理想。本文作者提出了基于Bottom-up pathway、Top-down pathway and lateral connections策略的Feature Pyramid Network (FPN)结构,在目标检测任务中取得了不错的效果。
Bottom-up pathway:自底向上的路径就是网络的前向计算过程,特征图经过卷积层池化层一般会越来越小,也有一些特征层的输出和输入大小一样。作者将大小不变的feature map层称为stage,每次抽取的特征都是每个stage最后一个层的输出。最后一层具有最强的语义特征,众多层一起构成了特征金字塔。对于ResNet网络,作者使用每个stage的最后一个残差结构的特征激活输出。将这些输出表示为{C2, C3, C4, C5},对应于conv2,conv3,conv4和conv5的输出,相对于输入图像则具有{4, 8, 16, 32}像素的步长。考虑到内存占用问题,作者没有将conv1包含在金字塔中。
Top-down pathway and lateral connections:自顶向下的路径是通过对网络上采样(upsampling)进行的,横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合。在融合之后为了消除上采样的混叠效应(aliasing effect),采用3*3的卷积核对每个融合结果进行卷积,并假设生成的融合特征层为{P2, P3, P4, P5}和原来自底向上的卷积结果{C2, C3, C4, C5}对应。
图9. 顶部:一个自上而下的结构,包含skip connections,预测是在最细的层次上进行的。底部:本文模型有一个类似的结构,但利用它作为一个特征金字塔,在所有层次上独立进行预测
图10. 一个说明侧向连接和自上而下途径的构件,通过添加而合并
图10给出了构建自上而下特征图的构件。对于一个较粗分辨率的特征图,将空间分辨率提高2倍(为简单起见,使用最近的邻居提高取样)。然后,通过元素相加的方式将上层map与相应的下层map(经过1×1卷积层以减少通道尺寸)合并。这个过程反复进行,直到生成最精细的分辨率map。为了开始迭代,只需在C5上附加一个1×1卷积层以产生最粗分辨率的map。采用3*3的卷积核对每个融合结果进行卷积,并假设生成的融合特征层为{P2, P3, P4, P5}和原来自底向上的卷积结果{C2, C3, C4, C5}对应。
当前 SOTA!平台收录 FPN 共 4 个模型实现资源。
项目 | SOTA!平台项目详情页 |
FPN | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/fpn-4 |
4、 RetinaNet
在one-stage检测器中,检测器须处理约100K的样本,其中大多数都是容易分类的负样本,正样本很少,即使采用困难样本挖掘等启发式抽样,其训练过程还是主要由容易分类背景负样本主导。本文提出了Focal Loss,能够根据检测结果的置信度动态调整其对损失函数的贡献。样本对损失函数的贡献会随着置信度的提高而降低,因此,尽管one-stage检测存在海量容易分类的背景样本,但是由于其置信度高,所以其对损失函数的占比小,因此不会主导训练过程,从而解决了one-stage检测器正负样本不均衡的问题。
首先从二分类的交叉熵损失函数出发分析:
p表示模型预测当前样本标签为1的概率。为了描述方便,定义p_t 为:
进一步,解决正负样本不均衡的方法是在交叉熵损失函数中加入加权因子α,交叉熵损失函数改写为:
通过调节加权因子可以平衡类别间的不均衡。在实际应用中,可以将α 设为类别频率的相反数,即频率高的就将α 调低;或者将α 作为超参数调参。但是尽管α 可以调整正负样本的均衡,却不能调整难易样本的均衡,而one-stage检测器的主要问题在于大量容易负样本构成了大部分的损失,并主导了梯度,主导了训练过程,因此作者在交叉熵中引入了与预测置信度相关的调节因子,如下式所示:
对于容易样本,其预测的置信度必然相对较高,即预测的p_t 值较大,那么(1−pt) 就可以降低损失的权重。另外还有一个调节惩罚力度的超参数γ ,γ∈[1,5] 。为了能够对正负样本和难易样本都取得一个较好的均衡,作者采用以下形式的损失函数:
在二分类的任务中,默认的初始化往往会选择使得预测正类和负类的概率都为0.5。在这样的初始化下,在类别不平衡的情况下,频繁出现的类别所造成的损失会支配总的损失,导致早期训练的不稳定。为了解决这个问题,作者引入了 "先验 "的概念,即在训练开始时由模型对稀有类(前景)估计的p值。用π表示先验,并将其设置为:模型对稀有类别样本的估计P很低,例如0.01。作者分析这是对模型初始化的改变,而不是损失函数的改变。作者发现,在类别严重失衡的情况下,这可以提高交叉熵和焦点损失的训练稳定性。
为了验证Focal Loss的有效性,作者设计了一个简单的one-stage目标检测器——RetinaNet,如下图所示:
图11. RetinaNet网络架构在前馈ResNet架构之上使用了一个特征金字塔网络(FPN)backbone(a),以产生一个丰富的、多尺度的卷积特征金字塔(b)。在这个backbone网络上,RetinaNet附加了两个子网络,一个用于分类anchor box(c),一个用于从anchor box回归到ground-truth object box(d)
RetinaNet的网络结构是在FPN的每个特征层后面接两个子网络,分别是classification subnet(图11c) 和 bbox regression subnet(图11d)。由图11,FPN通过自上而下的路径和横向连接增强了标准卷积网络,因此该网络从单个分辨率输入图像有效地构建了丰富的多尺度特征金字塔,参见图11(a)-(b)。Retinanet在resnet 架构头部构建FPN结构,构建了P3~P7的特征金字塔,具有C=256t channels。
当前 SOTA!平台收录 RetinaNet 共 210 个模型实现资源。
项目 | SOTA!平台项目详情页 |
RetinaNet | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/retinanet-2021 |
前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。
网页端访问:在浏览器地址栏输入新版站点地址 sota.jiqizhixin.com ,即可前往「SOTA!模型」平台,查看关注的模型是否有新资源收录。
移动端访问:在微信移动端中搜索服务号名称「机器之心SOTA模型」或 ID 「sotaai」,关注 SOTA!模型服务号,即可通过服务号底部菜单栏使用平台功能,更有最新AI技术、开发资源及社区动态定期推送。