Occupancy 训练策略

在这里插入图片描述

损失函数

Dice Loss

Dice Loss 是一种用于图像分割的损失函数,其灵感来自于Dice 系数,是一种衡量两个样本相似度的方法。Dice 系数定义为:

Dice 系数 = 2 * TP / (2 * TP + FP + FN)

其中:

TP:预测为正且真实值为正的像素数量
FP:预测为正且真实值为负的像素数量
FN:预测为负且真实值为正的像素数量
Dice 系数的值域为 [0, 1],值越大表示两个样本越相似。

Dice Loss 的定义为:
D i c e L o s s = 1 − D i c e 系数 = 1 − 2 ∗ T P / ( 2 ∗ T P + F P + F N ) Dice Loss = 1 - Dice 系数 = 1 - 2 * TP / (2 * TP + FP + FN) DiceLoss=1Dice系数=12TP/(2TP+FP+FN)
Dice Loss 的特点:

能够克服类别不平衡问题:Dice Loss 直接使用预测和真实值之间的重叠面积来衡量相似度,因此能够有效克服类别不平衡问题。
梯度平滑:Dice Loss 的梯度是平滑的,这使得模型训练更加稳定。

Dice Loss 的应用:

图像分割:Dice Loss 是图像分割中常用的损失函数,特别适用于分割小目标或不规则目标。
医学图像分割:Dice Loss 在医学图像分割中也得到了广泛应用,例如,用于分割肿瘤、器官等。
Dice Loss 代码讲解
PyTorch 中的 Dice Loss 代码实现如下:

import torchdef dice_loss(pred, target):# 计算预测和真实值之间的重叠面积intersection = (pred * target).sum()# 计算预测和真实值的面积union = pred.sum() + target.sum()# 计算 Dice Lossdice_loss = 1 - (2 * intersection) / unionreturn dice_loss

.
总结
Dice Loss 是一种用于图像分割的有效损失函数,能够克服类别不平衡问题,并且梯度平滑。其代码实现也比较简单,可以方便地应用于各种图像分割任务。

Lovasz-Softmax损失函数

Lovasz-Softmax损失函数的中文解释和代码解释

  1. 简介
    Lovasz-Softmax损失函数是一种用于图像分割的损失函数,它可以有效地解决分割任务中常见的类别不平衡问题。该函数由Berman等人于2018年提出,并在论文《The Lovasz-Softmax loss: A tractable surrogate for the optimization of the intersection-over-union measure in neural networks》中进行了详细介绍。
  2. 原理
    Lovasz-Softmax损失函数是基于Lovasz扩展构建的,该扩展可以将交并比(IoU)指标转换为一个可优化的损失函数。具体来说,Lovasz-Softmax损失函数可以表示为:

L ( y , p ) = − ∑ i = 1 C 1 C ( 1 − I ( y i , p i ) U ( y i , p i ) ) L(y, p) = - \sum_{i=1}^{C} \frac{1}{C} \left( 1 - \frac{I(y_i, p_i)}{U(y_i, p_i)} \right) L(y,p)=i=1CC1(1U(yi,pi)I(yi,pi))

其中,
y 是真值标签,
p 是预测概率,
C 是类别数,
I(yi​,pi​) 是真值标签 yi​ 和预测概率 pi​ 的交集,
U(yi​,pi​) 是真值标签 yi​ 和预测概率 pi​ 的并集。

  1. 优点
    Lovasz-Softmax损失函数具有以下优点:
    可以有效地解决类别不平衡问题,因为它不依赖于预测概率的绝对值,而是依赖于预测概率的相对大小。
    可以获得更准确的分割结果,因为它可以更好地处理边缘像素的分割问题。
    具有较强的鲁棒性,因为它可以抵抗噪声和干扰的影响。

  2. 代码
    以下是Lovasz-Softmax损失函数的PyTorch代码实现:

def lovasz_softmax(probas, labels, classes='present'):"""Multi-class Lovasz-Softmax loss as described in the paper"Lovasz-Softmax and Jaccard Hinge Loss for Semantic Segmentation"(https://arxiv.org/abs/1705.08797).Args:probas: (N, C, H, W) logits.labels: (N, H, W) labels.classes: 'present' or 'all'.Returns:Lovasz-Softmax loss."""if probas.dim() != 4:raise ValueError("probas must be 4D tensor")if labels.dim() != 3:raise ValueError("labels must be 3D tensor")if classes not in ['present', 'all']:raise ValueError("classes must be 'present' or 'all'")inter, union = _lovasz_softmax_inter_union(probas, labels, classes)loss = 1. - inter / unionreturn loss.mean()

代码中的主要函数是 _lovasz_softmax_inter_union,该函数用于计算真值标签和预测概率之间的交集和并集。具体来说,该函数的代码如下:

