mask-R-CNN

前言

代码 论文

# Mask-rcnn 算法在 torch vision 中有直接实现,可以直接引用使用在自己的工作中。
import torchvision
model = torchvision.models.detection.maskrcnn_resnet50_fpn(weights=MaskRCNN_ResNet50_FPN_Weights.DEFAULT)

Mask R-CNN(Mask Region-based Convolutional Neural Network)是一种用于目标检测和实例分割的深度学习模型,它是 Faster R-CNN 的扩展,同时可以生成目标的二进制掩码(mask),因此可以实现精确的实例分割。

\1. 骨干网络:Mask R-CNN通常使用骨干网络(如 ResNet)来提取图像特征。这些特征用于目标检测和分割任务。

\2. 区域建议网络(RPN):RPN 用于生成候选区域,它是 Faster R-CNN 中的组件,用于确定可能包含目标的图像区域。

\3. 目标检测:Mask R-CNN 使用区域建议来检测图像中的目标对象,通常通过分类和回归来确定每个目标的位置和类别。

\4. 实例分割:除了目标检测,Mask R-CNN 还生成每个检测到的目标的精确二进制掩码。这允许对目标进行精确的像素级分割。

\5. 多任务学习:Mask R-CNN 采用多任务学习的方法,通过同时训练目标检测和实例分割任务,从而提高模型的性能。

\6. ROI Pooling / ROI Align:用于从特征图中提取每个候选区域的特征,以供后续任务使用。

\7. 损失函数:Mask R-CNN 使用多个损失函数,包括分类损失、回归损失和分割损失,来训练模型。

一、maskrcnn介绍

总体框架

img

针对目标检测算法 Faster-RCNN 加入语义分割算法 FCN,使得完成目标检测的同时也得到语义分割的结果,算法对 Faster-RCNN 的一些细节做了调整,最终的组成部分是 RPN + ROIAlign + Fast-rcnn + FCN。所以要了解 Mask-RCNN 的细节就需要了解 RCNN、Fast-RCNN、Faster-RCNN 这一系列算法的实现过程。

主干结构(backbone)

和前作 Faster RCNN 一样,Mask RCNN 的第一部分是一个标准的 CNN 卷积网络(ResNet50,ResNet101,ResNet50 + FPN,ResNet101 + FPN),目的用来提取图像中的信息。除此之外,Mask-RCNN 还使用了 FPN (Feature Pyramid Networks 特征金字塔网络) 来提升网络的性能。

img

可以看到第二种方法针对 Mask 使用了不同的 RoI,这样 Mask 使用的 RoI 输出大小更大,预测可以做的更精细。 另外,Mask 分支在训练和预测时也有一些小差异,训练网络时的目标是由 RPN 提供的(Proposal),但在预测时的目标是由其他两个分支(Faster-RCNN)提供的,这样做辅助提高了训练模型的能力以及预测的准确度(RPN 提供的类别都是准确的正样本但是完整边界不准确,而预测时 Faster-RCNN 提供的边界是准确的)。

FPN

多尺度特征融合,yolo提过

YOLO_V3

RPN

img

RPN(Region Proposal Network)的主要功能是产生物品检测框。相对于传统方法,RPN生成检测框的速度大大提高,这也是Faster RCNN/Mask RCNN的重要优势,能极快又准地实现预测.

RPN的核心操作是根据特征图按照一定规律生成一系列锚框(anchor box),假设特征图的尺寸为W×H,那么就生成W×H×k个锚框,即特征图上每个点生成k个锚框。一般根据原论文,k取9即选取9个锚框,这9个锚框中有三种形状长宽比分别为{1:1,1:2,2:1}以及三种面积尺度128²,256²,512²,对应生成3×3=9个锚框。

根据上述操作,我们生成了大量的锚框,忽略掉跨越边界的锚框后一般仍有几千至几万个,这些锚框对的候选框之间存在着大量的重叠,RPN采用非极大至抑制的方法,IoU设置为0.7,这样候选框数量大致可以减少到两千个。在这些锚框中进行初步筛选得到固定数量(256个)的锚框用于后续计算,为使得数据平衡,这些锚框中正样本与负样本(背景)的数量要大致相当。

