当前位置: 首页 > news >正文

【RL Application】语义分割中的强化学习方法

        📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏:

       【强化学习】(52)---《语义分割中的强化学习方法》

        最近和朋友交流,发现强化学习也可用于语义分割,然后进行了一些调研,在这里记录一下

语义分割中的强化学习方法

目录

语义分割中的强化学习方法

1.语义分割技术介绍

2.基于强化学习的语义分割马尔科夫决策过程

2.1.流程框架

2.2.马尔可夫决策过程(MDP)

3.状态表示和动作表示

4. 一般的建模过程

4.1. 任务建模

4.2. 公式推导

4.2.1. 状态空间

4.2.2. 动作空间

4.2.3. 奖励函数

4.3. 策略优化与算法实现

[Python] 伪代码实现

[Notice] 关键部分说明

5.总结


1.语义分割技术介绍

        语义分割旨在对图像中的每个像素进行类别划分并对其分配标签。传统图像语义分割技术有基于阈值、基于边缘、基于区域和基于直方图等。尽管这些方法已在图像处理领域得到了广泛应用,但在实际应用中,由于分割精度和效率的局限,往往难以满足更高的需求。此外,仅依赖单一的传统分割算法难以获得预期的分割效果,限制了其在复杂场景中的应用潜力。
        随着深度学习技术,尤其是卷积神经网络(CNN)在语义分割领域的广泛应用,极大推动了语义分割技术的发展。深度图像语义分割模型的出现显著提高了语义分割的性能和准确度,使得这些技术在自动驾驶、医学影像、虚拟现实、增强现实等多个领域发挥重要作用,并展示了广阔的市场应用潜力。代表性的深度图像语义分割模型包括 FCN、U-Net、FPN、SegNet、DeepLab 系列等。


2.基于强化学习的语义分割马尔科夫决策过程

2.1.流程框架

在构建语义分割任务的流程框架:
1.首先需要将一批未经标注的样本构建成未标注样本池。

2.接着,通过一系列查询策略,从这个未标注样本池中选取特定的图像区域进行标注。这一过程中涉及到查询网络的学习,网络负责评估哪些样本区域最需要标注。

3.标注后的样本将被加入已标注样本池,用于迭代训练语义分割模型,直至达到规定的样本预算。在此过程中,为了有效控制标注成本并解决数据集内潜在的类别不平衡问题,采用合适的样本查询策略变得尤为重要。主动学习在选择语义分割任务的查询策略时,不仅需要评估样本的信息量和代表性,还需考虑其对提升模型性能的潜在贡献,以确保在有限的标注预算内最大化语义分割模型的训练效率和准确度通过采用先进的查询网络,可以进一步增强样本选择的智能化和自动化,确保模型在面对复杂多变的视觉场景时,能够更精确地识别并标注关键的语义信息,从而提高语义分割的整体表现。

2.2.马尔可夫决策过程(MDP)

        语义分割问题框架转化为一个马尔可夫决策过程(MDP),由五元组<S,A,R,T,Y>构成:
(1)状态空间S:代表了一系列可能的状态值,每个状态ses表示在特定时刻1时智能体的决策环境。这包括当前的语义分割网络状态、已标注样本池和未标注样本池的情况,基于这些信息来决定哪些样本区域需要进行标注。
(2)行动空间A:代表所有可执行的动作集合a=a",由n个子动作构成。每个子动作代表在图像样本上选择一个特定区域进行标注。
(3)奖励集R:表示在每次主动学习迭代之后获得的奖励值,该奖励是根据基于分割网络在数据样本子集D上的性能改进来计算的,用于评估分割网络的性能表现。

