1. 模型简介

1.1 关键特点
- 目标检测:检测场景中的车辆、行人、交通标志等目标。
- 实例分割:对目标进行像素级分割。
- 车道线检测:检测道路中的车道线,特别适用于自动驾驶车辆的路径规划。
1.2模型结构
- 目标检测头 (Object Detection Head):用于检测不同的物体类别,并预测物体的边界框。
- 语义分割 头 (Semantic Segmentation Head):用于分割不同类别的区域,例如道路、行人和车辆等。
- 驾驶辅助任务头 (Auxiliary Driving Head):针对与自动驾驶相关的特定任务,如车道线检测等。
1.3 应用场景
HybridNets 在自动驾驶中有很大的应用潜力,能够通过多任务学习同时进行目标检测、语义分割和车道线检测,有助于提高自动驾驶系统的感知能力。该模型具有以下优势:
- 高效性:使用 EfficientNet 提供了较好的性能与效率平衡,适合在资源有限的设备上运行。
- 多任务能力:通过同时处理检测、分割和车道线检测,减少了模型冗余,节省了硬件资源。
- 易于部署:由于其轻量级和高效性,HybridNets 可以较为轻松地部署在边缘设备和实时应用中。
2. ONNX模型精度验证流程迁移
参考repo https://github.com/datvuthanh/HybridNets 中的步骤配置环境。
2.2搭建onnx评测流程
1. 准备data_loader
参考hybridnets/dataset.py中BddDataset的实现,构建能够实现同样功能的数据集BDDValidLoader。
2. 推理过程逐步对齐结果
构建推理class BDDDetection完成模型的推理流程,整体推理流程参考torch的验证流程val.py中val函数。
加载数据集图片及预处理后对齐,torch加载的图片数据跟自己构建的数据集加载的图片数据确保相同。
torch推理得到的输出结果与ONNX推理引擎得到的输出结果进行对比,保证结果相同。
将torch输出后处理代码迁移到onnx评测流程中,保证送入计算评测指标前的输出能够对齐。
3. metric评测
将utils/smp_metrics.py中的计算评价指标的函数迁移到onnx评测流程中,计算目标检测、可行驶区域分割以及车道线分割的指标结果,保证指标计算过程与torch的计算指标结果基本对齐,最终保证ONNX模型的精度跟torch评测精度对齐,至此ONNX的评测流程搭建完成。
3. 校准模型精度调优
首先采用HMCT default量化,测试结果分别为det精度为0.75562(97.85%),da_seg精度为0.89675(99.12%),ll_seg精度为0.81813(95.83%),校准算法选择了percentile。
3.1 INT16精度调试
3.1.1 全INT16精度
设置模型all_node_type为INT16,校准模型精度分别为det 0.76866(99.54%),da_seg 0.90405(99.93%),ll_seg 0.84732(99.25%),校准算法选择了percentile。全INT16精度能够满足要求,可以使用INT8+INT16混合精度完成调优。
3.1.2 INT8+INT16混合精度调试
根据debug工具敏感度排序设置高精度节点
全INT16校准模型精度能够达标,校准算法选择了percentile,尝试基于采用percentile校准算法的INT8 calibrated model开始调优,计算节点敏感度,按敏感度排序将敏感节点依次设置为高精度来提升模型精度。