在得到这些锚框后,RPN中还需要完成两项工作,首先判断这个锚框中是否存在待识别的物体,这是一个二分类问题,第二项工作是怎样调整锚框才能使得其和真实值更接近。观察整个RPN网络的具体结构,可以看到RPN网络可以分为两部分,分别用来解决这两个问题:计算分类误差损失以及边界框回归损失。第一部分的输出是一个大小为W×H×k×2的矩阵,只分类锚框中有物品或者是只有背景的概率,故每个锚框有两个输出。第二部分的输出是大小为W×H×k×4的矩阵,用来判断原始锚框需要做的平移以及缩放,这里的损失计算函数与整个模型的计算方式相同,具体细节写在了边界框回归损失部分。

ROI

ROI 意为 Region of Interest 即感兴趣的区域。从 Mask-RCNN 的架构可以看出,ROI 有两部分输入,第一部分是由 backbone 生成的特征图像(feature map),另一部分是由 RPN 生成的检测框 (proposal),ROI 这一部分的主要职责就是把生成的检测框对应到特征图像上。

RoIPooling(老方法)

img

RoIPooling 是 Faster-RCNN 提取特征的模块。整个 RoIPooling 可以分成前后两步,第一步将候选框缩放到特征层上,对于非整数的情况四舍五入取整。第二步操作类似 MaxPooling,将刚得到的区域缩放到一个预定义的大小(比如7x7),当无法整除时各部分大小再次做取整操作,每个区域内选取最大值作为输出。下面是在一个8x6特征图上选取输出大小2x2为的动图示例 。

RoIAlign(改进)

img

RoIAlign 是 Mask-RCNN 对 RoIPooling 的改进,也是用于提取特征,主要是针对 RoIPooling 中的取整操作带来的误差 (misalignment)。ROIPooling 主要有两部分取整带来的误差,第一个是候选框对应到特征层上时的取整,第二个是区域缩放时不能整除时对边界的取整。RoIAlign 主要就是对这两个地方进行优化,对于没有落在真实像素点的计算,不再取整改用最近的四个点进行双线性插值。上面是 Mask-RCNN 原论文中 RoIAlign 的示意图,保留每一步的计算精度不取整直至最后,利用双线性插值计算每个子区域四个点,比较出最大值作为这一部分的输出(最终的采样结果对采样点位置以及采用点个数并不敏感,所以一般都直接使用四个采样点)。

ProposalLayer层

对20W+候选框进行过滤,先按照前景得分排序;取6000个得分高的,把之前得到的每个框回归值都利用上;看总体图可知:将RPN网路的输出作为该模块的输入,首先利用rpn_bbox对anchors进行第一次修正,得到ROI并删除其中的一部分超界的ROI。接着,对剩下的ROI进行score排序,保留其中预测为前景色概率大的一部分。最后,利用NMS获得最终的RP。

DetectionTargetLayer

img

1.之前得到了2000个ROI,可能有pad进来的(0充数的)这些去掉

2.有的数据集一个框会包括多个物体,这样情况剔除掉

3.判断正负样本,基于ROI和GT,通过IOU与默认阈值0.5判断

4.设置负样本数量是正样本的3倍,总数默认400个

5.每一个正样本(ROI),需要得到其类别,用IOU最大的那个GT

6.每一个正样本(ROI),需要得到其与GT-BOX的偏移量

7.每一个正样本(ROI),需要得到其最接近的GT-BOX对应的MASK

8.返回所有结果,其中负样本偏移量和MASK都用0填充

DetectionTargetLayer的输入包含了,target_rois, input_gt_class_ids, gt_boxes, input_gt_masks。其中target_rois是ProposalLayer输出的结果。首先,计算target_rois中的每一个rois和哪一个真实的框gt_boxes iou值,如果最大的iou大于0.5,则被认为是正样本,负样本是是iou小于0.5。选择出了正负样本,还要保证样本的均衡性,具体可以才配置文件中进行配置。最后计算了正样本中的anchor和哪一个真实的框最接近,用真实的框和anchor计算出偏移值,并且将mask的大小resize成28*28,这些都是后面的分类和mask网络要用到的真实的值。