(4)状态转移函数T:表示下一时间步的状态集合S,这个函数映射了从当前状态通过执行某个动作转移到下一个状态的过程。
(5)折扣因子y:用于在计算总奖励时平衡即时奖励与未来奖励的重要性,决定了智能体对未来奖励的重视程度。
        通过把语义分割任务转化为马尔可夫决策过程,模型能够学习如何优化样本选择策略,进而在有限的标注资源条件下实现模型性能的最大化提升。这种方法不仅提升了标注的效率,而且还增强了模型的适用性和鲁棒性。
        整体流程框架

        在语义分割框架中,查询网络被建模为强化学习框架中的智能体,而其余部分则构成了强化学习的环境。此外,本研究还构建了状态子集S和奖励集R。

        奖励集R是一个用来评估分割网络的性能的独立数据样本子集。

        状态子集S是一个包含数据集中各类别代表性样本的数据样本子集,旨在帮助构建和细化状态空间,确保强化学习智能体在学习过程中能够接触到全面且平衡的数据信息。

        通过引入状态子集,模型可以更有效地识别不同类别之间的差异,从而在主动学习过程中培养出更高效的查询策略。在训练过程中,智能体通过与环境的互动获得状态表示和动作表示,并利用经验缓冲区中的数据对查询网络进行训练,从而挑选出需要标注的样本区域,并将加入已标注样本池。然后,语义分割网络FPN根据新更新的已标注数据池来优化模型,并利用D,奖励集来计算奖励值。该训练过程会持续迭代,直到达到预定的标注预算为止。 


3.状态表示和动作表示

        在语义分割任务中,由于需要对样本图像的每个像素进行标签分类,容易造成大量内存资源的占用。采用了一种基于状态子集的方法来构建强化学习的状态表示。该方法通过将状态子集S、中的样本分解为多个区块(patch),并计算每个patch的特征向量,有效减少了内存的使用。在构建状态表示的过程中,首先计算状态子集S、内图像样本的每个像素点的信息熵,然后执行三种池化操作:最大池化、最小池化和平均池化,完成对信息熵的下采样,得到初步的特征向量集合。接下来,通过分割网络预测每个类别的像素数量占比,并将这些预测结果标准化,从而获得第二组特征向量。最后,将这两组特征向量合并,为每一个样本区域生成一个编码,作为该状态的表示。
        为了应对主动学习语义分割任务中因逐像素标注导致的大量资源消耗问题,在动作表示的构建过程中采取了有效的策略。首先,在每个时间步中,从未标注样本池中均匀采样一批未标注区域池p",以此来近似代表整体的未标注样本空间。然后,从这些数据池中筛选出候选区域,并对每个类别的预测像素进行归一化处理。接下来,通过计算已标注区域与未标注区域在分割网络中预测的类别分布之间的KI散度,得到两组特征向量。最后,将这些特征向量与状态表示结合,构成了动作表示a"。状态表示和动作表示的构建过程如图 3.2所示。


4. 一般的建模过程

        强化学习(Reinforcement Learning, RL)在语义分割中的实现可以通过以下几种方式展开:将分割任务建模为一个强化学习问题,其中 环境 是图像,动作 是分割操作,奖励 则衡量分割的质量。以下是详细的实现步骤以及公式推导。

4.1. 任务建模

在语义分割中,将问题转化为强化学习需要以下几个步骤:

  • 状态S:输入图像的当前分割结果或分割的中间状态,通常由一个二维矩阵表示,其中每个像素标记属于某个类别。
  • 动作A:可能的操作,比如对某个区域重新分类或调整分割边界。
  • 奖励R:根据分割结果的准确性计算,例如采用交并比(Intersection over Union, IoU)作为奖励函数。
  • 策略 \pi(a|s):在当前状态 s 下选择动作a的概率分布。
  • 策略\pi(a|s):在当前状态 s下选择动作 a 的概率分布。

4.2. 公式推导

4.2.1. 状态空间

        假设输入图像为 I,其分割状态为S_t(时间步 t 的像素分类矩阵)。每个状态S_t 包括所有像素的分类信息:

S_t = {s_{t,ij} | i \in [1, H], j \in [1, W]}

其中HW分别是图像的高度和宽度。

4.2.2. 动作空间

动作A_t 定义为对图像某一区域的操作,可以是:

  • 对某像素或像素组重新分类;
  • 调整边界位置;
  • 扩展或收缩某区域。

