【从基础到模型网络】深度学习-语义分割-基础

语义分割在深度学习与人工智能领域占据重要地位。它是计算机视觉的核心任务之一,能够将图像像素级地划分为不同语义类别,为理解图像内容提供关键支持。在自动驾驶中,可精准识别道路、车辆、行人等元素,保障行车安全;在医学影像分析中,能准确分割器官和病变区域,辅助疾病诊断。此外,它还广泛应用于机器人视觉、卫星图像分析等领域,推动人工智能向更精准、更智能的方向发展,是实现智能视觉感知的关键技术。

目录

上采样

双线性插值

转置卷积


上采样

上采样(upsampling)一般包括2种方式:

  1. Resize,如双线性插值直接缩放,类似于图像缩放(这种方法在原文中提到)
  2. Deconvolution,也叫Transposed Convolution

双线性插值

线性插值

双线性插值

又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展, 其核心思想是在两个方向分别进行一次线性插值。

如图,已知Q12,Q22,Q11,Q21,但是要插值的点为P点,这就要用双线性插值 了,首先在x轴方向上,对R1和R2两个点进行插值,这个很简单,然后根据R1和R2对 P 点进行插值,这就是所谓的双线性插值。在数学上,双线性插值是有两个变量的插值函数 的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。

假如我们想得到未知函数 f 在点 P = (x, y) 的值,假设我们已知函数 f 在 Q11 = (x1,

y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值。

首先在 x 方向进行线性插值,得到

然后在 y 方向进行线性插值,得到

这样就得到所要的结果 f(x, y),

如果选择一个坐标系统使得 f 的四个已知点坐标分别为 (0, 0)、(0, 1)、(1, 0) 和 (1,

1),那么插值公式就可以化简为

或者用矩阵运算表示为

重点放在最后得到的矩阵的理解

双线性插值可以理解为 “两步走” 的加权估算,就像在一张方格纸上,通过四个角的已知值,估算中间某点的值。

转置卷积

conv2d_transpose(
x,
filter,
output_shape,
strides,
padding='SAME',
data_format='NHWC',
name=None
)

参数解释

filter: [kernel_size,kernel_size, output_channels, input_channels] 这里的转置卷积核

和正向卷积核有区别,在于通道数参数的放置位置,因为转置卷积是正向卷积的逆过程,所

以放置的位置相反

实现过程

(其实就是将输入扩充后进行卷积)

先填充后卷积,本质和普通卷积没设么区别

Step 1 扩充

将 inputs 进行填充扩大,扩大的倍数与 strides 有关(strides 倍)。扩大的方式是在

元素之间插[ strides - 1 ]个 0。padding="VALID"时,在插完值后继续在周围填充的宽度

为[ kenel_size - 1 ],填充值为 0;padding = "SAME"时,在插完值后根据 output 尺寸进行填充,填充值为 0。

Step 2 卷积

对扩充变大的矩阵,用大小为 kernel_size 卷积核做卷积操作,这样的卷积核有 filters

个,并且这里的步长为 1(与参数 strides 无关,一定是 1)

注意:

conv2d_transpose 会计算 output_shape 能否通过给定的 filter,strides,padding 计算

出 inputs 的维度,如果不能,则报错。也就是说,conv2d_transpose 中的filter,strides,padding 参数,与反过程中的 conv2d 的参数相同

转置卷积的直观解释

转置卷积(也叫反卷积)的本质是卷积的 “反向操作”,但不是严格意义上的逆运算。它通过插入空格(Zero Padding)和标准卷积来实现特征图的上采样。

Step 1: 扩充(Insert Zeros & Padding)

按 Strides 倍数插入空格

假设输入是一个 2×2 的矩阵,strides=2:

输入 (2×2)

[[1, 2],[3, 4]
]

插入空格后 (4×4)

[[1, 0, 2, 0],[0, 0, 0, 0],[3, 0, 4, 0],[0, 0, 0, 0]
]

规律:在每个元素之间插入 strides-1 个零(这里是 2-1=1 个零),使矩阵尺寸变为原来的 strides 倍。

按 Padding 规则补零

假设卷积核大小 kernel_size=3×3:

padding="VALID":在矩阵周围填充 kernel_size-1 圈零(这里是 3-1=2 圈):plaintext

填充后 (8×8):

[[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 1, 0, 2, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 3, 0, 4, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0]
]

padding="SAME":根据输出尺寸动态计算填充量,确保输出尺寸符合预期(通常使输出与输入尺寸成 strides 倍关系)。

Step 2: 卷积(标准卷积操作)

使用 3×3 卷积核对扩充后的矩阵进行卷积,步长固定为 1:

卷积核 (3×3)

[[a, b, c],[d, e, f],[g, h, i]
]

卷积过程:卷积核在扩充后的矩阵上滑动(步长 = 1),每次覆盖一个 3×3 区域将卷积核与覆盖区域逐元素相乘后求和,得到输出矩阵的一个元素重复此过程,直到覆盖整个扩充矩阵。

示例结果(简化)

假设卷积后得到一个 4×4 的输出矩阵(实际尺寸由 padding 和 kernel_size 决定):

输出 (4×4)

[[a, b+2d, c+2f, 2i],[d+3g, e+2h+3b, f+2i+3d, 2h+4f],[g+3a, h+3b+2d, i+3c+2f, 2b+4e],[3a, 3b+2d, 3c+2f, 2e+4h]
]

为什么这样设计?

尺寸关系的反向性

转置卷积的参数(filters, strides, padding)与正向卷积完全对称:

正向卷积:输入尺寸 H×W → 输出尺寸 (H+2P-K)/S+1 × (W+2P-K)/S+1。

转置卷积:输入尺寸 H×W → 输出尺寸 (H-1)×S-2P+K × (W-1)×S-2P+K。

tip:‘K’代表卷积核(kernel)的大小 。通常在二维卷积里,如果卷积核是正方形,K 指的就是卷积核的边长,比如 3×3 的卷积核,此时 K = 3 ;如果是长方形卷积核,在计算中一般也会统一按较大边长等情况处理

例如:

正向卷积:3×3 输入 → 2×2 输出(stride=2, padding=0)

转置卷积:2×2 输入 → 3×3 输出(stride=2, padding=0)

参数共享的对称性

转置卷积的卷积核与正向卷积共享相同的参数,只是计算过程相反:

正向卷积中,一个卷积核将 H×W 映射到 h×w。

转置卷积中,同一个卷积核将 h×w 映射回 H×W。

TensorFlow框架(2.0+)的代码

import tensorflow as tf
import numpy as np# 输入:1 张图片,尺寸 28*28 高宽,通道数 3
x = np.ones((1, 28, 28, 3), dtype=np.float32)# 卷积核尺寸 4x4 ,5 表输出通道数,3 代表输入通道数
w = np.ones((4, 4, 5, 3), dtype=np.float32)# 扩大 2 倍
output = tf.nn.conv2d_transpose(
    x, w, output_shape=(1, 56, 56, 5), strides=[1, 2, 2, 1], padding='SAME'
)# 直接执行,无需显式创建会话
print(output.shape)

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

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

相关文章

C++:array容器

array容器是序列容器&#xff0c;它的特点是&#xff1a;静态&#xff0c;固定数目。可以看作更安全的数组。 它还有一些成员函数&#xff0c;如begin&#xff08;&#xff09;&#xff1a;返回指向容器中第一个元素的随机访问迭代器。 #include<iostream>//数组容器 #…

2025年度消费新潜力白皮书470+份汇总解读|附PDF下载

原文链接&#xff1a;https://tecdat.cn/?p42178 过去一年&#xff0c;消费市场在政策驱动与技术迭代中呈现结构性变革。社零总额达487,895亿元&#xff0c;实物商品网零额占比27%&#xff0c;线上渠道成为增长引擎。本报告从食品饮料、美妆护肤、家电数码、服饰户外四大核心领…

[Web服务器对决] Nginx vs. Apache vs. LiteSpeed:2025年性能、功能与适用场景深度对比

更多服务器知识&#xff0c;尽在hostol.com 当你准备为你的网站或应用程序选择一款 Web 服务器软件时&#xff0c;就像是为你的“超级跑车”选择一款合适的“引擎”——它将直接决定你的“座驾”能跑多快、多稳、以及能适应什么样的“路况”&#xff08;工作负载&#xff09;。…

一款适配国内的视频软件,畅享大屏与局域网播放

软件介绍 今天要给大家安利一款超强视频播放软件——MXPlayer。它的解码实力堪称一绝&#xff0c;市面上不管是常见的 MP4、MKV 格式&#xff0c;还是对播放设备要求极高的超高清 4K、HDR 视频&#xff0c;甚至那些鲜为人知的冷门格式&#xff0c;它统统都能流畅播放&#xff…

[CSS3]百分比布局

移动端特点 PC和手机 PC端网页和移动端网页的有什么不同? PC屏幕大&#xff0c;网页固定版心手机屏幕小&#xff0c;网页宽度多数为100% 谷歌模拟器 使用谷歌模拟器可以在电脑里面调试移动端的网页 屏幕尺寸 了解屏幕尺寸概念 屏幕尺寸: 指的是屏幕对角线的长度&#xff…

【低代码】如何使用明道云调用 Flask 视图函数并传参(POST 方法实践)

在自动化办公或业务流程管理中,明道云提供了强大的 HTTP 请求节点,可以直接调用第三方 API,包括我们常见的 Flask 服务端接口。本文将详细介绍如何使用明道云通过 POST 方法调用 Flask 视图函数并传参,包括配置要点与 Python 后端的参数接收方法。 一、场景介绍 我们希望…

在 Azure OpenAI 上使用 Elastic 优化支出和内容审核

作者&#xff1a;来自 Elastic Muthukumar Paramasivam&#xff0c;Bahubali Shetti 及 Daniela Tzvetkova 我们为 Azure OpenAI 正式发布包添加了更多功能&#xff0c;现在提供内容过滤监控和计费见解的增强&#xff01; 在之前的博客中&#xff0c;我们展示了如何使用 Elasti…

iOS解码实现

import Foundation import VideoToolboxclass KFVideoDecoderInputPacket {var sampleBuffer: CMSampleBuffer? }class KFVideoDecoder {// MARK: - 常量private let kDecoderRetrySessionMaxCount 5private let kDecoderDecodeFrameFailedMaxCount 20// MARK: - 回调var pi…

Redis应用--缓存

目录 一、什么是缓存 1.1 二八定律 二、使用Redis作为缓存 三、缓存的更新策略 3.1 定期更新 3.2 实时生成 四、缓存预热、缓存穿透、缓存雪崩和缓存击穿 4.1 缓存预热 4.2 缓存穿透 4.3 缓存雪崩 4.4 缓存击穿 一、什么是缓存 缓存(cache)是计算机的一个经典的概念…

Unity 喷烟喷气特效:喷快消失慢

快速喷气缓慢消失同时播放3*3序列帧动画。常用在火车烟囱特效、气体释放、摔倒、等效果中&#xff0c;可变种应用场景较多。 下列为Particle System参数&#xff1a; Color over Lifetime参数&#xff1a; UnityEditor.GradientWrapperJSON:{"gradient":{"ser…

关于收集 Android Telephony 网络信息的设计思考2

需求: 目标1: Android Telephony data(数据模块)侧收集多源(ServiceStateTracker/ImsService/其他)网络状态信息。目标2: 收集的数据需统一上报/存储到外部App的Provider。字段分散,不方便只在ServiceStateTracker中收集和插入。多触发点/多场景,需要统一插入。一、架构…

Elasticsearch 深入分析三种分页查询【Elasticsearch 深度分页】

前言&#xff1a; 在前面的 Elasticsearch 系列文章中&#xff0c;分享了 Elasticsearch 的各种查询&#xff0c;分页查询也分享过&#xff0c;本篇将再次对 Elasticsearch 分页查询进行专题分析&#xff0c;“深度分页” 这个名词对于我们来说是一个非常常见的业务场景&#…

CodeBuddy(腾讯云代码助手)最新功能——智能体 Craft 体验

文章目录 &#x1f4cb; 前言&#x1f3af; 关于智能体 Craft&#x1f3af; 智能体 Craft 体验&#x1f9e9; 安装方法&#x1f9e9; 如何使用&#x1f9e9; Craft 初体验&#x1f9e9; Craft 生成代码效果体验 &#x1f4dd;最后 &#x1f4cb; 前言 CodeBuddy&#xff08;腾讯…

05 接口自动化-框架封装思想建立之httprunner框架(中)

文章目录 一、httprunner常规的关键字详解httprunner测试用例的结构简化&#xff1a; 二、httpruner接口自动化项目架构三、环境变量四、代码项目框架如下图&#xff1a;api/wx_get_token.ymlapi/wx_get_tag.ymltestcases/wx_get_tag.ymltestsuites/wx_get_tag.yml.env 一、htt…

LabVIEW中EtherCAT从站拓扑离线创建及信息查询

该 VI 主要用于演示如何离线创建 EtherCAT 从站拓扑结构&#xff0c;并查询从站相关信息。EtherCAT&#xff08;以太网控制自动化技术&#xff09;是基于以太网的实时工业通信协议&#xff0c;凭借其高速、高效的特性在自动化领域广泛应用。与其他常见工业通讯协议相比&#xf…

java的synchronized 原理及功能

简介&#xff1a; Java中的synchronized关键字是一种同步机制&#xff0c;用于控制多个线程对共享资源的访问。 原理&#xff1a; 在Java锁有一个内部锁 Intrinsic Lock&#xff0c;也称为监视器锁或管程锁&#xff0c;每个Java对象都有一个关联的监视器锁&#xff0c;隐式锁…

HarmonyOS NEXT端云一体化工程目录结构

视频课程学习报名入口:HarmonyOS NEXT端云一体化开发 端云一体化开发工程由端开发工程(Application)和云开发工程(CloudProgram)两大核心模块构成。 1)端开发工程目录结构 端开发工程主要用于开发应用端侧的业务代码,通用云开发模板的端开发工程目录结构如下图所示: …

普通用户的服务器连接与模型部署相关记录

普通用户的服务器连接与模型部署相关记录 一、从登录到使用自己的conda 1.账号登陆&#xff1a; ssh xxx172.31.226.236 2.下载与安装conda&#xff1a; 下载conda&#xff1a; wget -c https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh 安装con…

亲测有效!OGG 创建抽取进程报错 OGG-08241,如何解决?

前言 今天在测试 OGG 一个功能的时候&#xff0c;需要重新初始化 oggca&#xff0c;所以重装了一下 OGG。重建完之后重新添加抽取进程报错&#xff0c;一直无法添加成功&#xff1a; 经过一翻分析&#xff0c;找到了解决方案&#xff0c;本文记录一下解决过程。 问题描述 OG…

Docker构建 Dify 应用定时任务助手

概述 Dify 定时任务管理工具是一个基于 GitHub Actions 的自动化解决方案&#xff0c;用于实现 Dify Workflow 的定时执行和状态监控。无需再为缺乏定时任务支持而感到困扰&#xff0c;本工具可以帮助设置自动执行任务并获取实时通知&#xff0c;优化你的工作效率。 注意&…