摘要:机器视觉检测技术在图像处理上演化出图像分类、目标检测、语义分割以及实例分割等 4 种任务类型,图像分类任务确定图像归属类别,输出图像标签;目标检测任务确定目标图像归属类别又获取目标位置,输出目标类别标签与位置;语义分割任务确定图像像素类别,输出不区分个体的分割
机器视觉检测技术在图像处理上演化出图像分类、目标检测、语义分割以及实例分割等 4 种任务类型,图像分类任务确定图像归属类别,输出图像标签;目标检测任务确定目标图像归属类别又获取目标位置,输出目标类别标签与位置;语义分割任务确定图像像素类别,输出不区分个体的分割掩模;实例分割完成图像分类、目标检测、语义分割三个基本任务,输出目标类别、位置与区分个体掩膜。
实例分割 (Instance Segmentation) 是一种更精细的图像分割技术,它不仅能够将图像分割成不同的类别,还能区分同一类别中的不同实例,例如将图像中的每辆车都分割出来,即使它们属于同一类别。
Mask R-CNN结构与流程
Mask R-CNN是一种用于实例分割(Instance Segmentation)的深度学习模型,它是在Faster R-CNN的基础上进行改进而来的。Mask R-CNN不仅可以检测图像中的对象,还可以为每个检测到的对象生成一个像素级的分割掩模(mask),从而实现对对象的精确分割。
Mask R-CNN的网络结构为:
骨干网络(Backbone Network)通常使用ResNet(如ResNet-50,ResNet-101,ResNeXt-50,ResNeXt-101)或者其他类似的卷积神经网络作为特征提取器;区域建议网络(Region Proposal Network,RPN)用于生成候选对象边界框;头部网络(Mask Head)用于为每个候选对象生成像素级的分割掩模。头部网络,包括边界框识别(分类和回归)+mask预测。掩模区域是图像处理中用于定义特定图像区域的概念。掩模区域通常由一个二值图像表示,其中白色像素表示相关区域,黑色像素则表示无关区域。通过与原始图像进行逐像素操作,可以实现对掩模区域内的特定像素进行处理,而将掩模区域外的像素保持不变。二值图像,顾名思义,就是图像内只有两种像素值,通常情况下是0和1,就是纯黑纯白的两色图像。
Backbone通过一系列的卷积对图像中的目标物体进行特征提取,随着网络层数的不断加深,获取的特征信息也越来越丰富,会造成梯度爆炸和梯度消失的问题,阻碍网络的收敛,模型出现退化现象。ResNet 通过 shortcut 支路将输入直接连接到后边的网络层,保护特征信息的完整性,解决了退化问题。FPN 结合了底层网络和高层网络的特征,可以获取准确的语义信息和检测目标位置信息 。
原始图像经过ResNet和FPN处理得到Feature Map,同时将目标物体特征信息输入 RPN 中。RPN 对特征图上的 anchor point 生成不同大小的anchor boxes,将 anchor boxes 输入到网络层,通过二分类方法来判断每个anchor box 是属于foreground 还是background,得到目标物体相应的 anchor boxes。
对每个候选对象边界框,Mask Head生成一个二值掩模,用于精确分割对象,同时输出类别及位置信息。
Mask R-CNN与Faster R-CNN
Mask R-CNN对 Faster R-CNN 进行扩展,在图像中每个感兴趣区域 RoI 上添加一个用于预测分割掩码的分支,与 Faster R-CNN 原有的分类和回归分支并行。
Faster R-CNN 使用 RoI Pooling 实现了感兴趣区域从原图区域到卷积区域的映射,并将其池化到固定大小,最终将输入区域的尺寸归一化成卷积网络的输入尺寸。在归一化的过程当中,无法避免出现 RoI 和提取特征不重合的现象,从而导致特征丢失。
Mask R-CNN 中提出了 RoIAlign 的概念,解决了这一问题。使用 RoIAlign 层对提取的特征和输入的感兴趣区域之间进行校准,即采用双线性内插法计算在 RoI 中固定的四个采样位置得到的输入特征值,并对结果进行融合。
RoI Pooling
取一个尺寸为 512x512x3 (宽度x高度x RGB) 的图像输入,VGG16将其映射为一个 16x16x512 的feature map。它的宽度和高度正好比输入图像小32倍(512/32 = 16)。所有 RoIs 都要按这个因子减小。
其原始大小为 145x200 ,左上角坐标为 (192x296) 。无法将这些数字的大部分整除以 32(比例因子)。
- width: 200/32 = 6.25
- height: 145/32 =4.53
- x: 296/32 = 9.25
- y: 192/32 = 6
Fast R-CNN 中,在 RoI池化层之后是一个固定大小的全连接层。因为RoIs的大小不同,所以要池化为相同的大小(例如3x3x512)。此时映射的RoI大小为 4x6x512,这里4除以3不为整数,需要再次量化。此时又损失了最后一行的数据。
最终损失了蓝色区域的数据,增添了绿色区域的数据。
RoI Align
直接将原始RoI分成9个等大小的小格子,并在每个格子内应用双线性插值。创建四个采样点,然后应用双线性插值对这个方框进行数据采样。
RoIAlign 很好地解决了Faster R-CNN 中RoI Pooling在归一化的过程当中,无法避免出现 RoI 和提取特征不重合的现象,从而导致特征丢失的问题。
RoI Align增添了绿色部分的数值
基于openMind Library,在魔乐社区中的实践
Mask R-CNN 在魔乐社区中的使用教程
Mask R-CNN 是一种强大的深度学习模型,用于实例分割任务,能够在图像中识别和分割多个对象。在魔乐社区中,你可以轻松地下载并使用预训练的 Mask R-CNN 模型,或者使用自己的数据集进行微调。
在魔乐社区中,你可以直接使用预训练的 Mask R-CNN 模型,
这些模型已经在 COCO 数据集上进行了训练。
(1)直接使用:我们可以直接在模型主页点击Use in openmind,由于openmind与魔乐社区的高度融合,我们可以直接在开发环境里使用对应的openMind Library来加载所需要的模型,下图为示例
(2)下载到本地:此方法可以直接将模型下载到本地,只需要使用git工具即可将社区中的模型下载到本地使用以及微调
点击下载模型
准备数据集:如果你有自己的数据集,需要将其格式化为 Mask R-CNN 可以处理的格式。每个图像应该有对应的标注文件,包含对象的类别和掩码。
加载预训练权重:使用预训练的权重初始化模型,这可以加速训练过程并提高模型性能。
训练模型:使用训练集数据训练模型。你可以先训练头部层(即分类和分割层),然后再微调整个网络。
保存模型:训练完成后,保存模型权重以便后续使用。
创建推理模型:使用训练好的模型权重创建一个新的推理模型。
进行预测:使用模型对图像进行预测,获取对象的边界框和掩码。
在魔乐社区中使用 Mask R-CNN 进行实例分割是一个简单而高效的过程。通过上述步骤,你可以快速地利用预训练模型,或者使用自己的数据集进行微调,以满足特定的应用需求。
体验空间
在魔乐社区中有体验模型的功能,打开对应的体验空间即可体验。
本模型对应的体验空间链接:DataFun/Faster_Mask_RCNN | 魔乐社区
模型可实现根据输入的图片,从而识别出图片所对应物体是什么类别,视觉识别可以将自然界的物体识别出来,在一些领域甚至高于人类的视觉能力,对各行各业的发展有重大意义。
示例中放入了一张集装箱船的图片,识别出为集装箱船:
输入不同角度、不同大小的集装箱船,同样可以实现识别出集装箱船:
在魔乐社区,获取并应用Mask R-CNN模型变得异常便捷。无论是进行图像实例分割的研究还是实际项目开发,你都可以轻松下载预训练的Mask R-CNN模型,并根据自己的数据集进行快速微调。魔乐社区提供了一个用户友好的平台,让你能够专注于模型的应用和创新,而不是繁琐的配置和环境搭建。通过简化的下载流程和直观的操作指引,即使是初学者也能迅速上手,将这一强大的深度学习技术应用于自己的项目中。
来源:DataFunTalk