对于每个像素 (i, j),动作可以建模为一个离散的类别标签更新。

4.2.3. 奖励函数

奖励函数 R(S_t, A_t)衡量动作 A_t 对分割结果的影响,通常定义为:

  • 基于交并比 (IoU):R(S_t, A_t) = \text{IoU}(S_t, G) = \frac{|S_t \cap G|}{|S_t \cup G|},其中 G是真实分割的 Ground Truth。

  • 基于分类准确率: R(S_t, A_t) = \frac{1}{HW} \sum_{i=1}^H \sum_{j=1}^W \mathbf{1}[s_{t,ij} = g_{ij}]\mathbf{1} 是指示函数,表示分类正确性。


4.3. 策略优化与算法实现

强化学习模型通常采用深度强化学习 (Deep RL) 的方法,如 DQN 或 A3C。


[Python] 伪代码实现

"""《强化学习用于语义分割伪代码》时间:2024.12作者:不去幼儿园
"""
# 初始化
Initialize environment `SegmentationEnv` with input image and ground truth mask
Initialize policy network `PolicyNet` with random weights
Initialize optimizer for policy network
Define maximum episodes and steps per episode# 定义语义分割环境
class SegmentationEnv:def __init__(self, image, mask):self.image = image  # 输入图像self.mask = mask    # 真实分割标签self.segmented_mask = zeros_like(mask)  # 初始分割结果self.current_position = (0, 0)  # 当前处理的像素位置def reset():Reset `segmented_mask` to zerosReset `current_position` to the top-left cornerreturn current image as the initial statedef step(action):Apply action (e.g., classify pixel as background or foreground) at `current_position`Update `segmented_mask` with the actionMove to the next pixel (row-wise)Compute reward based on similarity between `segmented_mask` and `mask`If all pixels processed:done = Trueelse:done = Falsereturn updated image, reward, done# 强化学习训练循环
for episode in range(max_episodes):# 重置环境state = SegmentationEnv.reset()total_reward = 0for step in range(max_steps):# 使用策略网络预测动作action = PolicyNet.predict(state)# 执行动作并获取新状态和奖励next_state, reward, done = SegmentationEnv.step(action)# 计算损失(基于强化学习算法,如Policy Gradient或Actor-Critic)Compute loss based on action, reward, and policy network predictions# 反向传播更新策略网络Perform backpropagation to update `PolicyNet` weights# 累加奖励total_reward += reward# 检查是否完成if done:break# 更新状态state = next_state# 打印每回合的总奖励Print "Episode:", episode, "Total Reward:", total_reward# 测试模型
Load a test image
Use trained `PolicyNet` to predict the segmentation mask
Evaluate the segmentation result using metrics such as IoU or Dice coefficient

[Notice] 关键部分说明

环境定义

        环境的作用是将语义分割建模为逐像素决策问题。

        每个像素的位置对应一个状态,动作则是对该像素的分类(背景或前景,多分类场景则扩展为所有类别)。

奖励设计

        奖励可以基于 IoU(交并比)或 Dice 系数,逐步评估 segmented_maskmask 的相似性。

        稀疏奖励可通过增强机制(如每个步骤的微小奖励或累计奖励)改进。

策略网络

        策略网络负责预测每个像素的分类。

        常见的策略网络架构是卷积神经网络(CNN),输出对应动作空间的概率分布。

强化学习算法

        可以使用经典的策略梯度方法(如REINFORCE)或更高级的算法(如PPO、A3C)。

        如果动作空间较大(如多类别分割),可以通过离散化或连续动作策略优化。

评估与测试

        在测试阶段,使用训练好的 PolicyNet 对新图像逐像素预测分割结果。

        使用标准语义分割评价指标(IoU、Dice、Pixel Accuracy)评估模型性能。

        由于博文主要为了介绍相关算法的原理和应用的方法,缺乏对于实际效果的关注,算法可能在上述环境中的效果不佳或者无法运行,一是算法不适配上述环境,二是算法未调参和优化,三是没有呈现完整的代码,四是等等。上述代码用于了解和学习算法足够了,但若是想直接将上面代码应用于实际项目中,还需要进行修改。


