利用U-Net处理图像分割问题
图像分割应用场景
常用于医学上的影像分割
数据
标签
U-Net
网络优化
网络采用了最大池化进行下采样,一般的我们认为maxpool、padding会破坏图片的位置信息,所以可以用卷积层代替池化层,这样有利于保护位置信息,并且增加网络容量,而上采样不用转置卷积,因为转置卷积会产生象棋格效应,这对于图像语义信息产生了影响,所以可以采用邻近插值法代替转置卷积,由于随着网络层次的加深会产生梯度弥散问题,所以加了skip connection,可以有效地缓解这一问题,并且skip connection可以让信息流动更加通畅,这也接下来U-Net的改进版本U-Net++的提出
skip connection
一般的像这种稠密信息转稠密信息,我们都可以把网络设计成类似于哑铃的结构(编解码结构),图片经过下采样过后,留下的是图片的轮廓信息,比较抽象和高级,那么可以看成是总结,而加了skip connection可以看成是增加细节部分,这也是U-Net比传统卷据FCN好的地方,而到了U-Net++作者大量的使用了skip connection这种残差结构
U-Net++
利用pytorch实现U-Net
import torch.nn as nn
import torch
from torch.nn import functional
#把常用的2个卷积操作简单封装下
class DoubleConv(nn.Module):
def __init__(self, in_ch, out_ch):
super(DoubleConv, self).__init__()
self.conv = nn.Sequential(
nn.Conv2d(in_ch, out_ch, 3, padding=1,stride=1),
nn.BatchNorm2d(out_ch), #添加了BN层
nn.ReLU(inplace=True),
nn.Conv2d(out_ch, out_ch, 3, padding=1,stride=1)