def _lovasz_softmax_inter_union(probas, labels, classes):"""计算真值标签和预测概率之间的交集和并集。参数:probas: (N, C, H, W) logits。labels: (N, H, W) 标签。classes: 'present' 或 'all'。返回值:inter, union."""if probas.dim() != 4:raise ValueError("probas必须是4D张量")if labels.dim() != 3:raise ValueError("labels必须是3D张量")if classes not in ['present', 'all']:raise ValueError("classes必须是'present'或'all'")if classes == 'present':# 计算每个类别的交集和并集inter, union = _lovasz_softmax_inter_union_present(probas, labels)elif classes == 'all':# 计算类别无关的交集和并集inter, union = _lovasz_softmax_inter_union_all(probas, labels)else:raise ValueError("classes必须是'present'或'all'")return inter, union

align

在这里插入图片描述

# 获取feat_prev的维度信息,其中_代表批量大小(batch size),C是通道数,H是高度,W是宽度
_, C, H, W = feat_prev.shape# 使用self.shift_feature方法对feat_prev进行特征对齐
# [sensor2keyegos_curr, sensor2keyegos_prev]用于指定当前帧和前一帧的传感器到关键帧的变换
# bda是变换或对齐参数
feat_prev = \self.shift_feature(feat_prev,[sensor2keyegos_curr, sensor2keyegos_prev],bda)# 将对齐后的feat_prev重塑,并添加到特征列表bev_feat_list中
# 重塑后的特征尺寸为(1, (self.num_frame - 1) * C, H, W),这里通过self.num_frame - 1计算得到的是
# 除当前帧外的帧数,乘以C得到总的通道数,H和W保持不变
bev_feat_list.append(feat_prev.view(1, (self.num_frame - 1) * C, H, W))# 使用torch.cat将bev_feat_list中的所有特征在通道维度上进行拼接
# 得到的bev_feat是一个融合了多帧特征的张量
bev_feat = torch.cat(bev_feat_list, dim=1)# 将融合后的特征张量bev_feat通过一个编码器(self.bev_encoder)进行处理
# 得到x,x是经过编码后的特征,可用于后续的任务,比如分类、回归等
x = self.bev_encoder(bev_feat)

调参

占用网络(Occupancy Networks)的调参策略至关重要。鉴于鸟瞰视图(BEV)架构的网络通常包含众多模块且相对庞大,其训练周期可能根据网络结构和数据规模的不同而变化,通常在1至5天之间。如果训练过程中出现长时间的损失(loss)停滞,将极大拖延实验进度,对科研活动或工作进度造成不利影响。

为了提高调参效率并优化训练过程,以下是一些实用的建议:

**确定批处理大小:**基于可用的数据集大小和资源限制,首先确定合适的批处理大小(batch size)。

优化器选择:在训练初期,避免使用如OneCycleLR这类固定epoch数量的学习率调整策略。由于损失下降趋势无法预先确定,且epoch数量可能会变化,一成不变的策略可能不如其他方法有效。

**学习率调整:**建议初始阶段采用步进式(step-wise)降低学习率的方法。如果发现损失下降幅度有限,可以暂停训练,调低学习率后继续(resume)。通过几轮训练,大致可以找到针对特定数据集和批处理大小的最优配置,然后在此基础上探索不同的网络结构或损失函数。

**热身策略:**制定合理的热身(warm-up)策略,包括初始学习率和迭代次数。

**优化器进阶调整:**如果采用SGD或ADAMw等优化器,除了学习率之外,也应考虑调整权重衰减(weight decay)等其他参数。

数据加载与损失计算优化:在加载真实标签(ground truth)数据和计算损失时,应尽量使用张量(tensor)操作,避免使用for循环。for循环会显著降低数据加载和损失计算的速度,从而拖慢整体训练进度。通常,采用现有的实现框架可以避免这一问题。

遵循以上建议,可以有效地优化占用网络的训练过程,提高实验效率

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

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

相关文章

网易有道 3/22

一面还比较常规,二面真的是压力爆炸,还是感觉自己太菜了 一面计网部分直接就是垮了,二面的话面试官水平很高,根本就和我不是一个级别的,三言两语就知道了我的项目大致情况,然后不断拷打 项目问完了又问了…

OpenGL学习笔记【3】—— GLAD配置

一、为什么用GLAD 由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法因平台而异&…

超声波清洗机是用来干什么的?好用眼镜超声波清洗机不能错过

在快节奏的现代生活中,每一项提高效率和清洁效果的技术都值得我们关注。超声波清洗机就是这样一种技术的完美体现,它通过高频声波在液体中产生微小的气泡,这些气泡在压力作用下迅速爆炸,产生的强大冲击力能够深入物品的微小缝隙&a…

阿里云权益中心2024年五大上云优惠权益解析,助力用户优惠上云

