分类
语义分割
滑动窗口
在语义分割任务中,滑动窗口方法是一种基于传统计算机视觉技术的思路,其核心思想是通过滑动窗口对图像进行局部处理,从而实现像素级别的分类。以下是滑动窗口在语义分割中的实现思路和优缺点:
滑动窗口的实现思路
窗口定义
选择一个固定大小的窗口(通常是正方形或矩形),从图像的左上角开始,按照一定的步长(通常是像素数)在图像上滑动。特征提取与分类
每次滑动窗口时,提取窗口内的特征,并对窗口内的像素进行分类。分类结果可以用于确定窗口内像素的类别。重叠区域处理
由于窗口之间存在重叠,滑动窗口方法会多次计算重叠区域的特征,这可能导致效率较低。结果整合
对所有窗口的分类结果进行整合,最终生成整幅图像的语义分割结果。
优点
- 简单直观:滑动窗口方法易于理解和实现,适合初学者入门。
- 局部处理:能够对图像的局部区域进行细致处理,适合处理小目标或局部特征。
缺点
- 效率低下:由于窗口之间存在重叠,导致大量重复计算,效率较低。
- 难以处理大图像:对于高分辨率图像,滑动窗口方法的计算成本过高。
- 依赖手工特征:传统滑动窗口方法依赖手工设计的特征,泛化能力有限。
现代替代方法
尽管滑动窗口方法在早期的语义分割任务中被广泛使用,但随着深度学习的发展,全卷积网络(FCN)等基于卷积神经网络的方法逐渐成为主流。这些方法通过端到端的训练,能够直接输出像素级别的分类结果,避免了滑动窗口的效率问题。
总结来说,滑动窗口方法在语义分割中虽然简单易懂,但在效率和性能上存在明显不足。现代语义分割任务更多采用基于深度学习的全卷积网络或其他先进架构。
全卷积(Fully Convolutional Networks, FCN)
让整个网络只包含卷积层,一次性输出所有像素的类别预测。
全卷积网络(Fully Convolutional Networks, FCN)是一种用于语义分割的经典深度学习架构,其核心思想是将传统卷积神经网络(CNN)中的全连接层替换为卷积层,从而实现对任意尺寸输入图像的像素级分类。
FCN 的工作原理
卷积化(Convolutional)
FCN将CNN中的全连接层转换为卷积层,使得网络能够输出与输入图像大小相同的特征图,从而为每个像素提供分类预测。上采样(Upsample)
由于卷积和池化操作会降低特征图的分辨率,FCN通过上采样(通常使用转置卷积)将特征图恢复到与输入图像相同的尺寸。跳跃连接(Skip Layer)
为了结合浅层特征以保留更多细节信息,FCN引入了跳跃连接,将不同层次的特征图进行融合。例如,FCN-32s、FCN-16s 和 FCN-8s 分别通过不同方式结合浅层特征,提升了分割结果的细节和精度。
FCN 的性能优势
端到端训练
FCN可以直接将原始图像作为输入,输出分割结果,无需手动设计特征或复杂的后处理。支持任意尺寸输入
由于完全基于卷积操作,FCN能够处理任意尺寸的输入图像。多尺度预测
通过结合不同层次的特征图,FCN能够更好地处理不同尺度的目标。丰富的语义信息
FCN能够学习到图像中的语义信息,使得分割结果更加准确和有意义。
FCN 的应用案例
语义分割
FCN最早被应用于街景图像分割,能够对图像中的每个像素进行分类,识别出道路、车辆、行人等。医学图像分析
在医学图像分割中,FCN可用于分割MRI或CT图像中的不同组织或器官。遥感图像解译
FCN可用于遥感图像中的地物分类,例如区分耕地、城市区域等。视频分割
FCN可以扩展到视频分割任务,对视频中的每一帧进行分割,实现物体的跟踪。
FCN 的局限性
尽管FCN在语义分割中取得了重要突破,但它也存在一些局限性:
计算量大
上采样和跳跃连接增加了模型的复杂度。分割边界不精确
FCN的分割结果在细节处理和边界清晰度上存在不足。对全局语义信息捕获能力有限
由于卷积核的感受野有限,FCN对全局语义信息的捕获能力较弱。
改进方向
为了克服FCN的局限性,研究者们提出了多种改进方法:
结合条件随机场(CRF)
在分割结果上应用CRF优化边界细节。引入注意力机制
使用注意力机制提升模型对重要区域的关注。多尺度特征融合
结合不同尺度的特征以捕获更丰富的上下文信息。使用更深的网络结构
结合ResNet、EfficientNet等更强大的基础网络提升性能。
总之,FCN作为语义分割领域的奠基之作,虽然存在一些局限性,但其核心思想为后续的分割网络(如U-Net、DeepLab等)提供了重要的参考。
下采样
整个网络只包含卷积层,并在网络中嵌入下采样与上采样过程。
下采样:池化,卷积核步长为2
上采样:反向池化操作
这张图片展示了卷积神经网络中的最大池化(Max Pooling)和最大反池化(Max Unpooling)的过程。
左侧:最大池化(Max Pooling)
- 输入:一个 ( 4 × 4 4 \times 4 4×4) 的矩阵。
- 过程:
- 将输入矩阵分为四个 ( 2 × 2 2 \times 2 2×2) 的子矩阵。
- 在每个子矩阵中,选择数值最大的元素。
- 输出:一个 ( 2 × 2 2 \times 2 2×2) 的矩阵,包含每个子矩阵中的最大值。
- 示例:
- 左上角的子矩阵 ( [ 1 2 3 5 ] \begin{bmatrix} 1 & 2 \\ 3 & 5 \end{bmatrix} [1325]) 中最大的元素是 5。
- 右上角的子矩阵 ( [ 6 3 2 1 ] \begin{bmatrix} 6 & 3 \\ 2 & 1 \end{bmatrix} [6231]) 中最大的元素是 6。
- 左下角的子矩阵 ( [ 1 2 2 1 ] \begin{bmatrix} 1 & 2 \\ 2 & 1 \end{bmatrix} [1221]) 中最大的元素是 2。
- 右下角的子矩阵 ( [ 7 8 3 4 ] \begin{bmatrix} 7 & 8 \\ 3 & 4 \end{bmatrix} [7384]) 中最大的元素是 8。
- 因此,输出矩阵为 ( [ 5 6 2 8 ] \begin{bmatrix} 5 & 6 \\ 2 & 8 \end{bmatrix} [5268])。
右侧:最大反池化(Max Unpooling)
- 输入:一个 ( 2 × 2 2 \times 2 2×2) 的矩阵,包含最大池化过程中选择的最大值。
- 过程:
- 使用最大池化过程中记录的每个最大值的位置信息,将这些值放回原始位置。
- 其他位置用零填充。
- 输出:一个 ( 4 × 4 4 \times 4 4×4) 的矩阵,与最大池化前的输入矩阵尺寸相同。
- 示例:
- 原始最大池化的输出矩阵是 ( [ 5 6 2 8 ] \begin{bmatrix} 5 & 6 \\ 2 & 8 \end{bmatrix} [5268])。
- 根据最大池化过程中记录的位置信息,将这些值放回原始位置。
- 其他位置用零填充。
- 因此,输出矩阵为 ( [ 0 0 2 0 0 1 0 0 0 0 0 0 3 0 0 4 ] \begin{bmatrix} 0 & 0 & 2 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 3 & 0 & 0 & 4 \end{bmatrix} 0003010020000004 )。
总结
- 最大池化:通过选择每个子矩阵中的最大值来降低特征图的尺寸,同时保留最重要的特征信息。
- 最大反池化:通过使用最大池化过程中记录的位置信息,将这些值放回原始位置,从而恢复特征图的尺寸。
这种最大池化和最大反池化的组合在卷积神经网络中常用于构建编码器-解码器结构,如U-Net,用于图像分割等任务。
可学习的上采样:转置卷积
这张图片详细解释了转置卷积(transpose convolution)的工作原理,特别是一个 ( 3 × 3 3 \times 3 3×3) 的转置卷积核,步长(stride)为2,填充(pad)为1的情况。以下是对图片内容的详细解释:
转置卷积的其他叫法
- Deconvolution (bad):这个术语有时被用来描述转置卷积,但可能会导致混淆,因此不是一个好的术语。
- Upconvolution:强调了转置卷积的上采样功能。
- Fractionally strided convolution:强调了转置卷积中步长可能不是整数的特性。
- Backward strided convolution:强调了步长的方向与标准卷积相反。
输入和输出
- 输入:一个 ( 2 × 2 2 \times 2 2×2) 的矩阵。
- 输出:一个 ( 4 × 4 4 \times 4 4×4 ) 的矩阵。
转置卷积的过程
- 输入提供滤波器的权重:输入矩阵为转置卷积核提供权重。
- 步长和填充:
- 步长(stride):为2,这意味着滤波器在输出特征图上每移动一个像素,在输入特征图上移动两个像素。
- 填充(pad):为1,这意味着在输入矩阵的边缘添加一圈零,以确保输出矩阵的尺寸正确。
- 滤波器移动:滤波器在输出特征图上每移动两个像素,在输入特征图上移动一个像素。
- 重叠区域的值需要求和:在转置卷积中,由于步长和填充的使用,滤波器可能会覆盖输入特征图的相同区域多次。这些重叠区域的值需要求和,以生成输出特征图的最终值。
转置卷积的作用
转置卷积主要用于上采样,即增加特征图的空间维度。这在图像分割、生成模型(如GANs)等任务中非常有用,因为它可以恢复图像的细节信息。通过学习滤波器的权重,转置卷积可以更灵活地调整特征图的尺寸,而不仅仅是简单地插值。
总结来说,这张图片展示了转置卷积如何通过步长和填充来控制输出特征图的尺寸,并通过学习滤波器的权重来实现上采样。
目标检测
目标检测的问题在于你不知道图像中有多少个目标,所以你必须把图像的每一个区域进行分类提取边界对于计算机来说计算量是巨大的。那么怎么来降低计算量,是目标检测的关键。
区域建议SelectiveSearch
一、R-CNN的核心原理
- 区域建议生成
R-CNN通过**选择性搜索(Selective Search)**生成约2000个候选区域(Region Proposals),这些区域可能包含物体。选择性搜索利用颜色、纹理、边缘等低级特征合并相似区域,减少冗余框。 - 特征提取
每个候选区域被裁剪并调整至固定尺寸(如224x224),输入预训练的CNN(如AlexNet)提取4096维特征向量。这一步骤替代了传统手工特征(如SIFT、HOG),使特征更具判别性。 - 分类与回归
• 分类:使用多个SVM分类器(每类一个)判断特征向量所属类别,输出置信度。
• 边界框回归:通过线性回归模型修正候选框的位置和尺寸,提升定位精度。
二、R-CNN的完整流程
- 候选区域生成
输入图像经过选择性搜索生成约2000个候选框,覆盖不同尺度和形状的潜在目标。 - CNN特征提取
每个候选框独立通过CNN提取特征,耗时较长(需2000次前向传播)。 - SVM分类与NMS过滤
SVM输出类别得分后,通过非极大值抑制(NMS)去除重叠框,保留高置信度结果。 - 边界框精调
回归模型基于特征向量调整框的坐标,使其更贴合目标边界。
三、R-CNN的优缺点
- 优点
• 高精度:CNN特征显著优于传统方法,PASCAL VOC数据集上mAP提升至53.7%。
• 模块化设计:各步骤(候选区域、特征提取、分类)可独立优化。 - 缺点
• 计算效率低:2000次CNN前向传播导致单张图片处理需数十秒。
• 存储开销大:需保存所有候选区域的特征向量,占用大量磁盘空间。
• 训练复杂:需分阶段训练CNN、SVM和回归模型,流程繁琐。
四、R-CNN的后续演进
- Fast R-CNN
• 改进点:引入ROI池化层,将候选区域映射到特征图上统一处理,共享CNN计算,速度提升10倍。
• 端到端训练:分类与回归整合到单一网络,采用多任务损失函数。
以下是对这张图的详细解读,结合图示元素与RoI Align的核心原理:
一、图示整体结构
这张图展示了 RoI Align(Region of Interest Align) 的关键操作流程,主要用于解决传统RoI Pooling中因两次量化(坐标取整)导致的特征错位问题,是Mask R-CNN的核心改进之一。图示分为三部分:
- 输入图像(左上):包含目标(小猫)和候选区域(红色框)。
- CNN特征图(中下):输入图像经CNN提取后的特征图(尺寸更小,通道数更多)。
- 特征点计算(右侧):展示如何通过双线性插值(Bilinear Interpolation)从特征图中精确提取特征。
二、核心步骤解析
1. 候选区域映射到特征图
• 坐标映射关系
输入图像的候选区域(红色框)通过比例缩放映射到特征图上。例如,输入图像尺寸为 640x480
,特征图尺寸为 20x15
,则缩放比例为 640/20=32
和 480/15=32
,即特征图每个网格对应输入图像的 32x32
像素区域。
• 关键改进:RoI Align不进行坐标取整(图中标注“不进行规整操作”),直接保留浮点数坐标(如 (x,y)
),避免传统RoI Pooling的量化误差。
2. 特征点的双线性插值
• 目标:对特征图上的浮点坐标 (x,y)
,通过其周围四个邻近网格单元(图中 f11, f12, f21, f22
)的特征值,计算插值后的特征 f(x,y)
。
• 插值公式(图中底部公式):
[ f ( x , y ) = ∑ i , j = 1 2 ( 1 − ∣ x − x i ∣ ) ( 1 − ∣ y − y j ∣ ) ⋅ f i j f(x,y) = \sum_{i,j=1}^2 (1 - |x - x_i|)(1 - |y - y_j|) \cdot f_{ij} f(x,y)=∑i,j=12(1−∣x−xi∣)(1−∣y−yj∣)⋅fij]
其中 ‘ ( x i , y j ) ‘ `(x_i, y_j)` ‘(xi,yj)‘ 是四个邻近网格的整数坐标,f_{ij}
是这些网格的特征值。通过距离加权平均,保留亚像素级精度。
3. 子区域采样与特征组合
• 子区域划分:将候选区域划分为多个子区域(例如 2x2
的网格),在每个子区域内均匀采样多个点(如4个点)。
• 特征聚合:对每个采样点进行双线性插值,再通过最大池化或平均池化聚合为最终特征。图中标注“bilinear interpolation”即指此过程。
三、RoI Align vs. RoI Pooling
对比项 | RoI Pooling | RoI Align |
---|---|---|
坐标量化 | 两次取整(候选框→特征图网格) | 保留浮点坐标,无量化 |
插值方式 | 最近邻插值(粗略) | 双线性插值(精细) |
特征对齐精度 | 低(导致目标边缘模糊) | 高(保留亚像素级细节) |
应用场景 | Faster R-CNN | Mask R-CNN(实例分割) |
四、图示技术细节
- 输入图像与特征图尺寸
• 输入图像:3x640x480
(3通道,宽640,高480)。
• 特征图:512x20x15
(512通道,宽20,高15),说明CNN对图像进行了下采样(如VGG16下采样比例为1/32)。 - 特征点计算示例
图中以坐标(x,y)
为例,其周围四个网格单元为:
•(x1,y1)
:左上角网格,特征值f11
•(x2,y1)
:右上角网格,特征值f21
•(x1,y2)
:左下角网格,特征值f12
•(x2,y2)
:右下角网格,特征值f22
通过双线性插值,f(x,y)
是这四个特征的加权和。
五、RoI Align的意义
• 解决实例分割的关键问题:在Mask R-CNN中,RoI Align通过高精度特征对齐,使像素级掩膜预测更准确。
• 性能提升:在COCO数据集上,RoI Align比RoI Pooling提升掩膜AP约10%(He et al., ICCV 2017)。
总结
这张图清晰展示了RoI Align如何通过保留浮点坐标和双线性插值,避免特征错位,提升目标检测与分割的精度。其设计思想是深度学习模型从“粗粒度”向“细粒度”演进的重要体现,尤其在需要像素级预测的任务(如医学图像分割、自动驾驶)中至关重要。
2. Faster R-CNN
• 区域提议网络(RPN):替代选择性搜索,生成高质量候选框,实现端到端检测。
• 速度与精度平衡:VGG16模型下检测速度达5FPS,mAP达70%以上。
3. Mask R-CNN
• 实例分割:在Faster R-CNN基础上增加掩膜预测分支,支持像素级分割。
• ROI Align:改进池化层,避免量化误差,提升定位精度。
五、总结
R-CNN开创了深度学习目标检测的先河,但其计算瓶颈促使了Fast/Faster R-CNN等改进。尽管当前主流算法已转向单阶段模型(如YOLO)或Transformer架构(如DETR),R-CNN系列仍因其高精度在特定场景(如医疗图像分析)中广泛应用。其核心思想——区域建议与特征提取分离——为后续研究提供了重要范式。