5.总结

        强化学习方法能够优化分割网络性能,显著提升了语义分割的效率和精度性,有效缓解了分割数据集的类别不平衡问题,并证明了该方法在不同语义分割网络上的适用性和有效性。

参考文献:基于强化学习的主动学习语义分割算法研究


        博客都是给自己看的笔记,如有误导深表抱歉。文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者添加VX:Rainbook_2,联系作者。✨

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=15nkuo1sqcus 

相关文章:

【RL Application】语义分割中的强化学习方法

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…...

MySql:Centos7安装MySql

目录 安装之前&#xff0c;清除MySql残留文件 下载MySql的官方yum源 安装MySql 服务 MySql配置 常见问题 本次安装基于Centos7&#xff0c;平台为云服务器&#xff0c;由XShell软件演示。 注意&#xff0c;请将用户切换为Root用户。 安装之前&#xff0c;清除MySql残留文…...

数据结构-散列函数的构造方法

一.数字关键词 关键词存储应该尽可能的离散 直接定址法:利用线性函数,例如上面的例子,h(key)key-1990,key1990&#xff0c;这个就被存放在0的位置 数字分析法:关键字可能有很到位组成,每一位变化可能都不一样&#xff0c;有的位是不变的,就是说不同的对象这一位都是一样的,有的…...

MySQL:DDL数据定义语言

DDL(Data Definition Language)&#xff0c;数据定义语言 对数据库的常用操作 查看所有数据库 语法&#xff1a;show databases; 创建数据库 dbname&#xff1a;用户自己定义的数据库名称。 语法&#xff1a;create database [if not exists] dbname [charsetutf8]; 切换…...

【落羽的落羽 C语言篇】指针·之其五

文章目录 一、冒泡排序二、qsort排序1. qsort使用指南2.回调函数3. qsort函数的模拟实现 一、冒泡排序 冒泡排序的核心思想就是&#xff1a;两两相邻的元素进行比较和交换。 现在&#xff0c;我们想编写一个函数&#xff0c;使它能够运用冒泡排序的原理&#xff0c;由小到大排…...

Java程序员最新场景面试题总结

上周&#xff0c;在与部门业务伙伴&#xff08;BP&#xff09;的交谈中&#xff0c;我了解到当前求职市场的一个显著现象&#xff1a;她在招聘平台上发布的初级后端岗位每日吸引了超过500份简历的投递。这一现象凸显了Java后端岗位竞争的激烈程度&#xff0c;尤其是在这个技术日…...

平衡性能与隐私:解读Google的服务器端标记

在当前数字化时代&#xff0c;企业需要深入洞察用户行为&#xff0c;以提高网站转化率。然而&#xff0c;随着用户对隐私保护的期待日益提高以及相关法规的收紧&#xff0c;如何兼顾性能与隐私成为了一大挑战。为了解决这一问题&#xff0c;Google推出了服务器端标记&#xff0…...

在云上怎么样让环境更加安全?

随着云计算的普及&#xff0c;越来越多的企业和组织将其应用迁移到云端。在这个过程中&#xff0c;安全性成为了一个不可忽视的重要因素。华为云作为全球领先的云服务提供商&#xff0c;致力于为用户提供安全可靠的云环境。本文九河云将探讨在华为云上如何增强环境的安全性。 …...

分布式实验一

Socket编程作业&#xff1a; 在Linux系统上&#xff0c;用C编两个程序&#xff1a;Client和Server。两个进程间利用socket进行TCP通信。 要求&#xff1a; Server进程运行后&#xff0c;输出本进程所在主机IP地址以及正在监听的端口号&#xff1b; Client进程运行后&#xff0c…...

网络安全防护指南

网络安全防护指南 网络安全是指保护网络系统中的硬件、软件及数据不受偶然或恶意原因而遭到破坏、更改或泄露&#xff0c;确保网络系统连续可靠地正常运行。随着互联网的普及和技术的发展&#xff0c;网络安全问题日益严峻&#xff0c;对个人、企业和国家都构成了巨大威胁。因…...

