【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 

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

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

相关文章

【C++】优先队列(Priority Queue)全知道

亲爱的读者朋友们&#x1f603;&#xff0c;此文开启知识盛宴与思想碰撞&#x1f389;。 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 目录 一、前言 二、优先队列&#xff08;Priority Queue&#xff09…

STL:相同Size大小的vector和list哪个占用空间多?

在C中&#xff0c;vector和list是两种不同的序列容器。vector底层是连续的内存&#xff0c;而list是非连续的&#xff0c;分散存储的。因此&#xff0c;vector占用的空间更多&#xff0c;因为它需要为存储的元素分配连续的内存空间。 具体占用多少空间&#xff0c;取决于它们分…

GPT vs Claude到底如何选?

美国当地时间6月20日&#xff0c;OpenAI的“劲敌”Anthropic公司发布了最新模型Claude 3.5 Sonnet。据Anthropic介绍&#xff0c;该模型是Claude 3.5系列模型中的首个版本&#xff0c;也是Anthropic迄今为止发布的“最强大、最智能”的模型。它不仅在性能上超越了竞争对手和自家…

OGRE 3D----5. OGRE和QML事件交互

在现代图形应用程序开发中,OGRE(Object-Oriented Graphics Rendering Engine)作为一个高性能的3D渲染引擎,广泛应用于游戏开发、虚拟现实和仿真等领域。而QML(Qt Modeling Language)则是Qt框架中的一种声明式语言,专注于设计用户界面。将OGRE与QML结合,可以充分利用OGR…

mysql系列2—InnoDB数据存储方式

背景 本文将深入探讨InnoDB的底层存储机制&#xff0c;包括行格式、页结构、页目录以及表空间等核心概念。通过全面了解这些基础概念&#xff0c;有助于把握MySQL的存储架构&#xff0c;也为后续深入讨论MySQL的索引原理和查询优化策略奠定了基础。 1.行格式 mysql中数据以行…

matlab2024a安装

1.开始安装 2.点击安装 3.选择安装密钥 4.接受条款 5.安装密钥 21471-07182-41807-00726-32378-34241-61866-60308-44209-03650-51035-48216-24734-36781-57695-35731-64525-44540-57877-31100-06573-50736-60034-42697-39512-63953 6 7.选择许可证文件 8.找许可证文件 9.选…

交换机四大镜像(端口镜像、流镜像、VLAN镜像、MAC镜像)应用场景、配置实例及区别对比

在网络管理中&#xff0c;端口镜像、流镜像、VLAN镜像和MAC镜像都是用于监控和分析网络流量的重要技术。 端口镜像&#xff08;Port Mirroring&#xff09; 定义&#xff1a;端口镜像是将一个或多个源端口的流量复制到一个目标端口&#xff0c;以便于网络管理员能够监控和分析…

JVM知识点学习-1

学习视频&#xff1a;狂神说Java 类加载器和双亲委派机制 类加载器 作用&#xff1a;加载Class文件 流程&#xff1a;这里的名字car1。。在栈里面&#xff0c;但是数据在堆里面 类加载器的几个类型&#xff1a; 虚拟机自带的类加载器&#xff1b;启动类&#xff08;根Boot…

Linux下的三种 IO 复用

目录 一、Select 1、函数 API 2、使用限制 3、使用 Demo 二、Poll 三、epoll 0、 实现原理 1、函数 API 2、简单代码模板 3、LT/ET 使用过程 &#xff08;1&#xff09;LT 水平触发 &#xff08;2&#xff09;ET边沿触发 4、使用 Demo 四、参考链接 一、Select 在…

python学习笔记 - python安装与环境变量配置

目录 前言1. 版本选择1.1 什么版本合适&#xff1f;1.2 版本越新越好吗&#xff1f;1.3 维护中的大版本里&#xff0c;选择最早的好吗&#xff1f;1.4 我的选择1.5 Python 发布周期1.6 Python维护中的版本及截止时间 2. 安装包下载2.1 官网地址2.2 下载安装包3. 环境安装3.1 新…

管理表空间和数据文件(二)

