当前位置:网站首页>【Mask-RCNN】基于Mask-RCNN的目标检测和识别
【Mask-RCNN】基于Mask-RCNN的目标检测和识别
2022-06-30 06:39:00 【fpga和matlab】
Mask-RCNN 是何凯明继Faster-RCNN后的又一力作,集成了物体检测和实例分割两大功能,并且在性能上上也超过了Faster-RCNN。其基本结构如下:

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模型。训练好的模型,其数据如下:

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仿真,可以实现如下的仿真结果:


为资源。
边栏推荐
- 2020-10-06
- The most complete sentence in history
- RT thread Kernel Implementation (I): threads and scheduling
- Deep learning --- the weight of the three good students' scores (3)
- Gazebo installation, uninstall and upgrade
- Write a C program to judge whether the system is large end byte order or small end byte order
- Is it safe to open an account online? Can you open an account to speculate on the Internet?
- Usage of case, casez and casex statements in Verilog
- Getting started with research
- Improve simulation speed during ROS and Px4 joint simulation
猜你喜欢
![[untitled]](/img/6c/df2ebb3e39d1e47b8dd74cfdddbb06.gif)
[untitled]

Loading class `com. mysql. jdbc. Driver‘. This is deprecated. The new driver class is `com. mysql. cj. jdb

Introduction to neural networks

Dynamic routing job

Initial love with mqtt

Why does the verification code not refresh when clicked

It turns out that you are such an array. You have finally learned

Numpy中的四个小技巧
![[my creation anniversary] one year anniversary essay](/img/98/f9305894747687465f86354fe08500.png)
[my creation anniversary] one year anniversary essay

Rhcsa day 1
随机推荐
C language final experiment report (student achievement management system) source code
List in set (2)
Rhcsa day 1
ROS multi machine
Use of observer mode and status mode in actual work
图片。。。。。
ES6 arrow function
原来你是这样的数组,终于学会了
相关数据库问题提问。
Initial love with mqtt
Suggestion: use tools:overrideLibrary
与MQTT的初定情缘
Picture.....
Ini parsing learning documents
ETL为什么经常变成ELT甚至LET?
Four tips in numpy
Bat 使用细节2
Rotate dimension tool rolabelimg
Gazebo installation, uninstall and upgrade
程序猿入门攻略(十一)——结构体