Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读

news2025/1/21 15:42:04

目录

1.Mask R-CNN简介

2.Mask分支 

3.Mask R-CNN损失 

4Mask分支预测使用

 


1.Mask R-CNN简介

        回顾我们之前所说的图像分类、目标检测、语义分割的内容:

        我们来看一下实例分割和语义分割的差别:

        Mask R-CNN不仅能够同时进行目标检测与分割,还能很容易地扩展到其他任务中。

        Mask R-CNN原论文中的图一:

         其中红线框住的部分和我们之前所说的Faster R-CNN部分是一样的,如果您还没有学过Faster R-CNN的内容,请参阅我的博客:

Faster R-CNN网络源码复现icon-default.png?t=MBR7https://blog.csdn.net/qq_41694024/category_12155708.html        在Faster R-CNN之外,我们又串联了一个Mask分支,通过这个分支,我们可以对于我们检测的每一个目标生成一个Mask分割蒙版,这里如果想要检测人的关键点信息或者实现其他功能可以并联其它分支。

        Mask分支与我们之前说的FCN结构十分类似:

        我们在日常使用偏向于右边的分支。

        在Mask R-CNN中,我们将ROI Pooling替换成了ROI Align,因为在ROI Pooling中涉及两次取整操作,通过取整操作会导致我们定位产生偏差,论文中称之为misalignment。

        我们回顾一下ROI Pooling,假设特征层相对原图步距为32。我们假设一点在原图上的坐标为[10,10],一右下角的点在原图上的坐标为[124,124]。我们现在要将它映射到特征层上,我们需要将坐标都除以32,很明显我们对于原图中[10,10]的点得到特征层的坐标为[0,0], 同样我们对于原图中[124,124]的点得到特征层的坐标为[4,4]

         在特征层上将如上区域框起来,这就是目标映射到特征层上的位置了,上述就是我们说的第一次取整操作。我们如果想要从ROI Pooling层得到2\times2大小的输出,我们就需要将我们的区域划分为2\times2大小,将每个区域进行Max Polling操作。很明显,现在是5\times5大小的区域,不能被2整除,因此我们要进行第二次取整操作,我们得到的区域大小是不一样的,比如我们一块区域得到的是3\times3大小的,一块区域是2\times2大小....如下图,我们对每个区域进行Max Polling操作,得到如上蓝色结果。

        我们回顾一下ROI Align,还是拿上面的做例子:

         这里不进行取整了,现在的区域如下图的蓝色框框。我们还是要求输出大小为2\times2,我们还是将矩形框均分为2\times2的区域,对每个区域去求它的输出,那么对于每个子区域如何求它的输出呢?我们这里又涉及一个参数叫做sampling ratio。它和我们在每个区域设置采样点是相关的,具体在子区域采样多少个点等于sampling ratio的平方,即对每个区域计算中心点的坐标,再利用双线性插值的方法计算橙色点所对应的数值:

        同样,第二个区域还是先找到它的中心点,还是找到和它最近的四个中心点,利用双线性插值计算中心点对应数值:

2.Mask分支 

        这里不做解释了,之前的FPN网络中以及解释过了。

        我们之前说的FCN对每个像素对每个类别都会预测一个概率分数,最后我们会将每个像素沿着channel方向做一个softmax处理,通过softmax处理之后我们就能得到每个像素归属于每个类别的概率分数,这样不同类别存在竞争关系的(在channel方向概率之和为1),这就是mask与classes是个耦合的状态的意思,在mask r-cnn中,我们是将mask与classes进行解耦的:

        在mask分支中我们针对每个类别都会去预测一个蒙版,但是我们不会针对每一个数据沿它的channel方向去做softmax处理,而是根据Fast R-CNN针对该目标的类别信息将mask分支中针对该类别的蒙版提取出来拿去使用。

        此外:

         训练网络的时候输入Mask分支的目标是由RPN提供的,即Proposals(正样本)(这个正样本是在FastRCNN分支进行正负样本匹配得到的,也就是说我们将proposal输入到FastRCNN分支,在这中我们会进行正负样本的匹配,在这个匹配中我们就能知道每个proposal它是属于正样本还是负样本以及它所对应的gt类别是什么,这里将正样本传递给mask分支),但在预测的时候输入Mask分支的目标是由Fast R-CNN提供。
        理解:

        在RPN中提供的proposal它的目标边界框并不是那么准确,可能对于一个目标RPN提供了多个边界框,但在我们最终预测的时候我们直接使用FastRCNN部分的输出,因为对于预测的时候我们只需要最准确的边界框。