DreamCamera2相机预览变形的处理

最近遇到一个问题&#xff0c;相机更换了摄像头后&#xff0c;发现人像角度顺时针旋转了90度&#xff0c;待人像角度正常后&#xff0c;发现 预览时图像有挤压变形&#xff0c;最终解决。在此记录 一人像角度的修改 先放示意图 设备预览人像角度如图1所示&#xff0c;顺时针旋…...

【Go 基础】channel

Go 基础 channel 什么是channel&#xff0c;为什么它可以做到线程安全 Go 的设计思想就是&#xff1a;不要通过共享内存来通信&#xff0c;而是通过通信来共享内存。 前者就是传统的加锁&#xff0c;后者就是 channel。也即&#xff0c;channel 的主要目的就是在多任务间传递…...

长安汽车嵌入式面试题及参考答案

数据结构中的堆栈和编程中的堆栈有什么区别&#xff1f; 在数据结构中&#xff0c;堆栈是一种抽象的数据类型。它遵循后进先出&#xff08;LIFO&#xff09;的原则。从操作角度来看&#xff0c;有入栈&#xff08;push&#xff09;和出栈&#xff08;pop&#xff09;操作。例如…...

理解Linux的select、poll 和 epoll:从原理到应用场景

I/O 多路复用并不是什么新东西&#xff0c;select 早在 1983 年就出现了&#xff0c;poll 在 1997 年&#xff0c;epoll 是 2002 年的产物。面试题总爱问“多路复用多厉害&#xff1f;”其实它就是把轮询的锅甩给了操作系统&#xff0c;而操作系统不过是用 CPU 指令帮你完成事件…...

(一)Linux下安装NVIDIA驱动(操作记录)

目录 一、查看CUDA版本 1.输入nvidia-smi&#xff0c;查看驱动支持的最大CUDA版本&#xff0c;这里是11.6 2.输入nvcc --version&#xff0c;查看当前安装的CUDA版本&#xff0c;这里是11.3 二、卸载旧的NVIDIA驱动 1.卸载原有驱动 2.禁用nouveau&#xff08;必须&#x…...

二分法篇——于上下边界的扭转压缩间,窥见正解辉映之光(2)

前言 上篇介绍了二分法的相关原理并结合具体题目进行讲解运用&#xff0c;本篇将加大难度&#xff0c;进一步强化对二分法的掌握。 一. 寻找峰值 1.1 题目链接&#xff1a;https://leetcode.cn/problems/find-peak-element/description/ 1.2 题目分析: 题目要求返回数组内…...

移动机器人课程建图实验-ROSbug汇总

问题1描述 $ rosrun robot_state_publisher robot_state_publisher [ERROR] [1733131886.474757207]: [registerPublisher] Failed to contact master at [localhost:11311]. Retrying...解决方案 这个错误信息表明 robot_state_publisher 节点无法联系到 ROS master。通常&…...

记录vite关于tailwindcss4.0-bate4出现margin[m-*]、padding[p-*]无法生效的问题。

环境如下&#xff1a; vite:5.4.10 tailwindcss: 4.0.0-beta.4 tailwindcss/vite: 4.0.0-beta.4 4.0默认的样式优先级比较低 如果使用了一些reset的css文件 那么很多样式会失效 例如&#xff1a;reset.css中 html, body, ul, li, h1, h2, h3, h4, h5, h6, dl, dt, dd, ol, i…...

WPF+MVVM案例实战与特效(三十)- 封装一个系统日志显示控件

文章目录 1、运行效果2、日志控件封装1、文件创建2、DisplayLogPanel.xaml 代码3、DisplayLogPanel.cs 代码4、数据模型5、枚举类型3、自定义控件使用1、LogPanelWindow.xaml2、LogPanelViewModel.cs4、总结1、运行效果 2、日志控件封装 1、文件创建 打开 Wpf_Examples ,在 …...

redis中jedis和lettuce pool的区别,那个更好,使用范围更广

