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 种主题风格一览
🚀 快速开始
安装依赖
pipinstallpyyaml基本使用
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 / 毕业论文插图设计,打印效果最好
python main.py examples/yolov8.yaml svg/graph_paper.svg --theme paper2. 现代糖果风 (Candy)
特点:莫兰迪色系(淡蓝/淡橙)、大圆角、无衬线字体
场景:适合 PPT 演示、技术博客、海报,视觉效果活泼现代
python main.py examples/yolov8.yaml svg/graph_candy.svg --theme candy3. 暗黑极客风 (Dark)
特点:深色背景、高对比度线条、代码风格字体
场景:适合深色模式阅读、屏幕演示、体现"硬核"技术感
python main.py examples/yolov8.yaml svg/graph_dark.svg --theme dark4. 科技海洋风 (Ocean)
特点:不同深浅的蓝色调、清爽专业
场景:适合商务汇报、科技公司技术白皮书
python main.py examples/yolov8.yaml svg/graph_ocean.svg --theme ocean5. 复古暖阳风 (Retro)
特点:暖米色背景(Gruvbox 风格)、打字机字体
场景:适合长时间阅读(护眼)、追求复古文艺感的文档
python main.py examples/yolov8.yaml svg/graph_retro.svg --theme retro6. 工程蓝图风 (Blueprint)
特点:深蓝底色、白色细线条、CAD 工程字体
场景:体现"架构设计"、"底层逻辑"的硬核工程图
python main.py examples/yolov8.yaml svg/graph_blueprint.svg --theme blueprint7. 森林氧吧风 (Forest)
特点:绿色系配色、清新自然
场景:护眼风格,或用于强调环保/轻量化的主题
python main.py examples/yolov8.yaml svg/graph_forest.svg --theme forest8. 学术三原色风 (Paper RYB) ⭐ 推荐
特点:经典红黄蓝配色、极度降低饱和度,模块区分清晰
场景:适合需要清晰区分 Backbone/Neck/Head 三大模块结构的论文插图
python main.py examples/yolov8.yaml svg/graph_paper_ryb.svg --theme paper_ryb9. 现代期刊风 (Journal)
特点:极简冷淡风、背景几乎隐形,最严谨的学术风格
场景:适合 Springer 或 Nature 子刊的图表风格
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字典自定义节点上显示的信息:
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->128或128c)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字典,可以控制节点上显示哪些信息:
DISPLAY_CONFIG={"show_channels":True,# 显示通道数"show_repeats":True,# 显示堆叠数"show_stride":True,# 显示步长倍率"show_args":False,# 显示详细参数(建议关闭以避免文字溢出)}使用建议:
- 如果生成的图表中节点文字过多导致溢出,可以将
show_args设为False - 对于简单的模型可视化,可以关闭部分选项以获得更简洁的图表
- 对于详细的架构分析,可以全部开启以获得完整信息
支持的 YAML 格式
工具兼容 Ultralytics YOLO 系列的 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