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} }

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

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

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多