【Mask-RCNN】基于Mask-RCNN的目标检测和识别

      Mask-RCNN 是何凯明继Faster-RCNN后的又一力作,集成了物体检测和实例分割两大功能,并且在性能上上也超过了Faster-RCNN。其基本结构如下:

【Mask-RCNN】基于Mask-RCNN的目标检测和识别_第1张图片

        Mask R-CNN是一个实例分割模型,它能确定图片中各个目标的位置和类别,给出像素级预测。所谓“实例分割”,指的是对场景内的每种兴趣对象进行分割,无论它们是否属于同一类别——比如模型可以从街景视频中识别车辆、人员等单个目标。下图是在COCO数据集上训练好的Mask R-CNN,如图所示,大到每一辆车,小到单根香蕉,它都能用窗口标出目标物品在画面中的像素位置。

      不同于Faster R-CNN这样的经典对象检测模型,Mask R-CNN的一个特点是可以给窗口内表示对象轮廓的像素着色。可能有人会觉得这是个鸡肋功能,但它对自动驾驶汽车和机器人控制意义非凡:

着色可以帮助汽车明确道路上各目标的具体像素位置,从而避免发生碰撞;

如果机器人想抓取某个目标物品,它就需要知道位置信息(如亚马逊的无人机)。

如果只是单纯想在COCO上训练Mask R-CNN模型,最简单的方法是调用Tensorflow Object Detection API,具体内容Github都有,此处不再详谈。

Mask R-CNN的工作原理

在构建Mask R-CNN模型之前,我们首先来了解一下它的工作机制。

事实上,Mask R-CNN是Faster R-CNN和FCN的结合,前者负责物体检测(分类标签+窗口),后者负责确定目标轮廓。如下图所示:

它的概念很简单:对于每个目标对象,Faster R-CNN都有两个输出,一是分类标签,二是候选窗口;为了分割目标像素,我们可以在前两个输出的基础上增加第三个输出——指示对象在窗口中像素位置的二进制掩模(mask)。和前两个输出不同,这个新输出需要提取更精细的空间布局,为此,Mask R-CNN在Faster-RCNN上添加一个分支网络:Fully Convolution Networ(FCN)。

FCN是一种流行的语义分割算法,所谓语义分割,就是机器自动从图像中分割出对象区域,并识别其中的内容。该模型首先通过卷积和最大池化层把输入图像压缩到原始大小的1/32,然后在这个细粒度级别进行分类预测。最后,它再用上采样和deconvolution层把图还原成原始大小。

因此简而言之,我们可以说Mask R-CNN结合了两个网络——把Faster R-CNN和FCN纳入同一巨型架构。模型的损失函数计算的是分类、生成窗口、生成掩模的总损失。


由于MASK-RCNN训练时间较长,我们使用matlab提供的训练后的MASK-RCNN进行测试,下载

https://www.mathworks.com/supportfiles/vision/data/maskrcnn_pretrained_person_car.mat

这个是训练好的可以识别车辆和行人的MASK-RCNN模型。训练好的模型,其数据如下:

【Mask-RCNN】基于Mask-RCNN的目标检测和识别_第2张图片

targetSize = [700 700 3];
imgSize    = size(img);
[~, maxDim]= max(imgSize);
resizeSize = [NaN NaN]; 
resizeSize(maxDim) = targetSize(maxDim);
img        = imresize(img, resizeSize);

trainSize  = [800 800 3];
classNames = {'person','car','background'};
numClasses = 2;
params     = createMaskRCNNConfig(trainSize, numClasses, classNames);
Envs       = "cpu";
 
maskSubnet = helper.extractMaskNetwork(net);

%MaskRCNN
[boxes, scores, labels, masks] = detectMaskRCNN(net, maskSubnet, img, params, Envs);


if(isempty(masks))
   overlayedImage = img;
else
   overlayedImage = insertObjectMask(img, masks);
end
figure
imshow(overlayedImage)
showShape("rectangle", gather(boxes), "Label", labels, "LineColor",'g')

通过MATLAB仿真,可以实现如下的仿真结果:

【Mask-RCNN】基于Mask-RCNN的目标检测和识别_第3张图片

【Mask-RCNN】基于Mask-RCNN的目标检测和识别_第4张图片 【Mask-RCNN】基于Mask-RCNN的目标检测和识别_第5张图片

为资源。

你可能感兴趣的:(MATLAB,目标检测,人工智能,计算机视觉,MASK-RCNN)