上云首选,普惠好价,2024年阿里云通过权益中心为个人和企业用户提供五大上云优惠权益,为开发者和企业提供多款新老同享、续费同价产品;超150款免费试用产品;初创企业最高可得最低3500元,最高100万上云抵扣金…

Docker 安装 Skywalking以及UI界面

关于Skywalking 在现代分布式系统架构中,应用性能监控(Application Performance Monitoring, APM)扮演着至关重要的角色。本文将聚焦于一款备受瞩目的开源APM工具——Apache Skywalking,通过对其功能特性和工作原理的详细介绍&am…

Unity UGUI之Toggle基本了解

在Unity中,Toggle一般用于两种状态之间的切换,通常用于开关或复选框等功能。 它的基本属性如图: 其中, Interactable(可交互):指示Toggle是否可以与用户交互。设置为false时,禁用To…

Leetcode 70.爬楼梯

心路历程: 这道题是之前学院的一道复试题,大家都没怎么刷过算法题,只记得当年凭借几次试错自己把这道题做出来了,当时也不知道动态规划之类的。 正常来讲,这种找不到循环结构的题一般都是递归解决。 注意的点&#x…

Java语法学习八之认识String类

String类的重要性 在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而…

使用 Pytorch 和 Rasterio 的自定义地理空间数据加载器

地理空间数据在从遥感和城市规划到环境监测和灾害管理的各个领域发挥着至关重要的作用。在处理机器学习任务的地理空间数据时,准备自定义数据加载器对于有效加载、预处理和增强数据而不丢失其属性至关重要,特别是当输入图像具有超过 3 个波段时。 Rasterio确实是一个专门为有…

【嵌入式——QT】QT Charts

【嵌入式——QT】QT Charts 概述Qt提供的坐标轴类QChartQLineSeriesQValueAxis常见图表及用到的序列类图示代码示例 概述 QT Charts模块是一组易于使用的图表组件,它基于Qt的Graphics View架构,其核心组件是QChartView和QChart,QChartView父…

软硬件全开源,方案分享 | 旋钮温控器方案

温控器用于控制室内暖通设备,通过暖通设备为室内环境提供冷源和热源,从而调节室内温度环境,为人们提供舒适的生活环境。 旋钮式温控器更为结构简洁、操作简便,降低了用户的使用难度,提供智能化的控制方法,…

基于时空上下文(STC)的运动目标跟踪算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

java面试:常见的限流算法有哪些

1 什么是限流算法 限流算法是一种用于限制流量请求的频率或速率的算法,其目的是在高并发或大流量请求的情况下,保护系统服务的安全性和可用性。限流算法可以应对热点业务带来的突发请求、调用方bug导致的突发请求以及恶意攻击请求等情况。是一种系统保护…

使用 ONLYOFFICE API 构建 Java 转换器,在 Word 和 PDF 之间进行转换

文章作者:ajun 随着文档处理需求的增加,格式转换成为了一个重要的需求点。由于PDF格式具有跨平台、不易被篡改的特性,将Word格式(.docx)转换为PDF格式(.pdf)的需求尤为强烈。ONLYOFFICE作为一个强大的办公套件,提供了这样的转换功…

【Unity】CatlikeCoding SRP

Unity 自定义渲染管线 提示:基于CatlikeCoding SRP系列教程学习 学习链接:SRP 个人测试: Demo 相关记录以后有时间再更:

kotlin中使用ViewBinding绑定控件

kotlin中使用ViewBinding绑定控件 什么是ViewBinding? View Binding是Android Studio 3.6推出的新特性,主要用于减少findViewById的冗余代码,但内部实现还是通过使用findViewById。通过ViewBinding,可以更轻松地编写可与视图交互…

c++的学习之路:2、入门(1)

一、 C关键字 c的关键字要比c语言要多31个足足有63个,这里我只是了解了下每个有啥作用,具体使用方法以及更多的知识将在后续学习中,慢慢扩展使用,下方表格就是c的63个关键字 asmdoifreturntryautodoubleinlinetypedefdynamic_ca…

#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行

3 月 19 日,#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行。 现场,深圳市南山区人民政府副区长李志娜发布《2024 年南山区支持鸿蒙原生应用发展首批政策措施清单》,从加强鸿蒙原生应用供给能力、推动鸿蒙原生应用产业集聚、完善鸿蒙原生…

Go语言学习Day1:什么是Go?

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、走近Go①Go语言的Logo②Go语言的创始人③Go语…

【开源】SpringBoot框架开发知识图谱构建系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 知识图谱模块2.2 知识点模块2.3 学生测评模块2.4 学生成绩模块 三、系统展示四、核心代码4.1 查询知识点4.2 新增知识点4.3 查询知识图谱4.4 查询学生成绩4.5 查询学生成绩 五、免责说明 一、摘要 1.1 项目介绍 基于J…