在卷積神經網絡中,有使用設置padding的參數,配合卷積步長,可以使得卷積后的特征圖尺寸大小不發生改變,那么在手動實現圖片或特征圖的邊界零填充時,常用的函數是nn.ZeroPad2d(),可以指定tensor的四個方向上的填充,比如左邊添加1dim、右邊添加2dim、上邊添加3dim、下邊添加4dim,即指定paddin參數為(1,2,3,4),本文中代碼設置的是(3,4,5,6)如下:
import torch.nn as nn
import cv2
import torchvision
from torchvision.utils import save_image
def same_padding(img):
toTensor=torchvision.transforms.ToTensor()
img=cv2.imread(img)#獲得的是(H,W,C)
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#轉換成正常的RGB通道
print("img_cv2 shape:",img.shape)
img_tensor=toTensor(img)#轉成tensor后是(C,H,W)
print("img_tensor shape:",img_tensor.shape)
pad=nn.ZeroPad2d(padding=(3,4,5,6))
img_padding=pad(img_tensor)
print("img_padding shape:",img_padding.shape)
save_image(img_padding,'img_padding.jpg')#將tensor格式的圖片,直接保存成圖片
same_padding('bird.jpg')
代碼中需要注意的是,必須要將圖片數據轉換成tensor數據類型的才可以使用nn.zeroPad2d()函數
為了凸顯效果圖:我們將設置大尺度的0填充
nn.ZeroPad2d(padding=(100,30,60,60))

知識點擴展:pytorch零填充函數ZeroPad2d作用
pytorch中最常用的零填充函數是nn.ZeroPad2d,也就是對Tensor使用0進行邊界填充,我們可以指定tensor的四個方向上的填充數,比如左邊添加1dim、右邊添加2dim、上邊添加3dim、下邊添加4dim,即指定paddin參數為(1,2,3,4),如下:
pad = nn.ZeroPad2d(padding=(1, 2, 3, 4))
y = pad(x)
得到的y是x在四個方向上按照(1,2,3,4)進行的補零操作,如下圖:

到此這篇關于pytorch中的nn.ZeroPad2d()零填充函數實例詳解的文章就介紹到這了,更多相關pytorch 零填充函數內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- 基于python及pytorch中乘法的使用詳解
- PyTorch安裝與基本使用詳解
- pytorch中[..., 0]的用法說明