Occupancy 训练策略

news2024/11/18 18:41:13

在这里插入图片描述

损失函数

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 torch

def dice_loss(pred, target):
    # 计算预测和真实值之间的重叠面积
    intersection = (pred * target).sum()
    # 计算预测和真实值的面积
    union = pred.sum() + target.sum()
    # 计算 Dice Loss
    dice_loss = 1 - (2 * intersection) / union
    return 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 / union
    return 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.coloradmin.cn/o/1540373.html

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

相关文章

深入理解MySQL中的JOIN算法

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 目录 一、引言二、嵌套循环连接(Nested-Loop Join)2.1 工作原理2.2 性能考虑2.3 优化策略 三、块嵌套循环…

云原生(五)、Docker-Swarm集群

基础环境说明 1、环境准备 1、启动4台服务器(在同一个网段内)。 2、重命名4台服务器,方便区分。 hostnamectl set-hostname swarm1 reboot安装docker。参考文章:云原生(二)、Docker基础 2、DockerSwarm…

STM32---DHT11温湿度传感器与BH1750FVI光照传感器(HAL库、含源码)

写在前面:本节我们学习使用两个常见的传感器模块,分别为DHT11温湿度传感器以及BH1750FVI光照传感器,这两种传感器在对于环境监测中具有十分重要的作用,因为其使用简单方便,所以经常被用于STM32的项目之中。今天将使用分享给大家&a…

C# WPF编程-事件

C# WPF编程-路由事件 路由事件概要路由事件的三种方式 WPF事件WPF最重要的5类事件:生命周期事件 鼠标事件键盘事件多点触控输入原始触控 路由事件概要 路由事件是具有更强传播能力的事件,它们可在元素树中向上冒泡和向下隧道传播,并沿着传播…

【测试开发学习历程】认识Python + 安装Python

1 认识 Python 人生苦短,我用 Python —— Life is short, I use Python 1.1 Python 的起源 Python 的创始人为吉多范罗苏姆(Guido van Rossum),江湖人称“龟叔” 1989 年的圣诞节期间,吉多范罗苏姆为了在荷兰首都阿姆…

查看文件内容的指令:cat,tac,nl,more,less,head,tail,写入文件:echo

目录 cat 介绍 输入重定向 选项 -b -n -s tac 介绍 输入重定向 nl 介绍 示例 more 介绍 选项 less 介绍 搜索文本 选项 head 介绍 示例 选项 -n tail 介绍 示例 选项 echo 介绍 输出重定向 追加重定向 cat 介绍 将标准输入(键盘输入)的内容打…

鸿蒙Harmony应用开发—ArkTS-LazyForEach:数据懒加载

LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用。 接口…

Day45:WEB攻防-PHP应用SQL二次注入堆叠执行DNS带外功能点黑白盒条件

目录 PHP-MYSQL-二次注入-DEMO&74CMS DEMO-用户注册登录修改密码 CMS-74CMS个人中心简历功能 PHP-MYSQL-堆叠注入-DEMO&CTF强网 Demo 2019强网杯-随便注(CTF题型) PHP-MYSQL-带外注入-DEMO&DNSLOG(让服务器主动把数据交出去) 知识点&…

Docker入门到实践之环境配置

Docker入门到实践之环境配置 docker 环境安装 Ubuntu/Debian: sudo apt update sudo apt install docker.ioCentOS/RHEL: sudo yum install dockerArch Linux: sudo pacman -S docker如果未安装成功,或者env的path未设置成功,运行时会报错 Bash: Do…

国自然提交状态,NSFC已审核 ≠ 申请书被受理!!!

本 期 推 荐 【SciencePub学术】2024年度国家自然科学基金集中受理期项目申请受理工作已基本结束。到底什么状态才算申请书被NSFC接收成功呢? 01 申请书状态 申请人登录ISIS系统,至此,绝大部分申请人的系统状态为下面三种: …

Stable Diffusion实现光影字效果

昨天下午有人在群里发光影图片,大家都觉得很酷,我没怎么在意。直到早上我在小红书看到有人发同款图片,只是一晚上的时间点赞就超过了8000,而且评论数也很高,也可以做文字定制变现。研究了一下发现这个效果不难实现&…

训练不了AI,怎么办?

即使直接训练人工智能(AI)模型对许多人来说可能是一个技术上和资源上的挑战,仍然有多种方式可以参与、利用和推动AI技术的发展,而不必直接参与到模型的训练过程中。以下是一些可以考虑的途径: 1. 使用现有的AI服务和工…

【计算机网络篇】数据链路层(3)差错检测

文章目录 🥚误码🍔两种常见的检错技术⭐奇偶校验⭐循环冗余校验🎈例子 🥚误码 误码首先介绍误码的相关概念 🍔两种常见的检错技术 ⭐奇偶校验 奇校验是在待发送的数据后面添加1个校验位,使得添加该校验…

springcloud+nacos服务注册与发现

快速开始 | Spring Cloud Alibaba 参考官方快速开始教程写的,主要注意引用的包是否正确。 这里是用的2022.0.0.0-RC2版本的springCloud,所以需要安装jdk21,参考上一个文章自行安装。 nacos-config实现配置中心功能-CSDN博客 将nacos-conf…

[C语言]结构体、位段、枚举常量、联合体

目录 结构体 结构体的使用方法 结构体所占用的大小 位段 位段的使用方法 位段所占用的大小 枚举常量 枚举常量的使用方法 枚举常量的优势 联合体 联合体的使用方法 结构体 结构体的使用方法 结构体是一些值的集合,我们可以定义一个结构体,里…

Pink老师Echarts教学笔记

可视化面板介绍 ​ 应对现在数据可视化的趋势,越来越多企业需要在很多场景(营销数据,生产数据,用户数据)下使用,可视化图表来展示体现数据,让数据更加直观,数据特点更加突出。 01-使用技术 完成该项目需…

TCP(socket 套接字)编程 1

一、TCP套接字编程架构如下 二、相关代码实现 1、服务器端代码 package com.company;import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket;public class Main {public static void main(String[] args) {…

GeoAI

GeoAI 是人工智能 (AI) 与空间数据、科学和地理空间技术的集成,以增进对空间问题的理解和解决。GeoAI 包括应用传统人工智能技术,通过从结构化和非结构化数据中提取、分类和检测信息来生成空间数据。GeoAI 也是空间显式人工智能技术的使用,旨…

超越工具的限制!菜鸟工具箱帮你节省时间

在这个飞速发展的时代,我们越来越依赖各种工具来提高工作效率和解决问题。然而,你是否意识到,有些工具不仅仅是工具,它们还能为你带来更多的可能性和机遇?菜鸟工具箱就是这样一个超越工具本身的存在! 菜鸟工…

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(二)—— 深度神经网络

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 概述 深度神经网络(Deep Neural Network…