在 Redis 的 Java 客户端中,Jedis 和 Lettuce 是两种最常用的客户端库,它们都支持连接池(JedisPool 和 Lettuce Connection Pool),但在设计和特性上有显著差异。下面我将详细对比它们的特点,帮助你更好地选择适合的库。 1. 同步 vs 异步 Jedis:是一个 同步 的 Redis 客…...

调试openai 星河大模型的记录:用tcpdump和ngrep抓包

在调试esp32开发板连星河大模型的时候&#xff0c;用requests连星河&#xff0c;怎么也调不通&#xff0c;想通过抓包&#xff0c;看看openai和自己写的到底有啥不一样。 结论&#xff1a;抓包抓到的太多&#xff0c;而且ssl 已经把一些信息都处理过了&#xff0c;看不到报文的…...

树莓派明明安装了opencv和numpy,却找不到

当然不止树莓派&#xff0c;配置python环境都可能存在这个问题 可能是因为安装的 numpy 或者 opencv 版本与 Python 的包路径不匹配。下面是问题的常见原因及解决方法&#xff1a;【方法一和二优先考虑】 原因分析 多版本 Python 环境冲突&#xff1a; 树莓派上可能有多个版本…...

【C++boost::asio网络编程】有关异步读写api的笔记

异步读写api 异步写操作async_write_someasync_send 异步读操作async_read_someasync_receive 定义一个Session类&#xff0c;主要是为了服务端专门为客户端服务创建的管理类 class Session { public:Session(std::shared_ptr<asio::ip::tcp::socket> socket);void Conn…...

github仓库自动同步到gitee

Github Actions是Github推出的自动化CI/CD的功能&#xff0c;我们将使用Github Actions让Github仓库同步到Gitee 同步的原理是利用 SSH 公私钥配对的方式拉取 Github 仓库的代码并推送到 Gitee 仓库中&#xff0c;所以我们需要以下几个步骤 生成 SSH 公私钥添加公钥添加私钥配…...

详解LinkedList中的底层实现

1.LinkedList的构造器 无参构造器 /*** Constructs an empty list.*/ public LinkedList() { } 构造Collection: 只要是 Collection 下的实现类都可以被 LinkedList 构造 // ? extends E: 只要是E的子类及E类型的类都可以使用 public LinkedList(Collection<? extends …...

HTML5动漫主题网站 天空之城 10页 html+css+设计报告成品项目模版

&#x1f4c2;文章目录 一、&#x1f4d4;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站演示 五、⚙️网站代码 &#x1f9f1;HTML结构代码 &#x1f492;CSS样式代码 六、&#x1f527;完整源码下载 七、&#x1f4e3;更多 一、&#…...

【VSCode】如何修改左侧资源管理器字体大小

方法一 左下角的“设置”—> 选择“窗口” —> 找到 Zoom Level,一般1、2效果就挺大的&#xff0c;可以设置小数0.5、负数-1等&#xff0c;具体设置说明见下图&#xff1a; 这个有一点不好的是&#xff0c;不仅仅资源管理器字体变化&#xff0c;整个VSCode界面会跟着变…...

使用 Visual Studio 开发 Windows 服务

Windows 服务是一种后台运行的应用程序&#xff0c;可以在没有用户界面的情况下执行任务。以下是从概念到具体实现的详细说明。 1. 什么是 Windows 服务 Windows 服务是运行在 Windows 操作系统上的应用程序&#xff0c;具有以下特点&#xff1a; 后台运行&#xff1a;无需用…...

类型转换与IO流:C++世界的变形与交互之道

文章目录 前言&#x1f384;一、类型转换&#x1f388;1.1 隐式类型转换&#x1f388;1.2 显式类型转换&#x1f381;1. C 风格强制类型转换&#x1f381;2. C 类型转换操作符 &#x1f388;1.3 C 类型转换操作符详解&#x1f381;1. static_cast&#x1f381;2. dynamic_cast&…...

go的web框架介绍

