UNet++

2018年6月的文章,DLMIA2018会议,作者单位Department of Biomedical Informatics, Arizona State University

原作者在知乎上给出了对文章的思路总结


  文章对Unet改进的点主要是skip connection。作者认为skip connection 直接将unet中encoder的浅层特征与decoder的深层特征结合是不妥当的,会产生semantic gap。整篇文章的一个假设就是,当所结合的浅层特征与深层特征是semantically similar时,网络的优化问题就会更简单,因此文章对skip connection的改进就是想bridge/reduce 这个semantic gap

作为参考,先附一张原始Unet结构图如下


图1
图1


  理解这篇文章的关键就是看懂文中的这张图。其中黑色部分代表的就是原始Unet结构,绿色代表添加的卷积层,蓝色代表改进的skip connection。


在这里插入图片描述
图2

  文章给出的公式可以较好地表示图中的结构:


在这里插入图片描述

其中 H ( ⋅ ) H ( ⋅ ) H ( ⋅ ) H(⋅)H(⋅) \mathcal{H}(\cdot) H()H()H()X2,1拼接之后,再经过一次conv与relu得到。
  采用这种改进的Unet相比起相同参数量的原始Unet,作者在4种不同的数据集上都得到了更好的分割效果。
  除了对skip connection进行改进之外,文章还引入了deep supervision的思路。网络的loss函数是由不同层得到的分割图的loss的平均,每层的loss函数为DICE LOSS和Binary cross-entropy LOSS之和,如下所示。作者认为引入DSN(deep supervision net)后,通过model pruning(模型剪枝,如图2(c)所示)能够实现模型的两种模式:高精度模式和高速模式。

在这里插入图片描述

源码如下:

#https://github.com/MrGiovanni/Nested-UNet/blob/master/model.py
import keras
import tensorflow as tf
from keras.models import Model
from keras import backend as K
from keras.layers import Input, merge, Conv2D, ZeroPadding2D, UpSampling2D, Dense, concatenate, Conv2DTranspose
from keras.layers.pooling import MaxPooling2D, GlobalAveragePooling2D, MaxPooling2D
from keras.layers.core import Dense, Dropout, Activation
from keras.layers import BatchNormalization, Dropout, Flatten, Lambda
from keras.layers.advanced_activations import ELU, LeakyReLU
from keras.optimizers import Adam, RMSprop, SGD
from keras.regularizers import l2
from keras.layers.noise import GaussianDropout

import numpy as np
smooth = 1.
dropout_rate = 0.5
act = “relu”
########################################
# 2D Standard
########################################

def standard_unit(input_tensor, stage, nb_filter, kernel_size=3):

