论文地址:U-Net: Convolutional Networks for Biomedical Image Segmentation

主要内容

人像分割简介UNet的简介UNet实现人像分割
人像分割简介

人像分割的相关应用非常广,例如基于人像分割可以实现背景的替换做出各种非常酷炫的效果。我们将训练数据扩充到人体分割,那么我们就是对人体做美颜特效处理,同时对背景做其他的特效处理,这样整张画面就会变得更加有趣,更加提高颜值了,这里我们对人体前景做美颜调色处理,对背景做了以下特效:

①景深模糊效果,用来模拟双摄聚焦效果;②马赛克效果③缩放模糊效果④运动模糊效果⑤油画效果⑥线条漫画效果⑦Glow梦幻效果⑧铅笔画场景效果⑨扩散效果

而在在实现这些效果之前,所需要的一步操作都是需要将人像抠出来。今天的主要内容是要介绍如何使用UNet实现人像分割。

UNet的简介

UNet的结构非常简单,广泛应用于医学图像分割,2015年发表在 MICCAI,谷歌学术上目前引用量8894,可以看出来其影响力。

UNet的结构,有两个最大的特点,U型结构和skip-connection(如下图)。

UNet网络,形似一个U字母:首先进行Conv(两次)+Pooling下采样;然后Deconv反卷积进行上采样(部分采用resize+线性插值上采样),crop之前的低层feature map,进行融合;然后再次上采样。重复这个过程,直到获得输出388x388x2的feature map,最后经过softmax获得output segment map。总体来说与FCN思路非常类似。
人像分割项目链接:

https://github.com/leijue222/portrait-matting-unet-flask
官方下载链接:http://www.cse.cuhk.edu.hk/leojia/projects/automatting/index.html或者:百度网盘:http://pan.baidu.com/s/1dE14537密码:ndg8

定义UNet 需要用的主要模块

""" Parts of the U-Net model """import torch
import torch.nn as nn
import torch.nn.functional as Fclass DoubleConv(nn.Module):"""(convolution => [BN] => ReLU) * 2"""def __init__(self, in_channels, out_channels):super().__init__()self.double_conv = nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1),nn.BatchNorm2d(out_channels),nn.ReLU(inplace=True),nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1),nn.BatchNorm2d(out_channels),nn.ReLU(inplace=True))def forward(self, x):return self.double_conv(x)class Down(nn.Module):"""Downscaling with maxpool then double conv"""def __init__(self, in_channels, out_channels):super().__init__()self.maxpool_conv = nn.Sequential(nn.MaxPool2d(2),DoubleConv(in_channels, out_channels))def forward(self, x):return self.maxpool_conv(x)class Up(nn.Module):"""Upscaling then double conv"""def __init__(self, in_channels, out_channels, bilinear=True):super().__init__()# if bilinear, use the normal convolutions to reduce the number of channelsif bilinear:self.up = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)else:self.up = nn.ConvTranspose2d(in_channels // 2, in_channels // 2, kernel_size=2, stride=2)self.conv = DoubleConv(in_channels, out_channels)def forward(self, x1, x2):x1 = self.up(x1)# input is CHWdiffY = torch.tensor([x2.size()[2] - x1.size()[2]])diffX = torch.tensor([x2.size()[3] - x1.size()[3]])x1 = F.pad(x1, [diffX // 2, diffX - diffX // 2,diffY // 2, diffY - diffY // 2])# if you have padding issues, see# https://github.com/HaiyongJiang/U-Net-Pytorch-Unstructured-Buggy/commit/0e854509c2cea854e247a9c615f175f76fbb2e3a# https://github.com/xiaopeng-liao/Pytorch-UNet/commit/8ebac70e633bac59fc22bb5195e513d5832fb3bdx = torch.cat([x2, x1], dim=1)return self.conv(x)class OutConv(nn.Module):def __init__(self, in_channels, out_channels):super(OutConv, self).__init__()self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=1)def forward(self, x):return self.conv(x)

利用上面定义好的模块,轻松的实现UNet网络

""" Full assembly of the parts to form the complete network """import torch.nn.functional as Ffrom .unet_parts import *class UNet(nn.Module):def __init__(self, n_channels, n_classes, bilinear=True):super(UNet, self).__init__()self.n_channels = n_channelsself.n_classes = n_classesself.bilinear = bilinearself.inc = DoubleConv(n_channels, 64)self.down1 = Down(64, 128)self.down2 = Down(128, 256)self.down3 = Down(256, 512)self.down4 = Down(512, 512)self.up1 = Up(1024, 256, bilinear)self.up2 = Up(512, 128, bilinear)self.up3 = Up(256, 64, bilinear)self.up4 = Up(128, 64, bilinear)self.outc = OutConv(64, n_classes)def forward(self, x):x1 = self.inc(x)x2 = self.down1(x1)x3 = self.down2(x2)x4 = self.down3(x3)x5 = self.down4(x4)x = self.up1(x5, x4)x = self.up2(x, x3)x = self.up3(x, x2)x = self.up4(x, x1)logits = self.outc(x)return logits

如果你想重新训练的话,也很容易,根据上面提供的数据集,将原图和mask分别

放置在 文件夹 data/imgs和 data/masks 路径下即可

然后运行下面的代码