损失函数

img

经过 RoI 处理后的特征矩阵一般有确定大小(原论文是7x7),将这样的矩阵展平经过一系列全链接层得到预测结果,对于 Mask-RCNN 网络有三个预测输出结构,分别输出预测预测的种类类别、预测物品的矩形展示框以及待预测物品的准确边界(像素级分类)。

类别损失

第一种输出种类类别的预测器非常简单,与普通的 CNN 模型后面类似,一系列全连接层激活函数层最后加一层 softmax 层预测各个种类的概率,损失函数使用的是多类别的交叉熵损失函数。

边界框回归损失

第二部分损失是用来物品边界框回归器用来计算边界框的损失。

Mask 损失

第三部分损失是物品准确边界的计算损失。在这一部分中, Mask-RCNN 中选取了 FCN 算法作为 Mask 的预测方法。FCN 算法可以对任意大小的矩阵做像素级分类

总损失

其实 Mask-RCNN 的扩展性非常强,模型结构可以按照具体的问题进行调整,比如在关键点检测中,就可以像 Mask 分支一样再并联一个关键点检测分支。最后的整体误差损失是各个部分的损失加在一起,对于标准的 Mask-RCNN,总损失有 5 部分:类别误差、回归框误差、Mask 预测误差、RPN 类别误差损失、RPN 边界框误差损失,将这些误差损失求和就是整体误差,用来训练评估模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/107243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux开发-Ubuntu软件源工具

开发&验证环境: 操作系统:ubuntu 20.04 软件源:http://archive.ubuntu.com/ubuntu 开发工具 sudo apt install vim sudo apt install git sudo apt install git-lfs# gnu工具链 sudo apt install gcc sudo apt install g sudo apt inst…

yolov8如何进行训练验证推理

1、新建脚本main.py,也可以建一个yaml文件(避免改到default.yaml),这个yaml文件是在训练时用到 batchsize什么的都可以在yaml文件改,这俩东西不用填 2、两种训练的方法,用的时候可以注释掉其他 from u…

【Python学习笔记】函数

1. 函数组成 Python中,我们是这样定义函数的: def function(para1, para2):print("func start")print(para1)print(para2)print("func end")print("让技术总监面试 求职者")return "func return"def 是关键字…

AI Web3 盛会「EDGE」在港闭幕,融云国际影响力持续提升

👆点击报名「爱嗨游」线上发布会 9 月 25 日至 27 日,全球规模最大的 AI & Web3 投资盛会——EDGE 峰会在中国香港举办,融云作为战略合作伙伴与来自世界各地的企业家、投资人、学者和热门项目方一同完成了这一盛会。关注【融云全球互联网…

vmware ubuntu 虚拟机 网卡图片消失处理办法

如图,这个图标消失处理办法: 输入如下指令:sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service network-manager start

【06】基础知识:typescript中的泛型

一、泛型的定义 在软件开发中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能支持当前数据类型,同时也能支持未来的数据类型,这在创建大型系统时提供了十分灵活的功能。 在像 C# 和 Java 这样的语言中&…

AM@隐函数@隐函数求导@幂指函数求导@参数式函数求导

文章目录 abstract显函数隐函数隐函数显化 隐函数求导对数求导法幂指函数求导乘法链函数及其分式函数求导例子例例例例 参数方程确定的函数及其导数引言参数方程确定的函数例 参数方程确定的函数的导数参方函数的二阶导数例子例例 极坐标曲线某点的导数 abstract 显函数和隐函…

在进行自动化测试,遇到验证码的问题,怎么办?

1.找开发去掉验证码或者使用万能验证码 2.使用OCR自动识别 使用OCR自动化识别,一般识别率不是太高,处理一般简单验证码还是没问题 这里使用的是Tesseract-OCR,下载地址:https://github.com/A9T9/Free-Ocr-Windows-Desktop/releases 怎么使…

论自动化测试中的xpath | 多语言测试最新案例

