[pytorch] torch.nn.Conv3D 的使用介绍

torch.nn.Conv3D 参数

3D卷积, 一般是在处理的视频的时候才会使用,目的是为了提取时序信息(temporal feature),输入的size是(N,Cin,D,H,W),输出size是(N,Cout,Dout,Hout,Wout)

输入参数

  1. N: batch_size, 以此训练的样本数
  2. Cin: 通道数,对于一般的RGB图像就是3
  3. D: 这个参数是在二维卷积中没有的,也是能提取到时序信息的关键,但是也很好理解,就是用于提取时序特征的帧数
  4. H/W: 一帧图片的大小

输出参数

  1. 输出的参数中需要值得提的就是Dout, 这个参数就是提取的时序信息的维度,具体的大小是由卷积核的大小确定的

网络参数

对于torch.nn.Conv3D(c_in, c_out, kernel_size, stride, padding)

  1. c_in/c_out: 输入/出通道数
  2. kernel_size: 卷积核大小
  3. 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官方文档说明

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页