HybridNets

HybridNets

实时多任务交通场景感知网络

HybridNets是一个实时多任务交通场景感知网络,集成了交通对象检测、可行驶区域分割和车道线检测功能。该网络可在嵌入式系统上实时运行,在BDD100K数据集的目标检测和车道检测任务中达到了最先进水平。HybridNets平衡了实时性能和多任务准确性,为自动驾驶和高级驾驶辅助系统提供了高效的视觉感知解决方案。

HybridNets多任务感知目标检测可行驶区域分割车道线检测Github开源项目

HybridNets: 端到端感知网络

<div align="center">

标志 HybridNets 网络架构。

通用徽章 PyTorch - 版本 Python - 版本 <br>

</div>

HybridNets: 端到端感知网络

作者:Dat Vu, Bao Ngo, Hung Phan<sup> :email:</sup> FPT大学

(<sup>:email:</sup>) 通讯作者。

arXiv技术报告 (arXiv 2203.09035)

PWC PWC

<details> <summary>目录</summary> <ol> <li> <a href="#about-the-project">关于项目</a> <ul> <li><a href="#project-structure">项目结构</a></li> </ul> </li> <li> <a href="#getting-started">入门</a> <ul> <li><a href="#installation">安装</a></li> <li><a href="#demo">演示</a></li> </ul> </li> <li> <a href="#usage">使用方法</a> <ul> <li><a href="#data-preparation">数据准备</a></li> <li><a href="#training">训练</a></li> </ul> </li> <li><a href="#training-tips">训练技巧</a></li> <li><a href="#results">结果</a></li> <li><a href="#license">许可证</a></li> <li><a href="#acknowledgements">致谢</a></li> <li><a href="#citation">引用</a></li> </ol> </details>

关于项目

HybridNets 是一个面向多任务的端到端感知网络。我们的工作集中在交通物体检测、可行驶区域分割和车道线检测上。HybridNets 能够在嵌入式系统上实时运行,并在 BDD100K 数据集上获得了最先进的物体检测和车道检测结果。

简介

项目结构

HybridNets │ backbone.py # 模型配置 | export.py # 更新于2022年10月:onnx权重及附带的.npy锚点 │ hubconf.py # Pytorch Hub入口点 │ hybridnets_test.py # 图像推理 │ hybridnets_test_videos.py # 视频推理 │ train.py # 训练脚本 │ train_ddp.py # 分布式数据并行训练(多GPU) │ val.py # 验证脚本 │ val_ddp.py # 分布式数据并行验证(多GPU) ├───encoders # https://github.com/qubvel/segmentation_models.pytorch/tree/master/segmentation_models_pytorch/encoders ... ├───hybridnets │ autoanchor.py # 通过k-means生成新锚点 │ dataset.py # BDD100K数据集 │ loss.py # Focal损失,Tversky损失(dice) │ model.py # 模型块 ├───projects │ bdd100k.yml # 项目配置 ├───ros # C++ ROS路径规划包 ... └───utils | constants.py │ plot.py # 绘制边界框 │ smp_metrics.py # https://github.com/qubvel/segmentation_models.pytorch/blob/master/segmentation_models_pytorch/metrics/functional.py │ utils.py # 各种辅助函数(预处理,后处理,评估等)

开始使用 在 Colab 中打开

安装

本项目使用 Python>=3.7Pytorch>=1.10 开发。

git clone https://github.com/datvuthanh/HybridNets cd HybridNets pip install -r requirements.txt

演示

# 下载端到端权重 curl --create-dirs -L -o weights/hybridnets.pth https://github.com/datvuthanh/HybridNets/releases/download/v1.0/hybridnets.pth # 图像推理 python hybridnets_test.py -w weights/hybridnets.pth --source demo/image --output demo_result --imshow False --imwrite True # 视频推理 python hybridnets_test_videos.py -w weights/hybridnets.pth --source demo/video --output demo_result # 结果将保存在名为 demo_result 的新文件夹中

使用方法

数据准备

推荐的数据集结构:

HybridNets └───datasets ├───imgs │ ├───train │ └───val ├───det_annot │ ├───train │ └───val ├───da_seg_annot │ ├───train │ └───val └───ll_seg_annot ├───train └───val

projects/your_project_name.yml 中更新您的数据集路径。

对于 BDD100K:

训练

1) 编辑或创建新的项目配置,使用 bdd100k.yml 作为模板。数据增强参数在此处设置。

# 数据集的均值和标准差(RGB顺序) mean: [0.485, 0.456, 0.406] std: [0.229, 0.224, 0.225] # bdd100k 锚框 anchors_scales: '[2**0, 2**0.70, 2**1.32]' anchors_ratios: '[(0.62, 1.58), (1.0, 1.0), (1.58, 0.62)]' # BDD100K 官方支持 10 个类别 # obj_list: ['person', 'rider', 'car', 'truck', 'bus', 'train', 'motorcycle', 'bicycle', 'traffic light', 'traffic sign'] obj_list: ['car'] obj_combine: ['car', 'bus', 'truck', 'train'] # 如果是单类别,将这些类别合并为 obj_list 中的一个类别 # 留空列表 ([]) 则不合并类别 seg_list: ['road', 'lane'] seg_multilabel: false # 一个像素可以属于多个标签(如车道线 + 底层道路) dataset: dataroot: path/to/imgs labelroot: path/to/det_annot segroot: # 必须与 seg_list 顺序一致 - path/to/da_seg_annot - path/to/ll_seg_annot fliplr: 0.5 flipud: 0.0 hsv_h: 0.015 hsv_s: 0.7 hsv_v: 0.4 ...

2) 训练

python train.py -p bdd100k # 您的项目名称 -c 3 # effnet 骨干网络的系数,论文中的结果是 3 或 -bb repvgg_b0 # 使用 timm 更改骨干网络 -n 4 # num_workers -b 8 # 每个 GPU 的批量大小 -w path/to/weight # 使用 'last' 从之前的会话恢复训练 --freeze_det # 冻结检测头,其他选项:--freeze_backbone, --freeze_seg --lr 1e-5 # 学习率 --optim adamw # adamw | sgd --num_epochs 200

请查看 python train.py --help 获取更多选项。

重要 (已废弃): 如果您想在多个 GPU 上训练,请使用 train_ddp.py。已在 NVIDIA DGX 上使用 8xA100 40GB 测试。 为什么我们没有将 DDP 合并到现有的 train.py 脚本中?

  1. 有太多的 if-else 语句。
  2. 不想破坏已经正常运行的功能。
  3. 懒。

2022年6月24日更新: 由于我们做了很多更改,train_ddp.py 已经失效。因此,我们决定编写一个支持 DDP 的合并版 train.py,以便于维护。同时,如果您确实需要使用,请克隆这个提交,其中包含一个可用的 train_ddp.py 脚本。

3) 评估

python val.py -w checkpoints/weight.pth

同样,查看 python val.py --help 获取更多选项。

验证过程被终止了!我该怎么办? => 这是因为我们使用了 0.001 的默认置信度阈值来与其他网络进行比较。因此,在计算指标时,需要处理大量的边界框,导致内存不足,最终在下一个 epoch 开始前使程序崩溃。

话虽如此,有多种方法可以解决这个问题,请选择最适合您的方法:

  • 在高内存实例上训练(这里的内存指主内存,而非GPU的显存)。供您参考,我们只能在64GB内存的机器上验证合并后的"汽车"类别。
  • 使用python train.py --cal_map False进行训练,以在验证时不计算指标。这个选项只会打印验证损失。当损失趋于平稳且条件允许时,可以租用一台高内存实例,使用python val.py -w checkpoints/xxx_best.pth来验证最佳权重。我们实际上就是这样做来节省成本的。
  • 根据您的应用和最终目标,使用python train.py --conf_thres 0.5python val.py --conf_thres 0.5来降低置信度阈值。除非您是在帮助我们进行实验:smiling_face_with_three_hearts:或与我们竞争:angry:,否则不必追求最佳召回率。