XPath(XML Path Language)是一门在XML文档中查找信息的语言。XPath是XML处理中非常重要的组成部分,能大大简化文档的解析和处理。它与XSLT、XPointer等标准一起被广泛应用于XML的解析处理。 一般情况下,xpath主要应用在以下几个方…

VR、AR、MR、XR到底都是什么?有什么区别

目录 VRARMRXRAR、VR、MR、XR的区别 VR 英:Virtual Reality 中文翻译:虚拟现实 又称计算机模拟现实。是指由计算机生成3D内容,为用户提供视觉、听觉等感官来模拟现实,具有很强的“临场感”和“沉浸感”。我们可以使用耳机、控制器…

10月13日,每日信息差

今天是2023年10月13日,以下是为您准备的13条信息差 第一、欧盟投资4.5亿欧元在法国建设电池超级工厂。欧洲投资银行是欧盟的贷款机构,也是世界上最大的跨国银行之一 ​第二、北京银行推出数字人民币智能合约平台 数字人民币预付资金管理产品在商超场景…

MyBatis 缓存

MyBatis 缓存 MyBatis 是现在国内比较流行的 ORM 框架,在学习 MyBatis 的时候,不得不了解 MyBatis 的两级缓存,要了解 MyBatis 的缓存,先要了解 MyBatis 几个重要的对象 SqlSession - 对应的一次数据库会话,由 SqlSe…

“零代码”能源管理平台:智能管理能源数据

随着能源的快速增长,有效管理和监控能源数据变得越来越重要。为了帮助企业更好的管理能源以及降低能源成本,越来越多的能源管理平台出现在市面上。 “零代码”形式的能源管理平台,采用IT与OT深度融合为理念,可进行可视化、拖拽、…

spring boot 使用SSE向前端推送数据

SSE(Server-Sent Events)是一种基于HTTP的实时通信协议,它允许服务器向客户端发送持久性的数据流。与WebSocket不同的是,SSE是单向通信,只能由服务器向客户端发送数据。Spring Boot通过Spring WebFlux模块提供了对SSE的…

[题] 子矩阵的和 #二维前缀和

题目 子矩阵的和 题解 s[i][j] ( s[i - 1][j] s[i][j - 1] - s[i - 1][j - 1] ) ; 将输入后的数组进行初始化 表示以(1, 1)为左上角以(i, j)为右下角的矩阵内所有元素之和。 s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] s[x1 …

从零到一完成Midway.js登录、注册、鉴权功能

您好,如果喜欢我的文章,可以关注我的公众号「量子前端」,将不定期关注推送前端好文~ 前言 本文将从项目搭建到实现从零到一开发一个登录、注册、鉴权的简易版注册登录系统,主要功能和技术选型如下: 服务端框架———…

【学习之路】Multi Agent Reinforcement Learning框架与代码

【学习之路】Multi Agent Reiforcement Learning框架与代码 Introduction 国庆期间,有个客户找我写个代码,是强化学习相关的,但我没学过,心里那是一个慌,不过好在经过详细的调研以及自身的实力,最后还是解…

安装程序2502/2503错误的解决方法

Windows Installer是在Windows 2000时提出,作为微软操作系统中的安装程序开发标准的操作系统服务。它可以支持安装程序所需要的许多功能,并且可以支持交易式安装(Committable Installation),当安装程序发现错误或问题时…

Kubernetes 原生微服务开发 | 阿Q送书第七期

微服务开发并不容易。其中涉及大量的概念与复杂的技术,令很多开发者忘而却步。Quarkus 是一个全能的基础框架,除了基础的 Web 应用开发能力外,还包括服务发现与调用、熔断限流和观测等微服务治理体系。Quarkus 在提供强大特性的同时&#xff…

【Docker】Docker网络及容器间通信详解

目录 背景 默认网络 1、bridge 网络模式 2、host 网络模式 3、none 网络模式 4、container 网络模式 自定义网络 容器间网络通信 IP通信 Docker DNS server Joined容器 前言 本实验通过docker DNS server和joined 容器两种方法实现Docker容器间的通信。Docker容器间…