深度学习编码解码结构-以及kreas简单实现

news2024/11/11 6:53:52

图像分割中的编码解码结构(Encoder-Decoder Model)是一种广泛应用的网络架构,它有效地结合了特征提取(编码)和分割结果生成(解码)两个过程。以下是对图像分割中编码解码结构的详细解析:

一、编码器(Encoder)

功能
编码器负责从输入图像中提取有用的特征信息。这些特征信息通常是图像中不同对象或区域的抽象表示,有助于后续的分割任务。

工作原理

  • 特征提取:编码器通过一系列卷积层(Convolutional Layers)、池化层(Pooling Layers)等网络结构,逐步从输入图像中提取高级语义特征。这些特征图(Feature Maps)的分辨率逐渐降低,但包含的信息量逐渐增加,能够捕捉到图像中的关键信息。
  • 下采样:在编码过程中,通常会使用池化层或步长大于1的卷积层进行下采样,以降低特征图的分辨率,减少计算量,并增加感受野(Receptive Field),使模型能够捕捉到更全局的信息。

二、解码器(Decoder)

功能
解码器负责将编码器提取的特征信息转换为最终的分割结果。它逐步恢复特征图的分辨率,并生成与输入图像相同尺寸的分割掩码(Segmentation Mask),其中每个像素都被分配了一个类别标签。

工作原理

  • 上采样:解码器通过上采样操作(如转置卷积、双线性插值等)逐步恢复特征图的分辨率。上采样过程与编码器的下采样过程相反,旨在将特征图的尺寸恢复到与输入图像相同或接近。
  • 特征融合:在解码过程中,通常会将编码器中的某些特征图与解码器中对应尺度的特征图进行融合(如拼接、相加等),以结合不同尺度的信息,提高分割结果的准确性。这种特征融合方式有助于模型捕捉到更精细的细节信息。
  • 输出层:解码器的最后一层通常是一个卷积层,用于将特征图转换为分割掩码。该卷积层的输出通道数与类别数相同,每个通道对应一个类别的预测概率图。通过应用softmax函数或argmax操作,可以将这些概率图转换为最终的分割掩码。

三、代码实现


采用卷积-BN-池化的结构,设计下采样模块,每经过一次下采样模块,通道数翻倍,特征图长宽缩小一倍。

采用转置卷积实现上采样模块,每经过一次上采样,通道数减半,特征图长宽放大一倍

import keras
from tensorflow.keras import Model, layers
from tensorflow.keras.utils import plot_model
def DownSample(filters):
    '''
    卷积-BN-池化结构,每经过一次下采样,通道数翻倍,特征图长宽缩小一半
    :param filters:卷积核参数 ,输出通道数
    :return:
    '''
    Layer = keras.Sequential(layers=[
        layers.Conv2D(filters=filters, strides=1, kernel_size=3, padding="same"),
        layers.BatchNormalization(),
        layers.MaxPooling2D(strides=2, pool_size=2, padding="same"),
        layers.ReLU()
    ], name="DownSample"+str(filters))
    return Layer
def UpSample(filters):
    '''
    转置卷积,每经过一次转置卷积,通道数减半,特征图长宽翻倍
    :param filters: 输出通道数
    :return:
    '''
    Layer = keras.Sequential(layers=[
        layers.Convolution2DTranspose(filters=filters, kernel_size=3, strides=2, padding="same",
                                      activation="relu")
    ], name="UpSample"+str(filters))
    return Layer


def En_De():
    x = layers.Input(shape=(256,256,3))
    Down = [DownSample(64),
          DownSample(128),
          DownSample(256),
          DownSample(512)]
    y = Down[0](x)
    for Layer in Down[1:]:
        y=Layer(y)

    Up=[
        UpSample(256),
        UpSample(128),
        UpSample(64),
        UpSample(32)
    ]
    for Layer in Up:
        y = Layer(y)
        
    y = layers.Conv2D(name="Result", filters=1, padding="same", kernel_size=3, strides=1, activation="sigmoid")(y)
    model = Model(x, y)
    return model


En_De = En_De()
plot_model(En_De, "Model.png", show_shapes=True)
En_De.summary()



结果:

模型图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1907256.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

写一个函数,返回参数二进制中 1 的个数

代码要求 输入一个整数n,输出该数32位二进制中为1的个数(包括最高位的符号位),其中负数用补码表示 如:输入:15 (15的二进制表示:0000 1111) 输出:4 代码实…

音频demo:使用fdk-aac将PCM数据编码成aac数据

1、README a. 编译 编译demo 本demo是使用的开源项目fdk-aac将PCM数据编码成aac音频文件。由于提供的.a静态库是在x86_64的机器上编译的,所以默认情况下仅支持该架构的主机上编译运行。 $ make编译fdk-aac(可选) 如果想要在其他架构的CP…

20240709 每日AI必读资讯

🧠手把手教你如何打造《星际穿越》中的 TARS 机器人复制品! - 一位名为 Charles Diaz 的开发者使用树莓派创建了一个完全功能的 TARS 复制品。 - 使用树莓派3B作为主控,配合Adafruit PCA-9685伺服驱动器,通过编写的步态控制程序…

【版面费优惠丨ACM独立出版丨接受全文摘要投稿】2024年生物医药和智能技术国际学术会议(ICBIT 2024,8月23-25)

