目标检测
卷积介绍
1*1卷积
作用:
- 增加非线性,使网络可以表达更复杂的特征
- 特征降维,减少参数和计算量
空洞卷积
空洞卷积提供了更大的感受野,可以得到更大的特征图,有助于小物体的识别和分割。
转置卷积
上采样,让小图变成大图
目标检测简单方法介绍
传统方法
滑动窗口+传统机器学习分类器
- 识别效果差,准度低
- 计算量大,运算速度慢
- 会出现多个正确结果
滑动窗口+卷积神经网络CNN
与上面方法对比仅提高了识别准确率
全卷积神经网络FCN
对于一个各层参数结构都设计好的神经网络,输入图片的大小都是固定的,如Alexnet、Net,VGGNet,GoogleNet等网络。
FCN的精髓就是让一个已经设计好的网络可以输入任意大小的图片。
FCN 的优势在于:
- 可以接受任意大小的输入图像(没有全连接层)
- 更加高效,避免了使用邻域带来的重复计算和空间浪费的问题。
其不足也很突出:
- 得到的结果还不够精细 。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。 -是对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。
判断目标检测的好坏
交并比 IoU
预测结果与标注结果的交集。
平均准确率值
每一个类别根据recall和precision绘制一条曲线,AP是曲线下的面积,mAP是多类别AP的平均值,介于0到1,且越大越好。
非极大值抑制
只保留 交并比最大的候选框。
目标检测算法
RCNN
- 选一个分类模型(AlexNet,VGG16等)
- 去掉最后一个全连接层,将分类改为N+1,对模型做fine-tuning(微调)
- 对每个候选区域做特征提取,resize区域大小,将第五个池化层的输出保存到硬盘(pool5)。
- 使用pool5输出图像特征训练SVM分类器(二分类)来判断候选框物体类别。每个类别对应一个SVM。
- 使用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上。
训练流程
- 用imageNet模型初始化,独立训练一个RPN网络
- 任然用ImageNet模型初始化,但是使用上一步RPN网络产生的proposal作为输入,训练一个Fast-RCNN网络。
- 使用第二部的Fast-RCNN网络参数初始化一个新的RPN2网络,但是把RPN2,Fast-RCNN共享的那些卷积层的learning rate设置为0,也就是不更新,仅仅更新RPN2特有的那些网络层,重新训练。
- 仍然固定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的输出