MASK_RCNN与YOLO系列算法初学者笔记(摘抄自其他)

卷积神经网络基础知识卷积神经网络CNN过滤器 卷积核/Kernels,含义都是过滤器卷积核常用的是固定大小:33、55、7*7。当谈论过滤器时,我们更关注的是权重。这些过滤器将确定模型将关注图像的那些像素部分。那么,如何确定模型关注图像的那一部分???特征图:可以看到不同的过滤器在创建图像的特征图时关注不同的方面。一些特征图专注于图像的背景。一些特征图专注于图像的轮廓。一些过滤器会专注于背景较暗但猫的图像较亮的特征图。这是由于过滤器的相应权重。feature maps :图像像素值经过过滤器后得到的东西就是特征图,应该说特征图就是突出了某些特征的黑白色原图,但是过滤器层数多了以后人眼基本看不出来和原图有啥关系但是计算机可以看得出来随着图像在各个层中前进(特征图的层数越多),图像中的细节会慢慢消失。它们看起来像噪音,但在这些特征图中肯定有一种人眼无法检测到的模式,但神经网络可以。(所以难以解释清楚网络有时在干啥)YOLO首先,YOLO是目标检测模型。目标检测的具体表现为在图中找到指定的物体,要求识别种类,并且标出位置。显然,类别是离散数据,位置是连续数据YOLO指,只需要浏览一次就可以识别出图中物体的类别,由于只需要看一次,它不需要提前找到可能存在目标的区域.通常的Region-base是先对图片分析,找出可能存在物体的区域,再裁剪下来放入图片 分类器,由分类器来分类,这是两阶段模型而YOLO由于只有一次扫描所以称为单阶段模型.也就是因为如此,它可以做视频检测YOLO原理需要检测的每个物体信息有五个,分别是中心位置坐标xy,高,宽,类别YOLO的第一步是分割图片,把图片分为平方数个方框与普通的滑窗法不同的在于,它并不要求物体全部位于框中,只要求物体中心位于框中具体实现我们要让这个 个框每个都预测出B个bounding box(就是捕捉到物体,物体的标示框框),这个bounding box有5个量,分别是物体的中心位置(x,y)和它的高(h)和宽(w),以及这次预测的置信度。每个框框不仅只预测B个bounding box,它还要负责预测这个框框中的物体是什么类别的,这里的类别用one-hot编码表示。需要注意的是, 注意,虽然一个框框有多个bounding boxes,但是只能识别出一个物体,因此每个框框需要预测物体的类别,而bounding box不需要。也就是说,如果我们有 个框框,每个框框的bounding boxes个数为B,分类器可以识别出C种不同的物体,那么所有整个ground truth的长度为:( ground truth指的是真实有效值,标准的答案) 也就是,s²个框,每个里面有B个框,B个框每个有5个有效信息,加上每个大框都可以识别出C种不同的物体注意,bounding box不一定比S框要小,甚至要大,也有可能跨框置信度高的框比较粗,低的就比较细bounding box可以锁定物体的位置,这要求它输出四个关于位置的值,分别是x,y,h和w。我们在处理输入的图片的时候想让图片的大小任意,这一点对于卷积神经网络来说不算太难,但是,如果输出的位置坐标是一个任意的正实数,模型很可能在大小不同的物体上泛化能力有很大的差异。泛化能力指,机器学习算法对新鲜样本的适应能力这时候当然有一个常见的套路,就是对数据进行归一化,让连续数据的值位于0和1之间。对于x和y而言,这相对比较容易,毕竟x和y是物体的中心位置,既然物体的中心位置在这个grid之中,那么只要让真实的x除以grid的宽度,让真实的y除以grid的高度就可以了。但是h和w就不能这么做了,因为一个物体很可能远大于grid的大小,预测物体的高和宽很可能大于bounding box的高和宽,这样w除以bounding box的宽度,h除以bounding box的高度依旧不在0和1之间。解决方法是让w除以整张图片的宽度,h除以整张图片的高度。confidence的计算公式是:这个IOU的全称是intersection over union,也就是交并比,它反应了两个框框的相似度。显然就是,两个框框都有的部分比上两个框框并起来的部分 的意思是预测的bounding box和真实的物体位置的交并比。 是一个grid有物体的概率,在有物体的时候ground truth为1,没有物体的时候ground truth为0.这个 非常有意思,因为它的ground truth不是确定的,这导致虽然 的ground truth是确定的,但是bounding box的confidence的ground truth是不确定的。一个不确定的ground truth有什么用呢?想象这样的问题:老师问小明1+1等于几。小明说等于2,老师又问你有多大的把握你的回答是对的,小明说有80%这里的80%就是confidence。这里不直接用 来表示confidence,因为会不太精确,效果不太理想但是理论上来说其实是可以的,为了解决不太精确的问题,故再乘上一个 ,因为概率非0即1,所以可以通过在后面乘上一个值来区分置信度,让不太可信的框框的置信度因为乘上交并比而尽量变小这样看似可以让每个grid找到负责的物体,并把它识别出来了。但是还存在一个不得不考虑的问题,如果物体很大,而框框又很小,一个物体被多个框框识别了怎么办?这里,我们要用到一个叫做非极大值抑制Non-maximal suppression(NMS)的技术。这个NMS还是基于交并比实现的。例如,一个物体在图里占的比例很大,跨了好几个grid,那几个grid都认为物体在我这个框里,但是最后输出只能有一个框框那么这时候用到confidence,它表示的就是我有多大把握这个物体在我的框里,我们选择一个最自信的我们是怎么判断出这几个bounding boxes识别的是同一个物体的呢?这里用到NMS的技巧,我们首先判断这几个grid的类别是不是相同的,假设上面的B1,B2,B3和B4识别的都是狗狗,那么进入下一步,我们保留B1,然后判断B2,B3和B4要不要删除。我们把B1成为极大bounding box,计算极大bounding box和其他几个bounding box的IOU,如果超过一个阈值,例如0.5,就认为这两个bounding box实际上预测的是同一个物体,就把其中confidence比较小的删除。最后,我们结合极大bounding box和grid识别的种类,判断图片中有什么物体,它们分别是什么,它们分别在哪。我们刚才说confidence有两个功能,一个是用来极大值抑制,另一个就是在最后输出结果的时候,将某个bounding box的confidencd和这个bounding box所属的grid的类别概率相乘,然后输出。举个例子,比如某个grid中的某个bounding box预测到了一个物体,将这个bounding box送入神经网络(其实是整张图片一起送进去的,我们这样说是为了方便),然后神经网络对bounding box说,你这里有一个物体的概率是0.8.然后神经网络又对grid说,你这个grid里物体最可能是狗,概率是0.7。那最后这里是狗的概率就是 。yolo的损失函数是这样的:首先, 代表的是这个grid里有没有物体,如果这个grid没有物体, ,反之 。与 相反的是 ,如果没有物体, ,反之 。说白了就是,当一个grid有物体的时候,损失函数计算第1,2,3,5项,当grid里没有物体的时候计算第4项。损失函数一共有5项,我们一项一项的分析。首先的是中心坐标的损失函数,用了我们最熟悉的均方误差MSE(反映估计量与被估计量之间差异成都的一种度量),这个很好理解。然后是高和宽,没有简单的用MSE,而是用平方根的MSE,这是为什么呢?第一个原因是更容易优化,但是还有更重要的原因:看下面的表格:首先,我们只考虑var1和var2在0和1之间。当var1和var2都很小的时候,也即是w和h都很小,意味着这个物体很小,那么我们应该尽量放大一些损失函数,让模型在识别小物体的时候准确一点。当var1和var2都很大,意味着这个物体也很大,甚至可能已经布满整张图片了,这时我么可以减小一些损失函数,毕竟很大的物体不需要很高的精度。一句话,使用平方根的MSE而不是MSE其实就是像让模型对小尺度的物体更敏感。或者说,对大的和小的物体同样敏感。接下来的三项都使用了MSE,其实用交叉熵可能会更好,但是这些细节就不追究了。其中第4项是用来判断一个bounding box中究竟有没有物体的。接下来的问题是 和 都应该取怎样的值,为什么这样设计?论文中给出的答案是 和 ,也就是放大第一项和第二项的损失函数,缩小第四项的损失函数。这样做的原因是让梯度更稳定,如果grid中不含有物体,它对1,2,3,5项没有影响,如果调节第四项,会让含有物体的grid的confidence发生改变,这可能使其他项的梯度剧烈变化,从而带来模型上的不稳定。因此,我们放大第一项和第二项,缩小第四项。YOLO的设计虽然精巧,但是还有许多不足的地方,比如一个grid只能识别出一种物体。我们会在YOLO v2和YOLO v3中看到更巧妙的设计。此外,YOLO的bounding box的预测准确度是不如R-CNN这样的Region-based方法的,看YOLO v2里作者们怎么报复回来。--------------------------------------------------------------------------YOLO v2
v1版本,检测速度快,但定位不够准确,召回率较低(也就是对于该类样本而言有多少被预测正确了),保持原有速度,精度提升,作者提出了一种目标分类与检测的联合训练方法,如此,YOLOv2可以同时在COCO 和ImageNet数据集中进行训练,训练后的模型可以实现多达9000种物体的实时检测。
YOLO v2 介绍
下面依次来看一下作者在YOLO v2中做出的几点尝试

