之前了解resnet和unet都有跳跃连接,就想了解它们之间的区别。可能是我太笨,其实一般人看到论文基本就知道区别是什么了,如果也有同学了解到这俩模型但是也不知道它们的区别恰好也想知道它们的区别,可以往下读,文章内容不多,欢迎各位大佬批评指正。
unet论文链接[1505.04597] U-Net: Convolutional Networks for Biomedical Image Segmentation (arxiv.org)
resnet论文链接[1512.03385] Deep Residual Learning for Image Recognition (arxiv.org)
下图是unet的结构图,其中,中间的灰色的线就是它的跳跃连接。它的连接时维度与维度之间的,就拿第一条最长的那个灰色的线来说 ,指过去之前那个蓝色块是64维的,它指过去之后与上采样的64维加一块变成128维。其中我了解到的代码,只说连接部分,unet这部分是用torch.cat作为连接的。torch.cat不了解的同学可以参考https://blog.csdn.net/xinjieyuan/article/details/105208352讲的很详细。
然后是resnet,resnet与unet的跳跃链接不能说是完全不同,只能说是毫不相关。最下面的图是resnet的模块图。显然resnet也有根线从x连接到+号那。但是它不属于维度相加,它就是单纯的两个tensor相加。 如下图
说白了就是逐个相加。我没说明白的话可以看一下代码。如下。把x赋给identity后对x进行卷积,bn,relu啥的然后后面out+=identity就说白了加的不就是之前的x嘛。
forward(self, x):
identity = x
out = self.conv1(x)
out = self.bn1(out)
out = self.relu(out)
out = self.conv2(out)
out = self.bn2(out)
out = self.relu(out)
out = self.conv3(out)
out = self.bn3(out)
if self.downsample is not None:
identity = self.downsample(x)
out += identity
out = self.relu(out)