4) 导出

python export.py -w checkpoints/weight.pth --width 640 --height 384

这会自动创建一个ONNX权重文件和一个anchor_{H}_{W}.npy文件,用于后处理。使用示例请参考ROS部分。

训练技巧

锚框 :anchor:

如果您的数据集本质上与COCO或BDD100K不同,或者训练后的检测指标不如预期,您可以尝试在project.yml中启用自动锚框:

... model: image_size: - 640 - 384 need_autoanchor: true # 设置为true以运行自动锚框 pin_memory: false ...

这会自动为您的数据集找到最佳的锚框比例和锚框比率组合。然后您可以手动编辑project.yml并禁用自动锚框。

如果您想碰碰运气,可以尝试修改backbone.py中的base_anchor_scale:

class HybridNetsBackbone(nn.Module): ... self.pyramid_levels = [5, 5, 5, 5, 5, 5, 5, 5, 6] self.anchor_scale = [1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,] self.aspect_ratios = kwargs.get('ratios', [(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)]) ...

以及model.py:

class Anchors(nn.Module): ... for scale, ratio in itertools.product(self.scales, self.ratios): base_anchor_size = self.anchor_scale * stride * scale anchor_size_x_2 = base_anchor_size * ratio[0] / 2.0 anchor_size_y_2 = base_anchor_size * ratio[1] / 2.0 ...

以了解锚框的工作原理。

一图胜千言,您可以使用锚框计算工具来可视化您的锚框。

训练阶段

我们尝试了不同的训练阶段,发现以下设置效果最佳:

  1. --freeze_seg True ~ 200轮
  2. --freeze_backbone True --freeze_det True ~ 50轮
  3. 端到端训练 ~ 50轮

原因是检测头在早期较难收敛,所以我们基本上跳过了分割头,先专注于检测。

结果

交通物体检测

<table> <tr><th>结果 </th><th>可视化</th></tr> <tr><td>
模型召回率 (%)mAP@0.5 (%)
MultiNet81.360.2
DLT-Net89.468.4
Faster R-CNN77.255.6
YOLOv5s86.877.2
YOLOP89.276.5
HybridNets92.877.3
</td><td>

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/c162af23-da56-4a4a-a74f-ff0f546cba2e.jpg" width="50%" /><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/015e2643-b1b9-4f93-84b0-715a316b2be4.jpg" width="50%" />

</td></tr> </table>

可行驶区域分割

<table> <tr><th>结果 </th><th>可视化</th></tr> <tr><td>
模型可行驶区域 mIoU (%)
MultiNet71.6
DLT-Net71.3
PSPNet89.6
YOLOP91.5
HybridNets90.5
</td><td> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/0f1389a8-136c-44dd-9baf-5cb213e4809f.jpg" width="50%" /><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/6ba09763-c252-445e-b59e-b0380380cec9.jpg" width="50%" /> </td></tr> </table>

车道线检测

<table> <tr><th>结果 </th><th>可视化</th></tr> <tr><td>
模型准确率 (%)车道线IoU (%)
Enet34.1214.64
SCNN35.7915.84
Enet-SAD36.5616.02
YOLOP70.526.2
HybridNets85.431.6
</td><td>

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/0302d69d-84cc-4b78-ab4b-68f39cf5711e.jpg" width="50%" /><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/bcb9e161-8f7c-407f-b093-93350dac83db.jpg" width="50%" />

</td></tr> </table> <div align="center">

原始视频Hanoi Life 提供

</div>

许可证

根据MIT许可证分发。更多信息请参见LICENSE

致谢

没有以下作者的出色工作,我们的工作将无法完成:

引用

如果您认为我们的论文和代码对您的研究有用,请考虑给予星星 :star: 和引用 :pencil: :

@misc{vu2022hybridnets, title={HybridNets: End-to-End Perception Network}, author={Dat Vu and Bao Ngo and Hung Phan}, year={2022}, eprint={2203.09035}, archivePrefix={arXiv}, primaryClass={cs.CV} }

编辑推荐精选

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

下拉加载更多