【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.rhkb.cn/news/482710.html

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

相关文章

Elasticsearch 入门

Elasticsearch安装 下载软件 Elasticsearch 的官方地址:Elastic — 搜索 AI 公司 | Elastic Elasticsearch 最新的版本是 8.16.1(截止2024.11)&#xff0c;我们选择7.8.0版本。 下载地址&#xff1a;Elasticsearch 7.8.0 | Elastic Elasticsearch 分为Linux和 Windows版本&…

Pyside6-QTableView实战

使用效果 代码 import cv2 import osfrom ui.imageQuery import Ui_DialogImageQuery from utils.log_util import log_message from utils.sys_util import create_dirfrom PySide6.QtWidgets import QApplication, QDialog, QGraphicsPixmapItem, QGraphicsScene from PySid…

Redis开发03:常见的Redis命令

1.输入以下命令&#xff0c;启动redis。 sudo service redis-server start 如果你是直接安装在WSL的&#xff0c;搜索栏搜索Ubuntu或者点击左下角Windows图表找到U那一栏&#xff0c;直接打开Ubentu&#xff0c;输入账密后&#xff0c;输入“sudo service redis-server start”…

JAVA |日常开发中常见问题归纳讲解

JAVA &#xff5c;日常开发中常见问题归纳讲解 前言一、语法错误相关问题1.1 分号缺失或多余1.2 括号不匹配1.3 变量未定义或重复定义 二、数据类型相关问题2.1 数据类型不匹配2.2 整数溢出和浮点数精度问题 三、面向对象编程相关问题3.1 空指针异常&#xff08;NullPointerExc…

ubuntu的用户使用

ubuntu系统中的常规用户登录方式 在系统root用户是无法直接登录的,因为root用户的权限过大所以其安全性比较差 在登录系统时一般使用在安装系统时建立的普通用户登录 如果需要超级用户权限: Ubuntu用户密码破解 在系统安装完成后默认grub启动等待时间为0&#xff0c;建议改…

初始Python篇(6)—— 字符串

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; Python 目录 字符串的常见操作 格式化字符串 占位符 f-string 字符串的 format 方法 字符串的编码与解码 与数据验证相关的方法 …

38 基于单片机的宠物喂食(ESP8266、红外、电机)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;采用L298N驱动连接P2.3和P2.4口进行电机驱动&#xff0c; 然后串口连接P3.0和P3.1模拟ESP8266&#xff0c; 红外传感器连接ADC0832数模转换器连接单片机的P1.0~P1.…

GEE Landsat 8 可见光影像校正后下载

在遥感影像处理领域&#xff0c;Landsat 8 数据因其 30 米空间分辨率 和 多光谱波段 被广泛应用。处理这些数据时&#xff0c;研究者常常需要对数据进行裁剪、计算指数、图像增强等操作&#xff0c;以满足特定研究需求。 本文将介绍一个 Python 自动化脚本&#xff0c;使用 Goo…

Matlab Simulink HDL Coder开发流程(一)— 创建HDL兼容的Simulink模型

创建HDL兼容的Simulink模型 一、使用Balnk DUT模板二、从HDL Coder库中选择模块三、为DUT开发算法/功能四、为设计创建Testbench五、仿真验证设计功能六、Simulink模型生成HDL代码 这个例子说明了如何创建一个用于生成HDL代码的Simulink模型。要创建兼容HDL代码生成的MATLAB算法…

如何通过 JWT 来解决登录认证问题

1. 问题引入 在登录功能的实现中 传统思路&#xff1a; 登录页面时把用户名和密码提交给服务器服务器验证用户名和密码&#xff0c;并把检验结果返回给后端如果密码正确&#xff0c;则在服务器端创建 session&#xff0c;通过 cookie 把 session id 返回给浏览器 但是正常情…

像素流送api ue多人访问需要什么显卡服务器

