padding操作

部署运行你感兴趣的模型镜像

之前对卷积网络中padding操作一直存在错误理解,以为padding=SAME为输入和输出尺寸一样大,但是最近看了一些论文和资料后发现,之前的理解错误,下面是tensorflow中源码的实现,可以看出padding=VALID和padding=SAME的计算公式
这里写图片描述

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

### 图像处理中的 Padding 操作实现方法 在图像处理中,Padding 是一种常见的预处理技术,用于解决卷积操作导致的图像缩小问题或边缘信息丢失问题。以下是几种实现 Padding 操作的方法及其特点: #### 1. 使用 PyTorch 实现 Padding PyTorch 提供了灵活的 Padding 方法,可以通过 `torch.nn.functional.pad` 或自定义 Padding 层来实现[^2]。例如,零填充(Zero Padding)是最常用的方式,但在某些情况下可能导致边缘伪影。此时可以考虑镜像填充(Reflection Padding)或其他类型的填充。 代码示例: ```python import torch import torch.nn.functional as F # 输入张量 (模拟一个3x3的图像) input_tensor = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=torch.float32).unsqueeze(0).unsqueeze(0) # 零填充 (p=1) padded_tensor_zero = F.pad(input_tensor, (1, 1, 1, 1), mode='constant', value=0) print("Zero Padding:\n", padded_tensor_zero.squeeze()) # 镜像填充 (p=1) padded_tensor_reflect = F.pad(input_tensor, (1, 1, 1, 1), mode='reflect') print("Reflect Padding:\n", padded_tensor_reflect.squeeze()) ``` #### 2. 使用 OpenCV 实现 Padding OpenCV 提供了 `cv.copyMakeBorder` 函数,能够方便地对图像进行边界扩充[^4]。通过指定 `top`, `bottom`, `left`, `right` 参数以及边界类型(如常数值填充、复制边缘等),可以实现多种 Padding 方式。 代码示例: ```python import cv2 import numpy as np # 创建一个 3x3 的图像 img = np.ones((3, 3), dtype=np.uint8) * 255 # 使用常数填充 (值为0) padded_img = cv2.copyMakeBorder(img, 1, 2, 3, 4, cv2.BORDER_CONSTANT, value=0) print("Padded Image Shape:", padded_img.shape) print(padded_img) ``` #### 3. 自定义 Padding 实现 如果需要更灵活的控制,可以使用 NumPy 手动实现 Padding。以下是一个简单的例子,展示如何通过上下左右填充特定值来扩展图像尺寸[^5]。 代码示例: ```python import numpy as np def padding(data, num=20): """ 对数据进行 Padding 操作 """ padding1 = np.zeros((data.shape[0], int(num / 2))).astype(int) - 1 padding2 = np.zeros((int(num / 2), data.shape[1])).astype(int) - 1 # 左右填充 data = np.hstack((padding1, data)) data = np.hstack((data, padding1)) # 上下填充 data = np.vstack((padding2, data)) data = np.vstack((data, padding2)) return data # 示例输入 data = np.arange(12).reshape(3, 4) padded_data = padding(data, num=10) print("Original Data:\n", data) print("Padded Data:\n", padded_data) ``` #### 4. 常见 Padding 类型 - **Zero Padding**:用零填充边界,简单高效但可能引入伪影[^2]。 - **Reflection Padding**:用镜像像素填充边界,适合避免伪影的场景。 - **Replication Padding**:用边缘像素重复填充边界[^3]。 - **Constant Padding**:用指定常数值填充边界[^4]。 #### 计算公式与输出尺寸 当对图像进行 Padding 后,输出尺寸可以通过以下公式计算[^3]: \[ \text{Output Size} = \text{Input Size} + 2 \times p - k + 1 \] 其中: - \( p \) 是填充的数量, - \( k \) 是卷积核大小。 --- ### 总结 Padding 操作在图像处理中具有重要作用,能够避免卷积操作带来的图像缩小和边缘信息丢失问题。根据具体需求,可以选择合适的工具(如 PyTorch、OpenCV 或自定义实现)和填充类型(如 Zero Padding、Reflection Padding 等)来实现 Padding
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值