|
9#
楼主 |
发表于 2020-6-11 15:13:10
|
只看该作者
自己解决了。你们的实现就是有问题的。
原版 :
self.conv3x1_2 = nn.Conv2d(chann, chann, (3, 1), stride=1, padding=(1*dilated,0), bias=True, dilation = (dilated, dilated))
self.conv1x3_2 = nn.Conv2d(chann, chann, (1, 3), stride=1, padding=(0,1*dilated), bias=True, dilation = (dilated, dilated))
修改完:
self.conv3x1_2 = nn.Conv2d(chann, chann, (3, 3), stride=1, padding=(1*dilated,1*dilated), bias=True, dilation = (dilated, dilated))
self.conv1x3_2 = nn.Conv2d(chann, chann, (3, 3), stride=1, padding=(1*dilated,1*dilated), bias=True, dilation = (dilated, dilated))
修改后将权重按逻辑位置放回,得到正确的结果。(与torch版本完全一致)
我猜测你们底层在实现不对称kernel的时候,会潜在补齐,更新为 对称的kernel ,如这里的 (1, 3), (3, 1)被更新为 (3, 3).
但是这里你们补齐的时候出现了问题,按逻辑上应该上 1 -》3 后 原数据应该放置于3的中间通道。但是不知道为什么你们在这一步上
的实现出bug了。而且我试了一下,把数据放在其他两个通道上都试运行一下,均无法跑出1楼图里的效果。你们可以自己看看具体是啥问题了。
|
|