Recurrent U-Net for Resource-Constrained Segmentation

本文介绍了一种名为RecurrentU-Net的新结构,它通过集成递归单元解决了实时语义分割的问题,同时保持了高性能。与依赖预训练骨干网络的传统方法相比,RecurrentU-Net在GPU内存使用和推理时间上更为高效,适用于资源受限的环境。
1. Introduction

目前的语义分割结构倾向于集中于高分辨率和大规模数据集,并依赖于经过预训练的骨干网络(ResNet101)。 这导致较高的GPU内存使用量和推理时间,在需要实时性能的环境下的操作并不理想。 之前的ICNet 之类的架构已解决了这一问题,但代价是性能大幅下降,作者提出了一个新的结构来解决这个问题——Recurrent U-Net。

在这里插入图片描述
图2 循环分割(Recurrent Segmentation)。 (a)将先前的分割mask st-1与图像x concatenating,并将其循环馈送到网络。 (b)对于序列分割(sequence segmentation),要考虑网络的内部状态,可以改为将CNN与标准的循环单元结合起来。 在这里,我们以(c)的U-Net结构为基础,并提出在其多个层上构建一个循环单元。

2. Related Work

解决资源受限的网络主要有两种,第一种是采用encoder-decoder的网络,第二种是多分支结构,比如空间金字塔结构。

3. Method

在这里插入图片描述

3.1. Recurrent U-Net

如图3(a),我们的U-Net encoder和decoder之间有跳跃连接,在所有卷积层中使用组归一化,作者的贡献是在分割结果 s 和 网络的多个内部状态 集成递归,分别是 在每次循环迭代t上简单的将之间的分割mask st-1 与 输入图像进行concatenating,和 我们用循环单元代替U-Net结构的编码和解码层的自己。

下面只考虑在循环迭代t处的过程,
在这里插入图片描述第L个编码层的激活值
在这里插入图片描述对应的解码层的激活值

ht-1: 之前的隐藏张量
ht: 新的隐藏张量

我们可以选择循环单元插入的特定级别,在图3(b)中所展示的是级别为3时候的网络结构,当级别为0的时候,整个U-Net包含在其中。

3.2. Dual-gated Recurrent Unit

在这里插入图片描述
DRU借鉴了GRU的设计灵感,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
z:更新门
fz(.)表示一种编码器-解码器网络,其结构与我们用递归单元替换的U-Net部分相同
其中fh(.)是一个与fz(.) 具有相同结构的网络
在这里插入图片描述按照元素相乘
r:重置张量(reset tensor),允许我们屏蔽用于计算hˆ的部分输入。 。 计算为
其中fr(.)是一个与之间的网络具有相同结构的网络
ht:新的隐藏状态

3.3. Single-Gated Recurrent Unit

在这里插入图片描述
DRU的缺点:DRU合并了三个编码器-解码器网络,根据级别的选择,这可能变得占用大量存储器。 为了降低此成本,因此,我们引入了简化的循环单元,该单元依赖于单个门,因此被称为单门循环单元(SRU)。
具体来说,如图3(d)所示,我们的SRU具有与DRU相似的结构,但没有reset tensor r。 因此,方程式与上述基本相同,除了候选隐藏状态外,我们现在将其表示为
在这里插入图片描述
这种简单的修改使我们能够从循环单元中删除一个编码器/解码器网络,正如我们的结果所示,分割精度的损失很小。

3.4. Training

在这里插入图片描述
L是总损失,N是递归数目,Lt是在迭代t处的交叉熵损失,wt是加权系数。
在这里插入图片描述
在这个实验中,要么设置α= 1,要么α= 0.4

4. Experiments

作者将数据集划分为20% / 20% / 60% ,以进行 训练 / 验证 / 测试 。

数据集:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
表3显示DRU-VGG16优于Ours-DRU,例如KBH上的0.02 mIoU点。 DRU-VGG16具有41.38M参数。 这是Ours-DRU(4)的100倍,后者只有0.36M参数。 此外,DRU-VGG16仅以18 fps运行,而Ours-DRU(4)达到61 fps。 这使得DRUVGG16和其他重型模型不适合VR摄像机等嵌入式系统,而Ours-DRU可以在资源受限的环境中更容易地利用
在这里插入图片描述

视网膜,手部和道路图像; 1、2和3次迭代后的结果、Ground Truth。
在这里插入图片描述
在这里插入图片描述

### 部分可观察马尔科夫决策过程中的深度递归Q学习 #### 背景介绍 部分可观测马尔可夫决策过程(Partially Observable Markov Decision Processes, POMDPs)是指智能体仅能获取环境的部分观测信息的情况。这与标准的马尔可夫决策过程不同,在后者中,智能体可以获得完整的状态信息[^2]。 #### Deep Recurrent Q-Network (DRQN) 针对POMDP问题,Deep Recurrent Q-Learning引入了一种新的网络结构——Deep Recurrent Q-Network(DRQN)[^1]。此方法利用长短时记忆(Long Short-Term Memory, LSTM)单元处理序列数据的能力来捕捉历史观测之间的依赖关系,从而更好地模拟真实世界场景下的不确定性。具体来说: - **输入层**:接受一系列的历史观测作为输入; - **隐藏层(LSTM)** :负责提取特征并保持内部状态的记忆,以便于理解上下文信息; - **输出层** :预测每个可能行动对应的长期回报(Q值); 通过这种方式,即使面对不完全的信息,模型也能做出更合理的决策。 #### 实现细节 以下是基于PyTorch框架实现的一个简化版DRQN算法示例: ```python import torch from torch import nn class DRQN(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super().__init__() self.lstm = nn.LSTM(input_size=input_dim, hidden_size=hidden_dim, batch_first=True) self.fc = nn.Linear(hidden_dim, output_dim) def forward(self, obs_seq, h=None, c=None): lstm_out, _ = self.lstm(obs_seq, (h, c)) q_values = self.fc(lstm_out[:, -1]) return q_values def select_action(model, observation_history, epsilon=.05): sample = random.random() if sample > epsilon: with torch.no_grad(): action_q_vals = model(torch.tensor([observation_history])) best_action_idx = int(action_q_vals.argmax()) return best_action_idx else: return env.action_space.sample() # 训练循环... ``` 上述代码展示了如何构建一个简单的DRQN类以及选择动作的方法。注意这里假设`observation_history`是一个形状为`(sequence_length, num_features)`的时间步长序列。 #### 应用案例 研究表明,当应用于Atari游戏等具有挑战性的领域时,采用LSTM增强的标准DQN能够显著提高性能表现,尤其是在那些需要记住过去事件才能成功完成的任务上[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值