【659】DeConvNet 模型说明
[1] DeconvNet 模型说明
模型结构图
实现代码:(二分类)
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 | from keras.models import Model from keras.layers import Input , Conv2D, MaxPooling2D, UpSampling2D, BatchNormalization from keras.layers.convolutional import Conv2DTranspose from keras.callbacks import ModelCheckpoint import os import tensorflow as tf import pandas as pd import numpy as np import random import cv2 def get_net(img_size): inputs = Input (img_size) conv1_1 = Conv2D(filters = 64 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(inputs) conv1_2 = Conv2D(filters = 64 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(conv1_1) conv1_2 = BatchNormalization()(conv1_2) pool1 = MaxPooling2D(pool_size = ( 2 , 2 ), strides = ( 2 , 2 ))(conv1_2) conv2_1 = Conv2D(filters = 128 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(pool1) conv2_2 = Conv2D(filters = 128 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(conv2_1) conv2_2 = BatchNormalization()(conv2_2) pool2 = MaxPooling2D(pool_size = ( 2 , 2 ), strides = ( 2 , 2 ))(conv2_2) conv3_1 = Conv2D(filters = 256 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(pool2) conv3_2 = Conv2D(filters = 256 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(conv3_1) conv3_3 = Conv2D(filters = 256 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(conv3_2) conv3_3 = BatchNormalization()(conv3_3) pool3 = MaxPooling2D(pool_size = ( 2 , 2 ), strides = ( 2 , 2 ))(conv3_3) conv4_1 = Conv2D(filters = 512 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(pool3) conv4_2 = Conv2D(filters = 512 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(conv4_1) conv4_3 = Conv2D(filters = 512 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(conv4_2) conv4_3 = BatchNormalization()(conv4_3) pool4 = MaxPooling2D(pool_size = ( 2 , 2 ), strides = ( 2 , 2 ))(conv4_3) conv5_1 = Conv2D(filters = 512 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(pool4) conv5_2 = Conv2D(filters = 512 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(conv5_1) conv5_3 = Conv2D(filters = 512 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(conv5_2) conv5_3 = BatchNormalization()(conv5_3) pool5 = MaxPooling2D(pool_size = ( 2 , 2 ), strides = ( 2 , 2 ))(conv5_3) fc6 = Conv2D(filters = 4096 , kernel_size = ( 5 , 5 ), activation = "relu" )(pool5) fc7 = Conv2D(filters = 4096 , kernel_size = ( 1 , 1 ), activation = "relu" )(fc6) deconv_fc6 = Conv2DTranspose(filters = 512 , kernel_size = ( 5 , 5 ))(fc7) deconv_fc6 = BatchNormalization()(deconv_fc6) unpool5 = UpSampling2D(size = ( 2 , 2 ))(deconv_fc6) deconv5_1 = Conv2DTranspose(filters = 512 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(unpool5) deconv5_2 = Conv2DTranspose(filters = 512 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(deconv5_1) deconv5_3 = Conv2DTranspose(filters = 512 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(deconv5_2) deconv5_3 = BatchNormalization()(deconv5_3) unpool4 = UpSampling2D(size = ( 2 , 2 ))(deconv5_3) deconv4_1 = Conv2DTranspose(filters = 512 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(unpool4) deconv4_2 = Conv2DTranspose(filters = 512 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(deconv4_1) deconv4_3 = Conv2DTranspose(filters = 256 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(deconv4_2) deconv4_3 = BatchNormalization()(deconv4_3) unpool3 = UpSampling2D(size = ( 2 , 2 ))(deconv4_3) deconv3_1 = Conv2DTranspose(filters = 256 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(unpool3) deconv3_2 = Conv2DTranspose(filters = 256 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(deconv3_1) deconv3_3 = Conv2DTranspose(filters = 128 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(deconv3_2) deconv3_3 = BatchNormalization()(deconv3_3) unpool2 = UpSampling2D(size = ( 2 , 2 ))(deconv3_3) deconv2_1 = Conv2DTranspose(filters = 128 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(unpool2) deconv2_2 = Conv2DTranspose(filters = 64 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(deconv2_1) deconv2_2 = BatchNormalization()(deconv2_2) unpool1 = UpSampling2D(size = ( 2 , 2 ))(deconv2_2) deconv1_1 = Conv2DTranspose(filters = 64 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(unpool1) deconv1_2 = Conv2DTranspose(filters = 64 , kernel_size = ( 3 , 3 ), padding = "same" , activation = "relu" )(deconv1_1) deconv1_2 = BatchNormalization()(deconv1_2) output = Conv2D( 1 , kernel_size = ( 1 , 1 ), activation = 'sigmoid' )(deconv1_2) model = Model(inputs = inputs, outputs = output) return model model = get_net(( 512 , 512 , 3 )) model.summary() |
summary
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_3 (InputLayer) [(None, 512, 512, 3)] 0
_________________________________________________________________
conv2d_31 (Conv2D) (None, 512, 512, 64) 1792
_________________________________________________________________
conv2d_32 (Conv2D) (None, 512, 512, 64) 36928
_________________________________________________________________
batch_normalization_22 (Batc (None, 512, 512, 64) 256
_________________________________________________________________
max_pooling2d_10 (MaxPooling (None, 256, 256, 64) 0
_________________________________________________________________
conv2d_33 (Conv2D) (None, 256, 256, 128) 73856
_________________________________________________________________
conv2d_34 (Conv2D) (None, 256, 256, 128) 147584
_________________________________________________________________
batch_normalization_23 (Batc (None, 256, 256, 128) 512
_________________________________________________________________
max_pooling2d_11 (MaxPooling (None, 128, 128, 128) 0
_________________________________________________________________
conv2d_35 (Conv2D) (None, 128, 128, 256) 295168
_________________________________________________________________
conv2d_36 (Conv2D) (None, 128, 128, 256) 590080
_________________________________________________________________
conv2d_37 (Conv2D) (None, 128, 128, 256) 590080
_________________________________________________________________
batch_normalization_24 (Batc (None, 128, 128, 256) 1024
_________________________________________________________________
max_pooling2d_12 (MaxPooling (None, 64, 64, 256) 0
_________________________________________________________________
conv2d_38 (Conv2D) (None, 64, 64, 512) 1180160
_________________________________________________________________
conv2d_39 (Conv2D) (None, 64, 64, 512) 2359808
_________________________________________________________________
conv2d_40 (Conv2D) (None, 64, 64, 512) 2359808
_________________________________________________________________
batch_normalization_25 (Batc (None, 64, 64, 512) 2048
_________________________________________________________________
max_pooling2d_13 (MaxPooling (None, 32, 32, 512) 0
_________________________________________________________________
conv2d_41 (Conv2D) (None, 32, 32, 512) 2359808
_________________________________________________________________
conv2d_42 (Conv2D) (None, 32, 32, 512) 2359808
_________________________________________________________________
conv2d_43 (Conv2D) (None, 32, 32, 512) 2359808
_________________________________________________________________
batch_normalization_26 (Batc (None, 32, 32, 512) 2048
_________________________________________________________________
max_pooling2d_14 (MaxPooling (None, 16, 16, 512) 0
_________________________________________________________________
conv2d_44 (Conv2D) (None, 12, 12, 4096) 52432896
_________________________________________________________________
conv2d_45 (Conv2D) (None, 12, 12, 4096) 16781312
_________________________________________________________________
conv2d_transpose_28 (Conv2DT (None, 16, 16, 512) 52429312
_________________________________________________________________
batch_normalization_27 (Batc (None, 16, 16, 512) 2048
_________________________________________________________________
up_sampling2d_10 (UpSampling (None, 32, 32, 512) 0
_________________________________________________________________
conv2d_transpose_29 (Conv2DT (None, 32, 32, 512) 2359808
_________________________________________________________________
conv2d_transpose_30 (Conv2DT (None, 32, 32, 512) 2359808
_________________________________________________________________
conv2d_transpose_31 (Conv2DT (None, 32, 32, 512) 2359808
_________________________________________________________________
batch_normalization_28 (Batc (None, 32, 32, 512) 2048
_________________________________________________________________
up_sampling2d_11 (UpSampling (None, 64, 64, 512) 0
_________________________________________________________________
conv2d_transpose_32 (Conv2DT (None, 64, 64, 512) 2359808
_________________________________________________________________
conv2d_transpose_33 (Conv2DT (None, 64, 64, 512) 2359808
_________________________________________________________________
conv2d_transpose_34 (Conv2DT (None, 64, 64, 256) 1179904
_________________________________________________________________
batch_normalization_29 (Batc (None, 64, 64, 256) 1024
_________________________________________________________________
up_sampling2d_12 (UpSampling (None, 128, 128, 256) 0
_________________________________________________________________
conv2d_transpose_35 (Conv2DT (None, 128, 128, 256) 590080
_________________________________________________________________
conv2d_transpose_36 (Conv2DT (None, 128, 128, 256) 590080
_________________________________________________________________
conv2d_transpose_37 (Conv2DT (None, 128, 128, 128) 295040
_________________________________________________________________
batch_normalization_30 (Batc (None, 128, 128, 128) 512
_________________________________________________________________
up_sampling2d_13 (UpSampling (None, 256, 256, 128) 0
_________________________________________________________________
conv2d_transpose_38 (Conv2DT (None, 256, 256, 128) 147584
_________________________________________________________________
conv2d_transpose_39 (Conv2DT (None, 256, 256, 64) 73792
_________________________________________________________________
batch_normalization_31 (Batc (None, 256, 256, 64) 256
_________________________________________________________________
up_sampling2d_14 (UpSampling (None, 512, 512, 64) 0
_________________________________________________________________
conv2d_transpose_40 (Conv2DT (None, 512, 512, 64) 36928
_________________________________________________________________
conv2d_transpose_41 (Conv2DT (None, 512, 512, 64) 36928
_________________________________________________________________
batch_normalization_32 (Batc (None, 512, 512, 64) 256
_________________________________________________________________
conv2d_46 (Conv2D) (None, 512, 512, 1) 65
=================================================================
Total params: 151,119,681
Trainable params: 151,113,665
Non-trainable params: 6,016
_________________________________________________________________
模型网络结构:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)