Go 语言有许多优秀的 Web 框架&#xff0c;适用于不同类型的 Web 应用开发&#xff0c;涵盖从简单的 API 开发到复杂的微服务架构。以下是一些常见的 Go Web 框架&#xff1a; 1. Gin 简介&#xff1a;Gin 是一个高性能的 Go Web 框架&#xff0c;设计目标是让开发者能够以极…...

WPF+MVVM案例实战与特效(三十一)- 封装一个加载动画的自定义控件

文章目录 1、案例效果2、案例实现1、资源与文件创建2、自定义控件封装3、自定义控件使用4、总结1、案例效果 2、案例实现 在开发WPF应用程序时,我们常常需要一个灵活的加载动画控件,该控件可以根据窗口的大小自动调整其内部元素(如图片、边框和文本)的尺寸,并且能够通过简…...

cocos creator 3.8 抖音、字节跳动录制器 12

property(Node) luzhishijianDisplay: Node null!;//录制时间显示 property(Node) luzhikaishiBut: Node null!;//录制开始 property(Node) luzhijieshuBut: Node null!;//录制结束 luzhikaishiType: boolean false;//是否开始录制开始计时 gameluzhiTime: number 0;onLoa…...

汽车控制软件下载移动管家手机控车一键启动app

移动管家手机控制汽车系统是一款实现车辆远程智能控制的应用程序‌。通过下载并安装特定的APP&#xff0c;用户可以轻松实现以下功能&#xff1a;‌远程启动与熄火‌&#xff1a;无论身处何地&#xff0c;只要有网络&#xff0c;即可远程启动或熄火车辆&#xff0c;提前预冷或预…...

自由学习记录(28)

C# 中的流&#xff08;Stream&#xff09; 流&#xff08;Stream&#xff09;是用于读取和写入数据的抽象基类。 流表示从数据源读取或向数据源写入数据的矢量过程。 C# 中的流类是从 System.IO.Stream 基类派生的&#xff0c;提供了多种具体实现&#xff0c;每种实现都针对…...

HarmonyOS开发:关于签名信息配置详解

目录 前言 签名信息的重要性 签名的方式 自动化签名 1、连接真机 2、选择 手动签名 &#xff08;一&#xff09;生成密钥和证书请求文件 &#xff08;二&#xff09;申请调试证书 &#xff08;三&#xff09;注册调试设备 &#xff08;四&#xff09;申请调试Profil…...

react 组件双向绑定

1. 使用 state 实现双向绑定 对于双向绑定&#xff0c;需要同时处理表单元素的value属性&#xff08;通过state来设置&#xff09;和onChange事件&#xff08;用于更新state&#xff09;。 import { useState } from "react";const MyComponent () > {const [i…...

k8s api对象,CRD

在Kubernetes项目中&#xff0c;一个API对象在Etcd里的完整资源路径&#xff0c;是由&#xff1a;Group&#xff08;API组&#xff09;、Version&#xff08;API版本&#xff09;和Resource&#xff08;API资源类型&#xff09;三个部分组成 apiVersion: batch/v2alpha1 kind:…...

详解MyBatis之篇一

目录 MyBatis 定义 使用MyBatis操作数据库 创建项目 配置 演示 UserInfo.java UserInfoMapper UserInfoMapperTest 数据准备 自动生成测试类 运行结果 MyBatis 定义 MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避…...

uniapp连接mqtt频繁断开原因和解决方法

mqtt参考文档&#xff1a;MQTT.js 入门教程 | EMQ、MQTT.js 入门教程 - EMQX - 博客园 uniapp引用MQTT频繁断开的问题可能由于以下几个原因导致&#xff1a; 网络不稳定&#xff1a;频繁断开可能是由于网络不稳定导致的&#xff0c;可以尝试优化网络连接。 心跳机制问题&…...

网络安全内容整理二

网络嗅探技术 网络监听 网络监听&#xff0c;也称网络嗅探(Network Sniffing)&#xff1a;在他方未察觉的情况下捕获其通信报文、通信内容的技术 网卡的工作模式&#xff1a; 1.广播模式(Broadcast Mode)&#xff1a;网卡能够接收网络中的广播信息 2.组播模式(Multicast Mo…...

