Pytorch中最大池化层Maxpool的作用说明及实例使用(附代码)

文章详细介绍了池化在神经网络中的功能,尤其是最大池化,它用于减少特征图的大小并缓解位置敏感性。torch.nn.MaxPool2d是Pytorch中的最大池化层,参数包括kernel_size、stride等。通过实例展示了如何使用该函数处理图像,并输出结果。

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

目录

1. 池化的功能

2. 神经原网络设定最大卷积层的作用

3. torch.nn.MaxPool2d()

4. 使用torch.nn.MaxPool2d()实战

 3. Pytorch源码


 

1. 池化的功能

先通过与卷积的相同点及不同点说明池化的功能。

池化与卷积的共同点:池化操作也是原图像矩阵(或特征图矩阵)与一个固定形状的窗口(核、或者叫算子)进行计算,并输出特征图的一种计算方式;

池化与卷积的不同点:卷积操作的卷积核是有数据(权重)的,而池化直接计算池化窗口内的原始数据,这个计算过程可以是选择最大值、选择最小值或计算平均值,分别对应:最大池化、最小池化和平均池化。由于在实际使用中最大池化是应用最广泛的池化方法,以下讲述均针对于最大池化进行说明,平均池化和最小池化也是同样的作用原理。

通过下图可以更直观理解最大池化的计算方式:

2. 神经元网络设定最大池化层的作用

从上图可以看出,最大池化可以提取出指定窗口的特征(最大)数据,显著减少了特征图(特征张量的大小),这也是最大池化层的主要作用。

另外,由于最大池化能提取出特定窗口的最大数据,无论这个数据在窗口中的原始位置在哪,所以最大池化也缓解了对所要识别特征的位置敏感性。比如,在图像识别的实际使用过程中,要识别一个图像中是否有“行人”,最大池化层就可以缓解“行人”的位置对输出带来的影响,可以把计算更主要地关注在“是否”有“行人”上。

3. torch.nn.MaxPool2d()

torch.nn.MaxPool2d()所需要输入的参数可以参考pooling.py中的说明:

    Args:
        kernel_size: the size of the window to take a max over
        stride: the stride of the window. Default value is :attr:`kernel_size`
        padding: Implicit negative infinity padding to be added on both sides
        dilation: a parameter that controls the stride of elements in the window
        return_indices: if ``True``, will return the max indices along with the outputs.
                        Useful for :class:`torch.nn.MaxUnpool2d` later
        ceil_mode: when True, will use `ceil` instead of `floor` to compute the output shape

这些参数的定义和卷积层一样:

kernel_size:最大池化层的窗口大小,比如kernel_size = 3 即窗口为3×3的数据;

stride:步长,窗口每次移动的数据(像素)数;

padding:在数据中添加额外的数据(补0),以满足特定的格式或长度要求;

后面3个参数一般用不到,绝大多数情况不用理会。

dilation:作用是把池化窗口进行“膨胀”,默认为1,不同的dilation情况请见下图:

由于池化层的窗口中并没有数据,所以这个应该用不到,只是Pytorch中为了和卷积层输入参数保持一致;

return_indice:返回最大值的标记,上面已经说过了最大池化层并不关注最大值在原图的位置,所以这个99.99%不会设定为True;

 ceil_mode:如果设定为True,在计算输出形状时向上(天花板)取整,而不是向下(地板)取整。

4. 使用torch.nn.MaxPool2d()实战

使用计算原图(3×201×250)为以下:

 设定kernel_size = 6,stride = 2,输出特征图(3×98×123)为以下:

 

 可以见到这里有一个和卷积层非常不一样的地方:卷积层会把所有输入的通道进行卷积后求和,这也是为什么彩色图片经过卷积后变成了灰度图(黑白图)。而最大池化层仍会保留原来的输入通道,这样如果输入是RGB三通道图像,那么输出也是RGB三通道图像。

 3. Pytorch源码

import torch
from PIL import Image
import torchvision


image = Image.open('spaceship.png').convert('RGB') #导入图片
image_to_tensor = torchvision.transforms.ToTensor()   #实例化ToTensor
original_image_tensor = image_to_tensor(image).unsqueeze(0)     #把图片转换成tensor

print(original_image_tensor.size())

maxpool = torch.nn.MaxPool2d(kernel_size=6, stride=2, padding=0)
maxpool_tensor = maxpool(original_image_tensor)

torchvision.utils.save_image(maxpool_tensor, 'maxpool.png')
print(maxpool_tensor.size())

 

 

 

Transformer图像分割是一种利用Transformer模型进行图像语义分割的方法。通过将图像的每个像素点作为Transformer的输入,Transformer模型可以对每个像素点进行分类,从而实现对图像中各个区域的分割。这种方法可以应用于医学图像分割等领域,具有较好的性能和准确性。 一个相关的工作是TransFuse:将Transformer和CNN融合用于医学图像分割的方法。该方法将Transformer和CNN结合起来,利用Transformer的自注意力机制来捕捉图像中的全局信息,再通过CNN网络来提取局部特征。这种融合的方法能够充分利用Transformer的优势,同时也能够保留CNN在局部特征提取方面的能力,从而提高图像分割的性能。 另外,Swin-Transformer是一种基于Transformer的图像分割模型。它采用了基于窗口的注意力机制,将图像划分成多个窗口,然后在每个窗口内使用Transformer进行特征提取。这种方法可以有效地减少计算量,并且在训练和推断过程中具有较高的效率。Swin-Transformer在多个图像分割任务中都取得了很好的效果,并且已经在Github上开源。 如果想要深入了解Transformer在图像领域的应用,可以参考论文《An image is worth 16x16 words: Transformers for image recognition at scale》和《视频彻底搞懂 Vision Transformer》。这些论文详细介绍了Transformer在图像识别和分割等任务中的原理、方法和实验结果,对于理解Transformer在图像分割中的应用具有重要的参考价值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【医学图像处理】融合 Transformer 和 CNN 进行医学图像分割](https://blog.csdn.net/weixin_61033221/article/details/122770801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Swin-Transformer 图像分割实战:使用Swin-Transformer-Semantic-Segmentation训练ADE20K数据集(语义分割...](https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/121904901)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

使者大牙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值