pytorch(5)--unet,unet++ 、 融合deep supervision的unet++

本文详细介绍了Unet、Unet++的原理,对比了两者结构,并提供了PyTorch实现的代码。通过添加深度监督的Unet++在遥感图像分类任务上取得良好效果,使用了 LovaszSoftmax 多分类损失函数。附带整体代码下载链接和预测效果图。
摘要由CSDN通过智能技术生成

 yi

一、前言

    本篇总结unet、unet++及添加了deep supervision的unet++ 原理及代码pytorch实现

二、原理

 unet  和 unet++结构图分别如左右所示:

        在这里插入图片描述

上面可看出unet 是简单向下采样4次,最后缩放16倍,再向上采样4次还原到原图像

unet++,则将各支路的节点都尽可能搭配利用起来

三、unet 和 unet++ 代码

先实现基础 vgg  block:

import torch
import torch.nn as nn
import torch.nn.functional as F


class VGGBlock(nn.Module):
    def __init__(self, in_channels, middle_channels, out_channels, act_func=nn.ReLU(inplace=True)):
        super(VGGBlock, self).__init__()
        self.act_func = act_func
        self.conv1 = nn.Conv2d(in_channels, middle_channels, 3, padding=1)
        self.bn1 = nn.BatchNorm2d(middle_channels)
        self.conv2 = nn.Conv2d(middle_channels, out_channels, 3, padding=1)
        self.bn2 = nn.BatchNorm2d(out_channels)

    def forward(self, x):
        out = self.conv1(x)
        out = self.bn1(out)
        out = self.act_func(out)

        out = self.conv2(out)
        out = self.bn2(out)
        out = self.act_func(out)

        return out

基本的下采样、上采样函数

import torch
import torch.nn as nn
import torch.nn.functional as F





class 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.C
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值