Roman Schaffert, DevTech | AI Open Day 2025/05/30
RaggedBatch 格式。RaggedBatch。下图展示了典型的非批处理(迭代式)代价矩阵计算过程:
RaggedBatchRaggedBatch 格式上操作。RaggedBatch 中。RaggedBatch:一种用于非均匀批处理的新颖数据格式tensor:mask:sample_sizes:mask 存在冗余,但在某些操作中更受欢迎。RaggedBatch 具有3种不同功能的维度:该工作流分为三个主要步骤,并附有高级API调用的代码示例。
步骤1:数据转换 (Data Conversion)
- 输入: 数据样本列表 (data sample list)。
- 操作: 将真实值列表(GT list)转换为 RaggedBatch 格式。
- 输出: RaggedBatch 格式的数据。
步骤2:对象匹配 (Object Matching)
- 输入:
- GT 对象 (RaggedBatch)
- 预测 (torch.Tensor)
- 操作: 匹配GT和预测对象。
- 输出:
- GT 的索引 (RaggedBatch)
- 预测的索引 (RaggedBatch)
步骤3:损失计算 (Loss Computation)
- 输入:
- GT (RaggedBatch)
- 预测 (torch.Tensor)
- 匹配的索引对 (RaggedBatch)
- 输出:
- 每个样本的损失 (torch.Tensor)
RaggedBatchsample_sizes 与参考 RaggedBatch 相同。dim==1。dim==1 迭代预测,dim==2 迭代GTs。RaggedBatch实例sample_sizes 与匹配的GT数据相同。mask 和 sample_sizes 张量。torch.mean() 不能直接使用,因为存在填充值。shorthand 用于处理 RaggedBatch 的张量(可选地,掩码也可以作为输入)。torch.sum() 可以直接使用。[1] S. Wang http://et.al., "Exploring Object-Centric Temporal Modeling for Efficient Multi-View 3D Object Detection", arXiv:2303.11926 [http://cs.CV]
代码: https://github.com/exiawsh/StreamPETR
gt_bboxes = gt_bboxes.unsqueeze_batch_dim(0)
gt_labels = gt_labels.repeat_samples(num_dec_layers, 0)
gt_labels = gt_labels.unsqueeze_batch_dim(0)
* 通过将批处理维度与其他维度分开,可以简化操作 (只需重塑,无需考虑批处理维度)
* **减少一个批处理维度上的损失 (跨样本)**
* **使用另一个辅助函数:使用索引对直接从GT匹配到预测**
*仅供技术讨论
torch.nan_to_num() 移至 GPU 以进行更公平的比较如果您想尝试/使用我们的一些模块,请告诉我们!
无需等待开源版本!
* 源代码可能不属于 AccLib 版本的一部分
目标检测损失计算中的重要步骤
输入:成本矩阵
任务
输出
smatch
mmatch (正在进行中)
与文献的比较:smatch
*仅供技术讨论
比较:smatch 与 SciPy
*仅供技术讨论
主要用例: 目标中心检测
实现
[2] Z. Liu et. al., "BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird's-Eye View Representation", arXiv:2205.13542 [http://cs.CV]
代码: https://github.com/mit-han-lab/bevfusion
功能
* 示例用例: 用于损失计算的车道 GT 预处理
* 实现
* 提供 CPU 实现
* 计划实现 GPU 版本
pop 和 push 操作时轻松启用/禁用 CUDA 同步。push-pop 不匹配(用于调试,会增加开销)。批处理助手 (Batching Helpers) 包简化了 ADAS 中用于损失计算的高效批处理
使用批处理助手的示例
运行时优化分析 (基于 StreamPETR)
AccLib 概述:促进 ADAS 中高效的人工智能实现