当前位置: 首页 > article >正文

深度学习|表示学习|卷积神经网络|Padding(填充)的用处是什么?|12

如是我闻: Padding(填充)是卷积操作中的一个重要概念,它的主要作用是在输入图像的边界上添加像素(通常填充 0)。Padding 的目的是解决卷积过程中 边界像素“丢失” 的问题,同时影响输出特征图的大小。

在这里插入图片描述


1. 为什么需要 Padding?

(1) 避免边界信息丢失
  • 卷积核在输入图像上滑动时,通常只能覆盖图像的中心区域,边界区域由于缺少足够的覆盖范围,可能得不到充分处理。
  • 如果不使用 Padding,卷积操作会缩小输入图像的大小,导致边界信息逐层丢失。举例:
    • 假设输入图像大小是 n × n n \times n n×n,卷积核大小是 k × k k \times k k×k,步长 s = 1 s = 1 s=1,没有填充( p = 0 p = 0 p=0)时:
      输出大小 = n − k + 1 \text{输出大小} = n - k + 1 输出大小=nk+1
      可以看到每次卷积后图像尺寸都会变小。例如:
      • n = 5 n = 5 n=5, k = 3 k = 3 k=3 时,输出大小变为 3 × 3 3 \times 3 3×3
      • 再叠加一层卷积,输出会变为 1 × 1 1 \times 1 1×1
  • 这种逐层缩小的效果会让深度网络中较早的边界信息消失
(2) 控制输出特征图的大小
  • 如果希望输入和输出的大小一致(即保持边界完整),可以通过 Padding 在输入图像边界补充像素。
  • 这种方式在特征提取中非常常用,尤其在卷积神经网络中。

2. Padding 的常见类型

Padding 的方式有多种,最常见的是以下几种:

(1) Zero Padding
  • 在输入图像的边界添加值为 0 的像素。
  • 优点:
    • 不会引入新的特征信息,只用于扩展边界。
  • 应用场景:
    • 最常见的填充方式,尤其在图像处理中,Zero Padding 几乎是默认选项。
(2) Reflect Padding
  • 边界的像素值由图像内容反射生成。例如:
    原图 = [ 1 , 2 , 3 ] \text{原图} = [1, 2, 3] 原图=[1,2,3]
    Padding 后
    反射填充 = [ 2 , 1 , 1 , 2 , 3 , 3 ] \text{反射填充} = [2, 1, 1, 2, 3, 3] 反射填充=[2,1,1,2,3,3]
  • 优点:
    • 避免引入“全 0”像素的影响,保持边界像素的自然性。
(3) Replicate Padding
  • 边界像素的值直接复制。例如:
    原图 = [ 1 , 2 , 3 ] \text{原图} = [1, 2, 3] 原图=[1,2,3]
    Padding 后
    复制填充 = [ 1 , 1 , 1 , 2 , 3 , 3 ] \text{复制填充} = [1, 1, 1, 2, 3, 3] 复制填充=[1,1,1,2,3,3]
  • 优点:
    • 保持边界像素一致性,适用于特定边界敏感的场景。

3. Padding 的作用总结

(1) 控制输出大小
  • Padding 会影响输出特征图的大小。如果没有填充( p = 0 p = 0 p=0),每次卷积操作都会让输入图像缩小。
  • 如果希望输入输出大小一致,可以选择适当的 Padding 值:
    p = k − 1 2 p = \frac{k - 1}{2} p=2k1
    其中 k k k 是卷积核的大小。例如:
    • k = 3 k = 3 k=3 p = 1 p = 1 p=1,输出大小保持不变。
(2) 保留边界信息
  • Padding 可以让卷积核覆盖到输入图像的边界像素,避免边界信息被忽略。没有 Padding 的情况下,边界像素对特征图几乎没有贡献。
(3) 增强特征提取的稳定性
  • 在深层卷积网络中,随着层数加深,输入尺寸会逐渐减小。如果没有 Padding,卷积核将只能提取图像中心的特征,边界特征容易被丢失。
  • 通过 Padding,可以保留更多全局信息,使网络提取的特征更全面。

总的来说

Padding 的主要作用是:

  1. 控制输出大小:让卷积操作后,输入和输出的尺寸可以一致。
  2. 避免边界信息丢失:保留输入图像的边界特征,使其参与卷积运算。
  3. 提升网络表达能力:更好地提取图像的全局和边界特征。

以上


http://www.kler.cn/a/519160.html

相关文章:

  • 使用EasyExcel(FastExcel) 的模板填充报Create workbook failure
  • Effective C++ 规则50:了解 new 和 delete 的合理替换时机
  • 嵌入式蓝桥杯电子赛嵌入式(第14届国赛真题)总结
  • [操作系统] 进程地址空间管理
  • SYN Flooding的攻击原理
  • c经典题目
  • FS8405 Release FS0B
  • Hutool的EnumUtil
  • 【C++动态规划 排序】823. 带因子的二叉树|1899
  • chrome插件:网站视频下载
  • HashTable, HashMap, ConcurrentHashMap 之间的区别
  • 深入了解 HTTP 头部中的 Accept-Encoding:gzip、deflate、br、zstd
  • 【深入理解SpringCloud微服务】Sentinel规则持久化实战
  • 代码随想录算法训练营day31(补0124)
  • docker搭建redis集群(三主三从)
  • vue中使用jquery 实现table 拖动改变尺寸
  • linux 管道符、重定向与环境变量
  • 软件质量与测试报告5-压力测试 JMeter 与 Badboy
  • C语言进阶——3字符函数和字符串函数(2)
  • 即梦(Dreamina)技术浅析(二):后端AI服务
  • 蓝桥杯算法赛第25场月赛
  • Flutter:搜索页,搜索bar封装
  • mysql_use_result的概念和使用案例
  • OpenCV:二值化与自适应阈值
  • Chameleon(变色龙) 跨平台编译C文件,并一次性生成多个平台的可执行文件
  • JavaScript系列(43)--依赖注入系统实现详解