(1)Batch Normalization(批归一化)
YOLO v2中在每个卷积层后加Batch Normalization(BN)层,去掉了dropout层。 Batch Normalization层可以起到一定的正则化( 可以改善或者减少过度拟合问题,进而增强泛化能力。)效果,能提升模型收敛速度,防止模型过拟合。YOLO v2通过使用BN层使得mAP提高了2%。
mAP( Mean Average Precision,平均精准率的平均)
(2)High Resolution Classifier(高分辨率预训练分类网络)
目前的大部分检测模型都会使用主流分类网络(如vgg、resnet)在ImageNet上的预训练模型作为特征提取器,而这些分类网络大部分都是以小于256 × 256 256×256256×256的图片作为输入进行训练的,低分辨率会影响模型检测能力。 YOLO v2将输入图片的分辨率提升448 × 448 448×448448×448,为了使网络适应新的分辨率,YOLO v2先在ImageNet上以448 × 448 448×448448×448的分辨率对网络进行10个epoch的微调,让网络适应高分辨率的输入。通过使用高分辨率的输入,YOLO v2的mAP提升了约4%。
(Epoch
一个epoch , 表示: 所有的数据送入网络中, 完成了一次前向计算 + 反向传播的过程。

由于一个epoch 常常太大, 分成 几个小的 baches .

将所有数据迭代训练一次是不够的, 需要反复多次才能拟合、收敛。

在实际训练时、 将所有数据分成多个batch , 每次送入一部分数据。

使用单个epoch 更新权重 不够。

随着epoch 数量的增加, 权重更新迭代的次数增多, 曲线从最开始的不拟合状态, 进入优化拟合状态, 最终进入过拟合。

epoch 如何设置: 大小与数据集的多样化程度有关, 多样化程度越强, epoch 越大。

(3)Convolutional With Anchor Boxes(带Anchor Box的卷积)
YOLO v1利用全连接层直接对边界框进行预测,导致丢失较多空间信息,定位不准。 YOLO v2去掉了 YOLO v1中的全连接层,使用Anchor Boxes预测边界框,同时为了得到更高分辨率的特征图, YOLO v2还去掉了一个池化层。由于图片中的物体都倾向于出现在图片的中心位置,若特征图恰好有一个中心位置,利用这个中心位置预测中心点落入该位置的物体,对这些物体的检测会更容易。所以总希望得到的特征图的宽高都为奇数。 YOLO v2通过缩减网络,使用416 × 416 416×416416×416的输入,模型下采样的总步长为32 3232,最后得到13 × 13 13×1313×13的特征图,然后对13 × 13 13×1313×13的特征图的每个cell预测5 55个anchor boxes,对每个anchor box预测边界框的位置信息、置信度和一套分类概率值。使用anchorboxes之后, YOLO v2可以预测13 × 13 × 5 = 845 13 × 13 × 5=84513×13×5=845个边界框,模型的召回率由原来的81%提升到88%,mAP由原来的69.5%降低到69.2%.召回率提升了7%,准确率下降了0.3%。

(4)Dimension Clusters(Anchor Box的宽高由聚类产生)
在Faster R-CNN和SSD中,先验框都是手动设定的,带有一定的主观性。 YOLO v2采用k-means聚类算法对训练集中的边界框做了聚类分析,选用boxes之间的IOU值作为聚类指标。综合考虑模型复杂度和召回率,最终选择5 55个聚类中心,得到5 55个先验框,发现其中中扁长的框较少,而瘦高的框更多,更符合行人特征。通过对比实验,发现用聚类分析得到的先验框比手动选择的先验框有更高的平均IOU值,这使得模型更容易训练学习。

(5)New Network:Darknet-19
YOLO v2采用Darknet-19,其网络结构如下图所示,包括19 1919个卷积层和5 55个max pooling层,主要采用3 × 3 3×33×3卷积和1 × 1 1×11×1卷积,这里1 × 1 1×11×1卷积可以压缩特征图通道数以降低模型计算量和参数,每个卷积层后使用BN层以加快模型收敛同时防止过拟合。最终采用global avg pool 做预测。采用 YOLO v2,模型的mAP值没有显著提升,但计算量减少了。

(6)Direct location prediction(绝对位置预测)
Faster R-CNN使用anchor boxes预测边界框相对先验框的偏移量,由于没有对偏移量进行约束,每个位置预测的边界框可以落在图片任何位置,会导致模型不稳定,加长训练时间。 YOLO v2沿用 YOLO v1的方法,根据所在网格单元的位置来预测坐标,则Ground Truth的值介于0到1之间。网络中将得到的网络预测结果再输入sigmoid函数中,让输出结果介于0到1之间。设一个网格相对于图片左上角的偏移量是c x , c y cx,cycx,cy。先验框的宽度和高度分别是p w 和 p h pw和phpw和ph,则预测的边界框相对于特征图的中心坐标( b x , b y ) (bx,by)(bx,by)和宽高b w 、 b h bw、bhbw、bh的计算公式如下图所示。

YOLO v2结合Dimention Clusters, 通过对边界框的位置预测进行约束,使模型更容易稳定训练,这种方式使得模型的mAP值提升了约5%。

(7)Fine-Grained Features(细粒度特征)
YOLO v2借鉴SSD使用多尺度的特征图做检测,提出pass through层将高分辨率的特征图与低分辨率的特征图联系在一起,从而实现多尺度检测。 YOLO v2提取Darknet-19最后一个max pool层的输入,得到26 × 26 × 512 26×26×51226×26×512的特征图。经过1 × 1 × 64 1×1×641×1×64的卷积以降低特征图的维度,得到26 × 26 × 64 26×26×6426×26×64的特征图,然后经过pass through层的处理变成13x13x256的特征图(抽取原特征图每个2x2的局部区域组成新的channel,即原特征图大小降低4倍,channel增加4倍),再与13 × 13 × 1024 13×13×102413×13×1024大小的特征图连接,变成13 × 13 × 1280 13×13×128013×13×1280的特征图,最后在这些特征图上做预测。使用Fine-Grained Features, YOLO v2的性能提升了1%.

passthroug具体是怎么1拆4的呢?并不是简单的“两刀切4块”,而是在每个2 × 2 2×22×2的小区域上都选择左上角块,具体看下图。

(8)Multi-Scale Training(多尺寸训练)
YOLO v2中使用的Darknet-19网络结构中只有卷积层和池化层,所以其对输入图片的大小没有限制。 YOLO v2采用多尺度输入的方式训练,在训练过程中每隔10个batches,重新随机选择输入图片的尺寸,由于Darknet-19下采样总步长为32,输入图片的尺寸一般选择32 3232的倍数{320,352,…,608}。采用Multi-Scale Training, 可以适应不同大小的图片输入,当采用低分辨率的图片输入时,mAP值略有下降,但速度更快,当采用高分辨率的图片输入时,能得到较高mAP值,但速度有所下降。

YOLO v2借鉴了很多其它目标检测方法的一些技巧,如Faster R-CNN的anchor boxes, SSD中的多尺度检测。除此之外, YOLO v2在网络设计上做了很多tricks,使它能在保证速度的同时提高检测准确率,Multi-Scale Training更使得同一个模型适应不同大小的输入,从而可以在速度和精度上进行自由权衡。

YOLO v2的训练
YOLO v2的训练主要包括以下三个阶段:
第①阶段:先在ImageNet分类数据集上预训练Darknet-19,此时模型输入为224 × 224 224\times 224224×224,共训练160 160160个epochs。
第②阶段:将网络的输入调整为448 × 448 448\times 448448×448,继续在ImageNet数据集上finetune分类模型,训练10 1010个epochs,此时分类模型的top-1准确度为76.5%,而top-5准确度为93.3%。
第③个阶段:修改Darknet-19分类模型为检测模型:即移除最后一个卷积层、global avgpooling层以及softmax层,并且新增了三个3 × 3 × 2014 3\times 3 \times 20143×3×2014卷积层,同时增加了一个passthrough层,最后使用1 × 1 1\times 11×1卷积层输出预测结果,并在检测数据集上继续finetune网络。

YOLO 9000
发表时间:2017

YOLO 9000与YOLO v2的区别

YOLO 9000是在 YOLO v2的基础上提出的一种新的联合训练方法,YOLO 9000可以检测超过9000个类别的模型,所以被称为YOLO 9000。 YOLO v2混合了目标检测数据集和分类数据集,用目标检测数据集及其类别标记信息和位置标注信息训练模型学习预测目标定位和分类,用分类数据集及其类别标记信息进一步扩充模型所能识别的物体类别同时能增强模型的鲁棒性。

  1. YOLO 9000是怎么组织数据的?
    YOLO9000根据各个类别之间的从属关系建立一种树结WordTree, 将COCO数据集和ImageNet数据集组织起来。

WordTree的生成方式如下:

①首先遍历ImageNet中的类别名词。

②对每个名词,在WordNet(一种结构化概念及概念之间关系的语言数据库)上找到从它所在位置到根节点(设根节点为实体对象physical object)的最短路径,由于在WordNet中大多数同义词只有一个路径,所以先把将该路径上的词全都加到树中。

③迭代地检查剩下的名词,取它到根节点的最短路径,将该最短路径上的还没出现在层次树中的词加入到树中。
混合后的数据集形成一个有9418类的WordTree。生成的WordTree模型如下图所示。另外考虑到COCO数据集相对于ImageNet数据集数据量太少了,为了平衡两个数据集,作者进一步对COCO数据集过采样,使COCO数据集与ImageNet数据集的数据量比例接近1 : 4 1:41:4。

对于物体的标签,采用one-hot编码的形式,数据集中的每个物体的类别标签被组织成1个长度为9418的向量,向量中除在WordTree中从该物体对应的名词到根节点的路径上出现的词对应的类别标号处为1,其余位置为0。

  1. YOLO 9000是怎么进行联合训练的?
    YOLO9000采用 YOLO v2的结构,anchorbox由原来的5调整到3,对每个anchorbox预测其对应的边界框的位置信息x , y , w , h x,y,w,hx,y,w,h和置信度以及所包含的物体分别属于9418类的概率,所以每个anchorbox需要预测4 + 1 + 9418 = 9423 4 + 1 + 9418 = 94234+1+9418=9423个值。每个网格需要预测3 × 9423 = 28269 3 × 9423 = 282693×9423=28269个值。在训练的过程中,当网络遇到来自检测数据集的图片时,用完整的 YOLO v2 loss进行反向传播计算,当网络遇到来自分类数据集的图片时,只用分类部分的loss进行反向传播。

  2. YOLO 9000是怎么预测的?
    WordTree中每个节点的子节点都属于同一个子类,分层次的对每个子类中的节点进行一次softmax处理,以得到同义词集合中的每个词的下义词的概率。当需要预测属于某个类别的概率时,需要预测该类别节点的条件概率。即在WordTree上找到该类别名词到根节点的路径,计算路径上每个节点的概率之积。预测时, YOLO v2得到置信度,同时会给出边界框位置以及一个树状概率图,沿着根节点向下,沿着置信度最高的分支向下,直到达到某个阈值,最后到达的节点类别即为预测物体的类别。

YOLO9000使用WordTree混合目标检测数据集和分类数据集,并在其上进行联合训练,使之能实时检测出超过9000 90009000个类别的物体,其强大令人赞叹不已。YOLO9000尤其对动物的识别效果很好,但是对衣服或者设备等类别的识别效果不是很好,这里笔者猜测可能的原因是与目标检测数据集中的数据偏向有关。
————————————————
版权声明:本文为CSDN博主「迪菲赫尔曼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43694096/article/details/123523679
https://blog.csdn.net/weixin_40964777/article/details/122075419

MASK-RCNN
集成物体检测和实例分割,性能超越 Faster-RCNN
在Faster-RCNN的基础之上,Mask-RCNN加入了Mask branch(FCN)(掩码分支)用于生成物体的掩模(object mask), 同时把RoI pooling (输入特征图尺寸不一但是输出特征图尺寸固定)修改成为了RoI Align 用于处理mask与原图中物体不对齐的问题。因为在提取feature maps(特征地图,在每个卷积层,数据都是以三维形式存在的,可以看成多个二维图片叠在一起,一个二维图片即为一个feature map,它是卷积核卷出来的,可以理解成,从多个角度去分析图片)的主干conv layers(卷积层)中不好把FPN(特征金字塔,也就是通过输入不同尺寸的图像,来构建不同尺度的特征金字塔,也就是对于每个尺寸的图像都进行特征提取,无论高或低分辨,大目标或小目标)的结构绘制进去,所有在架构中就没有体现出了FPN的作用。

Mask R-CNN 是一个两阶段的框架,实现了像素级分割(像素级指的是级别,像素指的是分辨率),第一个阶段扫描图像并生成提议(proposals,即有可能包含一个目标的区域,分类标签+窗口),第二阶段分类提议并生成边界框和掩码,也就是生成目标轮廓。
对每个目标对象输出分类标签和候选窗口,为了分割目标像素,我们可以在前两个的基础上加第三个输出,也就是指示对象在窗口中位置的二进制掩模(掩模是由0和1组成的一个二进制图像,1值区域被处理,被屏蔽的0值区域不被包括在计算中。)。为此,它在fast上添加了一个分支网络FCN

FCN是一种流行的语义分割算法,它首先通过卷积(卷积本质是一种特殊的积分变换,)和最大池化层(一是对卷积层所提取的信息做更一步降维,减少计算量)
3 最大池化的特点
1 最大池化(max-pooling)即取局部接受域中值最大的点。
2 最大值池化的优点在于它能学习到图像的边缘和纹理结构。
3 根据相关理论,特征提取的误差主要来自两个方面:
(1)邻域大小受限造成的估计值方差增大;
(2)卷积层参数误差造成估计均值的偏移。
一般来说,mean-pooling能减小第一种误差,更多的保留图像的背景信息,max-pooling能减小第二种误差,更多的保留纹理信息。与mean-pooling近似,在局部意义上,则服从max-pooling的准则。

二是加强图像特征的不变性,使之增加图像的偏移、旋转等方面的鲁棒性)把输入图像压缩到原始大小的1/32,然后在这个细粒度级别进行分类预测,最后再用上采样和deconvolution层把图还原成原始大小

