[pytorch] torch.nn.Conv3D 的使用介绍
torch.nn.Conv3D 参数
3D卷积, 一般是在处理的视频的时候才会使用,目的是为了提取时序信息(temporal feature),输入的size是(N,Cin,D,H,W),输出size是(N,Cout,Dout,Hout,Wout)
输入参数
- N: batch_size, 以此训练的样本数
- Cin: 通道数,对于一般的RGB图像就是3
- D: 这个参数是在二维卷积中没有的,也是能提取到时序信息的关键,但是也很好理解,就是用于提取时序特征的帧数
- H/W: 一帧图片的大小
输出参数
- 输出的参数中需要值得提的就是Dout, 这个参数就是提取的时序信息的维度,具体的大小是由卷积核的大小确定的
网络参数
对于torch.nn.Conv3D(c_in, c_out, kernel_size, stride, padding)
- c_in/c_out: 输入/出通道数
- kernel_size: 卷积核大小
- stride/padding: 步长/补位
使用示例
import torch
import torch.nn as nn
from torch import autograd
# kernel_size的第哥一维度的值是每次处理的图像帧数,后面是卷积核的大小
m = nn.Conv3d(3, 3, (3, 7, 7), stride=1, padding=0)
input = autograd.Variable(torch.randn(1, 3, 7, 60, 40))
output = m(input)
print(output.size())
# 输出是 torch.Size([1, 3, 5, 54, 34])
从上面可以看出如果输入的大小是(1,3,7,h,w)、kernel的大小是(3,7,7)的时候,输出的大小是(1,3,5,h‘,w’),关于卷积之后h‘和w’的计算取决于kernel的后两个维度,这个和二维卷积一致不再赘述,以下主要介绍一下如何得出5这个维度。
首先来看一张图来理解3D卷积的过程:
这个图可以很清楚地表示出3D卷积的过程,也就是说一个kernel可以同时对于时间维度上的多帧图像进行卷积,具体对几帧就是由kernel的第一个维度的参数来确定。
在本例中,输入的大小是(1,3,7,h,w)、kernel的大小是(3,7,7)的时候,就是同时对3帧进行处理,所以计算方法就是7-3+1=5,所以输出的大小是(1,3,5,h‘,w‘),从这个计算过程可以看出在默认情况下也就是在时间上的stride是1的时候,这种多帧的卷积是存在帧之间的重叠的。
最后贴上pytorch官方文档说明