只读表空间 使用以下命令将表空间设置为只读模式&#xff1a; ALTER TABLESPACE userdata READ ONLY;必须等到TABLESPACE所有的过程都commit&#xff1b;才能可以执行成功。 导致检查点 Causes a checkpoint 意思是将内存中的数据&#xff08;如缓冲区中的更改&#xff09;写…

解决el-card上绑定@click事件,点击无效

解决&#xff1a; 在click后面加一个.native的修饰符即可 解释&#xff1a; .native 修饰符的作用&#xff1a;告诉 Vue&#xff0c;在绑定事件时&#xff0c;使用原生的 DOM 事件&#xff0c;而不是 Vue 自定义的事件。 因为 el-card 作为一个 Element UI 组件&#xff0c;默认…

AD7606使用方法

AD7606是一款8通道最高16位200ksps的AD采样芯片。5V单模拟电源供电&#xff0c;真双极性模拟输入可以选择10 V&#xff0c;5 V两种量程。支持串口与并口两种读取方式。 硬件连接方式&#xff1a; 配置引脚 引脚功能 详细说明 OS2 OS1 OS2 过采样率配置 000 1倍过采样率 …

蓝桥-希尔排序模板题

第一眼看到这个题还在想希尔排序模板不记得了&#xff0c;于是去网上了搜了一个&#xff0c;但是考虑到这种题只看测试点能不能通过&#xff0c;于是用Arrays方法试了一下&#xff0c;发现也可以。 1.希尔排序模板ac代码 package yunkePra;import java.util.Scanner;public cl…

机器学习6_支持向量机_算法流程

最大化&#xff1a; 限制条件&#xff1a; &#xff08;1&#xff09; &#xff08;2&#xff09; 如何求解这个对偶问题&#xff0c;同时基于对偶问题给出支持向量机算法的统一流程。 (核函数) 只要知道核函数&#xff0c;就可以求个这个最优化的对偶问题。 求解了这个对偶…

【WRF-Urban】城市冠层参数UCPs导入WPS/WRF中

城市冠层参数UCPs导入WPS/WRF中 Urban canopy parameters ingestion into WPS/ WRF关于建筑高度分布的分组数量GEOGRID.TBL 文件的配置是否需要修改 Registry 文件其他建议 参考 本博客主要总结WRF&MPAS-Aforum中有关城市冠层参数UCPs导入WPS/WRF的相关内容。原文章地址-Ur…

利用Python爬虫精准获取淘宝商品详情的深度解析

在数字化时代&#xff0c;数据的价值日益凸显&#xff0c;尤其是在电子商务领域。淘宝作为中国最大的电商平台之一&#xff0c;拥有海量的商品数据&#xff0c;对于研究市场趋势、分析消费者行为等具有重要意义。本文将详细介绍如何使用Python编写爬虫程序&#xff0c;精准获取…

Rook入门:打造云原生Ceph存储的全面学习路径(上)

文章目录 一.Rook简介二.Rook与Ceph架构2.1 Rook结构体系2.2 Rook包含组件2.3 Rook与kubernetes结合的架构图如下2.4 ceph特点2.5 ceph架构2.6 ceph组件 三.Rook部署Ceph集群3.1 部署条件3.2 获取rook最新版本3.3 rook资源文件目录结构3.4 部署Rook/CRD/Ceph集群3.5 查看rook部…

003 LVGL相关文件分析

LVGL移植相关文件&#xff1a; 显示设备接口文件 lv_port_disp_templ.c/输入设备接口文件 lv_port_indev_templ.c/h 裁剪、配置文件 lv_conf.h lv_conf.h文件内容介绍&#xff1a; 对应中文翻译版本&#xff1a; #if 1 /* 设置为1&#xff0c;以启…

汽车轮毂结构分析有哪些?国产3D仿真分析实现静力学+模态分析

本文为CAD芯智库原创&#xff0c;未经允许请勿复制、转载&#xff01; 之前分享了如何通过国产三维CAD软件如何实现「汽车/汽配行业产品设计」&#xff0c;兼容NX&#xff08;UG&#xff09;、Creo&#xff08;Proe&#xff09;&#xff0c;轻松降低企业上下游图纸交互成本等。…