【深度学习的骨架与脉搏】语义分割的卷积神经网络·U-Net
🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 前言
2. 语义分割在计算机视觉中
3. 语义分割的应用
4. 理解卷积、最大池化和转置卷积
4.1 卷积运算
4.2 最大池化操作
4.3 上采样操作
4.4 转置卷积
4.5 总结
5. UNET网络
6. 总结
1. 前言
计算机视觉是一门跨学科的科学领域,研究如何让计算机从数字图像或视频中获得高水平的理解。从工程的角度来看,它寻求自动化人类视觉系统可以完成的任务。
深度学习使得计算机视觉领域在过去几年中飞速发展。在这篇文章中,我想讨论计算机视觉中的一项特定任务,即语义分割 。尽管研究人员已经想出了许多方法来解决这个问题,但我将讨论一种特殊的架构,即 UNET ,它使用完全卷积网络模型来完成这项任务。
此外这篇博客的目的还在于提供一些关于卷积网络中常用操作和术语的直观见解,以便于理解图像。 其中包括卷积、最大池化、感受野、上采样、转置卷积、跳过连接等。
2. 语义分割在计算机视觉中
计算机对图像的理解有多种粒度级别。对于每个级别,计算机视觉领域都定义了一个问题。从粗粒度到更细粒度的理解,可以分为计算机视觉中的不同任务:1、图像分类;2、带定位的分类;3、物体检测;4、语义分割;5、实例分割。
a. 图像分类:
计算机视觉中最基本的构建块是图像分类问题,给定一张图像,我们希望计算机输出一个离散标签,即图像中的主要对象。在图像分类中,我们假设图像中只有一个(而不是多个)对象。
在我的另一篇文章中:【深度学习的骨架与脉搏】卷积神经网络模型(呕心沥血版)_alexnet卷积神经网络具体的卷积和池化过程-CSDN博客我说到卷积神经网络CNN的一个特性就是 保留局部不变性(无论物体在图片的哪个位置,对于CNN来说学习到的东西都是一样的)。但是在定位问题中这个特性反倒变为了阻碍。
b. 带定位的分类:
在定位中,除了离散标签,我们还希望计算能够确定图像中物体的确切位置。这种定位通常使用边界框来实现,边界框可以通过一些与图像边界相关的数值参数来识别。即使在这种情况下,也假设每个图像只有一个物体。
c. 目标检测:
目标检测将定位扩展到下一个级别,现在图像不再局限于只有一个对象,而是可以包含多个对象。任务是对图像中的所有对象进行分类和定位。在这里,定位再次使用边界框的概念来完成。
d. 语义分割:
语义图像分割的目标是将图像中的每个像素标记为所表示内容的相应类别 。由于我们要对图像中的每个像素进行预测,因此这项任务通常称为密集预测 。请注意,与之前的任务不同,语义分割的预期输出不仅仅是标签和边界框参数。输出本身是高分辨率图像(通常与输入图像大小相同),其中每个像素被归类为特定类别。因此,它是像素级图像分类。
e. 实例分割:
实例分割比语义分割领先一步,在像素级分类之外,我们期望计算机分别对每个类的实例进行分类。例如,上图中有 3 个人,严格来说是“人”类的 3 个实例。这 3 个实例被分别分类(使用不同的颜色)。但语义分割不会区分特定类的实例。
特别地:实例分割是语义分割的进一步细粒度分割
3. 语义分割的应用
如果你想知道语义分割是否有用,你的疑问是合理的。然而,事实证明,Vision 中的许多复杂任务都需要对图像进行这种细粒度的理解。例如:
a. Autonomous vehicles 自动驾驶汽车
自动驾驶是一项复杂的机器人任务,需要在不断变化的环境中进行感知、规划和执行。这项任务还需要以最高的精度执行,因为安全至关重要。语义分割提供有关道路上可用空间的信息,以及检测车道标记和交通标志。
b. 生物医学图像诊断
机器可以增强放射科医生的分析能力,大大减少运行诊断测试所需的时间。
c. 地理传感
语义分割问题也可以视为分类问题,其中每个像素被归类为一系列对象类别中的一个。因此,卫星图像的土地使用地图绘制有一个用例。土地覆盖信息对于各种应用都很重要,例如监测森林砍伐和城市化区域。为了识别卫星图像上每个像素的土地覆盖类型(例如城市、农业、水域等),土地覆盖分类可以看作是一项多类语义分割任务。道路和建筑物检测也是交通管理、城市规划和道路监测的重要研究课题。
4. 理解卷积、最大池化和转置卷积
在深入研究 UNET 模型之前,了解卷积网络中通常使用的不同操作非常重要。请深入理解卷积、最大池化和转置卷积的作用。
4.1 卷积运算
卷积运算有两个输入:
- 输入的3维向量(图片一般是RGB输入的3D向量)。
- 一组f个(f也就通道数)过滤器(也叫卷积核或特征提取器),每个过滤器的大小为k*k(通常为3或5),其深度默认是3(和输入的维度是相同,因为图片一般是3D向量)。
卷积运算的输出:
- 一个大小为 (nout x nout x f) 的 3D 体积(也称为输出图像或特征图),也可以说是f个大小为(nout x nout)的输出图像。(每一个卷积核会提取输出图像中的一部分特征)
卷积可视化如下:
在上面的 GIF 中,我们有一个大小为 7x7x3 的输入量。两个过滤器的大小均为 3x3x3(k选择为3,最后一个深度由输入图片决定)。Padding =0,Strides = 2。因此,输出量为 3x3x2 。
想要真正理解卷积操作需要来看一个名词“感受野”。感受野是特定特征提取器(过滤器)正在查看的输入体积中的区域。在上面的 GIF 中,过滤器在任何给定实例中覆盖的输入体积中的 3x3 蓝色区域是感受野。这有时也称为上下文 。简单来说, 感受野(上下文)是过滤器在任何给定时间点覆盖的输入图像的区域 。
4.2 最大池化操作
简单来说,池化的作用是减少特征图的大小,以便网络中的参数更少(选取最大值是因为最大值能够保持更多的信息)。例如:
基本上,我们从输入特征图的每个 2x2 块中选择最大像素值,从而获得池化特征图。请注意,过滤器的大小和步幅是最大池化操作中的两个重要超参数。
这个想法是只保留每个区域的重要特征(最大值像素),并丢弃不重要的信息。重要的信息是指最能描述图像背景的信息。这里需要注意的一点是,卷积运算和池化运算都会减小图像的大小。这称为下采样 。在上面的例子中,池化之前的图像大小为 4x4,池化之后的图像大小为 2x2。实际上,下采样基本上意味着将高分辨率图像转换为低分辨率图像。
因此,在池化之前,4x4 图像中存在的信息,在池化之后,(几乎)相同的信息现在存在于 2x2 图像中。现在,当我们再次应用卷积运算时,下一层中的过滤器将能够看到更大的上下文,即,随着我们深入网络,图像的尺寸会减小,但感受野会增加。
解释池化层的作用+解释为什么越深能够提取更抽象的特征:这个角度很有意思,因为池化操作将更多信息蕴含到更少的框架内(4*4的信息蕴含到2*2里面),因此下一层的过滤器(虽然感受野一样)将看到更大的上下文,这样解释了为什么越深层次看到的东西越抽象,更接近语义信息。
例如下面是 LeNet 5 架构:
请注意,在典型的卷积网络中,图像的高度和宽度逐渐减小(由于池化而下采样),这有助于更深层的过滤器聚焦于更大的感受野(上下文)。然而,通道数/深度(使用的过滤器数量)逐渐增加,这有助于从图像中提取更复杂的特征。
这里蕴含一个点:越深层(越抽象的特征)需要更多的卷积核去提取。举个例子解释小学生的一道题目可能只要一个角度一门学科的知识就足够了,但是想要理解一个具身人工智能就需要多学科多角度的知识去理解。
4.3 上采样操作
如前所述,语义分割的输出不仅仅是一个类别标签或一些边界框参数。事实上,输出是一个完整的高分辨率图像,其中所有像素都被分类。因此,如果我们使用带有池化层和密集层的常规卷积网络,虽然不停卷积+池化,我们能够学习到从浅层到深层的很多信息,但是我们也将丢失许多细节的信息(因为下采样)。因此需要对图像进行上采样,将低分辨率图像转换为高分辨率图像。
有许多技术可以对图像进行上采样。其中一些是双线性插值、立方插值、最近邻插值、反池化、转置卷积等。然而,在大多数最先进的网络中,转置卷积是上采样图像的首选。
4.4 转置卷积
转置卷积(有时也称为反卷积或分数步长卷积)是一种使用可学习参数对图像进行上采样的技术。如果对转置卷积不熟悉的同学可以见另一篇文章:
- 【深度学习基础】深入理解 转置卷积与转置卷积核-CSDN博客
从高层次上讲,转置卷积恰好是普通卷积的相反过程,即输入量是低分辨率图像,而输出量是高分辨率图像。在上文中,很好地解释了如何将普通卷积表示为输入图像和滤波器的矩阵乘法以产生输出图像。只需对滤波器矩阵进行转置,我们就可以反转卷积过程,因此得名转置卷积。
4.5 总结
- 感受野。
- 卷积和池化操作对图像进行下采样,即将高分辨率图像转换为低分辨率图像。
- 最大池化操作通过增加感受野,有助于理解图像中“有什么”。然而,它往往会丢失物体“在哪里”的信息(丢失的是绝对位置信息,卷积的平移不变性会保证相对位置)。
- 在语义分割中,不仅要知道图像中存在“什么”,而且要知道它存在于“哪里”。因此,我们需要一种方法来将图像从低分辨率上采样到高分辨率,这将有助于我们恢复“哪里”的信息。
- 转置卷积是执行上采样的首选,它基本上通过反向传播学习参数,将低分辨率图像转换为高分辨率图像。
5. UNET网络
Unet由 Olaf Ronneberger 等人为生物医学图像分割而开发。该架构包含两条路径。第一条路径是收缩路径(也称为编码器),用于捕获图像中的上下文。编码器只是卷积层和最大池化层的传统堆栈。第二条路径是对称扩展路径(也称为解码器),用于使用转置卷积实现精确定位。 因此它是一个端到端的全卷积网络(FCN),即它只包含卷积层而不包含任何密集层,因此它可以接受任何大小的图像。在原始论文中,UNET 的描述如下:
猫猫会尝试更直观地描述这个架构。请注意,在原始论文中,输入图像的大小为 572x572x3,但是,我们将使用大小为 128x128x3 的输入图像。因此,各个位置的尺寸将与原始论文中的尺寸不同,但核心组件保持不变(上面的卷积会不填充,猫猫下面展示的会填充,但是这都没有本质区别)。
- 2@Conv 层表示应用两个连续的卷积层。
- c1, c2, .... c9 是卷积层的输出张量。
- p1、p2、p3 和 p4 是最大池化层的输出张量。
- u6、u7、u8 和 u9 是上采样(转置卷积)层的输出张量。
- 左侧是收缩路径(编码器),我们在其中应用常规卷积和最大池化层。
- 在编码器中,图像的尺寸逐渐减小,深度逐渐增加。从 128x128x3 开始到 8x8x256。
- 这基本上意味着网络学习了图像中的“什么”信息,但它丢失了“在哪里”的信息。
- 右侧是扩展路径(解码器),我们将转置卷积与常规卷积一起应用。
- 在解码器中,图像的尺寸逐渐增加,深度逐渐减小。从 8x8x256 开始到 128x128x1。
- 直观地讲,解码器通过逐步应用上采样来恢复“WHERE”信息(精确定位)。为了获得更精确的位置,在解码器的每一步我们都使用跳过连接,将转置卷积层的输出与来自同一级别的编码器的特征图连接起来:
u6 = u6 + c4
u6=u6+c4
u7 = u7 + c3
u7=u7+c3
u8 = u8 + c2
u8=u8+c2
u9 = u9 + c1
u9=u9+c1 - 本质上来说,跳跃连接就是将 卷积学习到的知识+图片原始信息 再糅合在一起(卷积学习到的知识里面可能包括模型对图片的类型理解、位置信息理解等;图片原始信息包括绝对位置信息、高分辨率像素等信息。)然后再利用卷积在这些信息中提取我们想要的(切割信息+绝对位置信息等)。之后再进行下一层上采样,一层层去恢复绝对位置信息。
6. 总结
【如果想学习更多深度学习知识,可以订阅热门专栏】
- 《AI认知筑基三十讲》
- 《PyTorch科研加速指南:即插即用式模块开发》
- 《深度学习理论直觉三十讲》
如果想要学习更多人工智能的知识,大家可以点个关注并订阅,持续学习、天天进步你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~
相关文章:
【深度学习的骨架与脉搏】语义分割的卷积神经网络·U-Net
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 …...
ELK+Filebeat 深度部署指南与实战测试全解析
一、介绍 ELK: ELasticsearch ,Logstash,Kibana三大开源框架首字母简写,市面上也被称为Elastic Stack。 Elasticsearch 是一个基于 Lucene 的分布式搜索平台框架,通过 Restful 方式进行交互,具备近实时搜索能力。像百度、Google 这类大数据全…...
Java设计模式之中介者模式:从入门到架构级实践
一、什么是中介者模式? 中介者模式(Mediator Pattern)是一种行为型设计模式,其核心思想是通过引入一个中介对象来封装多个对象之间的交互关系。这种模式将原本复杂的网状通信结构转换为星型结构,类似于现实生活中的机…...
L2TP通道基础实验
目录 实验拓扑: 一、需求配置LAC设置: 界面设置: 编辑LNS设置: 建立静态路由:编辑 策略配置: 二、测试 通讯测试: 实验拓扑: 一、需求配置 LAC设置: [LAC]l2…...
关于字节跳动旗下的豆包(DouBao)软件的详解、核心功能以及与同类产品的对比分析
以下是关于豆包(DouBao)软件的详解、核心功能以及与同类产品的对比分析: 一、豆包(DouBao)详解 豆包是字节跳动推出的一款多功能人工智能助手,主打“智能助手场景化工具”结合,覆盖日常生活、…...
如何在本地修改 Git 项目的远程仓库地址
✅ 场景说明 你当前的 Git 项目地址是: http://192.168.0.16/xxx.git你希望把它改成: http://192.168.0.22:8099/xxx.git🧩 操作步骤 步骤 ①:进入项目所在目录 你已经在正确路径下了: cd C:\Develop\xxx确认这个…...
Gitea 1.23.7 速配
复用容器内的postgresql CREATE USER gitea WITH PASSWORD gitea; CREATE DATABASE gitea; GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea; docker-compose.yml 内容 gitea:image: gitea/gitea:latestcontainer_name: giteaenvironment:- GITEA__server__HTTP_ADDR0.0.0.…...
JavaScript — 函数定义
介绍 JavaScript函数是执行特定任务的代码块,可通过多种方式定义。传统函数声明使用function关键字,后接函数名和参数列表,这种声明会被提升至作用域顶部。函数表达式则将匿名或具名函数赋值给变量,遵循变量作用域规则࿰…...
Allure安装与使用【macOS】
安装: brew install allure 安装插件: pip install allure-pytest2.8.16 生成一个html格式的报告,步骤: 执行生成json,制定结果保存目录 pytest --alluredirreport test_demo.py 查看测试保报告方式 将json转成h…...
FireCrawl爬虫工具, Craw4ai
FireCrawl是一款开源的AI爬虫工具,专门用于Web数据提取,并将其转换为Markdown格式或其他结构化数据。FireCrawl特别适合处理使用JavaScript动态生成的网站,能够自动抓取网站及其所有可访问的子页面内容,并将其转换为适合大语言…...
【Python爬虫】详细入门指南
目录 一、简单介绍 二、详细工作流程以及组成部分 三、 简单案例实现 一、简单介绍 在当今数字化信息飞速发展的时代,数据的获取与分析变得愈发重要,而网络爬虫技术作为一种能够从互联网海量信息中自动抓取所需数据的有效手段,正逐渐走入…...
Cesium.Cesium3DTileset设置贴地,tileset.readyPromise.then报错
tileset.readyPromise.then(function(tileset) { }); 用的readyPromise函数,却报错了,通过参考别人的博客内容发现最终修改的是 modelMatrix这个参数的内容,所以直接舍弃使用readyPromise函数,在代码中等 viewer.scene.primitiv…...
卫星电话扬帆智慧海洋,构筑蓝海通信新生态
海洋,承载着全球90%的贸易运输量,更是我国“向海图强”战略的核心战场。但是,全球95%的海洋区域仍处于蜂窝网络覆盖的“真空地带”,近海信号不稳、远洋通信中断的难题长期制约着海洋经济的纵深发展。技术革新是推动发展的强大引擎…...
大模型不是在推理,只是在复述??
目的 看见一篇论文Recitation over Reasoning: How Cutting-Edge Language Models Can Fail on Elementary School-Level Reasoning Problems?,论文中建立了一个推理题库,通过将推理问题进行改写(通过只改写几个字,颠覆整个问题…...
安全编码课程 实验7 并发
实验项目:C 多线程中的数据竞争与同步机制 实验要求: 1. 编写基础代码:模拟账户余额取款 创建一个全局共享变量 int balance 100,表示初始余额; 创建两个线程 Thread A 和 Thread B,尝试各自取出 100 元&a…...
【vue】2.16简单案例
一、高亮显示点击文字 使用vue绑定页面 设置默认样式 使用for循环数组数据展示,并取得索引 创建点击事件并传承,创建num变量 方法中num传进来的参数, 在内容中使用:class和三元运算符,当numkey时是true显示,…...
多线程进阶知识篇(一)
文章目录 一、开启线程1. start()2. run() 二、单核/多核CPU1. 单核CPU2. 多核CPU3.烧水问题 三、操作线程的命令四、并发的本质五、线程上下文切换1. 定义2. 原因 一、开启线程 1. start() 调用 start() 方法会启动一个新的线程,每次调用 start(),线程…...
【benepar】benepar安装会自动更新pytorch
直接pip install benepar,安装benepar0.2.0时会自动更新torch的版本 解决方法:去https://pypi.org/project/benepar/0.1.3/找历史版本 我的适配版本:python3.9,torch1.11.0(cuda11.3),对应的ben…...
智能云图库-1-项目初始化
项目中的异常处理 自定义异常 在exception包下新建错误码枚举类: Getter public enum ErrorCode {SUCCESS(0, "ok"),PARAMS_ERROR(40000, "请求参数错误"),NOT_LOGIN_ERROR(40100, "未登录"),NO_AUTH_ERROR(40101, "无权限&q…...
每日算法-250414
每日算法学习记录 - 240414 记录今天学习和解决的两道 LeetCode 算法题,主要涉及二分查找的应用。 162. 寻找峰值 题目描述 思路分析 核心思想:二分查找 题目要求找到数组中的任意一个峰值。峰值定义为比其相邻元素都大的元素。题目还隐含了一个条件…...
鸿蒙NEXT开发格式化工具类(ArkTs)
import { i18n } from kit.LocalizationKit;/*** 格式化工具类* 提供电话号码格式化、归属地查询、字符转换等功能。* author: 鸿蒙布道师* since: 2025/04/14*/ export class FormatUtil {/*** 判断传入的电话号码格式是否正确。* param phone - 待验证的电话号码* param coun…...
HarmonyOS 第2章 Ability的开发,鸿蒙HarmonyOS 应用开发入门
第2章 Ability的开发 本章内容 本章介绍HarmonyOS的核心组件Ability的开发。 2.1 Ability概述 2.2 FA模型介绍 2.3 Stage模型介绍 2.4 Ability内页面的跳转和数据传递 2.5 Want概述 2.6 实战:显式Want启动Ability 2.7 实战:隐式Want打开应用管理 2.8 小结 2.9 习题 2.1 Abili…...
CS5346 - Interactivity in Visualization 可视化中的交互
文章目录 Visualization representation interactionInteraction (交互)Benefits (好处)Typical Interaction Techniques(交互技术)SelectFilteringAbstract / Elaborate几何放缩(Geometric zoom)语义放缩࿰…...
AI与我共创WEB界面
记录一次压测后的自我技术提升 这事儿得从机房停电说起。那天吭哧吭哧做完并发压测,正准备截Zabbix监控图写报告,突然发现监控曲线神秘失踪——系统组小哥挠着头说:“上次停电后,zabbix服务好像就没起来过…” 我盯着空荡荡的图表界面,大脑的CPU温度可能比服务器还高。 其…...
python蓝桥杯备赛常用算法模板
一、python基础 (一)集合操作 s1 {1,2,3} s2{3,4,5} print(s1|s2)#求并集 print(s1&s2)#求交集 #结果 #{1, 2, 3, 4, 5} #{3}(二)对多维列表排序 1.新建列表 list1[[1,2,3],[2,3,4],[0,3,2]] #提取每个小列表的下标为2的…...
代码随想录第17天:二叉树
一、二叉搜索树的最近公共祖先(Leetcode 235) 由于是二叉搜索树,节点的值有严格的顺序关系:左子树的节点值都小于父节点,右子树的节点值都大于父节点。利用这一点,可以在树中更高效地找到最低公共祖先。 c…...
第8篇:Linux程序访问控制FPGA端HEX<一>
Q:如何从DE1-SoC_Computer系统的ARM A9处理器访问FPGA端的七段数码管呢? A:DE1-SoC_Computer系统中有2个连接FPGA端HEX外设的并行端口HEX5_HEX4和HEX3_HEX0,每个端口有一个32位只读Data寄存器。地址为0xFF200020的寄存器驱动4个数…...
Android 添加一个自己的系统服务SystemService
Android 系统服务(System Services)是 Android 操作系统的核心组件,运行在系统层面,为应用程序提供底层硬件访问、系统资源管理以及跨应用功能支持。这些服务在后台持续运行,由系统进程(如 system_server&a…...
git安装(windows)
通过网盘分享的文件:资料(1) 链接: https://pan.baidu.com/s/1MAenYzcQ436MlKbIYQidoQ 提取码: evu6 点击next 可修改安装路径 默认就行 一般从命令行调用,所以不用创建。 用vscode,所以这么选择。...
C# visionpro联合编程中遇到的问题之 R6025 - pure virtual function call
C# visionpro联合编程中遇到的问题之 R6025 - pure virtual function call R6025 pure virtual function call解决方法步骤 1: 获取所有相机步骤 2: 遍历并关闭相机完整代码 R6025 pure virtual function call 如果错误 “R6025 - pure virtual function call” 发生在关闭窗体…...
OTA技术(一):原理与实现方案
目录 一.引言 二.核心原理 2.1 定义与分类 2.2 系统架构 2.3 典型的升级流程 三.嵌入式系统中的OTA实现方案 3.1 存储空间划分 3.2 关键技术 一.引言 在智能手机上点击系统更新、电动汽车解锁新功能、智能家居设备自动修复漏洞……这些场景背后都离不开一项关键技术——…...
strings.LastIndexAny 使用详解
目录 1. 官方包 2. 支持版本 3. 官方说明 4. 作用 5. 实现原理 6. 推荐使用场景和不推荐使用场景 推荐场景 不推荐场景 7. 使用场景示例 示例1:官方示例 示例2:日志清洗(去除末尾的乱码或非法字符) 8. 性能对比 性能…...
大型商场运营新变革:AcrelCloud - 3200 预付费系统应用全解析
一、方案概述 在现代商业运营和物业管理中,大型商场、商业小区以及大集团和大物业面临着复杂的费用收取和管理难题。安科瑞的 AcrelCloud - 3200 远程预付费管控云平台,借助先进的预付费电表等设备,为解决这些问题提供了高效的一体化解决方案…...
鸿蒙开发07-interface
在 ArkTS(HarmonyOS Ability Runtime TypeScript)中,interface(接口)是一种强大的类型工具,它主要用于定义对象的结构,为对象的属性和方法提供类型约束,帮助开发者编写更加规范、可维…...
Java从入门到“放弃”(精通)之旅——方法的使用⑤
Java从入门到“放弃”(精通)之旅🚀——方法的使用⑤ 📖引言: 在编程领域,代码如同精密的齿轮相互咬合驱动程序运转。随着项目规模渐长,重复的代码片段如同冗余的齿轮,不仅增加负重…...
5 C 程序全流程解析:编写、预处理、编译、汇编、链接、运行与 GCC 指令详解
1 C 程序运行机制流程概述 通过以上步骤,我们可以将一个 C 语言源代码文件逐步转换为一个可执行的二进制程序。这一过程涉及多个关键工具和步骤,每一步都承担着特定的任务,发挥着独特的作用。深入理解这些步骤,不仅有助于我们更好…...
leetcode:1351. 统计有序矩阵中的负数(python3解法)
难度:简单 给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非严格递减顺序排列。 请你统计并返回 grid 中 负数 的数目。 示例 1: 输入:grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]] 输…...
hive数仓要点总结
1.OLTP和OLAP区别 OLTP(On-Line Transaction Processing)即联机事务处理,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用…...
LeetCode[541]反转字符串Ⅱ
思路: 题目给我们加了几个规则,剩余长度小于2k,大于等于k就反转k个,小于k就全部反转,我们按照这个逻辑来就行。 第一就是大于等于k就反转k个,我们for循环肯定是i2k了,接下来就是判断是否大于等于…...
瑞幸微RK系列平台的YOLO部署(上篇)
🎇环境配置 🎉前言 部署的第一步是对环境的配置,不同的平台的平台需要依赖的环境不同,之前在英伟达的Jetson系列部署过,其主要是需要配置CUDA和CUDNN的环境,需要加速推理的话可能还需要TensorRT的环境。 …...
HarmonyOS:页面滚动时标题悬浮、背景渐变
一、需求场景 进入到app首页或者分页列表首页时,随着页面滚动,分类tab要求固定悬浮在顶部。进入到app首页、者分页列表首页、商品详情页时,页面滚动时,顶部导航栏(菜单、标题)背景渐变。 二、相关技术知识点…...
无人设备遥控器之安全防护与预警篇
无人设备遥控器的安全防护与预警是保障无人机、无人船、无人车等无人系统安全运行的关键环节。随着无人设备在农业、测绘、物流、安防等领域的广泛应用,其遥控器的安全性与可靠性显得尤为重要。 一、安全防护 1. 物理安全防护 外壳防护:采用防水、防尘…...
win10win11启用组策略编辑器
今天发现家庭版的win11系统没有组策略编辑器, 桌面新建txt文件,打开 编写以下脚本: echo off pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >Li…...
谷歌浏览器的开发者模式如何开启及安装教程
在谷歌浏览器(Google Chrome)中开启开发者模式并安装扩展程序(如未上架商店的插件或自定义扩展)的步骤如下: 一、开启开发者模式 打开扩展管理页面 在浏览器地址栏输入:chrome://extensions/ 或通过菜单进入…...
WebRTC实时通话EasyRTC嵌入式音视频通信SDK,构建智慧医疗远程会诊高效方案
一、方案背景 当前医疗领域,医疗资源分布不均问题尤为突出,大城市和发达地区优质医疗资源集中,偏远地区医疗设施陈旧、人才稀缺,患者难以获得高质量的医疗服务,制约医疗事业均衡发展。 EasyRTC技术基于WebRTC等先进技…...
C++性能优化实战:从瓶颈定位到高并发架构重构(第一章)
在高并发编程的世界中,性能瓶颈往往潜伏在代码的深处,悄无声息地吞噬着系统的吞吐量。想象一下,你正在开发一个游戏服务器,需要在每毫秒内为数千名玩家分配和释放内存,任何微小的延迟都可能导致玩家体验的崩塌。你是否曾遇到过这样的困惑:增加了线程数,期待性能翻倍,结…...
Terraform 迷思:当优雅的模块 terraform-aws-eks 与现实碰撞
大家好,今天想和大家聊聊一个可能很多技术人都经历过的场景——面对看似完美的工具或代码库,却陷入意想不到的困境,甚至开始有点怀疑人生的时刻。 启程:雄心勃勃的 EKS 模块优化 故事的开端往往充满希望。就像我今天࿰…...
路由器端口映射的意思、使用场景、及内网ip让公网访问常见问题和解决方法
一、端口映射是什么意思 端口映射是将内网主机的IP地址端口映射到公网中,内部机器提供相应的互联网服务。当异地用户访问该这个端口时,会自动将请求映射到对应局域网内部的机器上。 二、端口映射常见使用场景 1,远程访问需求。当有…...
【MySQL 数据库】增删查改操作CRUD(下)
🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 聚合函数 1.1 常见聚合函数 1.1.1 COUNT 1.1.2 SUM 1.1.3 AVG 1.1.4 MAX 2. Group by 分组 2.1 分组示例 3. having 语句 3.1 having 过滤结果 3…...
Android 日志输出模块
Android 日志输出模块 本文主要记录下封装的日志输出模块. 1: 主要功能 日志模块初始化,并设置日志级别支持将日志写入文件日志文件单个限制200M,按天记录到指定文件,文件达到阈值后,记录新的日志文件.支持导出日志文件zip. 2: 具体实现 日志整体初始化使用静态内部类的方式…...