图像卷积
二维互相关运算
1 | import torch |
验证上述二维互相关运算的输出:
1 | X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]]) |
1 | tensor([[19., 25.], |
二维卷积层
1 | class Conv2D(nn.Module): |
图像中目标的边缘检测
卷积层的一个简单应用:通过找到像素变化的位置,来检测图像中不同颜色的边缘。
1 | X = torch.ones((6, 8)) |
1 | tensor([[1., 1., 0., 0., 0., 0., 1., 1.], |
1 | K = torch.tensor([[1.0, -1.0]]) |
输出Y
中的1代表从白色到黑色的边缘,-1代表从黑色到白色的边缘
1 | Y = corr2d(X, K) |
1 | tensor([[ 0., 1., 0., 0., 0., -1., 0.], |
卷积核K
只可以检测垂直边缘
1 | corr2d(X.t(), K) |
1 | tensor([[0., 0., 0., 0., 0.], |
学习卷积核
学习由X
生成Y
的卷积核
1 | conv2d = nn.Conv2d(1, 1, kernel_size=(1, 2), bias=False) |
1 | batch 2, loss 3.910 |
所学的卷积核的权重张量:
1 | conv2d.weight.data.reshape((1, 2)) |
1 | tensor([[ 1.0012, -0.9793]]) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 OE.Heart's Blog!