文章目录

  • Mask R-CNN
    • Dataset
      • **输入数据的格式**
    • 网络结构
      • **总体结构**
      • **Backbone**
      • **RPN**
      • **ROI Head**

急急如律令!offer速来见我!

Mask R-CNN

Dataset

输入数据的格式

读入COCO标注格式的标注文件,可以得到图片及对应的标注。
标注的数据格式如下:

输入网络的targets:

  • batch为2,因此targets长度为2
  • 第一张图片中,共有4个box,标注信息包括box坐标、box类别、实例polygon格式的mask

网络结构

总体结构

网络总体由三部分组成,backbone、RPN、ROI Head,三者的输入输出关系如下图所示。

Backbone

backbone由ResNet和FPN组成。

RPN

(3.1)RPN Head

(3.2)anchor生成

  • step-1 在一个特征图(H/n,W/nH/n, W/nH/n,W/n)的一个cell上生成3个面积大小为base_size,长宽比分别为(0.5, 1, 2)的box,以cell为中心,放大box nnn倍;
  • step-2 在特征图的每一个cell上执行step1,共生成H/n⋅W/n⋅3H/n \cdot W/n \cdot 3H/n⋅W/n⋅3个anchor;
  • step-3 删除anchor范围超出原始图片的anchor(也可设定为超出一定阈值)

使用相同的base_size,对于较小的特征图来说,生成的anchor比较大,说明用来检测较大的物体。

(3.3)proposals生成(RPN后处理)

  • 对5种不同尺度的特征图,都执行以下操作
  • i) 以大小为H/n, W/n的特征分支为例,其anchor个数为H/n * W/n * 3
  • ii) 取出置信度前pre_nms_top_n的anchors;(eg pre_nms_top_n=2000
  • iii) 根据regression结果和anchor坐标,计算出proposals坐标
  • iv) 执行一次NMS(第一次),并限制proposals最大个数为post_nms_top_n
  • 收集5个特征分支的proposals,选择置信度最高的fpn_post_nms_top_n

最后再把真实的gt-box加入到proposals中

(3.4)计算损失

i)为所有anchor制作label
首先为分配前景后景标签。
满足以下条件的anchor设置为正标签1(前景):

  • 与gt最大IoU超过high_threshold=0.7的anchor
  • 与gt IoU最大的anchor(有可能最大的IoU没有超过阈值,通过该规则将其捡回来)

满足以下条件的anchor设置为负标签0 (背景):

  • 与gt最大IoU小于low_threshold=0.3的anchor

其他与gt最大IoU介于阈值之间的(0.3,0.7)记为其他类,不算损失。

再计算anchor与对应gt的回归目标

ii)正负样本均衡化(筛选)
batch_size_per_image:每张图片用于计算损失的anchor数目,eg 256
positive_fraction:正样本所占比例, eg 0.5
正样本取num_pos=min(0.5*256, fg),即若生成的anchor中正样本数目超过128,则取128;若少于128,则保留所有正样本。
负样本取num_neg = batch_size_per_image - num_pos

iii)损失计算
类别损失,前后景预测的损失,交叉熵损失。
Lcls(pi)=−pi∗log(pi)−(1−pi∗)log(1−pi)L_{cls}(p_i) = -p_i^*log(p_i) - (1-p_i^*)log(1-p_i)Lcls​(pi​)=−pi∗​log(pi​)−(1−pi∗​)log(1−pi​)

回归损失,边框位置回归损失,smoothL1smooth_{L_1}smoothL1​​损失。

坐标变换系数
tx=(x−xa)/wa,ty=(y−ya)/hatw=log⁡(w/wa),th=log⁡(h/ha)tx∗=(x∗−xa)/wa,ty∗=(y∗−ya)/hatw∗=log⁡(w∗/wa),th∗=log⁡(h∗/ha)\begin{aligned} t_{\mathrm{x}} &=\left(x-x_{\mathrm{a}}\right) / w_{\mathrm{a}}, \quad t_{\mathrm{y}}=\left(y-y_{\mathrm{a}}\right) / h_{\mathrm{a}} \\ t_{\mathrm{w}} &=\log \left(w / w_{\mathrm{a}}\right), \quad t_{\mathrm{h}}=\log \left(h / h_{\mathrm{a}}\right) \\ t_{\mathrm{x}}^{*} &=\left(x^{*}-x_{\mathrm{a}}\right) / w_{\mathrm{a}}, \quad t_{\mathrm{y}}^{*}=\left(y^{*}-y_{\mathrm{a}}\right) / h_{\mathrm{a}} \\ t_{\mathrm{w}}^{*} &=\log \left(w^{*} / w_{\mathrm{a}}\right), \quad t_{\mathrm{h}}^{*}=\log \left(h^{*} / h_{\mathrm{a}}\right) \end{aligned} tx​tw​tx∗​tw∗​​=(x−xa​)/wa​,ty​=(y−ya​)/ha​=log(w/wa​),th​=log(h/ha​)=(x∗−xa​)/wa​,ty∗​=(y∗−ya​)/ha​=log(w∗/wa​),th∗​=log(h∗/ha​)​