IDE解说

IDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09; 是一种集成了多种开发工具的软件应用程序&#xff0c;旨在简化软件开发过程。 IDE 通常包括代码编辑器、编译器或解释器、调试器、构建自动化工具和版本控制系统等组件。通过将这些工…...

安心护送转运平台小程序

安心护送转运平台小程序是一款基于FastAdminThinkPHPUniapp开发的非急救救护车租用转运平台小程序系统&#xff0c;可以根据运营者的业务提供类似短途接送救护服务&#xff0c;重症病人转运服务&#xff0c;长途跨省护送服务。...

mongodb文档字符串批量替换

【mongodb文档字符串批量替换脚本语句】 前言&#xff1a; 1、本方式对于数据量大的情况不适用&#xff0c;执行可能比较慢&#xff1b; 2、数据量大的情况&#xff0c;个人推荐代码层面解决&#xff0c;多线程替换更快&#xff1a; &#xff08;1&#xff09;写实体类的方式…...

模拟实现vector(非常详细)

模拟实现vector 1.基本概念2.vector()默认构造函数3.size()4.capacity()5.empty()6.reverse7.push_back()8.pop_back()9.operator[ ]10.resize()11.insert() 1.基本概念 上一节我们讲了vector的概念以及常用的接口&#xff0c;这一节我们讲一下它的实现&#xff0c;它的底层其实…...

证明直纹极小曲面是平面或者正螺旋面.

目录 证明直纹极小曲面是平面或者正螺旋面 证明直纹极小曲面是平面或者正螺旋面 证明&#xff1a;设极小直纹面 S S S的参数表示为 r ( u , v ) a ( u ) v c ( u ) . (u,v)\mathbf{a}(u)v\mathbf{c}(u). (u,v)a(u)vc(u).则 r u a ′ v c ′ , r v c , r u ∧ r v a ′ ∧…...

电子应用设计方案-34:智能镜子系统方案设计

智能镜子系统方案设计 一、引言 智能镜子作为一种新兴的智能设备&#xff0c;将传统镜子与现代科技相结合&#xff0c;为用户提供了丰富的信息展示和交互功能。它不仅可以作为普通镜子使用&#xff0c;还能够显示天气、新闻、日程安排等信息&#xff0c;甚至可以与智能家居设备…...

前端项目从开发到部署全流程介绍

一、项目初始化 创建项目目录 首先创建一个新的项目目录&#xff0c;例如my - front - end - project。使用命令mkdir my - front - end - project && cd my - front - end - project。 初始化项目 使用npm init或yarn init来初始化项目&#xff0c;这会生成一个packag…...

Vue3.0组件之间通信(defineProps 和 defineEmits 及 defineExpose)

前言&#xff1a; 一、父传子 defineProps二、子传父 defineEmits三、子组件暴露属性和方法给父组件 defineExpose四、依赖注入Provide / Inject 在 <script setup> 中必须使用 defineProps 和 defineEmits API 来声明 props 和 emits &#xff0c;它们具备完整的类型推…...

多种平台上安装部署调试Open5GS(四)

OpenWRT 源码安装 UERANSIM 安装依赖openwrt源码安装cmake其他依赖准备UERANSIM安装测试验证Open5GS 是一个功能完善的开源5G项目,具备5G、4G核心网功能,最新代码支持R17标准, 本系列文章介绍Open5GS在x86、ARM平台上的安装部署方法,并通过搭建UERANSIN、商用5G基站和终端两…...

KST-3D01型胎儿超声仿真体模、吸声材料以及超声骨密度仪用定量试件介绍

一、KST-3D01型胎儿超声仿真体模 KST—3D01型胎儿超声体模&#xff0c;采用仿羊水环境中内置胎龄为7个月大仿胎儿设计。用于超声影像系统3D扫描演示装置表面轮廓呈现和3D重建。仿羊水超声影像呈暗回声&#xff08;无回波&#xff09;特性&#xff0c;仿胎儿超声影像呈对比明显…...