为什么全卷积可以输入任意大小的图片,这是因为全连接的输入特征必须是固定大小的,所以输入图片必须是固定大小,而全卷积的话由于最终的输出只是通道上的值,比如最后输出置信度和偏移,共5个值,用全连接的话输出神经元就得是5个,而全连接的话只需要给5个通道就可以了,至于卷出来的最终图像大小是多少无所谓,因为我只取那个通道的值,示例如下:
from Net import Pnet
from PIL import Image
import torch
import numpy as np
image = Image.open(r'C:\Users\34801\Desktop\test_0808\test\11111.jpg')
image = np.array(image)
image = np.transpose(image,[2,0,1])
image = np.expand_dims(image,axis=0)
image = torch.FloatTensor(image)
net = Pnet()
conf,off = net(image)
print(conf[0,:,0,0],off[0,:,0,0])
输出:tensor([0.0796], grad_fn=<SelectBackward>) tensor([-1.3049, -2.7597, 5.5426, -4.7604], grad_fn=<SelectBackward>)
我打印看看形状:
print(conf.shape,off.shape,image.shape)
输出:
torch.Size([1, 1, 342, 595]) torch.Size([1, 4, 342, 595]) torch.Size([1, 3, 693, 1200])
因此置信度和偏移是一个矩阵。
所有这就是为什么全卷积网络可以输入任意大小的图片的原因