“2024年生物医药和智能技术国际学术会议(ICBIT 2024)”拟定于2024年8月23-25日于珠海召开。近年来,智能技术已经逐渐走入生物医药领域,并在与生物医药领域的融合创新中凸显出巨大的发展潜力和社会价值。人工智能技术在生物医药领…

原创作品——教育课程界面设计

教育行业UI界面设计需直观易懂,确保学习者能迅速上手,减少认知负担。布局清晰,导航便捷,功能按钮和图标设计应符合教育场景,直接支持学习目标的达成,促进高效学习体验。 通过丰富的互动元素(如拖…

面试题005-Java-JVM(上)

面试题005-Java-JVM(上) 目录 面试题005-Java-JVM(上)题目自测题目答案1. JVM由哪几部分组成?2. 运行时数据区中包含哪些区域?3. 栈和堆中分别存放什么数据?4. 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) ?5. 堆空间的…

vue详解

目录 ​编辑 常用指令 v-for v-bind v-if & v-show v-if v-show v-on v-model Vue生命周期 ​编辑 Axios Axios使用步骤 Axios-请求方式别名 Vue简单案例 常用指令 指令:HTML标签上带有 v-前缀的特殊属性,不同的指令具有不同的含义,可…

股票数据分析(K线图、均值图、MACD图、RSI图)--股票日数据

数据 数据是上证指数日行情数据,股票代码000002.sz,原始数据shdata示例如下: 读取数据: import numpy as np import pandas as pd import mplfinance as mpf import matplotlib.pyplot as plt from datetime import datetime imp…

三、mysql-万字长文读懂mysql

mysql 三、 Mysql3.1 基础3.1.1 mysql执行流程-组成架构3.2 索引3.2.1 索引底层的数据结构与算法分类在创建表时,InnoDB 存储引擎会根据不同的场景选择不同的列作为索引B+树结构3.2.2 为什么 MySQL InnoDB 选择 B+tree 作为索引的数据结构3.2.2.1. 从磁盘角度出发3.2.2.2. 数据…

全志A527 T527 设置左右分屏修改为单屏幕,应用分屏改为单屏

1.前言 android13中,A527的系统设置变成,左边是一级菜单,右侧是二级菜单, 这样跟我们以前android7/8/9的布局是不一样的,我们需要将它修改为一级菜单,点进去才是二级菜单这种。 效果如下 2.系统设置实现分析 它这里使用的是google新出的embedding activity, 相关的知…

MHA Master High Availability

一、MHA工作原理和架构 MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃的master保存二进制日志事件(binlog events)识别含有最新更新的slave应用差异的中继日志(relay log)到其他的sla…

celery执行任务报错ValueError: not enough values to unpack

背景 在做用户注册模块的时候需要对手机号验证的过程进行优化,目前想到的方式是通过celeryrabbitmq的方式进行异步处理,选择使用celery是因为使用方便、性能好、可分布式部署。 环境信息 目前使用地win11容器化启动 rabbitmq:3.13.2 python:3.6.8 cel…

21. Java AQS 原理

1. 前言 本节内容主要是对 AQS 原理的讲解,之所以需要了解 AQS 原理,是因为后续讲解的 ReentrantLock 是基于 AQS 原理的。本节内容相较于其他小节难度上会大一些,基础薄弱的学习者可以选择性学习本节内容或者跳过本节内容。 了解什么是 AQ…

【目录】阅读须知!全博文、专栏大纲

首先要和大家说一下,博主的文章并不是想到哪里写到哪里,而是以整个大后端为主题,成体系的在写专栏,从和后端紧相关的计算机核心课程开始、到JAVA SE、JAVA EE、到数据库、MQ等各类中间件、再到业务场景、性能优化。当然也会涉及一…

Git秘籍大公开:从基础概念到高级技巧的全面解析

文章目录 前言一、Git基础介绍1. 作用2. 为什么要进行源代码管理?3. Git的诞生4. Git管理源代码特点5. Git操作流程图解 二、工作区暂存区和仓库区介绍1. 工作区2. 暂存区3. 仓库区 三、Git单人本地仓库操作1. 安装git2. 查看git安装结果3. 创建项目4. 创建本地仓库5. 配置个人…

鸿蒙系统:未来智能生态的引领者

在当今这个日新月异的互联网领域,操作系统作为连接硬件与软件的桥梁,其重要性不言而喻。随着华为鸿蒙系统(HarmonyOS)的崛起,一场关于操作系统未来的讨论再次被推向高潮。 鸿蒙OS,华为的全新力作&#xff…

字节码编程javassist之打印方法耗时和入参

写在前面 本文看下如何实现打印方法耗时和入参。 1:程序 需要增强的类: public class ApiTest1 {public Integer strToInt(String str01, String str02) {return Integer.parseInt(str01);}}插桩类 package com.dahuyou.javassist.huohuo.aa;import…

【数据结构】线性表----栈详解

栈 栈(Stack)是一种常见的数据结构,它具有**后进先出(Last In, First Out, LIFO)**的特点。栈的运作类似于物理世界中的叠盘子:最新放上去的盘子最先被拿走,而最底部的盘子最后才能被取出。 如…

C语言学习记录Day2

for循环 for(表达式1;表达式2;表达式3) 循环语句; 注:表达式1:初始化部分.表达式2:条件判断部分 表达式3:调整部分 不可再for循环体内修改循环变量,防止f…