DeepMask学习笔记
1.简介
本文提到DeepMask用于生成region proposal,但感觉它就是一个分割算法,哪里有region proposal?所以以自己现在的理解,就直接把DeepMask当作是分割算法,而且是实例分割。
何为语义分割?何为实例分割?语义分割就算将图像中的物体归类,即对每个物体标注出它的所属类别。而实例分割不仅对物体进行归类,还对同类物体的不同个体进行区分,每个个体都分配一个唯一的ID。
如何语义分割?如何实例分割?一般而言,语义分割相对简单,分割网络的结构相对简单和单一,端到端的网络模型即可,如FCN、U-Net、SegNet、ENet等等。实例分割的网络结构要复杂一点,一般是有多个分支的,比如本文介绍的DeepMask,Mask R-CNN等,一般需要先有region proposal(或者是RoI),然后再对单个物体其进行分割。即语义分割是整体图像进行分割,而实例分割是一个一个物体进行分割。
2.网络结构
2.1.整体结构
DeepMask的网络结构:首先是一个VGG16网络用于提取特征图(常规操作,Faster R-CNN也如此),VGG16移除掉后面的全连接层和最后一个MaxPool,因此下采样倍数为16,输出通道数为512,这部分似乎叫做backbone。之后是经过一个卷积层,然后再分两个分支,一个分支输出mask,另一个分支用于输出score。
batch推断与整图推断:DeepMask的输入是整张图像的一个局部,称为batch,分辨率为224*224。DeepMask每次只分割一个物体(或叫实例),对于整张图所有实例的分割,枚举不同位置不同scale的batch进行分割,stride设置为16 pixels,scale从2^-2到2,step为2^1/2。其中,batch的正例子需要满足以下两个条件:
(1)目标位于batch的正中心
(2)目标被完整包含在batch中(and in a given scale range,这半句没看懂)
2.2.Segmentation分支
先是1*1Conv,channels=512。然后是一个长度为512的一维全连接层(或者可以理解为14*14Conv,channels=512)。得到512*14*14的特征图
然后再将这个全连接层连接到到56*56的二维全连接层上?还可以一维全连接层连接到二维全连接层上?那这一层的参数个数不得有512*56*56这么多?是可以连接的,而且这么设计的理由是:我们希望输出mask上的每一个pixel,分类器都能够利用整个512*14*14大小的feature map信息,这样就能够“看到”整个物体,这一点很重要,因为即使存在着好几个物体,网络输出的也只是对一个物体的mask。mask的分辨率为56*56。
最后一个双线性上采样层用于将分辨率为56*56的mask转为分辨率为224*224的mask。为何mask的输出不直接设为224*224呢?因为设成56*56可以减少模型的参数。
2.3.Score分支
首先是一个kernel_size=2,stride=2的MaxPool,然后后面接两个全连接层,最后是一个数,作为batch是否含有一个物体的得分。注意:是“是否有物体的得分”,而不是“属于某个物体的得分”,也就是说这个score是类别无关的。
疑问?既然score是类别无关的,那么怎么确定当前物体属于哪一类?难道设置成这样,真的只是用DeepMask来生成region proposal?应该是,因为对于region proposal,只需知道框里面是否含有物体就够了,而不需知道里面的物体属于哪一类。
2.4.损失函数
(没看懂……)
posted on 2020-10-31 14:16 ZhicongHou 阅读(707) 评论(0) 编辑 收藏 举报