R(2+1)D代码链接与论文
链接: https://github.com/jfzhang95/pytorch-video-recognition.
论文:《A Closer Look at Spatiotemporal Convolutions for Action Recognition》
建议对照代码看
R(2+1)D模型结构
R(2+1)D模型结构图
block_type=SpatioTemporalResBlock
layer_size=[2,2,2,2]
SpatioTemporalConv模块结构
SpatioTemporalConv的输入参数:(in_channels,out_channels,kernel_size,stride=1,padding=0,
bias=False,first_conv=False)
在代码中,当first_conv=True时intermed_channels=45,否则intermed_channels=(kernel_size[0] * kernel_size[1] * kernel_size[2] * in_channels * out_channels)/(kernel_size[1] * kernel_size[2] * in_channels+kernel_size[0] * out_channels),temporal_kernel_size=(3,1,1),spatial_padding=(1,0,0)在R3D中的Conv3d卷积核尺寸为txtxt,而R(2+1)D将其变为先进行卷积核为1xtxt的Spatial_conv,然后再进行tx1x1的Temporal_conv。
spatial_kernel_size=(1,kernel_size[1],kernel_size[2])
spatial_stride=(1,stride[1],stride[2])
spatial_padding=(0,padding[1],padding[2])
temporal_kernel_size=(kernel_size[0],1,1)
temporal_stride=(stride[0],1,1)
temporal_padding=(padding[0],0,0)
SpatioTemporalResLayer模块结构
SpatioTemporalResLayer的输入参数:(in_channels,out_channels,kernel_size,layer_size,
block_type=SpatioTemporalResBlock,downsample=False)
SpatioTemporalResBlock模块结构
该模型为残差网络结构
SpatioTemporalResBlock的输入参数:(in_channels,out_channels,kernel_size,stride=1,downsample=False)
padding=kernel_size//2
当downsample=True时,将对输入的Tensor进行下采样,输入的Tensor为(N,C,D,X,Y),输出的Tensor为(N,out_channels,D/2,X/2,Y/2),此时的模型结构图如下:
当downsample=False时,对输入的Tensor不进行下采样,输入和输出的Tensor的shape一样,此时的模型结构图如下: