学习ROI Pooling的简单笔记

本文详细介绍了目标检测中的regionproposal技术,包括selectivesearch算法,其通过层次聚类和多样化策略寻找潜在目标区域。接着讨论了ROIPooling的重要性,它允许在不同大小的特征图上进行池化,加速了训练和测试速度,并在目标检测系统中实现端到端训练。最后,提到了RoIAlign技术,该技术通过双线性插值避免了ROIPooling的量化损失,提高了定位精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

region proposal

给定一张输入image找出objects可能存在的所有位置。这一阶段的输出应该是一系列object可能位置的bounding box。这些通常称之为region proposals或者 regions of interest(ROI),在这一过程中用到的方法是基于滑窗的方式和selective search

selsective search

策略:既然是不知道尺度是怎样的,那我们就尽可能遍历所有的尺度好了,但是不同于暴力穷举,我们可以先得到小尺度的区域,然后一次次合并得到大的尺寸就好了,这样也符合人类的视觉认知。

selective search算法主要包含两个内容:Hierarchical Grouping AlgorithmDiversification Strategies

Hierarchical Grouping Algorithm
(1)计算所有邻近区域之间的相似性;
(2)两个最相似的区域被组合在一起;
(3)计算合并区域和相邻区域的相似度;
(4)重复2、3过程,直到整个图像变为一个地区。

Diversification Strategies:多样化策略,使得抽象多样性
(1)利用各种不同不变性的色彩空间;
(2)采用不同的相似性度量; 相似性度量有:颜色相似度衡量,纹理相似度衡量,尺度相似度衡量,形状重合度衡量和最终相似度衡量
(3)通过改变起始区域。

ROI Pooling

就是将大小不同的feature map 池化成大小相同的feature map,利于输出到下一层网络中。

ROI Pooling的作用
(1)用于目标检测任务
(2)允许对cnn中的feature map进行reuse
(3)加速training和testing速度
(4)允许end-to-end的形式训练目标检测系统。

ROI pooling具体操作如下
(1)根据输入image,将ROI映射到feature map对应位置;
(2)将映射后的区域划分为相同大小的sectionssections数量与输出的维度相同);
(3)对每个sections进行max pooling操作;

这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling 最大的好处就在于极大地提高了处理速度
在这里插入图RIO描述

如图:在此案例中region proposals 是57大小的,在pooling之后需要得到22的,所以在57的特征图划分成22的时候不是等分的,行是5/2,第一行得到2,剩下的那一行是3,列是7/2,第一列得到3,剩下那一列是4。

ROI Pooling的工作原理见网址

https://www.cnblogs.com/wangyong/p/8523814.html
https://www.sohu.com/a/414474326_823210

ROI Pooling的量化操作使得有些数据丢失,量化实质上指小数取整操作。

针对ROI Pooling的量化操作,进行 RolAlign

RolAlign

在这里插入图片描述

假定采样点数为4,即表示,对于每个2.97*2.97的小区域,平分四份,每一份取其中心点位置,而中心点位置的像素,采用双线性插值法进行计算,这样,就会得到四个点的像素值,见图,四个红色叉叉‘×’的像素值是通过双线性插值算法计算得到的, 最后,取四个像素值中最大值作为这个小区域。

### RoI Pooling in Deep Learning for Object Detection Region of Interest (RoI) Pooling 是一种用于处理不同大小区域的技术,在目标检测中扮演重要角色。该操作允许网络接受任意形状的输入并将其转换成固定尺寸的特征图,从而可以应用于后续的标准全连接层或其他分类器。 #### 工作原理 给定一系列候选框(即感兴趣区域),这些候选框可能来自Selective Search 或者其他提议算法,对于每一个候选框,RoI pooling会执行如下操作: - 将候选框映射到卷积层输出的空间位置上; - 对应于每个候选框的位置被划分为相同数量的小块或子窗口; - 应用最大池化或者平均池化来提取每个子窗口内的特征向量;最终得到一组长度固定的特征向量作为下一层的输入[^1]。 这种机制确保了无论原始图像中的物体如何缩放和平移变换,都能获得一致维度的特征描述符,提高了模型对尺度变化和空间布局差异的容忍度。 ```python import torch.nn.functional as F def roi_pooling(input, rois, pooled_height, pooled_width): """Apply ROI Pooling to input tensor.""" # Assume `input` is a feature map with shape [batch_size, channels, height, width] # and `rois` contains the coordinates of regions. batch_size = input.size(0) num_rois = rois.size(0) outputs = [] for i in range(num_rois): roi = rois[i] start_h, end_h = int(round(roi[0])), int(round(roi[2])) start_w, end_w = int(round(roi[1])), int(round(roi[3])) region = input[:, :, start_h:end_h, start_w:end_w] out = F.adaptive_max_pool2d(region, output_size=(pooled_height, pooled_width)) outputs.append(out.view(batch_size, -1)) return torch.cat(outputs, dim=1) ``` 上述代码展示了如何实现自适应的最大池化版本的ROI Pooling函数。这里使用PyTorch库来进行张量运算,并利用内置的功能实现了灵活调整输出大小的能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值