百度图像分割7日打卡训练营学习笔记——UNetPython代码实现(基于paddelpaddel)

U-Net网络框架

U-Net原理图


U-Net与FCN一样,都是采用Encoder加Decoder来实现图像分割。与FCN不同的是U-Net结合了很多浅层的信息,对于不同尺度物体分割效果要好些。

U-Net网络结构

在这里插入图片描述
网络结构如上图所示,从左到右分别为Encoder层、中间层和Decoder层。
Encoder层包括四个Encoder,每个Encoder都包括两个卷积层,然后pooling下采样作为下一层网络输入;
中间层包含两个卷积;
Decoder层包含四个Decoder,每个Decoder对输入先进行上采样,然后与对应的浅层信息连起来(这里会出现feature大小不一样的情况,可以用Crop或是Padding来解决),再经过两个卷积得到输出;
将最终输出经过1x1卷积得到channels为num_classes的分割结果。
整体结构像个U型。
在这里插入图片描述
上图为feature map的尺度变化

U-Net代码

import numpy as np
import paddle
import paddle.fluid as fluid
from paddle.fluid.dygraph import to_variable
from paddle.fluid.dygraph import Layer
from paddle.fluid.dygraph import Conv2D
from paddle.fluid.dygraph import BatchNorm
from paddle.fluid.dygraph import Pool2D
from paddle.fluid.dygraph import Conv2DTranspose


class Encoder(Layer):
    def __init__(self, num_channels, num_filters):
        super(Encoder, self).__init__()
        #TODO: encoder contains:
        #       1 3x3conv + 1bn + relu + 
        #       1 3x3conc + 1bn + relu +
        #       1 2x2 pool
        # return features before and after pool
        self.conv1 = Conv2D(num_channels,
                            num_filters,
                            filter_size=3,
                            stride=1,
                            padding=1)
        self.bn1 = BatchNorm(num_filters, act='relu')
        self.conv2 = Conv2D(num_filters,
                            num_filters,
                            filter_size=3,
                            stride=1,
                            padding=1
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值