mask rcnn实例分割

参考网址:https://baijiahao.baidu.com/s?id=1595621180643410921&wfr=spider&for=pc

https://blog.csdn.net/jiongnima/article/details/79094159

实例分割是一种在像素层面识别目标轮廓的任务,

mask rcnn实例分割_第1张图片

分类:这张图像中有一个气球

语义分割:这些全是气球像素

目标检测:这张图像中的这些位置上有7个气球

实例分割:这些位置上有7个气球,并且这些像素分别属于每个气球

mask rcnn是一个两阶段的框架,第一个阶段扫描图像并生成提议(proposals,即有可能包含一个目标的区域),第二阶段分类提议并生成边界框和掩码

训练数据制作与准备

1。 在网络上搜索到75张气球图片,考虑到迁移学习,这里不想要数万张图片来训练深度学习模型,简单来说,与其从零开始训练一个新模型,我从已在 COCO 数据集(在 repo 中已提供下载)上训练好的权重文件开始。虽然 COCO 数剧集不包含气球类别,但它包含了大量其它图像(约 12 万张),因此训练好的图像已经包含了自然图像中的大量常见特征,这些特征很有用。其次,由于这里展示的应用案例很简单,我并不需要令这个模型达到很高的准确率,很小的数据集就已足够。

有很多工具可以用来标注图像。由于其简单性,我最终使用了 VIA(VGG 图像标注器)。这是一个 HTML 文件,你可以下载并在浏览器中打开。标注最初几张图像时比较慢,不过一旦熟悉了用户界面,就能达到一分钟一个目标的速度。

如果你不喜欢 VIA 工具,可以试试下列工具,:

LabelMe:最著名的标注工具之一,虽然其用户界面有点慢,特别是缩放高清图像时。RectLabel:简单易用,只在 Mac 可用。LabelBox:对于大型标记项目很合适,提供不同类型标记任务的选项。COCO UI:用于标注 COCO 数据集的工具。

加载数据集

按这个顺序阅读论文:RCNN、Fast RCNN、Faster RCNN、FPN、Mask RCNN。

,在2014年,正是深度学习如火如荼的发展的第三年。在CVPR 2014年中Ross Girshick提出的R-CNN中,使用到了卷积神经网络来进行目标检测 

 

首先模型输入为一张图片,然后在图片上提出了约2000个待检测区域,然后这2000个待检测区域一个个地(串联方式)通过卷积神经网络提取特征,然后这些被提取的特征通过一个支持向量机(SVM)进行分类,得到物体的类别,并通过一个bounding box regression 调整目标包围框的大小。具体实现步骤为:

             step1: 2000个region, 首先提取2000个待检测区域,用2012年提出的方法selective search, 简单来说就是通过一些传统图像处理方法将图像分成若干块,然后通过一个SVM将属于同一目标的若干块拿出来。selective search的核心是一个SVM,

问题:到底如何实现的?

 

step2: 特征提取,Ross直接借助了当时深度学习的最新成果AlexNet(2012),那么该网络是如何训练的呢?是直接在ImageNet上面训练的,也就是说,使用图像分类数据集训练了一个仅仅用于提取特征的网络。

step 3: 目标分类, 使用支持向量机(SVM),在训练这个支持向量机的时候,结合目标的标签(类别)与包围框的大小进行训练,因此,该支持向量机也是被单独训练的。

   R-CNN贡献:

(1) 使用了卷积神经网络进行特征提取。

(2)使用bounding box regression进行目标包围框的修正。

R-CNN缺陷:

 1)耗时的selective search , 对每一帧图像,需要花费2s.

2)耗时的串行式前向传播,对于每一个ROI,都需要经过一个AlexNet提特,为所有的ROI提特征大约花费47s.

3) 三个模块是分别训练的,并且在训练的时候,对于存储空间的消耗很大。

针对这些缺陷,Ross在2015年提出了fast R-CNN进行改进,

step 1: 仍然采用selective search 提取2000个候选框

step 2: 用一个神经网络对全图进行特征提取,

step 3:  用一个ROI Pooling layer在全图特征上摘取每一个roi 对应的特征,

step 4: 再通过全连接层(FC layer)进行分类与包围框的修正。

FAST R-CNN的贡献主要有:

(1)取代R-CNN的串行特征提取方式,直接采用一个神经网络对全图提取特征(这也是为什么需要ROI Pooling的原因)

(2) 除了selective search, 其它部分都可以合在一起训练。

FAST R-CNN 缺点:

(1) 耗时的selective search依旧存在。

针对FAST R-CNN 缺陷,Ross在2016年提出了faster R-CNN进行改进,

  取代selective search , 直接通过一个Region proposal Network(RPN), 生成待检测区域,这么做,在生成ROI区域的时候,时间也就从2s缩减到了10ms,具体步骤:

step 1: 使用共享的卷积层为全图提取特征,得到特征图feature map

step 2: 将feature map送入RPN, 可生成待检测框并对ROI的包围框进行第一次修正。

step 3:后面就是fast R CNN的架构

faster R-CNN贡献:

   真正实现了端到端的训练(end-to-end trainging)

细节部分:

RPN依靠一个在共享特征图上滑动的窗口,为每个位置生成9种预先设置好长宽比与面壁的目标框(文中叫anchor)。这9种初始anchor包含3种面积(128x128, 256x256, 512x512),每种面积又包含3种长宽比(1:1, 1:2, 2:1)

 

由于共享特征图的大小约为40x60,RPN生成的初始anchor的总数约为20000个(40x60x9).对于生成的 anchor,RPN要做的事情有2个:

task 1:判断anchor到底是前景还是背景,意义就是判断这个anchor到底有没有覆盖目标,用了softmaxLoss直接训练,训练时排除掉了超越图像边界的anchor

task 2: 为属于前景的anchor进行一次坐标修正,用了smoothL1Loss进行训练。

实现细节见下面代码

从以上代码可以看出,对于特征图中的每一点,对应9个anchor,

note 1: 每个anchor有一个前景分数和一个背景分数,所以9x2=18,即RPN对每一个点给出18个值,(这里通过一个卷积层rpn_cls_score实现)

note 2: 每个anchor对应了4个坐标值,所以9x4=36,即RPN对每一个点还需要给出36个值,这里通过一个卷积层rpn_bbox_pred实现

如何得到这些值?

RPN网络需要训练,在训练的时候,就需要对应的标签,

那么如何判定一个anchor是前景还是背景呢?文中定义如下:

如果一个anchor与groud truth的iou在0.7以上,那么这个anchor就算前景(positive),类似的,如果这个anchor与ground truth的iou在0.3以下,那么这个anchor就算背景(negative).作者进行PRN网络训练的时候,只使用了上述两类anchor,与ground truth的IOU介于0.3和0.7的anchor没有使用。在训练anchor属于前景与背景的时候,是在一张图中,随机抽取了128个前景anchor与128个背景anchor.

box的训练是如何进行的?

anchor box 由4个值构成[tx, ty,th,tw], (tx,ty)代表中心点的平移量, th ,tw,代表长宽的各自放大倍数

 

 

 

 

你可能感兴趣的:(mask rcnn实例分割)