super(Res1Unet, self).__init__()
# down sampling
# 假如输入 224*224*1 的图像
# H = ((224 - 3 + 1 + 2 - 1) / 1) + 1 = 224 unet的卷积不会改变特征图的大小
self.conv1 = DoubleConv(in_ch, 64)
# to increase the dimensions
self.w1 = nn.Conv2d(in_ch, 64, kernel_size=1, padding=0, stride=1)
self.pool1 = nn.MaxPool2d(2) # 224 -> 112
self.conv2 = DoubleConv(64, 128) # 不变
# to increase the dimensions
self.w2 = nn.Conv2d(64, 128, kernel_size=1, padding=0, stride=1)
self.pool2 = nn.MaxPool2d(2) # 56
self.conv3 = DoubleConv(128, 256)
# to increase the dimensions
self.w3 = nn.Conv2d(128, 256, kernel_size=1, padding=0, stride=1)
self.pool3 = nn.MaxPool2d(2) # 28
self.conv4 = DoubleConv(256, 512)
# to increase the dimensions
self.w4 = nn.Conv2d(256, 512, kernel_size=1, padding=0, stride=1)
self.pool4 = nn.MaxPool2d(2) # 14
self.conv5 = DoubleConv(512, 1024)
# to increase the dimensions
self.w5 = nn.Conv2d(512, 1024, kernel_size=1, padding=0, stride=1)
# up sampling
# H_out = (14 - 1) * 2 + 2 = 28 往上反卷积
self.up6 = nn.ConvTranspose2d(1024, 512, 2, stride=2)
self.conv6 = DoubleConv(1024, 512) # 28
self.up7 = nn.ConvTranspose2d(512, 256, 2, stride=2)
self.conv7 = DoubleConv(512, 256)
self.up8 = nn.ConvTranspose2d(256, 128, 2, stride=2)
self.conv8 = DoubleConv(256, 128)
self.up9 = nn.ConvTranspose2d(128, 64, 2, stride=2)
self.conv9 = DoubleConv(128, 64)
self.conv10 = nn.Conv2d(64, out_ch, 1)
# 训练时尝试让神经元失活,加大泛化性,仅在训练时使用,pytorch自动补偿参数
self.dropout = nn.Dropout(p=0.3)
def forward(self, x):
# 下采样部分
down0_res = self.w1(x) # residual block,残差连接
down0 = self.conv1(x) + down0_res
down1 = self.pool1(down0)
down1_res = self.w2(down1) # residual block
down1 = self.conv2(down1) + down1_res
down2 = self.pool2(down1)
down2_res = self.w3(down2)
down2 = self.conv3(down2) + down2_res
down3 = self.pool3(down2)
down3_res = self.w4(down3)
down3 = self.conv4(down3) + down3_res
down4 = self.pool4(down3)
down4_res = self.w5(down4)
# 5 , 连接上采样部分前,双卷积卷积操作 [14, 14, 1024]
down5 = self.conv5(down4) + down4_res
# 上采样部分
up_6 = self.up6(down5) # [28, 28, 512]
merge6 = torch.cat([up_6, down3], dim=1) # cat之后又变为[28, 28, 1024]
c6 = self.conv6(merge6) # 重新双卷积变为[28, 28, 512]
up_7 = self.up7(c6) # [56, 56, 256]
merge7 = torch.cat([up_7, down2], dim=1)
c7 = self.conv7(merge7) # [56, 56, 256]
up_8 = self.up8(c7) # [112, 112, 128]
merge8 = torch.cat([up_8, down1], dim=1)
c8 = self.conv8(merge8) # [112, 112, 128]
up_9 = self.up9(c8) # [224, 224, 64]
merge9 = torch.cat([up_9, down0], dim=1)
c9 = self.conv9(merge9) # [224, 224, 64]
c10 = self.conv10(c9) # 卷积输出最终图像 [224, 224, t]
return c10
在这个例子中,`w1`、`w2`、`w3`、`w4`、`w5`是为了匹配维度而设置的1x1卷积,它们允许我们将原始输入或下采样后的特征添加到特征图中,这样就实现了残差连接。在U-Net的每个编码阶段之后,我们都会加上一个这样的残差连接。
#### 2.2 图示
##### 2.2.1 unet
![在这里插入图片描述](https://img-blog.csdnimg.cn/f1cb487379784fb3bf67955d35aa3b34.png#pic_center)
##### 2.2.2 加入残差连接改进
![在这里插入图片描述](https://img-blog.csdnimg.cn/3381fa50a7434441bed98884eeab2499.png#pic_center)
### 3.为什么要使用ResUnet?
#### 3.1优势
1. **改善梯度流通**:通过加入残差连接,梯度可以直接流经较短的路径,减少训练过程中的梯度消失问题。
2. **加速收敛**:残差连接有助于网络更快地收敛,提高训练效率。
3. **提高性能**:Res1Unet可以更好地捕捉到图像的细节和上下文信息,提高分割的准确性。
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/fcfead2ce4ea33e8885359751952a70e.png)
![img](https://img-blog.csdnimg.cn/img_convert/0992433ab201cc764b4415ed5eddacbe.png)
![img](https://img-blog.csdnimg.cn/img_convert/9e9d5546a3e75faa278c12ba05506fb2.png)
![img](https://img-blog.csdnimg.cn/img_convert/91b788cfccb01be381dd20d514cc4511.png)
![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)
![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**
盖了95%以上前端开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**
![](https://img-blog.csdnimg.cn/img_convert/0d97520089da54aeb94ec4da9f056f21.jpeg)