IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 如何在PyTorch中使用 RoIAlign 层(含代码示例) -> 正文阅读

[人工智能]如何在PyTorch中使用 RoIAlign 层(含代码示例)

RoIAlign 的用处

RoIAlign 用于将任意尺寸感兴趣区域的特征图,都转换为具有固定尺寸 H×W 的小特征图。

与RoI pooling一样,其基本原理是将 h × w h×w h×w 的特征划分为 H × W H×W H×W 网格,每个格子是大小近似为 h / H × w / W h/H×w/W h/H×w/W 的子窗口 ,然后将每个子窗口中的值最大池化到相应的输出网格单元中。想复习RoI pooling概念的可以看这篇

RoIAlign 其实就是更精确版本的 RoIPooling,用双线性插值取代了RoIPooling中的直接取整的操作。

下面用一个具体图例看下 RoIAlign 计算原理。

RoIAlign 计算原理

输入一个feature map,对于每个不同尺寸的proposed region,需要转换成固定大小 H × W H×W H×W的 feature map,H和W是这一层的超参数。
在这里插入图片描述
黑色粗框部分是一个 7 × 5 7×5 7×5 大小的 proposed region,首先切分成 H × W H×W H×W 个sections(这里以2x2为例):
在这里插入图片描述
对每个section采样四个区域,用红色×表示其中心位置:
在这里插入图片描述
每个section中四个红色×的值,由双线性插值计算:
在这里插入图片描述
对每个 section 中四个值进行 max pooling,输出结果:
在这里插入图片描述
就是我们所需要的固定大小输出了。

这个固定大小输出可以通过全连接的层,用于边界框回归和分类,常用于检测和分割模型中。

双线性插值(Bilinear Interpolation)

借用下图从视觉上来理解双线性插值,黑点上的双线期插值是附近四个点的加权和,权值是四个点对应的颜色矩形在总面积中的占比。比如左上角黄点 ( x 1 , y 2 ) (x_1,y_2) (x1?,y2?) 对应的是右下较大的黄色矩阵面积。
在这里插入图片描述
在这里插入图片描述

pytorch中的实现

RoIAlign在pytorch中的实现是torchvision.ops.RoIAlign,torchvision.ops中实现的是计算机视觉中特定的operators。

class: torchvision.ops.RoIAlign(output_size, spatial_scale, sampling_ratio)

  • output_size (int or Tuple[int, int]) – 输出大小,用 (height, width) 表示。
  • spatial_scale (float) – 将输入坐标映射到框坐标的比例因子。默认值1.0。
  • sampling_ratio (int) – 插值网格中用于计算每个合并输出bin的输出值的采样点数目。如果> 0,则恰好使用sampling_ratio x sampling_ratio网格点。如果<= 0,则使用自适应数量的网格点(计算为cell (roi_width / pooled_w),同样计算高度)。默认值1。

torchvision.ops.roi_align(input, boxes, output_size, spatial_scale=1.0, sampling_ratio=-1)

  • input (Tensor[N, C, H, W]) – 输入张量
  • boxes (Tensor[K, 5] or List[Tensor[L, 4]]) – 区域包围框以 ( x 1 , y 1 , x 2 , y 2 ) (x1, y1, x2, y2) (x1,y1,x2,y2) 形式表示。如果输入的是单个tensor,第一列表示batch index;如果输入是一个tensor List,每个tensor对应batch中的第 i i i个元素的方框。

简单示例

import torch
import torchvision

# 创建RoIAlign层
pooler = torchvision.ops.RoIAlign(output_size=2,sampling_ratio=2,spatial_scale=5)

# 输入一个 8x8 的feature:
inputTensor = torch.rand(1,1,8,8)

inputTensor类似如下:
在这里插入图片描述

再创建一个box:

box =  torch.tensor([[0.0,0.375,0.875,0.625]]) 

output = pooler(inputTensor,[box])#shape:[1, 1, 2, 2]

输出结果:
在这里插入图片描述

在FasterRCNN中的使用示例

import torchvision
import torchvision
from torchvision.models.detection import FasterRCNN
from torchvision.models.detection.rpn import AnchorGenerator

# load a pre-trained model for classification and return
# only the features
backbone = torchvision.models.mobilenet_v2(pretrained=True).features
# FasterRCNN needs to know the number of
# output channels in a backbone. For mobilenet_v2, it's 1280
# so we need to add it here
backbone.out_channels = 1280

# let's make the RPN generate 5 x 3 anchors per spatial
# location, with 5 different sizes and 3 different aspect
# ratios. We have a Tuple[Tuple[int]] because each feature
# map could potentially have different sizes and
# aspect ratios
anchor_generator = AnchorGenerator(sizes=((32, 64, 128, 256, 512),),
                                   aspect_ratios=((0.5, 1.0, 2.0),))

# let's define what are the feature maps that we will
# use to perform the region of interest cropping, as well as
# the size of the crop after rescaling.
# if your backbone returns a Tensor, featmap_names is expected to
# be [0]. More generally, the backbone should return an
# OrderedDict[Tensor], and in featmap_names you can choose which
# feature maps to use.
roi_pooler = torchvision.ops.MultiScaleRoIAlign(featmap_names=['0'],
                                                output_size=7,
                                                sampling_ratio=2)

# put the pieces together inside a FasterRCNN model
model = FasterRCNN(backbone,
                   num_classes=2,
                   rpn_anchor_generator=anchor_generator,
                   box_roi_pool=roi_pooler)

参考链接

https://zhuanlan.zhihu.com/p/59692298
https://zhuanlan.zhihu.com/p/73138740
https://pytorch.org/docs/1.2.0/torchvision/ops.html
https://pytorch.org/docs/1.2.0/_modules/torchvision/ops/roi_align.html

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:29:17  更:2021-11-09 19:29:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 6:24:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码