3.Mask R-CNN损失 

        RPN损失 + Fast R-CNN损失 + mask损失,其中前两项损失我们在说FasterRCNN说过,这里不再赘述。

        首先我们将图片输入给网络,经过Backbone和FPN得到不同下采样率的特征层,经过RPN网络能够生成一系列的proposal,将proposal输入给ROI Align得到大小相同的特征图,再将特征输入给我们mask分支,就会针对每个类别都去预测一个mask,mask堆叠在一起就是mask分支预测的logits,我们将Fast R-CNN对应预测类别的特征图取出来,这就是一个针对cat类别的mask。

4Mask分支预测使用

 

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

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

相关文章

查找算法之二分查找

目录 二分查找 算法实现 “双闭区间”实现 算法实现 python C 两种表示对比 大数越界处理 优点与缺点 二分查找 二分查找,利用数据的有序性,通过每轮缩小一半搜索区间来查找目标元素。 使用二分查找有两个前置条件: 要求输入数据…

如何在GitLab上传本地项目

上传前需准备:需要安装Git,点击进入官网下载:Git 在本地上传GitLab项目的步骤目录介绍: 一、配置SSH秘钥(仅针对本机首次上传GitLab项目) 二、上传项目 1、新建一个空文件夹,并在该文件夹下右键…

Deque

Deque&#xff1a; “double ended queue&#xff08;双端队列&#xff09;”的缩写&#xff0c;通常读为“deck”&#xff1b; Deque是一个线性集合&#xff0c;支持在两端插入和移除元素。 Deque有三种用途&#xff1a; 双端队列(两端都可进出) Deque< Integer> de…

机器学习实战教程(十三):树回归基础篇

一、前言本篇文章将会讲解CART算法的实现和树的剪枝方法&#xff0c;通过测试不同的数据集&#xff0c;学习CART算法和树剪枝技术。二、将CART&#xff08;Classification And Regression Trees&#xff09;算法用于回归在之前的文章&#xff0c;我们学习了决策树的原理和代码实…

成功上岸字节全靠这份Redis技术笔记,深入浅出值得一看

前言 正如标题所说&#xff0c;我现在已经如愿以偿地进了字节&#xff01;之前自己一直待在一个不大不小的外包公司&#xff0c;每天做着重复的层删改查工作。直到22年年底&#xff0c;自己通过朋友的介绍拿到了字节的面试机会&#xff0c;自己在家复习了3个月&#xff0c;成功…

decltype类型指示符

decltype类型指示符一、什么是decltype类型指示符二、typeid运算符三、使用decltype指示符四、decltype和引用五、decltype(auto)六、本章代码汇总一、什么是decltype类型指示符 有时会遇到这种情况&#xff1a;希望从表达式的类型推断出要定义的变量的类型&#xff0c;但是不…

超实用的实用Shell脚本

一、Dos 攻击防范&#xff08;自动屏蔽攻击 IP&#xff09; 代码&#xff1a; #!/bin/bash DATE$(date %d/%b/%Y:%H:%M) LOG_FILE/usr/local/nginx/logs/demo2.access.log ABNORMAL_IP$(tail -n5000 $LOG_FILE |grep $DATE |awk {a[$1]}END{for(i in a)if(a[i]>10)print…

Spring 学习笔记2

1.spring设置JDBC链接池 classpath:jdbc.properties是有多个连接池时的写法&#xff0c;一般都用这种 还有就是配置文件里不要直接使用username&#xff0c;会被覆盖 使用${}来从文件里读取属性 <beans xmlns"http://www.springframework.org/schema/beans"xmlns…

bitmap原理+性能优化实践

目录 背景 总体结构 从RoaringBitmp说起 3.1arraycontainer 1.3.2 bitmapcontainer 1.3.3 runcontainer 上源码 Roaring64NavigableMap RoaringBitmap RoaringArray 三种Container ArrayContainer BitmapContainer RunContainer 工作应用 需求 分析 能否多线…