模型的损失函数计算的是分类、生成窗口、生成掩模的总损失。

它便是通过滑窗法,

作为特征提取器,底层检测的是低级特征,如边缘和角,高层检测的是更高级的特征,如车 ,人等
FPN 通过添加第二个金字塔提升了标准特征提取金字塔的性能,第二个金字塔可以从第一个金字塔选择高级特征并传递到底层上。通过这个过程,它允许每一级的特征都可以和高级、低级特征互相结合。

对比
Mask R-CNN(慢一些https://zhuanlan.zhihu.com/p/432100214)

Mask R-CNN算法步骤:
1.输入一张图片,进行数据预处理(尺寸,归一化等等)
2.将处理好的图片传入预训练的神经网络中(ResNet等,优秀的主干特征提取网络,这里也就是CNN)获得相应的feature map。
3.通过feature map中的每一点设定ROI,获得多个ROI候选框
4.对这些多个ROI候选框送到RPN中进行二值分类(前景或后景,也就是图像二值化,变成黑白01)和BB回归(Bounding-box regression,边框回归,边框回归是用来微调Region Proposal,使其与ground truth更接近 ),过滤掉一部分候选的ROI。
5.对剩下的ROI进行ROI Align操作(即先将原图和feature map的pixel像素对应起来,然后将feature map和固定的feature对应起来)
6.对这些ROI进行分类(N类别分类),BB回归和Mask生成(在每一个ROI里面进行FCN操作)。
————————————————

Mask R-CNN完成了以下任务:
目标检测:用边界框框出目标物体。
目标分类:对于每一个目标,需要找到对应的类别(class),区分到底是人,是车,还是其他类别。
目标分割:在每个目标中,需要在像素层面区分,什么是前景,什么是背景。实例分割不仅要正确的找到图像中的objects,还要对其精确的分割。所以Instance Segmentation可以看做object dection和semantic segmentation的结合。

上图:CNN 卷积神经网络
RPN: 区域候选网络
ROI:region of interest 感兴趣的区域

(一)、convolutional backbone
convolutional backbone是一系列的卷积层用于提取图像的feature maps,比如可以是VGG16,VGG19,GooLeNet,ResNet50,ResNet101等。这里主要使用的是ResNet101(残差神经网络)的结构。
(二)、FPN,即Feature Pyramid NetWork,特征金字塔网络
结构的优势是其产生的特征每一层都是语义信息加强的,包括高分辨率的低层。
不同的金字塔有不同的特征提取结构

(a):图a是最原始的图像金字塔网络,原理是将图像做成不同尺寸,然后将不同尺寸的图像生成对应不同尺寸的特征,显然,时间成本大大增加了。这种方法所使用的特征通常是传统图像处理领域的特征,而面对深度网络的训练时,图像金字塔常常使GPU力不从心,也就是速度慢
(b):图b体现的是单个特征图,同时是网络最后一层的特征。我们知道不同层的特征图尺度就不同,金字塔的特征提取结构虽不错,但是前后层之间由于不同深度影响,语义信息差距太大,主要是高分辨率的低层特征很难有代表性的检测能力,所以在某些模型结构中,我们仅使用最后一层的特征。例如:SPP Net,Fast R-CNN,Faster R-CNN。(对小目标不友好)
(c):图c参考a,b的原理后保留了特征金字塔中高层的特征,高分辨率低层,同时,没有使用上采样减少了计算资源的多余使用,但是他丢弃了分辨率最高的低层特征,导致在小目标的检测效果不理想。(小目标容易被错分)
(d):图d是我们主要阐述的特征金字塔网络,也就是在Mask R-CNN中所使用的金字塔结构,顶层特征通过上采样和低层特征做融合,而且每层都是独立预测的。
融合特征图的时候,横向连接的两层特征要保证相同的空间尺寸
————————————————
在FPN中采用的不同的特征图需要选取都是2倍关系,例如最底层的特征图大小为28x28,则其上一层的特征图大小为14x14,最上层的为7x7。

每一个特征图都会对其采用1x1的卷积层进行处理,调整backbone(骨干)上不同特征图的channel(通道),为了融合保证channel相同。

对于最初输入图片样本的通道数 in_channels 取决于图片的类型,如果是彩色的,即RGB类型,这时候通道数固定为3,如果是灰色的,通道数为1。
卷积完成之后,输出的通道数 out_channels 取决于过滤器的数量。从这个方向理解,这里的 out_channels 设置的就是过滤器的数目。
对于第二层或者更多层的卷积,此时的 in_channels 就是上一层的 out_channels , out_channels 还是取决于过滤器数目。
https://blog.csdn.net/weixin_38481963/article/details/109920512
————————————————

对高层次的特征图进行2倍上采样,如对最上层7x7大小的特征图进行2倍上采样,得到14x14的特征图,从而保证与中间层特征图的尺寸大小相同。

上两步处理后,最高层与中间层的特征图的shape完全相同,就可以进行add操作。
add即为融合特征,是特征图相加,通道数不变
简言之,add是将多次提取到的语义信息叠加,会突出正确分类的比例,有利于最后分类,实现了正确分类的高激活

然后将融合得到的特征图再进行2倍上采样,与经过1x1卷积后的最底层特征图进行add操作。

Mask R-CNN是基于Faster R-CNN修改而来的。 具体来说,Mask R-CNN将兴趣区域汇聚层替换为了 兴趣区域对齐层,使用双线性插值(bilinear interpolation,双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。此算法减少了由于将图像调整大小为非整数缩放因子而导致的某些视觉失真,简单来说,我要求一个已知坐标的像素值,先去找他四个周围已知像素的坐标,通过两次单线性插值,找到他的像素值是多少https://blog.csdn.net/eurus_/article/details/102755898,由于使用了ROLAlign代替原来的ROLpooling,ROLpooling计算的时候存在近似,对浮点结果的像素直接近似为整数,这对分类而言结果不大,也就是平移不变性,说白了就是一个图像每一个点都移动一样的最后图像是什么物体并不变化,但是新引入的Mask分割来讲,影响很大,形成结果不许确,因此引入了RoI Align,对浮点的像素,使用其周围4个像素点进行双线性插值,获得该浮点像素的估计值,这样使结果更加准确)来保留特征图上的空间信息,从而更适于像素级预测。 兴趣区域对齐层的输出包含了所有与兴趣区域的形状相同的特征图。 它们不仅被用于预测每个兴趣区域的类别和边界框,还通过额外的全卷积网络预测目标的像素级位置。
YOLO(就是快且不精准)


版权声明:本文为m0_45056394原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。