x <span class="token operator">=</span> Conv2D<span class="token punctuation">(</span>nb_filter<span class="token punctuation">,</span> <span class="token punctuation">(</span>kernel_size<span class="token punctuation">,</span> kernel_size<span class="token punctuation">)</span><span class="token punctuation">,</span> activation<span class="token operator">=</span>act<span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'conv'</span><span class="token operator">+</span>stage<span class="token operator">+</span><span class="token string">'_1'</span><span class="token punctuation">,</span> kernel_initializer <span class="token operator">=</span> <span class="token string">'he_normal'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">,</span> kernel_regularizer<span class="token operator">=</span>l2<span class="token punctuation">(</span><span class="token number">1e</span><span class="token operator">-</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">(</span>input_tensor<span class="token punctuation">)</span>
x <span class="token operator">=</span> Dropout<span class="token punctuation">(</span>dropout_rate<span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'dp'</span><span class="token operator">+</span>stage<span class="token operator">+</span><span class="token string">'_1'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span>
x <span class="token operator">=</span> Conv2D<span class="token punctuation">(</span>nb_filter<span class="token punctuation">,</span> <span class="token punctuation">(</span>kernel_size<span class="token punctuation">,</span> kernel_size<span class="token punctuation">)</span><span class="token punctuation">,</span> activation<span class="token operator">=</span>act<span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'conv'</span><span class="token operator">+</span>stage<span class="token operator">+</span><span class="token string">'_2'</span><span class="token punctuation">,</span> kernel_initializer <span class="token operator">=</span> <span class="token string">'he_normal'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">,</span> kernel_regularizer<span class="token operator">=</span>l2<span class="token punctuation">(</span><span class="token number">1e</span><span class="token operator">-</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span>
x <span class="token operator">=</span> Dropout<span class="token punctuation">(</span>dropout_rate<span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'dp'</span><span class="token operator">+</span>stage<span class="token operator">+</span><span class="token string">'_2'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span>

<span class="token keyword">return</span> x

########################################

“”"
Standard UNet++ [Zhou et.al, 2018]
Total params: 9,041,601
“”"

def Nest_Net(img_rows, img_cols, color_type=1, num_class=1, deep_supervision=False):

nb_filter <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">32</span><span class="token punctuation">,</span><span class="token number">64</span><span class="token punctuation">,</span><span class="token number">128</span><span class="token punctuation">,</span><span class="token number">256</span><span class="token punctuation">,</span><span class="token number">512</span><span class="token punctuation">]</span>

<span class="token comment"># Handle Dimension Ordering for different backends</span>
<span class="token keyword">global</span> bn_axis
<span class="token keyword">if</span> K<span class="token punctuation">.</span>image_dim_ordering<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token string">'tf'</span><span class="token punctuation">:</span>
  bn_axis <span class="token operator">=</span> <span class="token number">3</span>
  img_input <span class="token operator">=</span> Input<span class="token punctuation">(</span>shape<span class="token operator">=</span><span class="token punctuation">(</span>img_rows<span class="token punctuation">,</span> img_cols<span class="token punctuation">,</span> color_type<span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'main_input'</span><span class="token punctuation">)</span>
<span class="token keyword">else</span><span class="token punctuation">:</span>
  bn_axis <span class="token operator">=</span> <span class="token number">1</span>
  img_input <span class="token operator">=</span> Input<span class="token punctuation">(</span>shape<span class="token operator">=</span><span class="token punctuation">(</span>color_type<span class="token punctuation">,</span> img_rows<span class="token punctuation">,</span> img_cols<span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'main_input'</span><span class="token punctuation">)</span>

conv1_1 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>img_input<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'11'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
pool1 <span class="token operator">=</span> MaxPooling2D<span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'pool1'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv1_1<span class="token punctuation">)</span>

conv2_1 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>pool1<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'21'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
pool2 <span class="token operator">=</span> MaxPooling2D<span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'pool2'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv2_1<span class="token punctuation">)</span>

up1_2 <span class="token operator">=</span> Conv2DTranspose<span class="token punctuation">(</span>nb_filter<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'up12'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv2_1<span class="token punctuation">)</span>
conv1_2 <span class="token operator">=</span> concatenate<span class="token punctuation">(</span><span class="token punctuation">[</span>up1_2<span class="token punctuation">,</span> conv1_1<span class="token punctuation">]</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'merge12'</span><span class="token punctuation">,</span> axis<span class="token operator">=</span>bn_axis<span class="token punctuation">)</span>
conv1_2 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>conv1_2<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'12'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

conv3_1 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>pool2<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'31'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
pool3 <span class="token operator">=</span> MaxPooling2D<span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'pool3'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv3_1<span class="token punctuation">)</span>

up2_2 <span class="token operator">=</span> Conv2DTranspose<span class="token punctuation">(</span>nb_filter<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'up22'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv3_1<span class="token punctuation">)</span>
conv2_2 <span class="token operator">=</span> concatenate<span class="token punctuation">(</span><span class="token punctuation">[</span>up2_2<span class="token punctuation">,</span> conv2_1<span class="token punctuation">]</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'merge22'</span><span class="token punctuation">,</span> axis<span class="token operator">=</span>bn_axis<span class="token punctuation">)</span>
conv2_2 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>conv2_2<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'22'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

up1_3 <span class="token operator">=</span> Conv2DTranspose<span class="token punctuation">(</span>nb_filter<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'up13'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv2_2<span class="token punctuation">)</span>
conv1_3 <span class="token operator">=</span> concatenate<span class="token punctuation">(</span><span class="token punctuation">[</span>up1_3<span class="token punctuation">,</span> conv1_1<span class="token punctuation">,</span> conv1_2<span class="token punctuation">]</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'merge13'</span><span class="token punctuation">,</span> axis<span class="token operator">=</span>bn_axis<span class="token punctuation">)</span>
conv1_3 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>conv1_3<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'13'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

conv4_1 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>pool3<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'41'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
pool4 <span class="token operator">=</span> MaxPooling2D<span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'pool4'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv4_1<span class="token punctuation">)</span>

up3_2 <span class="token operator">=</span> Conv2DTranspose<span class="token punctuation">(</span>nb_filter<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'up32'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv4_1<span class="token punctuation">)</span>
conv3_2 <span class="token operator">=</span> concatenate<span class="token punctuation">(</span><span class="token punctuation">[</span>up3_2<span class="token punctuation">,</span> conv3_1<span class="token punctuation">]</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'merge32'</span><span class="token punctuation">,</span> axis<span class="token operator">=</span>bn_axis<span class="token punctuation">)</span>
conv3_2 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>conv3_2<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'32'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

up2_3 <span class="token operator">=</span> Conv2DTranspose<span class="token punctuation">(</span>nb_filter<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'up23'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv3_2<span class="token punctuation">)</span>
conv2_3 <span class="token operator">=</span> concatenate<span class="token punctuation">(</span><span class="token punctuation">[</span>up2_3<span class="token punctuation">,</span> conv2_1<span class="token punctuation">,</span> conv2_2<span class="token punctuation">]</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'merge23'</span><span class="token punctuation">,</span> axis<span class="token operator">=</span>bn_axis<span class="token punctuation">)</span>
conv2_3 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>conv2_3<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'23'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

up1_4 <span class="token operator">=</span> Conv2DTranspose<span class="token punctuation">(</span>nb_filter<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'up14'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv2_3<span class="token punctuation">)</span>
conv1_4 <span class="token operator">=</span> concatenate<span class="token punctuation">(</span><span class="token punctuation">[</span>up1_4<span class="token punctuation">,</span> conv1_1<span class="token punctuation">,</span> conv1_2<span class="token punctuation">,</span> conv1_3<span class="token punctuation">]</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'merge14'</span><span class="token punctuation">,</span> axis<span class="token operator">=</span>bn_axis<span class="token punctuation">)</span>
conv1_4 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>conv1_4<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'14'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

conv5_1 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>pool4<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'51'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

up4_2 <span class="token operator">=</span> Conv2DTranspose<span class="token punctuation">(</span>nb_filter<span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'up42'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv5_1<span class="token punctuation">)</span>
conv4_2 <span class="token operator">=</span> concatenate<span class="token punctuation">(</span><span class="token punctuation">[</span>up4_2<span class="token punctuation">,</span> conv4_1<span class="token punctuation">]</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'merge42'</span><span class="token punctuation">,</span> axis<span class="token operator">=</span>bn_axis<span class="token punctuation">)</span>
conv4_2 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>conv4_2<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'42'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

up3_3 <span class="token operator">=</span> Conv2DTranspose<span class="token punctuation">(</span>nb_filter<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'up33'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv4_2<span class="token punctuation">)</span>
conv3_3 <span class="token operator">=</span> concatenate<span class="token punctuation">(</span><span class="token punctuation">[</span>up3_3<span class="token punctuation">,</span> conv3_1<span class="token punctuation">,</span> conv3_2<span class="token punctuation">]</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'merge33'</span><span class="token punctuation">,</span> axis<span class="token operator">=</span>bn_axis<span class="token punctuation">)</span>
conv3_3 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>conv3_3<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'33'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

up2_4 <span class="token operator">=</span> Conv2DTranspose<span class="token punctuation">(</span>nb_filter<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'up24'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv3_3<span class="token punctuation">)</span>
conv2_4 <span class="token operator">=</span> concatenate<span class="token punctuation">(</span><span class="token punctuation">[</span>up2_4<span class="token punctuation">,</span> conv2_1<span class="token punctuation">,</span> conv2_2<span class="token punctuation">,</span> conv2_3<span class="token punctuation">]</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'merge24'</span><span class="token punctuation">,</span> axis<span class="token operator">=</span>bn_axis<span class="token punctuation">)</span>
conv2_4 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>conv2_4<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'24'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

up1_5 <span class="token operator">=</span> Conv2DTranspose<span class="token punctuation">(</span>nb_filter<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> strides<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'up15'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv2_4<span class="token punctuation">)</span>
conv1_5 <span class="token operator">=</span> concatenate<span class="token punctuation">(</span><span class="token punctuation">[</span>up1_5<span class="token punctuation">,</span> conv1_1<span class="token punctuation">,</span> conv1_2<span class="token punctuation">,</span> conv1_3<span class="token punctuation">,</span> conv1_4<span class="token punctuation">]</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'merge15'</span><span class="token punctuation">,</span> axis<span class="token operator">=</span>bn_axis<span class="token punctuation">)</span>
conv1_5 <span class="token operator">=</span> standard_unit<span class="token punctuation">(</span>conv1_5<span class="token punctuation">,</span> stage<span class="token operator">=</span><span class="token string">'15'</span><span class="token punctuation">,</span> nb_filter<span class="token operator">=</span>nb_filter<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

nestnet_output_1 <span class="token operator">=</span> Conv2D<span class="token punctuation">(</span>num_class<span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> activation<span class="token operator">=</span><span class="token string">'sigmoid'</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'output_1'</span><span class="token punctuation">,</span> kernel_initializer <span class="token operator">=</span> <span class="token string">'he_normal'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">,</span> kernel_regularizer<span class="token operator">=</span>l2<span class="token punctuation">(</span><span class="token number">1e</span><span class="token operator">-</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv1_2<span class="token punctuation">)</span>
nestnet_output_2 <span class="token operator">=</span> Conv2D<span class="token punctuation">(</span>num_class<span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> activation<span class="token operator">=</span><span class="token string">'sigmoid'</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'output_2'</span><span class="token punctuation">,</span> kernel_initializer <span class="token operator">=</span> <span class="token string">'he_normal'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">,</span> kernel_regularizer<span class="token operator">=</span>l2<span class="token punctuation">(</span><span class="token number">1e</span><span class="token operator">-</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv1_3<span class="token punctuation">)</span>
nestnet_output_3 <span class="token operator">=</span> Conv2D<span class="token punctuation">(</span>num_class<span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> activation<span class="token operator">=</span><span class="token string">'sigmoid'</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'output_3'</span><span class="token punctuation">,</span> kernel_initializer <span class="token operator">=</span> <span class="token string">'he_normal'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">,</span> kernel_regularizer<span class="token operator">=</span>l2<span class="token punctuation">(</span><span class="token number">1e</span><span class="token operator">-</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv1_4<span class="token punctuation">)</span>
nestnet_output_4 <span class="token operator">=</span> Conv2D<span class="token punctuation">(</span>num_class<span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> activation<span class="token operator">=</span><span class="token string">'sigmoid'</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">'output_4'</span><span class="token punctuation">,</span> kernel_initializer <span class="token operator">=</span> <span class="token string">'he_normal'</span><span class="token punctuation">,</span> padding<span class="token operator">=</span><span class="token string">'same'</span><span class="token punctuation">,</span> kernel_regularizer<span class="token operator">=</span>l2<span class="token punctuation">(</span><span class="token number">1e</span><span class="token operator">-</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">(</span>conv1_5<span class="token punctuation">)</span>

<span class="token keyword">if</span> deep_supervision<span class="token punctuation">:</span>
    model <span class="token operator">=</span> Model<span class="token punctuation">(</span><span class="token builtin">input</span><span class="token operator">=</span>img_input<span class="token punctuation">,</span> output<span class="token operator">=</span><span class="token punctuation">[</span>nestnet_output_1<span class="token punctuation">,</span>
                                           nestnet_output_2<span class="token punctuation">,</span>
                                           nestnet_output_3<span class="token punctuation">,</span>
                                           nestnet_output_4<span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token keyword">else</span><span class="token punctuation">:</span>
    model <span class="token operator">=</span> Model<span class="token punctuation">(</span><span class="token builtin">input</span><span class="token operator">=</span>img_input<span class="token punctuation">,</span> output<span class="token operator">=</span><span class="token punctuation">[</span>nestnet_output_4<span class="token punctuation">]</span><span class="token punctuation">)</span>

<span class="token keyword">return</span> model

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118

        </div>
					<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-2787195726.css" rel="stylesheet">
            </div>
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值