AI 目标检测概要

目标检测实现图像中目标的分类任务和 bounding box 位置框检测任务。(本文图片均来自网络,如有侵权,请联系删除 )

本文分享了整理的目标检测经典算法的关键步骤和实现需要注意的地方。包括
Faster R-CNN
FPN
SSD
RetinaNet
1. Faster R-CNN
Faster R-CNN 是经典的 two-stage 的目标检测算法。

Faster R-CNN 是一个看似是 end-to-end 的过程, 由 3 个部分组成
特征提取层 CNN: 通常是 vgg16, resnet 也是可以
RPN:region proposal network, 候选框生成
RoI Pooling + Classifier, 分类和 bbox 回归


1.1 特征提取层 CNN
可以看出对于输入图像 PxQ, 需要缩放至固定大小 MxN,然后将 MxN 图像送入网络
CNN 的 conv 层需要保持 feature map 大小为 MxN,只在 pooling 层进行下采样,这样保证可以最后一个 conv 层的 feature map 的每个点可以完美映射到原图中(M/16,N/16)
1.2 RPN: 候选框生成
RPN 网络是 feature Map 后加一个 3x3 filter(vgg)的卷积层,在输出的 512 的 feature Map(原文是 256,主要看特征提取 feature Map 的大小),分别加一个分类层和 bbox 回归层。

anchor boxes:3x3 filter(vgg)的卷积层后的每一个点可以映射到原图中的 k 种不同尺度类型 box 候选框。 默认是 3 个尺度:128/156/512, 3 个长宽比:1:1/1:2/2:1, 9 个 anchor boxes, k=9;以 vgg(512)为例, 在原图会生成约 4600 个候选框。不同的任务这个可以进行调整修改
分类: 这里采用是 1x1 的卷积,输出是 k 个不同尺度类型的二分类结果(前景和背景)
box 位置回归:同样是 1x1 的卷积,输出是 k 个不同尺度类型的位置(x,y, w, h)
需要注意的是 3x3 卷积的输出也要保证输出 feature map channels 大小和特征提取的 feature map channels 大小一致,这样才可以映射会原图。
关于训练:
对原图进行类别和位置打标,得到 k 中不同尺度的类别和位置信息。
其中前景和背景类别,通过计算与 groud truth 的 bbox 的 iou,通过阈值来判断前景和背景
位置信息记录的是偏移信息
因为背景和前景类型不平衡,论文采用随机采用 256 个样本(前景:背景=1:1)进入 RPN 训练
1.3 RoI Pooling + Classifier
RPN 之后得到候选的框,需要进行 refine;

RoI pooling: RPN 之后得到的候选框,进行挑选后(阈值和极大值抑制操作等)roi 区域,resize 到 pooling size 后,形成固定程度的特征
之后若干 dense 层后接一个分类层和 bbox 回归层
1.4 小结
faster rcnn 之所以是两阶段的,是因为先要进程 RPN 的网络,然后 RPN 的网络的结果在进入最终的 ROI pooling 的分类回归层。训练的每一个 batch 的都要经过两个网络,特别是 RPN 之后需要对 batch 进行预测,然后进行调整 roi 等操作。
https://github.com/moyiliyi/keras-faster-rcnn/blob/master/train_frcnn.py
2. FPN
FPN 从高层携带信息传给低层,再分层预测,本文作者的创新之处就在于既使用了特征金字塔,又搞了分层预测。

高层到低层的融合,在 feature map 的叠加,为了保证 feature map 大小一致, 高层需要上采样,同时低层进行一次 1x1 卷积后相加。

FPN 在 faster R-CNN 的应用,在特征金字塔上的每个特征进行单一尺度候选框选择。 这样也可以实现不同尺度的候选框的选择,同时对小物体的检测有一定的鲁棒性,因为有在低层特征进行候选框选择。




3. SSD
SSD 的核心是在不同尺度的特征特征图上采用卷积核来预测一系 Default Bounding Boxes 的类别、坐标偏移



4. RetinaNet
RetinaNet 主要是为了 Focal loss 设计的 one-stage 的目标检测结构。总体结构上还是采用 FPN 的样式,只是再各个尺度上接了分类和 bbox 回归的子网络,注意两个子网络是独立的,不共享参数。

备注下,focal loss 主要是在交叉熵 loss 中加了系数控制,使得网络能更加关注困难样本。针对目标检测任务而言,背景样本非常多,前景样本相对少; 交叉熵 loss 在背景样本的 loss 往往不会为 0,大量非 0 loss 叠加导致总体 loss 也会很大,这样总体 loss 中的前景样本的比重就变得微弱,梯度下降不会太关注前景样本的。focal loss 使得简单样本分对情况下,loss 接近于 0,总体 loss 更加关注那些分错的样本。

那么关键是 RetinaNet 如何进行候选框选择呢?p3 到 p7,对应的尺度 32 到 512, 和原来 FPN 不同的 p3 到 p5 对应的是 c3 到 c5, p6 和 p7 分别是 c5 再两次下采样的得到的。

版权声明: 本文为 InfoQ 作者【AIWeker-人工智能微客】的原创文章。
原文链接:【http://xie.infoq.cn/article/d6f823dca957f10db75351d67】。文章转载请联系作者。
评论