YAML2ModelGraph【v1.0】:一键生成 Ultralytics 模型结构图

YAML2ModelGraph

v0.1 版本在这篇文档 https://blog.csdn.net/weixin_43694096/article/details/154486575

项目地址:https://github.com/WangQvQ/YAML2ModelGraph


📖 项目简介

YAML2ModelGrap 是一个专业的 YOLO 模型架构可视化工具,能够将 Ultralytics YOLO 模型的 YAML 配置文件自动转换为精美的 SVG 架构图。

✨ 核心特性

  • 🎨 9 种精美主题:从科研论文风到现代糖果色,满足不同场景需求
  • 📐 智能布局:自动识别 Backbone、Neck、Head 三大模块,智能多列折叠
  • 🔗 清晰连线:支持多种连线样式(直线、贝塞尔曲线、曼哈顿路由)
  • 📊 信息丰富:显示模块类型、步长(stride)、通道数等关键信息
  • 🎯 即开即用:无需额外依赖,纯 Python + SVG 输出

🖼️ 主题展示

9 种主题风格一览


🚀 快速开始

安装依赖

bash 复制代码
pip install pyyaml

基本使用

bash 复制代码
python main.py examples/yolov8.yaml output.svg --theme paper

参数说明:

  • examples/yolov8.yaml:输入的 YAML 模型配置文件
  • output.svg:输出的 SVG 文件路径(可选,默认为 yolo_graph.svg
  • --theme paper:选择主题风格(可选,默认为 paper

🎨 主题风格

v1.0 版本提供 9 种精心设计的主题,适用于不同场景:

1. 科研标准风 (Paper) - 默认主题

特点: 黑白灰配色、Times New Roman 字体、极简线条
场景: 专为 IEEE / CVPR / 毕业论文插图设计,打印效果最好

bash 复制代码
python main.py examples/yolov8.yaml svg/graph_paper.svg --theme paper

2. 现代糖果风 (Candy)

特点: 莫兰迪色系(淡蓝/淡橙)、大圆角、无衬线字体
场景: 适合 PPT 演示、技术博客、海报,视觉效果活泼现代

bash 复制代码
python main.py examples/yolov8.yaml svg/graph_candy.svg --theme candy

3. 暗黑极客风 (Dark)

特点: 深色背景、高对比度线条、代码风格字体
场景: 适合深色模式阅读、屏幕演示、体现"硬核"技术感

bash 复制代码
python main.py examples/yolov8.yaml svg/graph_dark.svg --theme dark

4. 科技海洋风 (Ocean)

特点: 不同深浅的蓝色调、清爽专业
场景: 适合商务汇报、科技公司技术白皮书

bash 复制代码
python main.py examples/yolov8.yaml svg/graph_ocean.svg --theme ocean

5. 复古暖阳风 (Retro)

特点: 暖米色背景(Gruvbox 风格)、打字机字体
场景: 适合长时间阅读(护眼)、追求复古文艺感的文档

bash 复制代码
python main.py examples/yolov8.yaml svg/graph_retro.svg --theme retro

6. 工程蓝图风 (Blueprint)

特点: 深蓝底色、白色细线条、CAD 工程字体
场景: 体现"架构设计"、"底层逻辑"的硬核工程图

bash 复制代码
python main.py examples/yolov8.yaml svg/graph_blueprint.svg --theme blueprint

7. 森林氧吧风 (Forest)

特点: 绿色系配色、清新自然
场景: 护眼风格,或用于强调环保/轻量化的主题

bash 复制代码
python main.py examples/yolov8.yaml svg/graph_forest.svg --theme forest

8. 学术三原色风 (Paper RYB) ⭐ 推荐

特点: 经典红黄蓝配色、极度降低饱和度,模块区分清晰
场景: 适合需要清晰区分 Backbone/Neck/Head 三大模块结构的论文插图

bash 复制代码
python main.py examples/yolov8.yaml svg/graph_paper_ryb.svg --theme paper_ryb

9. 现代期刊风 (Journal)

特点: 极简冷淡风、背景几乎隐形,最严谨的学术风格
场景: 适合 Springer 或 Nature 子刊的图表风格

bash 复制代码
python main.py examples/yolov8.yaml svg/graph_journal.svg --theme journal

📋 功能详解

自动模块识别

工具会自动识别 YAML 配置中的模块类型,包括:

  • Backbone 模块:Conv、C2f、SPPF 等
  • Neck 模块:Upsample、Concat、C2f 等
  • Head 模块:Detect 等

智能布局算法

  • Backbone:单列垂直布局,清晰展示特征提取流程
  • Neck:智能多列折叠,当模块过多时自动分列显示
  • Head:根据输入源自动对齐,保持视觉连贯性

连线样式

  • 垂直直连:同列相邻模块使用直线连接
  • 贝塞尔曲线:跨列连接使用平滑曲线
  • 曼哈顿路由:Backbone 到 Neck 使用直角路由
  • 虚线标识:跨模块或长距离连接使用虚线

信息展示

每个节点显示:

  • 主标签:模块类型(如 Conv、C2f、Detect)
  • 副标签 :步长和通道数(如 8x / 256c
信息显示配置

main.py 中可以通过 DISPLAY_CONFIG 字典自定义节点上显示的信息:

python 复制代码
DISPLAY_CONFIG = {
    "show_channels": True,  # 显示通道 (如 64->128 或 128c)
    "show_repeats":  True,  # 显示堆叠数 (如 n=3)
    "show_stride":   True,  # 显示倍率 (如 /32x)
    "show_args":     False, # 显示详细参数 (如 a:3,2) -> ⚠️ 如果字太多溢出,请关掉这个
}

配置项说明:

  • show_channels:是否显示通道数变化(如 64->128128c
  • show_repeats:是否显示模块堆叠次数(如 n=3 表示重复 3 次)
  • show_stride:是否显示步长倍率(如 /32x 表示下采样 32 倍)
  • show_args:是否显示详细参数(如 a:3,2),注意 :如果节点信息过多导致文字溢出,建议将此选项设为 False

📁 项目结构

复制代码
YAML2ModelGraph/
├── main.py              # 主程序入口
├── yolo_graph.py        # 核心解析和布局逻辑
├── themes.py            # 主题配置定义
├── README.md            # 项目文档
├── examples/            # 示例 YAML 文件
│   ├── yolov8.yaml
│   ├── yolo11.yaml
│   ├── yolo12.yaml
│   └── yolov9s.yaml
└── svg/                 # 生成的 SVG 示例
    ├── graph_paper.svg
    ├── graph_candy.svg
    ├── graph_dark.svg
    ├── graph_ocean.svg
    ├── graph_retro.svg
    ├── graph_blueprint.svg
    ├── graph_forest.svg
    ├── graph_paper_ryb.svg
    └── graph_journal.svg

🔧 高级用法

自定义主题

编辑 themes.py 文件,可以:

  • 修改现有主题的颜色、字体、圆角等参数
  • 添加新的主题配置
  • 调整布局参数(节点大小、间距等)

自定义信息显示

编辑 main.py 中的 DISPLAY_CONFIG 字典,可以控制节点上显示哪些信息:

python 复制代码
DISPLAY_CONFIG = {
    "show_channels": True,  # 显示通道数
    "show_repeats":  True,  # 显示堆叠数
    "show_stride":   True,  # 显示步长倍率
    "show_args":     False, # 显示详细参数(建议关闭以避免文字溢出)
}

使用建议:

  • 如果生成的图表中节点文字过多导致溢出,可以将 show_args 设为 False
  • 对于简单的模型可视化,可以关闭部分选项以获得更简洁的图表
  • 对于详细的架构分析,可以全部开启以获得完整信息

支持的 YAML 格式

工具兼容 Ultralytics YOLO 系列的 YAML 格式:

yaml 复制代码
backbone:
  - [-1, 1, Conv, [64, 3, 2]]
  - [-1, 3, C2f, [128, True]]
  # ...

head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]]
  # ...

📸 效果预览

所有主题的示例图已保存在 svg/ 目录下,您可以直接查看不同主题的视觉效果。


🤝 贡献

欢迎提交 Issue 和 Pull Request!

可能的改进方向:

  • 添加更多主题风格
  • 支持自定义节点样式
  • 优化复杂模型的布局算法
  • 添加交互式 SVG 功能

📄 许可证

本项目使用 MIT License 开源,允许商用、修改和分发。


🙏 致谢

感谢 Ultralytics 团队提供的 YOLO 框架和模型定义格式。


版本: v1.0

相关推荐
道19932 小时前
树莓派vsRK3588 对比及无人车集成方案(RTK / 激光雷达 / 云卓 H16)
人工智能
会挠头但不秃2 小时前
深度学习(5)循环神经网络
人工智能·rnn·深度学习
乐迪信息2 小时前
乐迪信息:AI摄像机识别煤矿出入井车辆数量异常检测
大数据·运维·人工智能·物联网·安全
_OP_CHEN2 小时前
用极狐 CodeRider-Kilo 开发俄罗斯方块:AI 辅助编程的沉浸式体验
人工智能·vscode·python·ai编程·ai编程插件·coderider-kilo
这张生成的图像能检测吗2 小时前
(论文速读)LCT:用于RGB-D突出物体检测的轻型跨模态变压器
图像处理·目标检测·计算机视觉·深度估计·轻量化模型·跨模态融合·rgb-d
代码洲学长2 小时前
卷积神经网络CNN
人工智能·神经网络·cnn
l1t2 小时前
利用小米mimo为精确覆盖矩形问题C程序添加打乱函数求出更大的解
c语言·开发语言·javascript·人工智能·算法
weixin_398187752 小时前
YOLOv11 轻量级移动端网络ShuffleNetV2集成指南(详注)
人工智能·yolo
_Li.2 小时前
机器学习-贝叶斯公式
人工智能·机器学习·概率论