【U-Net】语义分割之U-Net详解

一、简介

  语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支。与分类任务不同,语义分割需要判断图像每个像素点的类别,进行精确分割。语义分割目前在自动驾驶、自动抠图等领域有着比较广泛的应用。

分割网络现状:
  在ResNet以后使用深度学习进行分类任务的性能已经超过了人类,但是目标检测任务和分割任务的准确度却一直较低,其中分割任务的准确度是最低的。因为分割任务需要对每个像素点进行精确的分类,其难度最大。针对语义分割的需求,最早由Jonathan Long等人提出的Fully Convolutional Networks(FCN)成为了语义分割领域的基本框架之一,后续很多框架都多少参考了FCN的思想。但是FCN的准确度较低,不如U-net用的广泛。
  目前已经有不少其他好用的分割网络:

二、U-net典型应用

  我第一次使用Unet是在Kaggle挑战赛上,它是Kaggle的常客。因为它简单,高效,易懂,容易定制,可以从相对较小的训练集中学习。Unet的第一次提出是在2015年(论文),经过发展,目前有多个变形和应用。

  1. Kaggle-Airbus Ship Detection Challenge
    在卫星图像中找到船,在公开的kernal中最受欢迎的是Unet,达到了84.7的精度。

  2. Kaggle-卫星图像分割与识别:
    需要在卫星图像中分割出:房屋、道路、铁路、树木、农作物、河流、积水区、大型车辆、小轿车。在Unet基础上微调,针对不同的分割对象,微调的地方不同,会产生不同的分割模型,最后融合。推荐一篇不错的博文:
    Kaggle优胜者详解:如何用深度学习实现卫星图像分割与识别

  3. Supervise.ly公司:
    在用Faster-RCNN(基于resnet)定位+Unet-like架构的分割,来做他们数据众包图像分割方向的主动学习,当时没有使用mask-rcnn,因为靠近物体边缘的分割质量很低(终于!Supervise.ly发布人像分割数据集啦(免费开源)

  4. 广东政务数据创新大赛—智能算法赛 :
    国土监察业务中须监管地上建筑物的建、拆、改、扩,高分辨率图像和智能算法以自动化完成工作。并且:八通道U-Net:直接输出房屋变化,可应对高层建筑倾斜问题;数据增强:增加模型泛化性,简单有效;加权损失函数:增强对新增建筑的检测能力;模型融合:取长补短,结果更全。其中季军公布了源码

  5. Kaggle车辆边界识别——TernausNet 由VGG初始化权重 + U-Net网络,Kaggle Carvana Image
    Masking Challenge
    第一名,使用的预训练权重改进U-Net,提升图像分割的效果。开源的代码在TernausNet

三、 U-net详解

  U-net的源码很容易从上面应用的连接中找到。

  U-net网络非常简单,前半部分作用是特征提取,后半部分是上采样。在一些文献中也把这样的结构叫做编码器-解码器结构。由于此网络整体结构类似于大写的英文字母U,故得名U-net。

  U-net与其他常见的分割网络有一点非常不同的地方:U-net采用了完全不同的特征融合方式:拼接,U-net采用将特征在channel维度拼接在一起,形成更厚的特征。而FCN融合时使用的对应点相加,并不形成更厚的特征。

所以语义分割网络在特征融合时有两种办法:
1. FCN式的对应点相加,对应于TensorFlow中的tf.add()函数;
2. U-net式的channel维度拼接融合,对应于TensorFlow的tf.concat()函数,比较占显存。

除了上述新颖的特征融合方式,U-net还有以下几个优点:

  1. 5个pooling layer实现了网络对图像特征的多尺度特征识别。
  2. 上采样部分会融合特征提取部分的输出,这样做实际上是将多尺度特征融合在了一起,以最后一个上采样为例,它的特征既来自第一个卷积block的输出(同尺度特征),也来自上采样的输出(大尺度特征),这样的连接是贯穿整个网络的,你可以看到上图的网络中有四次融合过程,相对应的FCN网络只在最后一层进行融合。

参考文献:
1、https://blog.csdn.net/Formlsl/article/details/80373200
2、https://blog.csdn.net/u012931582/article/details/70215756/
3、https://blog.csdn.net/sinat_26917383/article/details/80107783
4、https://zhuanlan.zhihu.com/p/26377387
5、http://www.sohu.com/a/169159196_465975

  • 20
    点赞
  • 210
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Docker是一种基于容器的虚拟化技术,它提供了一种轻量级的容器化解决方案,可以将应用程序及其依赖项打包到一个可移植的容器中,以便在任何地方运行。在Docker中,容器之间的通信是通过网络实现的,在本文中,我们将详细介绍Docker中的网络通信。 Docker中的网络类型 Docker提供了四种不同类型的网络,分别是: 1. 桥接网络(Bridge Network):桥接网络是Docker的默认网络,它允许容器之间相互通信,并且可以与主机通信。在桥接网络中,每个容器都有一个独立的IP地址,并且可以通过容器名称或IP地址进行访问。 2. 主机网络(Host Network):主机网络将容器直接连接到主机网络上,容器与主机共享同一个网络接口和IP地址,因此可以与主机网络上的其他设备进行通信。 3. 网络绑定(None Network):网络绑定不为容器配置任何网络,这意味着容器无法通过网络与外界进行通信。通常,这种网络类型用于测试和调试容器应用程序。 4. Overlay网络(Overlay Network):Overlay网络用于跨主机容器之间的通信。它允许在多个主机上运行分布式应用程序,并提供了自动发现和负载均衡的功能。 Docker网络配置 在Docker中,可以使用docker network命令来管理网络。可以使用以下命令创建一个新的桥接网络: ``` docker network create my-network ``` 可以通过以下命令将容器添加到网络中: ``` docker run --name my-container --network my-network my-image ``` 在此命令中,--network选项指定要将容器添加到的网络名称。 可以使用以下命令列出所有可用的网络: ``` docker network ls ``` 可以使用以下命令查看特定网络的详细信息: ``` docker network inspect my-network ``` 在Docker中,还可以使用--link选项将一个容器链接到另一个容器。这将创建一个虚拟网络接口,允许容器之间进行通信。以下命令将容器my-container链接到容器my-other-container: ``` docker run --name my-container --link my-other-container my-image ``` 在此命令中,--link选项指定要链接的容器名称。 总结 在Docker中,容器之间的通信是通过网络实现的。Docker提供了四种不同类型的网络,包括桥接网络、主机网络、网络绑定和Overlay网络。可以使用docker network命令来管理网络,可以使用--link选项将一个容器链接到另一个容器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值