U-net论文地址:https://arxiv.org/pdf/1505.04597v1.pdf
U-net的网络结构如图
import tensorflow as tf
from keras.layers import *
import numpy as np
import keras
from keras.models import *
from keras.optimizers import *
def unet(pretrained_weight=None, input_size=(512, 512, 3)):
input = Input(shape=input_size)
conv1 = Conv2D(64, kernel_size=3, padding='same', activation='relu', kernel_initializer='he_normal', name='encoder_conv1_1')(input)
conv1 = Conv2D(64, kernel_size=3, padding='same', activation='relu', kernel_initializer='he_normal', name='encoder_conv1_2')(conv1)
maxpool1 = MaxPooling2D((2, 2), name='encoder_maxpool1')(conv1)
conv2 = Conv2D(128, kernel_size=3, padding='same', activation='relu', kernel_initializer='he_normal', name='encoder_conv2_1')(maxpool1)
conv2 = Conv2D(128, kernel_size=3, padding='same', activation='relu', kernel_initializer='he_normal', name='encoder_conv2_2')(conv2)
maxpool2 = MaxPooling2D((2, 2), name='encoder_maxpool2')(conv2)
conv3 = Conv2D(256, kernel_size=3, padding='same', activation='relu', kernel_initializer='he_normal', name='encoder_conv3_1')(maxpool2)
conv3 = Conv2D(256, kernel_size=3, padding='same', activation='relu', kernel_initializer='he_normal', name='encoder_conv3_2')(conv3)
maxpool3 = MaxPooling2D((2, 2), name='encoder_maxpool3')(conv3)
conv4 = Conv2D(512, kernel_size=3, padding='same', activation='relu', kernel_initializer='he_normal', name='encoder_conv4_1')(maxpool3)
conv4 = Conv2D(512, kernel_size=3, padding='same', activation='relu', kernel_initializer='he_normal', name='encoder_conv4_2')(conv4)
maxpool4 = MaxPooling2D((2, 2), name='encoder_maxpool4')(conv4)
conv5 = Conv2D(1024, kernel_size=3, padding='same', activation='relu', kernel_initializer='he_normal', name='encoder_conv5_1')(maxpool4)
conv5 = Conv2D(1024, kernel_size=3, padding='same', activation='relu', kernel_initializer='he_normal', name='encoder_conv5_2')(conv5)
# maxpool4=MaxPooling2D((2,2))(conv4)
up1 = UpSampling2D(size=(2, 2), name='decoder_upsample1')(conv5)
upconv1 = Conv2D(512, kernel_size=2, padding='same', activation='relu', kernel_initializer='he_normal', name='decoder_upconv1')(up1)
upconv1 = concatenate([upconv1, conv4], axis=-1)
upconv1 = Conv2D(512, kernel_size=3, padding='same', activation='relu', kernel_initializer='he_normal', name='decoder_conv1_1')(upconv1)
upconv1 = Conv2D(512, kernel_size=3, padding='same', activation='relu', kernel_initializer='he_normal', name='decoder_conv1_2')(upconv1)
up2 = UpSampling2D(size=(2, 2), name='decoder_upsample2')(upconv1)
upconv2 = Conv2D(256, kernel_size=2, padding='same', activation=