3D卷积学习笔记
2D维卷积核与三维卷积核有什么区别?
车牌识别用到了3d卷积:
LPRNet_Pytorch/LPRNet.py at master · sirius-ai/LPRNet_Pytorch · GitHub
3d卷积详解:
-
f = nn.Conv3d(16, 33, 3, stride=2)
-
f = nn.Conv3d(2, 3, (2, 3, 3), stride=(1, 1, 1), padding=(0, 0, 0))
-
i = torch.Tensor(np.array(range(0,200)).reshape(1,2,4,5,5))
-
a = torch.Tensor(range(0,108)).reshape(3,2,2,3,3)
-
-
f.weight = torch.nn.Parameter(a)
-
output = f(i) #1x3x3x3x3
-
-
-
-
y01221 = torch.sum(a[1,:,:,:,:]*i[0,:,2:4,2:5,1:4])
-
g01221 = output[0,1,2,2,1]#1x3x3x3x3
从以上代码中可以看出:
- 输入i的维度为(1,2,4,5,5),表示batch=1,feature=2,depth=4,h=5,w=5。
- 滤波器f的维度为(3,2,2,3,3)表示:
- 维度的第一个数字3由Conv3d的第二个参数决定,表示有3个(2,3,3)的滤波器,
- 维度的第二个数字2由Conv3d的第一个参数决定,必须和输入i的feature维度相同,这里和Conv2D表示相同的含义,例如在2d中,卷积的尺寸是3x3,输入feature维度为5,那么就默认卷积的维度为(5,3,3),因为需要和输入的feature维度对应。
- 剩下3个参数具有相同的含义,只不过维度不相同,分别为在depth维度一次扫描2格,在h维度一次扫描3格,在w维度一次扫描3格。
y01221 = torch.sum(a[1,:,:,:,:]*i[0,:,2:4,2:5,1:4])
g01221 = output[0,1,2,2,1]#1x3x3x3x3
根据输出 output[0,1,2,2,1]反推是输入的那一部分和滤波器反应,output.size[1]=1,说明这个是第2个3D滤波器,因此a的第一个参数填1来取出第2个3D滤波器的值。接下来要取出输入的值,由output.size(2)=2可以知道,该3D滤波器在depth维度滑到第3次停下(是这样滑动的:第一次滑动取出0:2,第二次1:3,第三次2:4),并且要取出所有feature维度的值,也就是concatenate((i[0,0,2:4,2:5,1:4],i[0,1,2:4,2:5,1:4]),0)=i[0,:,2:4,2:5,1:4].在h维度和w维度也是相同操作,h维度滑到第3次停下(2:5),w维度滑到第2次停下(1:4,因为一次滑动5格)。
文章来源: blog.csdn.net,作者:AI视觉网奇,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jacke121/article/details/123675306
- 点赞
- 收藏
- 关注作者
评论(0)