【CNN】|How much position information do convolutional neural networks encode?

ICLR2020

CNN提取的特征中是否含有位置信息

CNN隐性的编码了位置信息,并且随着网络层数的增加和卷积核的增加,即感受野的增加,能够更好的编码位置信息。其中,这个位置信息是由zero-padding造成的,图像边缘的zero-padding提供了图像的边界信息。本来,网络是不知道每个像素点或者特征点的位置。但是,通过padding的zero,提供给模型一个相对位置信息,知道每个特征点距离zero边界的距离信息。

在有zero-padding的情况下,基于VGG和ResNet的模型都可以预测比较合理的位置相关的输出,比如横坐标或者纵坐标。

在没有padding的情况下,输出只会直接响应在输入的内容上,不能预测和内容无关的位置信息.

最直接的做法当然就是把每个像素的坐标concat到输入或者中间特征上,这种简单直接做法可以在SOLO[3]的实例分割结果上带来3.6 AP的提升。

卷积神经网络Convolutional Neural Networks, CNN)是一种专门用于处理网格状数据(例如图像)的深层学习架构。它们由卷积层、池化层、激活函数和全连接层组成。由于篇幅限制,这里我会提供一个简化版的Python示例,使用Keras库构建基本的CNN。假设我们想在一个MNIST手写数字数据集上训练一个简单的CNN。 ```python # 导入必要的库 from tensorflow.keras import layers, models import tensorflow as tf # 创建一个Sequential模型 model = models.Sequential() # 添加卷积层 model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) # 输入图像大小为28x28,单通道灰度图 model.add(layers.MaxPooling2D((2, 2))) # 下采样操作 # 可能添加更多的卷积层和池化层... model.add(layers.Flatten()) # 展平卷积层的输出以便于全连接层处理 model.add(layers.Dense(64, activation='relu')) # 全连接层 model.add(layers.Dropout(0.5)) # 防止过拟合 model.add(layers.Dense(10, activation='softmax')) # 输出层,10个类别对应0到9的手写数字 # 编译模型 model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) # 加载MNIST数据并训练模型 (train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data() train_images = train_images.reshape((60000, 28, 28, 1)) test_images = test_images.reshape((10000, 28, 28, 1)) model.fit(train_images, train_labels, epochs=5, validation_data=(test_images, test_labels)) ``` 这只是一个基础示例,实际使用时还需要预处理数据、调整超参数和进行更复杂的架构设计。如果你想查看完整的代码实现,可以参考Keras官方文档或GitHub上的开源项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值