zoukankan      html  css  js  c++  java
  • 图像分割U-Net原理及Pytorch实现

    follow this video: https://www.youtube.com/watch?v=IHq1t7NxS8k

    paper: https://arxiv.org/pdf/1505.04597.pdf

    介绍

    一个2015年较老经典的模型,最初是为生物医学图像而开发的,后面在许多图像分割(Image Segmentation)任务都有良好的表现

    结构

    全都在这张图里了

    好对称啊,Encode-Decode

    (1) Encode

    Encode由卷积操作和下采样操作组成,论文中的所用的卷积结构统一为 3x3 的卷积核, padding=0, stride=1,没有padding所以每次卷积之后feature map的 H 和 W 都会减2.

    但在像Residual中,使用padding来 res(x) 和 x 尺寸相同,方便相加

    • 3 1 0,W和H - 2
    • 3 1 1,W和H 不变

    (2) Decode

    feature经过Decode恢复原始分辨率,该过程除了卷积还有upsampling和skip-connection

    Upsamping上采样常用的有2种:反卷积 和 插值,论文用的反卷积(有博客写论文中用的插值,但是我看是用的反卷积啊,是不是论文有修改呢)

    一个细节

    论文中为了更好地处理图像的边界像素,给输入加上镜像的圈

    那么这个边的宽度多少好呢?

    一个比较好的策略是通过感受野来确定

    因为有效卷积是会降低Feature Map分辨率的,但是我们希望 512x512的图像的边界点能够保留到最后一层Feature Map。所以我们需要通过加边的操作增加图像的分辨率,增加的尺寸即是感受野的大小,也就是说每条边界增加感受野的一半作为镜像边。

    根据图1中所示的压缩路径的网络架构,我们可以计算其感受野:

    这就是为什么U-Net的输入数据是572x572

    疑问:每一次不是都可以设置padding吗,padding不就是为了处理边界情况的吗(菜鸡落泪

    其他

    U型结构也启发了后面很多算法,比如CycleGAN的generator就是用的U-Net.

    参考链接:

    1. https://juejin.cn/post/6844903924999127047

    2. https://zhuanlan.zhihu.com/p/43927696

    个性签名:时间会解决一切
  • 相关阅读:
    软件工程系统开发课堂测试01
    java--printf
    java--局部类只能访问外包方法的final局部成员
    java--内部类实现“类的多重继承”
    java--内部类
    【转】java--final
    java--实例成员 & 静态成员
    java--方法和成员的继承,访问
    Java--格式化输出
    HDOJ 1005
  • 原文地址:https://www.cnblogs.com/lfri/p/14854207.html
Copyright © 2011-2022 走看看