ArcGIS基础实验操作100例--实验75气体扩散空间分析

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验75 气体扩散空间分析 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&…

MySQL常用基础 - 小白必看(二)

MySQL数据库基本操作 一、DDL 概念&#xff1a;是一个数据定义语言 该语言部分包括&#xff1a; 1、对数据库的常用操作 创建数据库&#xff1a; 1、create database 数据库名 (直接删除) 2、create database if not exists 数据库名 &#xff08;判断数据库是否存在&…

视频的水印怎样去掉?这些去水印的方法值得你试试看

喜欢视频剪辑的你会不会经常遇到这种情况&#xff1a;每次上网查找的视频素材&#xff0c;保存下来后总是带有一些水印&#xff0c;这些水印不仅不够美观&#xff0c;而且还会遮挡住视频的一些部分&#xff0c;实在是烦人。如果你遇到这种情况&#xff0c;会很想知道“给视频无…

86、【栈与队列】leetcode ——39. 滑动窗口最大值:单调队列+滑动窗口(C++版本)

题目描述 239. 滑动窗口最大值 一、单调队列滑动窗口方法 本题的特点是维护一个窗口&#xff0c;在窗口不断向前移动时&#xff0c;获取其中的最大值。由于窗口在向前移动过程中&#xff0c;元素存在着进入和出去的连续顺序&#xff0c;与FIFO的特点类似。 故可考虑用队列实…

【数据结构】初识数据结构,十分钟带你玩转算法复杂度

目录 &#x1f34a;前言&#x1f34a;&#xff1a; &#x1f95d;一、初识数据结构&#x1f95d;&#xff1a; 1.数据结构&#xff1a; 2.算法&#xff1a; &#x1f353;二、算法效率&#x1f353;&#xff1a; &#x1f348;三、算法复杂度&#x1f348;&#xff1a; 1.时…

4-1文件管理-文件系统基础

文章目录一.文件的基本概念二.文件的逻辑结构&#xff08;一&#xff09;无结构文件/流式文件&#xff08;二&#xff09;有结构文件1.顺序文件2.索引文件3.索引顺序文件4.直接文件/散列文件三.文件目录四.文件的物理结构/文件分配方式1.连续分配2.链接分配3.索引分配五.文件存…

数据结构与算法基础(王卓)(8)附:关于new的使用方法详解

part 1&#xff1a; C中new的用法&#xff08;不过就是&#xff09;如下&#xff08;几种用法&#xff09;&#xff1a; 1&#xff1a; new<数据类型> 分配&#xff1a; 指定类型的&#xff0c;大小为1的&#xff0c;内存空间&#xff1b; int *i new int;//注意&am…

13_3、Java的IO流之节点流的使用

一、FileReader和FileWriter的使用1、数据读入操作说明&#xff1a;①read():返回读入的第一个字符&#xff0c;当读到文档末尾&#xff0c;返回-1②异常的处理&#xff1a;为了保证流资源一定会执行关闭操作&#xff0c;要对异常进行try-catch-finally处理③对于读入操作&…

【PWA学习】1. 初识 PWA

什么是PWA PWA(Progressive Web Apps&#xff0c;渐进式 Web 应用)运用现代的 Web API 以及传统的渐进式增强策略来创建跨平台 Web 应用程序。这些应用无处不在、功能丰富&#xff0c;使其具有与原生应用相同的用户体验优势 我们需要理解的是&#xff0c;PWA 不是某一项技术&am…

MAC(m1)-VMWare Fusion CentOS8设置静态IP、SSH连接

在使用虚拟机的时候&#xff0c;默认情况下使用的DHCP协议&#xff08;根据网段自动分配ip&#xff09;分配的动态IP地址&#xff0c; 使得每次打开虚拟机后当前的IP地址都会发生变化&#xff0c;这样不方便管理。为了能够给当前虚拟机设置 一个静态IP地址&#xff0c;方便后…

Linux的开发工具——软件包管理器 yum

目录 1 查看 2 安装 3 卸载 4 常用软件 5 扩展细节 5.1 yum源 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成window…