用于解决instance segmentation,实例分割

图片分类:输出物体属于哪一类

物体检测:输出每个物体的位置以及类别

实例分割:输出图片中物体每个像素点的集合以及物体的分类

1表示属于,0表示不属于,用单通道的图来表示,这张图也叫物体的mask,掩码

AlexNet使用卷积神经网络来解决分类问题,至此,卷积神经网络开始引起人们的关注

R-CNN:根据输入图片生成大量可能包含物体的边界框,每个边界框对应图片中的一个区域,叫做候选区域,然后用卷积神经网络来判断每个区域中是不是真的包含物体以及包含物体的类别

  1. 生成大量候选框(selective search),基于图片中颜色,纹理等特征
  2. 将每一个候选区域截取下来,调整到固定大小;用CNN得到候选区域图片对应的特征
  3. 对于每一个类名,使用一个SVM来进行分类,判断得到的特征是否属于某一个类别
  4. 采用回归模型对第一步中生成的候选区域的位置进行调优,得到更加准确的物体位置

R-CNN很慢的原因:

  1. 每个候选区域都需要使用卷积神经网络前向传播来计算特征
  2. 第一步生成的候选框有2000多个,而且候选框之间存在重叠,造成了重复计算
  3. 每一步都是一个独立的模型(CNN,SVM,Regression)

Fast R-CNN

  1. 只对整张图片进行一次前向传播得到整张输入图片的特征图
  2. ROI(region of interest)池化层来对每个候选区域选取对应的候选区域特征图,避免重复计算的问题
  3. 对每个候选区域的特征图进行池化,使得大小一致
  4. 分类模型和调优模型被整合到一个神经网络上,大大简化模型的训练
  5. selective search不能使用GPU进行计算,基于输入图片的纹理,颜色等特征

Faster R-CNN

用Fast R-CNN中,ROI池化层之前,特征图之上的卷积神经网络来生成候选区域

RPN:region proposal network候选区域网络

与最初的Fast R-CNN共享特征图

Faster R-CNN=Fast R-CNN+RPN

RPN是如何生成候选区域的?

  1. 对特征图上的每个位置,预先设定k个不同长宽比的anchor boxes
  2. 分类模型:输出2k个分数,表示边界框是否含有物体
  3. 回归模型:输出4k个值,对于每一个box输出4个值,代表检测框的4个参数

Mask R-CNN

在Faster R-CNN基础上进行拓展,在特征图上加上一个分支,对候选区域进行分割,以得到物体的mask(binary)

分支采用图片语义分割中效果显著的FCN(全卷积网络)

Mask R-CNN=Faster R-CNN with FCN on ROIs

ROI池化层改进为ROIAlign(ROI对齐层)

ROIPool:

  1. ROI池化后得到的特征图不能整除,两次取整后,使得得到的特征图与实际相比产生偏差
  2. 对应到输入图上产生不可忽视的偏差,对目标检测可能影响不大,但对于图像分割影响很大(精确到每个像素)

ROIAlign

  1. 不进行取整操作,直接根据坐标划分成2x2个区域,然后对于每个区域取等分的2x2个子区域的中心点,作为样本点,对于样本点,对于邻近的网格点,采用双线性插值算法计算该样本点的取值,对四个样本点的取值进行聚合操作,得到该区域池化后的特征值

Mask R-CNN可以被拓展到人体姿态估计任务

  1. 输入一组图片,输出图片中每个人每个关节点的坐标
  2. 将要输出的关节点坐标建模成mask