深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现

文章目录

      • 图像分割与Pytorch实现
        • 1、图像分割是什么
        • 2、模型是如何将图像分割的
        • 3、深度学习图像分割模型简介
          • (1)FCN模型
          • (2)Unet模型
          • (3)Deepnet系列
            • 1)Deepnet-V1
            • 2)Deepnet-V2
            • 3)Deepnet-V3
            • 4)Deepnet-V3+
        • 4、训练Unet完成人像抠图

图像分割与Pytorch实现

1、图像分割是什么

图像分割本质上是对图像中的每一个像素进行分类,图像分割通常有下面四个领域:

  • 超像素分割:少量超像素代替大量像素,常用于图像预处理。下图中,每一个白色的区域都是一个超像素,是由很多像素构成的,通常来说,一个超像素中的像素性质都是非常接近的,例如下面这幅图中的每个超像素中的点颜色都非常接近。超像素分割的意义在于可以用少量的超像素代替大量的超像素,这样可以加快后面的训练速度

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第1张图片

  • 语义分割:逐像素分类,无法区分个体,语义分割就是我们通常所说的图像分割, 本质上是一个分类任务,相同的类别具有相同的颜色,如下图所示

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第2张图片

  • 实例分割:对个体目标进行分割, 像素级目标检测;实例分割只对我们感兴趣的对象进行分割,如下图所示,只对人物进行了分割,而对树木和草地都没有进行任何处理

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第3张图片

  • 全景分割:语义分割结合实例分割,全景分割相当于是语义分割与实例分割结合,既拥有了对每个像素点分类的能力,又拥有了对每个个体进行区分的能力,如下图所示:

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第4张图片

2、模型是如何将图像分割的

  • 图像分割需要的输入是一张图片,输出也是一张图片,那么对于计算机而言,输入的就一定是一个三维张量,例如(3, 224, 224),表示的就是一个3通道的,大小为224$\times$224的一张图片,输出也应该是一个三维张量,例如(21, 224, 224),这里的21指的是分类的类别数为21

  • 从本质上来说,图像分割模型与图像分类模型都只干了一件事情,那就是将数据映射到特征,而人类根据自身不同的场景,定义特征的物理意义,解决实际问题,所以模型如何完成图像分割这个过程是由模型与人类配合完成的

  • 图像分割思考:如下图所示,我们将狗的头与猫的身体进行拼接,然后就行分割,可以看到模型将整体视为一只狗,从中可以发现,模型在进行分割时,头部起到了主要作用,所以不仅仅是考虑了对于每个像素的分类,同时考虑了图像的整体信息

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第5张图片

3、深度学习图像分割模型简介

(1)FCN模型

F C N FCN FCN是2014年提出的模型,最大的特点是全部利用卷积层实现了图像的分割,相较于 R e s n e t Resnet Resnet F C N FCN FCN并没有全连接层,这样提高了模型的适用范围,可以用于不同尺寸大小图片的分割任务

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第6张图片

(2)Unet模型

U n e t Unet Unet是一个经典的图像分割网络,最先用于医学图像的分割,医学图像的最大特点就是样本量小,而 U n e t Unet Unet可以在样本量小的情况下取得一个比较好的分割效果,这就是 U n e t Unet Unet的强大之处

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第7张图片
从上图中可以看出, U n e t Unet Unet的名字由于网络的形状像一个 U U U,因此称之为 U n e t Unet Unet,通常我们可以把 U n e t Unet Unet从中间分开,左边为编码器,右边为解码器, U n e t Unet Unet最大的特点是图中灰色的箭头,表示可以将编码器的特征可以传到解码器进行特征融合

(3)Deepnet系列

D e e p n e t Deepnet Deepnet系列发展到现在共有4个版本, V 1 V1 V1 V 2 V2 V2 V 3 V3 V3 V 4 V4 V4四个版本

1)Deepnet-V1

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第8张图片

主要特点:

  • 孔洞卷积:借助孔洞卷积,增大感受野
  • CRF:采用CRF进行mask后处理
2)Deepnet-V2

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第9张图片

主要特点:

  • ASPP(Atrous spatial pyramid pooling ):解决多尺度问题,这种带空洞的金字塔池化思路非常有用,如上图所示,对于同一个输入的 feature map ,采用了四种 3 × 3 3\times3 3×3的卷积核进行特征提取,但是这四种卷积核的感受野是不错的,这就完成了对同一 feature map 的多尺度特征提取
3)Deepnet-V3

V 3 V3 V3模型是结合了 V 1 V1 V1 V 2 V2 V2模型的特点得到的

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第10张图片

主要特点是:

  • 孔洞卷积的串行:如下图所示,将孔洞卷积串行,这样得到的输出能够保持一个很好的像素
    深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第11张图片
  • ASPP的并行:如下图所示,将ASPP并行,将得到的特征进行一个拼接,然后接上一个 1 × 1 1\times1 1×1的卷基层,最后输出

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第12张图片

4)Deepnet-V3+

V 3 + V3+ V3+ V 3 V3 V3的基础上加上了编码和解码过程

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第13张图片

主要特点:

  • D e e p L a b V 3 DeepLabV3 DeepLabV3基础上加上 E n c o d e r − D e c o d e r Encoder-Decoder EncoderDecoder思想

4、训练Unet完成人像抠图

U n e t Unet Unet是一个二分类的网络,可以用于人像的抠图, U n e t Unet Unet中的forward函数如下:

def forward(self, x):
    enc1 = self.encoder1(x)
    enc2 = self.encoder2(self.pool1(enc1))
    enc3 = self.encoder3(self.pool2(enc2))
    enc4 = self.encoder4(self.pool3(enc3))

    bottleneck = self.bottleneck(self.pool4(enc4))

    dec4 = self.upconv4(bottleneck)
    dec4 = torch.cat((dec4, enc4), dim=1)
    dec4 = self.decoder4(dec4)

    dec3 = self.upconv3(dec4)
    dec3 = torch.cat((dec3, enc3), dim=1)
    dec3 = self.decoder3(dec3)

    dec2 = self.upconv2(dec3)
    dec2 = torch.cat((dec2, enc2), dim=1)
    dec2 = self.decoder2(dec2)

    dec1 = self.upconv1(dec2)
    dec1 = torch.cat((dec1, enc1), dim=1)
    dec1 = self.decoder1(dec1)

    return torch.sigmoid(self.conv(dec1))

运行结果:

深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现_第14张图片

你可能感兴趣的:(深度之眼Pytorch框架训练营第四期——图像分割与Pytorch实现)