关于像素流送UE推流&#xff0c;在之前的文章里其实小芹和大家聊过很多&#xff0c;不过今天偶然搜索发现还是有很多小伙伴&#xff0c;在搜索像素流送相关的问题&#xff0c;搜索引擎给的提示有这些。当然这些都是比较短的词汇&#xff0c;可能每个人真正遇到的问题和想获取的…

Uniad复现学习

在优云平台部署训练&#xff0c;加速训练。 关于UCloud(优刻得)旗下的compshare算力共享平台 UCloud(优刻得)是中国知名的中立云计算服务商&#xff0c;科创板上市&#xff0c;中国云计算第一股。 UCloud&#xff08;优刻得&#xff09;旗下的Compshare算力共享平台具有以下优点…

域名解析系统 DNS

1.域名系统概述 用户与互联网上某台主机通信时&#xff0c;必须要知道对方的IP地址。然而用户很难记住长达32 位的二进制主机地址。即使是点分十进制地址也并不太容易记忆。但在应用层为了便于用户记忆各种网络应用&#xff0c;连接在互联网上的主机不仅有P地址&#xff0c;而…

【软考网工笔记】网络基础理论——网络层

文章目录 中断处理过程数据包组装RIPRSVPipv4RIPv1 & RIPv2HFC 混合光纤同轴电缆&#xff08;Hybrid Fiber Coax&#xff0c;简称HFC&#xff09;BGP (边界网关协议)BGP-4 协议的四种报文ICMP 协议数字语音电子邮件协议MPLS 多协议标记交换ipv6DHCPDNS名称解析过程查询顺序…

go语言 Pool实现资源池管理数据库连接资源或其他常用需要共享的资源

go Pool Pool用于展示如何使用有缓冲的通道实现资源池&#xff0c;来管理可以在任意数量的goroutine之间共享及独立使用的资源。这种模式在需要共享一组静态资源的情况&#xff08;如共享数据库连接或者内存缓冲区&#xff09;下非 常有用。如果goroutine需要从池里得到这些资…

【Delphi】modbus-TCP 协议库

在日常开发中&#xff0c;也会遇到使用modbus的部件&#xff0c;比如温度控制器、读卡器等等&#xff0c;那么使用Delphi开发&#xff0c;也就必须遵守modbus-TCP协议&#xff0c;如果自己使用TCP控件写也没有问题&#xff0c;不过如果有开源的三方库&#xff0c;别人已经调试过…

【Git 操作】-- 将 fork master 分支的最新commit更新到自己的仓库

目录 1.举例 2. 配置上游仓库&#xff08;Upstream&#xff09; 3. 获取上游仓库的更新 4. 切换到你自己的 master 分支 5. 合并上游仓库的 master 分支 6. 解决冲突&#xff08;如果有的话&#xff09; 7. 推送更新到你自己的 GitHub 仓库 1.举例 当我们从 github 的 h…

Facebook的开源项目解析:推动开发者社区的技术进步

Facebook&#xff0c;作为全球领先的社交平台之一&#xff0c;其在技术领域的创新不仅体现在产品功能的实现上&#xff0c;也积极推动开源社区的发展。开源项目已经成为Facebook技术战略的重要组成部分&#xff0c;通过开源&#xff0c;Facebook不仅加速了技术进步&#xff0c;…

荣耀300系列革新发布:科技与美学的里程碑之作

2024年12月2日&#xff0c;全新一代荣耀300系列正式发布&#xff0c;新潮的环球旅拍发布会不仅展现了荣耀追求极致的创新理念&#xff0c;也标志着数字系列迎来科技体验以及美学设计的巨大升级。凭借荣耀领先行业的AI能力以及对底层科技创新的强大驱动&#xff0c;全新荣耀300系…

centos 7 离线安装postgis插件

前一段时间记录了下如何在centos7中离线安装postgresql&#xff0c;因为工作需要&#xff0c;我不仅要安装postgresql&#xff0c;还需要安装postgis插件&#xff0c;这篇文章记录下postgis插件的安装过程。 1. 安装前的参考 如下的链接都是官网上的链接&#xff0c;对你安装p…