python train.py -e 200 -b 1 -l 0.1 -s 0.5 -v 15.0

各个参数的含义

-e 表示 epoch 数

-b 表示 batch size

-l 表示学习率

-s 表示 scale

-v 表示 验证集所占的百分比

参考:unet训练自己的数据集_基于UNet网络实现的人像分割 | 附数据集

Unet用于人像分割相关推荐

  1. 一种结构化随机失活UNet用于视网膜血管分割

    1.目的:减少UNet中过拟合问题,提升端到端分割血管的能力 2主要工作: (1)受DropBlock启发在每层卷积后使用了结构化随机失活:
 



(2)在三个视网膜图像数据集上测试了SD-UNe ...

  2. 【CV】基于UNet网络实现的人像分割 | 附数据集

    文章来源于AI算法与图像处理,作者AI_study 今天要分享的是人像分割相关的内容,如果你喜欢的话,欢迎三连哦 主要内容 人像分割简介 UNet的简介 UNet实现人像分割 人像分割简介 人像分割的 ...

  3. unet训练自己的数据集_基于UNet网络实现的人像分割 | 附数据集

    点击上方↑↑↑"OpenCV学堂"关注我 来源:公众号 AI算法与图像处理 授权 以后我会在公众号分享一些关于算法的应用(美颜相关的),工作之后,发现更重要的能力如何理解业务并将算 ...

  4. python人像精细分割_基于UNet网络实现的人像分割 | 附数据集

    点击上方"AI算法与图像处理",选择加"星标"或"置顶" 重磅干货,第一时间送达 以后我会在公众号分享一些关于算法的应用(美颜相关的),工作 ...

  5. 基于UNet网络实现的人像分割 | 附数据集

    点击上方"AI算法与图像处理",选择加"星标"或"置顶" 重磅干货,第一时间送达 以后我会在公众号分享一些关于算法的应用(美颜相关的),工作 ...

  6. PaddleHub人像分割模型:AI人像抠图及图像合成

    点击上方"AI搞事情"关注我们 本项目根据DeepLabv3+模型一键抠图示例,主要采用PaddleHub DeepLabv3+模型(deeplabv3p_xception65_h ...

  7. 基于图像分割网络HRNet实现人像分割

    基于图像分割网络HRNet实现人像分割 人像分割是图像分割领域非常常见的应用,PaddleSeg推出了在大规模人像数据上训练的人像分割PPSeg模型,满足在服务端.移动端.Web端多种使用场景的需求. ...

  8. python人像精细分割_PaddleHub人像分割模型:AI人像抠图及图像合成

    本项目根据DeepLabv3+模型一键抠图示例,主要采用PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg)和python图像处理库opencv ...

  9. 【论文阅读】Swin Transformer Embedding UNet用于遥感图像语义分割

    [论文阅读]Swin Transformer Embedding UNet用于遥感图像语义分割 文章目录 [论文阅读]Swin Transformer Embedding UNet用于遥感图像语义分割 ...

最新文章

  1. oracle中lock的解释
  2. 字符串的初值 正则表达式 sed应用
  3. qt 从文件中读出数据显示在表格中_QT中有什么控件可以实现向excel的表格显示,qt数据存储到Excel表格...
  4. AcWing 320. 能量项链
  5. 21世纪的设计模式:抽象工厂模式
  6. 【计算机组成原理】I/O设备
  7. warning C4995: “....”: 名称被标记为 #pragma deprecated
  8. session 分布式处理-----https://segmentfault.com/a/1190000013447750?utm_source=tag-newest
  9. 递归下降分析法的基本思想。_八大算法思想总结提高
  10. acer软件保护卡怎么解除_外观精致性能强,配置丰富重量轻、宏碁(Acer)墨舞EX214轻薄笔记本 深度评测...
  11. .net 4.5 新特性 async await 一般处理程序实例
  12. 增强安全性、支持跨页逻辑关系设定的电信运营级EnableQ在线问卷调查引擎V1.60来了...
  13. Deeping操作系统配置tomcat并运行第一个Javaweb程序
  14. 64位处理器_为什么苹果A处理器领先安卓2年?从什么时候开始领先的?有何依据...
  15. 《私募股权基金投资基础知识》---第三章
  16. 启动SpringBoot 错误: 找不到或无法加载主类 com.xx.xxApplication
  17. 微软愿景:未来工作, 也可以这样,强
  18. 高等数学笔记-苏德矿-第九章-重积分(Ⅱ)-三重积分
  19. 如何应对大数据的三大挑战?
  20. PCI Express学习篇---Power Management(二)

热门文章

  1. 电子计算机的基本结构基于存储程序,计算机考试理论
  2. 黄海、渤海沉积地层综述
  3. 面试官:Kafka是什么,它有什么特性与使用场景?
  4. 爬取京东商品规格和评论,13行代码写成的模板,想爬哪个商品评论就爬哪个
  5. 横幅广告(1)Admob
  6. 爬取猫眼短评相关数据可视化分析《悲伤逆流成河》 | 郭敬明五年电影最动人之作
  7. 【xlwings api语言参考】Range.Consolidate 方法
  8. 西门子S7-1200的TCP通信
  9. myqr库制作二维码
  10. 从本科作业到Nature子刊:悉尼大学大二学生突破困扰量子计算近20年的纠错码难题...