14.卷积神经网络中的不变性


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


1.问题介绍

最近看的2015年前后的几篇语义分割网络中反复提到了一个点,深度卷积神经网络的内置不变性。

2014年11月发表的Fully Convolutional Networks for Semantic Segmentation中作者提到了卷积神经网络具有的平移不变性:

在这里插入图片描述

2014年12月发表的DeepLabV1中,作者指出,深度卷积神经网络(Deep Convolution Nearal Network,DCNN)之所以在图像分类/目标检测上取得非常好的结果,正是由于DCNN具有的不变性,层级越深,其所学习到的特征越抽象,因此其表征能力更强。

在这里插入图片描述

在上面这两篇文章中强调了DCNN具有的不变性,那么什么是DCNN的不变性呢?

2.DCNN的Invariance

DCNN的不变性,Invariance是指当输入发生某些变化时,DCNN模型的输出可以保持不变,一般情况下都会希望模型具有输入不变性,使得输入的图像发生某些变化时,如平移,旋转,视角等变化时,模型仍然能够识别出图像中的对象。

在这里插入图片描述

注意区分不变性Invariance和等变性Equivariance。对于DCNN的不变性是指即便对象在图像中的位置,尺度发生变化,仍然能正确识别出对象的类别。DCNN的等变性是指当输入发生变化时,输出也会产生相映的变化,如人脸检测的热力图,当人脸在输入图像上从一个位置平移到另一个位置时,输出的热力图上的人脸也会相映移动。

3.后记

可以理解卷积神经网络通过使用深层的卷积网络和池化层可增大感受野,使模型具备一定的平移不变性,有文章专门研究图像表征的等变性,不变性和等效果性。

2014年11月发表的论文Understanding image representations by measuring their equivariance and equivalence专门研究了这个问题。

2015年06月发表的Spatial Transformer Networks提出了一种可增强模型平移旋转缩放等空间不变形的模块,文章分析了DCNN的不变性能力有限,缺少对输入数据进行高效空间变换的能力。Spatial Transformer空间变换器,可以在网络中对数据进行显式的平移(translation)/尺度缩放(scale)/旋转(rotation)等空间变换,使得训练得到的模型具有空间不变性。而且,Spatial Transformer是一个可微模块,不需要额外的监督训练,不需要改动传统的优化过程,可直接应用到卷积神经网络中。

2017年03月发表的Deformable Convolutional Networks提出了可变形卷积,能够学习对象的形变特征。具体介绍可以参考9.Deformable CNN

从以上可以看出来,关于DCNN不变性的讨论由来已久,相关的研究也在不断的更新。


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


参考资料

### 卷积神经网络 (CNN) 概述 卷积神经网络(Convolutional Neural Networks, CNN)是深度学习领域内一种专门设计用于处理具有网格状拓扑数据的模型,最常见的是二维图像。这类网络能够自动提取特征并完成诸如图像识别、分类以及目标检测等多种计算机视觉任务[^1]。 ### 工作原理 #### 结构组成 CNN 的核心组成部分包括: - **卷积层**:这是 CNN 中最基本的构建模块之一,在该层中应用滤波器或核与输入矩阵相乘得到新的表示形式。这些操作可以捕捉局部模式,并减少参数数量从而提高计算效率和泛化能力。 - **池化层**:通常紧随每一个卷积层之后设置一个最大值/平均值池化层用来降低空间维度的同时保留重要信息,进一步增强平移不变性和降维效果。 - **全连接层**:位于最后几层的位置,负责将前面各层所学到的不同层次上的抽象特征映射到类别标签上,最终输出预测结果。 此外,为了防止深层架构带来的梯度消失等问题,还会加入批标准化(batch normalization),跳跃连接(skip connections)[^2]等机制来促进训练过程中的稳定收敛;同时利用非线性激活函数如 ReLU 来打破线性变换局限性使得多层感知机具备更强表达力。 ### 应用场景 由于其强大的表征能力和优秀的性能表现,CNN 广泛应用于以下几个方面: - 图像分类 - 物体检测 - 语义分割 - 风格迁移 - 医学影像分析等领域 ```python import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() # 定义卷积层 self.conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=(3, 3), padding=1) # 添加ReLU作为激活函数 self.relu_activation = nn.ReLU() # 设置池化层 self.pooling_layer = nn.MaxPool2d(kernel_size=(2, 2)) # 构建全连接层 self.fc_layer = nn.Linear(16 * 56 * 56, num_classes) def forward(self, x): x = self.conv_layer(x) x = self.relu_activation(x) x = self.pooling_layer(x) x = x.view(-1, 16 * 56 * 56) # 展开成向量 output = self.fc_layer(x) return output ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值