ROI Pooling和ROI Align

简介: ROI Pooling和ROI Align都是为了解决目标检测RPN任务后得到的一系列proposals大小不一致的问题。

ROI Pooling和ROI Align都是为了解决目标检测RPN任务后得到的一系列proposals大小不一致的问题。

首先来介绍两个的思想

1 基本思想

1.1 ROI Pooling

假设有一张特征图大小为8x8(原图大小sxs),一个bbox坐标(0, 3, 7, 8),我们目标是获得大小为2x2的特征图作为后续网络的输入。
1.png
此时bbox的h=5,w=7。无法对半分,因此取整分,h分为2和3,w分为3和4(如果可以对半分即对半分)。然后在每一块内容中做max polling操作,得到2x2大小的输出作为下层网络的输入。

1.2 ROI Pooling的缺陷

既然已经存在ROI Polling为何发展了ROI Algin呢?这与ROI Polling的缺陷有关:

从上面可以看到ROI Polling可能经过了两次取整的操作,得到特征层中bbox坐标将特征层平分时进行的取整操作。
2.png
假设上图,一张800x800的原图,有一个大小为665x665的bbox。第一次取整操作即我们经过特征提取网络时将图像下采样32倍时,bbox大小665/32=20.78,ROI Polling直接量化为20。第二次取整操作即我们把特征层均分时,假设均分为7份,20/7=2.86,ROI Polling量化为20。经过上面两次量化取整,候选区域就会出现明显的偏差,ROI Algin解决了这个问题。

1.3 ROI Align

ROI Aligin为了解决上面的问题,取消了量化取整的操作,大概思想如下:

  1. 首先我们求得bbox在特征图上的坐标,不做量化取整的操作
  2. 将候选区域按照size分为一个个单元格,每个单元的边界也不做量化(例子默认size为2)

3.png

  1. 在每个单元格中取四个点(作者发现四个点效果最好),如上图中的蓝色点。
  2. 针对每一个蓝点,距离它最近的4个真实像素点的值加权(双线性插值),求得这个蓝点的值
  3. 在每个单元内对得到的四个蓝色点的值进行max polling操作,最终得到2x2的输出

1.4 ROI Align反向传播

https://www.pianshen.com/article/69221232781/#3%E3%80%81ROI%E5%B1%80%E9%99%90%E6%80%A7%E5%88%86%E6%9E%90

2 pytorch实现

暂时先总结一下pytorch的调用,以后回来补充怎么实现的!!!

2.1 函数声明

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

2.2 参数

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

2.3 输入

  1. input:输入张量,Tensor[N, C, H, W]
  2. boxes:Tensor[K, 5] or List[Tensor[L, 4]]
相关文章
|
计算机视觉
OpenCV-DFT最优尺寸cv::getOptimalDFTSize
OpenCV-DFT最优尺寸cv::getOptimalDFTSize
|
4月前
|
计算机视觉
【YOLOv10改进-损失函数】Shape-IoU:考虑边框形状与尺度的指标
YOLO目标检测专栏探讨了边框回归损失的创新方法,强调了目标形状和尺度对结果的影响。提出的新方法Shape-IoU关注边框自身属性,通过聚焦形状和尺度提高回归精度。实验显示,该方法提升了检测效果,超越现有技术,在多个任务中达到SOTA。论文和代码已公开。
|
6月前
|
监控 数据挖掘 UED
ROI
【5月更文挑战第16天】ROI
188 4
|
6月前
|
监控 UED
如何提高ROI?
【5月更文挑战第16天】如何提高ROI?
182 4
|
6月前
|
计算机视觉
【YOLOv8改进】Shape-IoU:考虑边框形状与尺度的指标(论文笔记+引入代码)
YOLO目标检测专栏探讨了边框回归损失的创新方法,强调了目标形状和尺度对结果的影响。提出的新方法Shape-IoU关注边框自身属性,通过聚焦形状和尺度提高回归精度。实验显示,该方法提升了检测效果,超越现有技术,在多个任务中达到SOTA。论文和代码已公开。
|
6月前
|
计算机视觉 Python
opencv cv::Range()和cv::Rect()用于crop来获得感兴趣区域
opencv cv::Range()和cv::Rect()用于crop来获得感兴趣区域
227 0
|
算法 数据挖掘 计算机视觉
目标检测中 Anchor 与 Loss 计算
目标检测中 Anchor 与 Loss 计算
187 0
|
算法 计算机视觉 C++
积分图像(Integral image)
积分图算法由Crow在1984年首次提出,是为了在多尺度透视投影中提高渲染速度。积分图算法是一种快速计算图像区域和以及图像区域平方和的算法。它的核心思想就是对每一个图像建立起自己的积分图查找表,在图像处理的阶段就可以根据预先建立积分图查找表直接查找从而实现对均值卷积的线性时间计算。做到了卷积执行的时间与窗口大小无关。之前介绍的NL-means算法就可以采用积分图算法进行优化加速。
192 0
积分图像(Integral image)
|
编解码 资源调度 算法
CV学习笔记-尺度不变特征变换(SIFT)
CV学习笔记-尺度不变特征变换(SIFT)
528 0
CV学习笔记-尺度不变特征变换(SIFT)