smoothL1smooth_{L_1}smoothL1​​函数:
smooth⁡L1(x)={0.5x2if ∣x∣&lt;1∣x∣−0.5otherwise \operatorname{smooth}_{L_{1}}(x)=\left\{\begin{array}{ll}{0.5 x^{2}} &amp; {\text { if }|x|&lt;1} \\ {|x|-0.5} &amp; {\text { otherwise }}\end{array}\right. smoothL1​​(x)={0.5x2∣x∣−0.5​ if ∣x∣<1 otherwise ​

Lreg(ti)=p∗smoothL1(ti,ti∗)L_{reg}(t_i) = p^* smooth_{L_1}(t_i, t_i^*)Lreg​(ti​)=p∗smoothL1​​(ti​,ti∗​)

只计算前景的回归损失

联合两项损失:
LRPN=1Ncls∑iLcls(pi)+λ1Nreg∑iLreg(ti)L_{RPN} = \frac{1}{N_{cls}}\sum_{i}L_{cls}(p_i) + \lambda \frac{1}{N_{reg}}\sum_i L_{reg}(t_i)LRPN​=Ncls​1​i∑​Lcls​(pi​)+λNreg​1​i∑​Lreg​(ti​)
其中NclsN_{cls}Ncls​即用于计算损失的anchor个数,batch_size_per_image,而NregN_{reg}Nreg​则为正样本的个数,num_pos

ROI Head

(4.1) RoI Box Head

  • feature extractor
  • predictor
  • post_processor
  • loss

feature extractor

  • 先对2000个proposal做筛选。计算proposals与gt的IoU,大于0.7的设置为前景,小于0.3的设置为背景。总共取512个proposals,正样本最多为0.25×512=128个,其余为负样本。
  • 使用ROI Align取出proposal对应的特征。ROI尺寸设置为7featureschannel=256,则取出来的特征维度为512*256*7*7,reshape成512×12544
  • 送入两个全连接层(12544,1024)、(1024,1024),得到特征512*1024

predictor

  • 分支一,全连接预测类别 (1024, num_calsses)
  • 分支二,全连接预测坐标变换系数(1024, 8)

loss

  • 计算512个proposals的交叉熵分类损失
  • 计算正样本边框回归系数的smoothL1smooth_{L_1}smoothL1​​

post processor

(4.2) RoI Mask Head

  • ROI Align
  • feature extractor
  • predictor
  • post_processor
  • loss

ROI Align

  • 取出512个proposals中的前景proposals,假设有20个
  • 使用ROI Align取出proposal对应的特征。ROI尺寸设置为14featureschannel=256,则取出来的特征维度为20*256*14*14

feature extractor

  • 4个连续的3*3卷积
  • 输出20*256×14*14的tensor

predictor

  • 输入20*256×14*14的tensor
  • 经过一个转置卷积,输出20*256×28*28的tensor
  • 再经过一个1×1的卷积,输出20×num_class×28*28tensor

loss

  • 根据前景proposals和gt的IoU,得到每个proposals对应的实例及其mask
  • 用proposals裁剪mask,并将maskresize28×28,作为实际值用于计算loss
  • 取出预测tensor中对应实例类别的Channel,和上一步得到的mask_target计算交叉熵损失。
mask_loss = F.binary_cross_entropy_with_logits(mask_logits[positive_inds, labels_pos], mask_targets)

Mask R-CNN结构细节回顾相关推荐

  1. AI:IPPR的数学表示-CNN结构进化(Alex、ZF、Inception、Res、InceptionRes)

    前言: 深度学习:sigmod.tanh.ReLU函数的优缺点-文章图文并举:文章:CNN的结构分析--:  文章:历年ImageNet冠军模型网络结构解析---: 文章:GoogleLeNet系列解 ...

  2. 2202年了,继续大比拼ViT、MLP、CNN结构有意义吗??

    每天给你送来NLP技术干货! 文 | 卖萌菌 来自 | 夕小瑶的卖萌屋 近日,MSRA发布了一篇题为<Transformer不比CNN强 Local Attention和动态Depth-wise ...

  3. CNN结构基元:纹理结构和纹理基元方程化GLOH、Gabor...(Code)

    模式识别专注于寻找相同模式的共性和不同模式的分离.CNN把特征提取全局化,其中重要的一个是纹理特征,利用卷积核来表示纹理基元,用以重现模式,应如何显示表示. 第一次使用纹理特征,2012年,使用了灰度 ...

  4. CNN结构:用于检测的CNN结构进化-分离式方法

    前言: 原文链接:基于CNN的目标检测发展过程       文章有大量修改,如有不适,请移步原文. 参考文章:图像的全局特征--用于目标检测 目标的检测和定位中一个很困难的问题是,如何从数以万计的候选 ...

  5. 卷积神经网络CNN要点:CNN结构、采样层、全连接层、Zero-padding、激活函数及Dropout

    CNN结构: 卷积层:特征提取: 采样层:特征选择: 全连接层:根据特征进行分类. 采样层(pooling): max-pooling:克服卷积层权值参数误差: average-pooling:克服卷 ...

  6. CNN结构演变总结(二)轻量化模型

    CNN结构演变总结(一)经典模型 导言: 上一篇介绍了经典模型中的结构演变,介绍了设计原理,作用,效果等.在本文,将对轻量化模型进行总结分析. 轻量化模型主要围绕减少计算量,减少参数,降低实际运行时间 ...

  7. Faster R CNN

    Faster R CNN 3 FASTER R-CNN 我们的Faster R CNN 由两个模块组成,第一个模块是 proposes regions 的全卷积网络,第二个是使用 proposed r ...

  8. CNN结构:StyleAI-图片风格分类效果已成(-FasterRCNN-FCN-MaskRCNN)

    一.StyleAI CNN结构:图片风格分类效果已成.可以在色彩空间对图片风格进行分类,并进行目标分类. StyleAI构架:FasterRCnn + RandomTrees,使用opencv的随机森 ...

  9. 卷积神经网络CNN结构

    写在前面 今天不想写. 1.卷积神经网络(CNN)简介 直接贴出这张CNN最经典的图.从图中也可以出,其实CNN和传统的深度神经网络相差不多,唯一的区别就在于神经网络中相邻两层的连接方式.那么,问题来 ...

  10. CNN结构的演变+几种典型的网络介绍+CNN设计准则

    CNN结构的演变 + AlexNet+ Network-in-Network + VGGnet + GooleNetI(InceptionV1.V2.V3.V4)+ ResNet残差网络+ Incep ...

最新文章

  1. android 锁屏画面开发,android 锁屏应用开发
  2. pearson相关系数_三个相关系数的注意事项
  3. Python是否具有字符串“包含”子字符串方法?
  4. 3张硬纸板DIY《节奏光剑》全身追踪器,免费开源可替代淘宝3000元套件
  5. 【原创】CSSOO的思想及CSS框架的应用(未整理完)
  6. java重写的特性解释
  7. 关于ViewTreeObserver的理解
  8. 技术分享连载(二十七)
  9. 你把别人看透了 别人就看不透你了
  10. 今天来谈谈CSS有哪些布局
  11. 免费图书借阅+php源码,开源php图书管理系统
  12. 个人小项目原型图设计(主页)
  13. android手机扩容软件,Android手机 6.0 + TF卡 扩容新选择
  14. 300多条MTK工作笔记为你的工作节省一半时间
  15. 手写Google第一代分布式计算框架 MapReduce
  16. 杭电AI学霸班:考研上岸3清北8浙大,还没毕业年薪拿百万
  17. ucos 时钟节拍_uC/OS-III 时钟节拍,时间管理,时间片调度
  18. 信号强度 android,一种获取手机信号强度的方法
  19. Bullet physics 引擎的官方文档翻译
  20. 梁昌勇 软件工程_改进交互式蚁群算法及其应用

热门文章

  1. 开源框架Banner实现图片轮播
  2. 使用Match函数对合并单元格的行数进行统计
  3. cubieboard服务器系统,CubieBoard_搭建自己的系统.pdf
  4. GPU显卡服务器有什么作用,可应用哪些方面呢
  5. 3D 专业词汇 (转)
  6. SICP 第二章的练习
  7. 【Android】'Unfortunately, Package Installer has Stopped'的解决办法
  8. 工业级路由器和家用路由器的区别_工业级路由器和家用路由器有何区别?
  9. 图像灰度共生矩阵cooc_feature_image.hdev
  10. Openlayers + Vue实现GIS地图的一些常见问题(整理)