目标检测基础知识

目标检测

卷积介绍

1*1卷积

作用:

  • 增加非线性,使网络可以表达更复杂的特征
  • 特征降维,减少参数和计算量

空洞卷积

空洞卷积提供了更大的感受野,可以得到更大的特征图,有助于小物体的识别和分割。

转置卷积

上采样,让小图变成大图

目标检测简单方法介绍

传统方法

滑动窗口+传统机器学习分类器

  1. 识别效果差,准度低
  2. 计算量大,运算速度慢
  3. 会出现多个正确结果

滑动窗口+卷积神经网络CNN

与上面方法对比仅提高了识别准确率

全卷积神经网络FCN

对于一个各层参数结构都设计好的神经网络,输入图片的大小都是固定的,如Alexnet、Net,VGGNet,GoogleNet等网络。

FCN的精髓就是让一个已经设计好的网络可以输入任意大小的图片。

FCN 的优势在于:

  • 可以接受任意大小的输入图像(没有全连接层)
  • 更加高效,避免了使用邻域带来的重复计算和空间浪费的问题。

其不足也很突出:

  • 得到的结果还不够精细 。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。 -是对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。

判断目标检测的好坏

交并比 IoU

预测结果与标注结果的交集。

平均准确率值

每一个类别根据recall和precision绘制一条曲线,AP是曲线下的面积,mAP是多类别AP的平均值,介于0到1,且越大越好。

非极大值抑制

只保留 交并比最大的候选框。

目标检测算法

RCNN

  1. 选一个分类模型(AlexNet,VGG16等)
  2. 去掉最后一个全连接层,将分类改为N+1,对模型做fine-tuning(微调)
  3. 对每个候选区域做特征提取,resize区域大小,将第五个池化层的输出保存到硬盘(pool5)。
  4. 使用pool5输出图像特征训练SVM分类器(二分类)来判断候选框物体类别。每个类别对应一个SVM。
  5. 使用pool5输出的图像特征训练一个回归器。dx,dy(水平竖直平移),dw,dh(宽度高度缩放),使用回归器调整候选框位置。

SPPnet

RCNN最大的瓶颈是2k个候选区都要经过一次CNN卷积,速度慢。SPP-net仅需要将原图做一次卷积,就可以得到每个候选区域的特征。

SPP-net比RCNN速度提升快100倍

特征映射

对卷积层可视化发现,输入图的某个位置特征反应在特征图上也是相同的位置,我们将SS算法提供的2000个候选区域的位置记录下来,通过比例映射到conv5输出的feature map上,提取出候选区域的特征图m然后将m送入到金字塔池化层中计算。

金字塔池化层

将不同大小的特征图,变成相同的数据。

Fast-RCNN

ROI Pooling

ROI Pooling 层其实是SPP-Net中金字塔池化层的一种简单化形式,ROI Pooling层只使用一种固定输出大小的max-pooling。将每个候选区域均匀分割成M*N快,对每块进行max-pooling。将特征图上大小不一样的候选区域转变为大小统一的数据,送入下一层。

Faster-RCNN

Fast-RCNN中的SS算法只能运行在CPU上,Faster-RCNN改进了此算法为区域生成网络 Region Proposal Network(RPN),便可以运行才GPU上。

训练流程

  1. 用imageNet模型初始化,独立训练一个RPN网络
  2. 任然用ImageNet模型初始化,但是使用上一步RPN网络产生的proposal作为输入,训练一个Fast-RCNN网络。
  3. 使用第二部的Fast-RCNN网络参数初始化一个新的RPN2网络,但是把RPN2,Fast-RCNN共享的那些卷积层的learning rate设置为0,也就是不更新,仅仅更新RPN2特有的那些网络层,重新训练。
  4. 仍然固定RPN2,Fast-RCNN共享的那些网络层,把Fast-RCNN特有的网络层也加进来,形成一个统一的网络,继续训练,fine tune Fast-RCNN特有的网络层。

关于one stage two stage

two stage:Faster-RCNN

检测算法将检测问题划分为两个阶段,首先产生候选区域,然后对候选区域分类(一般还需要对位置精修)。特点是错误率低,漏识别率也低,但是速度慢,不太能满足实时检测场景。

one stage:SSD,YOLO

不需要region proposal阶段,可以直接产生物体的类别概率和位置坐标,经过单词检测即可直接得到最终的检测结果。特点:有着更快的检测速度。

SSD (single shot multibox detector)

SSD主网络结构是VGG16,在VGG16网络后面增加了6个卷积层,相当于越往后感受野越大。 整个SSD网路既能识别大的物体又能识别小的。

特征金字塔

SSD算法在不同的特征映射上面都进行了预测,在增加运算量的同时可能会提高检测的精度,因为它考虑了更多尺度的特征。

Hard negativate mining

一般情况下 负样本数量会远远大于正样本数量,直接训练会导致玩那个罗过于重视负样本,从而loss不稳定。所以SSD在抽样时按照置信度误差进行降序排列,选取误差较大的top-k作为训练的负样本,控制positive:negative=1:3。作者返现这样可以导致模型更快的优化和更稳定的训练。

Data augmentation数据增广

为了使模型对于各种输入对象大小核形状更加鲁棒,每个训练图像通过以下选项之一随机采样:

  • 使用整个原始输入图像
  • 采样一个区域,使采样区域和原始图片最小的交并比重叠为0.1,0.3,0.5,0.7和0.9。
  • 随机采样一个区域

YOLO(you onely look once)

YOLO v1

核心思想就是利用整张图作为网络的输入,将目标检测作为回归问题解决,直接在输出层回归预选框的位置 机器所属类别。YOLO最左边是一个inceptionV1网络,共20层。单作者对inceptionV1进行了改造,他没有使用inception模块,而是用一个1x1的卷积并联一个3x3的卷积来替代。inceptionV1提取出的特征图再经过4个卷积层和2个全连接层,最后生成7x7x30的输出

YOLO v2

YOLO v3