图像检测(上)

物体检测(Object detection)

    检测图片中所有物体的类别标签(Category label)位置(最小外接矩形/Bounding box)


区域卷积神经网络(R-CNN系列)

R-CNN

    模型结构

        按分类问题对待:模块一:提取物体区域(不同位置,不同尺寸,数量很多),模块二:对区域进行分类识别(CNN分类器,计算量大)


模型结构(Bounding Box用于矩形模型的矫正)
R-CNN实例
CNN模型结构详解

    CNN训练流程(4步)

        1·M<-在ImageNet上对CNN模型进行pre-train(预训练)

                预训练:取一个在其他数据集上训练好的模型,进行初始模型(公用层的参数已经训练好了)

        2·M’<-使用所有SS生成区域对M进行fine-train(再训练)

                再训练:基于现在需要解决的数据集进行训练,使得其适应当前的数据集

                    Loss:概率log值

                    Softmax层改成(N+I)-way其他不变

                    32个正样本/物体(N类):跟Ground-truth重合IoU>=0.5(被检物体与背景的重合度大于0.5)

                    96个负样本/背景(I类):IoU<0.5(被检物体与背景的重合度小于0.5)

步骤二

        3·C<-在M‘的Fc7特征在训练线性SVMs分类器

            Hinge loss(SVM的损失函数)

            每个类别(N类)对应一个SVM分类器

            正样本:所有的Ground-truth区域

            负样本:跟Ground-truth重合IoU<0.3的SS区域

步骤三

        4·R<-在M‘的Conv5(第五个卷积层输出的结果)特征上训练Bounding box回归模型

            提升定位性能(Bounding box的准确性)

            每个类别(N类)训练一个回归模型

                将SS提供的Bounding box做重新映射P->G,位置重新规划

训练输入

                输出结果;P的IoU>0.6(P为SS算法提出的旧位置信息,G为输出的信息)

                模型优化:Squared loss(差平方和loss),,

Squared loss函数

            测试阶段:

                参数w已经训练好

参数w

        R-CNN测试阶段

            SS算法提取~2000个区域/图片,将所有的区域膨胀+缩放到227*227。

            使用fine-tune过的AlexNet计算2套特征,为每个类别执行:

                Fc7特征->SVM分类器->类别分值

                使用非极大值抑制(IoU>=0.5)获取无冗余的区域子集

                    (重复下列操作)

                        所有区域按分值从大到小排列

                        剔除冗余:与最大分值区域IoU>=0.5的所有区域

                        保留该最大分值区域,剩余区域作为新候选集

                Conv5特征 ->Bounding Box回归模型 ->Bbox偏差

                使用Bbox偏差修正区域子集

IoU的定义

    性能评价:

准确率与召回率

SPP-Net网络

    R-CNN速度慢的一个重要原因,卷积特征重复计算量太大,每张图片的~2000区域都会计算CNN特征

    俩大改进,直接输入整图,所有区域共享卷积计算(一遍),在conv5层输出上提取所有区域的特征,引入空间金字塔池化,为不同尺寸的区域,在Conv5输出上提取特征,映射到尺寸固定的全连接层上。

SCP网络

    空间金字塔池化,替换conv5的Pooling层,3个level和21个Bin:1*1,2*2,4*4,bin内使用max pooling,每个SS区域会产生21个Bin

 空间金字塔池化


SPP训练流程

    SPP-Net问题:

        继承了R-CNN的剩余问题,需要存储大量特征,复杂的多阶段训练,训练时间长(特征提取时间下降),新问题:SPP层之前的所有卷积层参数不能finetune。


Fast R-CNN

    改进:比R-CNN,SPP-Net更快的training /test 更高的mAP,实现end-to-end(端对端)单阶段训练,多任务损失函数(Multi-task loss)所有层的蚕食都可以实现finetune(微调),不需要离线存储特征文件。

    在SPP-Net基础引入2个新技术,感兴趣区域池化层(RoI,pooling layer)多任务损失函数(Multi-task loss)

    感兴趣区域池化(RoI pooling):空间金字塔池化(SPP pooling)的单层特例,将RoI区域的卷积特征拆分成H*W网格(7*7for VGG),每个Bin内的所有特征进行Max pooling

 感兴趣区域池化(RoI pooling)


损失函数


Faster R-CNN

    集成了RPN网络,Faster R-CNN = fast R-CNN+RPN,取代离线的SS模块,解决性能瓶颈,经一部共享卷积层计算,基于Attention机制,引导Fast R-CNN关注区域,Region proposals量少优势(~300)高precision,高recall。

    RPN网络:

RPN网络

    Faster R-CNN网络:

        四步训练流程

            step1    -    训练RPN网络

                卷积层初始化<-ImageNet 上 pretrained模型参数

            step2    -    训练Fast R-CNN网络

                卷积层初始化<-ImageNet上pretrained模型参数

                Region proposals由Step1的RPN生成

            step3    -    调优RPN

                卷积层初始化<-Fast R-CNN的卷积层参数

                固定卷积层,finetune剩余层

            step4    -    调优fast R-CNN

                固定卷积层,finetune剩余层

                Region proposals 由step3的RPN生成

你可能感兴趣的:(图像检测(上))