Kornia Models 文档的「最短可运行示例 + 真实输出图」页面模式:基于 generate_model_examples.py 的自动化文档实践

发布时间:2026/11/2 1:39:05

Kornia Models 文档的「最短可运行示例 + 真实输出图」页面模式:基于 generate_model_examples.py 的自动化文档实践 计算机视觉深度学习图像处理【免费下载链接】kornia Geometric Computer Vision Library for Spatial AI项目地址https://gitcode.com/GitHub_Trending/ko/kornia点击查看免费下载导读本文围绕 Kornia 仓库中 changelog 条目migration-023.added.md对应 PR #4178所记录的一次文档结构改革展开Models 文档章节的每个页面现在都以运行该模型的最短脚本 模型在真实输入上的输出图开头而论文卡片被移到了页面底部。通过深入阅读渲染脚本 docs/generate_model_examples.py、各模型页面 RST 源文件与构建配置 docs/source/conf.py本文将完整还原这套示例图预先渲染并提交、文档构建零权重零样例图依赖的机制并给出如何为一个新模型页面接入这套流程的实操方案。changelog 条目解读一次面向读者的文档结构改革changelog.d/migration-023.added.md原文如下Every page in theModelssection of the docs now opens with the shortest script that runs the model and a figure of its output on a real input, with the paper card moved to the bottom. The figures are rendered bydocs/generate_model_examples.pyand committed underdocs/source/_static/img/models/, so the docs build needs neither the weights nor the sample images. (#4178)这条变更记录包含三个层面的设计决策缺一不可信息架构重排面向读者每个模型页面从论文卡片开路改为可运行代码开路。读者打开页面的第一眼看到的是最短脚本 真实输出图先建立这个模型怎么用、输出长什么样的直觉论文信息下沉到页面底部作为延伸阅读图例生成自动化面向作者页面中的输出图统一由docs/generate_model_examples.py渲染而不是手工 PS 或截图构建解耦面向 CI/基础设施渲染好的图片以静态资源形式提交进仓库docs/source/_static/img/models/因此文档构建过程既不需要下载模型权重也不需要下载样例图片构建时间和网络依赖被严格控制。这套模式在当前仓库中已经完整落地docs/source/_static/img/models/下共提交了 14 张示例图rt_detr.jpg、yunet.jpg、segment_anything.jpg、mobile_sam.jpg、efficient_vit.jpg、tiny_vit.jpg、vit.jpg、vit_mobile.jpg、loftr.jpg、sold2.jpg、hardnet.jpg、affnet.jpg、dexined.jpg、defmo.jpg与 14 个模型页面一一对应。上图即由脚本渲染并提交的 LoFTR 页面示例图左右两张真实视角照片并排绿色连线连接keypoints0[i]与keypoints1[i]的匹配点对。Models 章节现状统一骨架下的 14 个模型页面Models 章节的入口是 docs/source/models/index.rst它以一张清单表列出全部模型每行给出Model / Task / Venue / Licence四列信息并按任务分组Object detection、Segmentation、Image classification、Local features and matching、Edge detection、Enhance分组模型目标检测RT-DETR、YuNet分割Segment Anything (SAM)、MobileSAM、EfficientViT图像分类ViT、MobileViT、TinyViT局部特征与匹配LoFTR、HardNet、AffNet、SOLD2边缘检测DexiNed增强DeFMO在 docs/source/conf.py 的_landing_page_counts()中可以看到models计数正是通过扫描models/目录下除index.rst外的 RST 文件数得到的model_pages [entry for entry in os.listdir(models) if entry.endswith(.rst) and entry ! index.rst]目前为 14与示例图数量一致。每个模型页面的骨架完全一致以 docs/source/models/loftr.rst 为例顺序为页头.. meta::描述供搜索引擎与社交分享抓取 类型徽章如Image matching、Apache-2.0简介段落一两句话说明模型能力与输入输出约定Run it章节可复制的最小运行脚本.. figure::指令引用docs/source/_static/img/models/下的真实输出图并附 alt 文本与图注Paper章节论文卡片摘要、任务、数据集、会议、许可证、作者位于页面最底部。Run it页面顶部的可运行最短脚本最短脚本shortest script是这次改革的核心交付物——每个页面必须给出一个能跑通该模型的代码块。综合各页面源码这套脚本有几个共同约定输入统一为(1, 3, H, W)、取值范围[0, 1]的 float 张量通过kornia.io.load_image加载本地图片通过 Builder 类如RTDETRDetectorBuilder、EdgeDetectorBuilder或from_config/pretrained...一键加载预训练权重推理放在torch.no_grad()中。以 docs/source/models/rt_detr.rst 的目标检测为例这是目前最短的完整流程from kornia.io import load_image from kornia.contrib.object_detection import RTDETRDetectorBuilder image load_image(delorean.png)[None] # (1, 3, H, W) float in [0, 1] detector RTDETRDetectorBuilder.build(rtdetr_r18vd) # downloads the COCO weights; runs at 640 px detections detector(image) # list with one (D, 6) tensor per image: class id, score, x, y, w, h for class_id, score, x, y, w, h in detections[0].tolist(): print(fclass {int(class_id)}: {score:.2f} at ({x:.0f}, {y:.0f}) size {w:.0f}x{h:.0f})关键点Builder 把 resize/normalise 预处理与 box 后处理全部打包用户拿到的是原图像素坐标系下的class_id, score, x, y, w, h并可通过confidence_threshold、detector.visualize(...)、detector.to_onnx(...)进一步控制可用变体按速度从快到慢为rtdetr_r18vd、rtdetr_r34vd、rtdetr_r50vd_m、rtdetr_r50vd、rtdetr_r101vd。上图为 RT-DETR 页面示例图输入图片与rtdetr_r18vd返回的检测框COCO 类别 id 2 即 car展示了真实输入 → 真实输出的文档目标。LoFTR 页面docs/source/models/loftr.rst则展示了另一种形态——直接返回匹配点对而非绘制结果import torch from kornia.color import rgb_to_grayscale from kornia.feature import LoFTR from kornia.io import load_image img1 load_image(church_1.png)[None] # (1, 3, H, W) float in [0, 1] img2 load_image(church_2.png)[None] matcher LoFTR(pretrainedoutdoor).eval() # outdoor (MegaDepth) or indoor (ScanNet) with torch.no_grad(): out matcher({image0: rgb_to_grayscale(img1), image1: rgb_to_grayscale(img2)}) pts1, pts2, conf out[keypoints0], out[keypoints1], out[confidence] # (N, 2) (x, y) pixels, (N, 2), (N,)页面还特别注明两张图允许不同尺寸out[batch_indexes]用于区分批量中每个匹配属于哪对图像得到的匹配对可直接喂给kornia.geometry.ransac.RANSAC或find_homography_dlt估计视图间几何关系。输出图如何生成generate_model_examples.py 工作机制示例图并非手绘或截图而是由 docs/generate_model_examples.py 程序化渲染。该脚本的设计有几个值得学习的点。装饰器注册机制脚本通过一个figure装饰器把所有渲染函数收集进FIGURES字典函数名去掉figure_前缀即图名FIGURES: dict {} def figure(fn): FIGURES[fn.__name__.removeprefix(figure_)] fn return fn这样__main__入口只需遍历命令行参数即可按名执行if __name__ __main__: wanted sys.argv[1:] or list(FIGURES) unknown [n for n in wanted if n not in FIGURES] if unknown: raise SystemExit(funknown figure(s) {unknown}; choose from {sorted(FIGURES)}) for n in wanted: print(f {n}) FIGURES[n]()因此有两种运行方式python docs/generate_model_examples.py # 渲染全部 14 个模型的示例图 python docs/generate_model_examples.py loftr sold2 # 只渲染指定子集未知名称会被显式拒绝并列出可选集合避免打错名字。关键辅助函数与全局约定mpl.use(Agg)在导入 pyplot 之前切换到无头后端保证脚本可在无显示环境的 CI 上运行torch.manual_seed(0)固定随机种子使多次渲染输出可复现sample(name, sizeNone)从 kornia data 仓库下载单张(1, 3, H, W)float 图get_sample_images(..., resizesize, as_listTrue)供各模型共用knchurch()通过torch.hub.load_state_dict_from_url下载双视图匹配数据img1/img2imagenet_classes()拉取 ImageNet-1k 类别名用于 top-k 可视化show(ax, img, title)把张量转为图像绘制到子图灰度图自动使用 gray colormapsave(fig, name)以 JPEGdpi110、quality88写入docs/source/_static/img/models/目录不存在时自动创建topk_bars(ax, logits, names, title)绘制 softmax 后 top-5 类别的横向条形图。每个 figure 函数都与页面脚本保持同步脚本文件头的 docstring 明确写了一条维护约定Eachfigure_namefunction runs the model the same way the corresponding pages Run it snippet does (same builder, weights, inputs and prompts) and then draws the result; keep the two in sync when either changes.也就是说页面 RST 里的 Run it 代码与脚本里的 figure 函数必须使用同一套 builder、权重、输入和提示词以保证文档正文的代码示例与页面图片展示的是完全一致的行为。例如figure_rt_detr与rt_detr.rst的代码块都用RTDETRDetectorBuilder.build(rtdetr_r18vd)处理同一张delorean.pngfigure_loftr与loftr.rst都用LoFTR(pretrainedoutdoor)匹配knchurch双视图。面向不同模型的渲染形态脚本按任务类型提供了多种可视化范本检测类figure_rt_detr、figure_yunet原图 画框结果并排框上标注类别 id 与分数YuNet 还会叠加 5 个关键点分割类_sam_figure供figure_segment_anything/figure_mobile_sam复用用VisualPrompter先set_image编码一次再分别用点提示K 个 N 点label 1前景 0背景与框提示Boxes.from_tensor(..., modexyxy)查询把预测 mask 以绿色叠加渲染并展示预测 IoU其中encode once, query many times正是 docs/source/models/segment_anything.rst 中 prompter API 的核心用法匹配类figure_loftr、figure_sold2、figure_hardnet双图拼接后画连线LoFTR 还会在标题中标出匹配数与平均置信度特征类figure_affnet、figure_vit、figure_efficient_vit、figure_tiny_vit、figure_vit_mobile展示 LAF 边界、patch token 范数网格、各 stage 平均激活图或 top-5 类别条形图边缘/增强类figure_dexined、figure_defmo边缘概率图以深色边缘呈现DeFMO 用 24 帧球体飞行的合成均值构造运动模糊输入再展示去模糊后的子帧RGBA alpha 混合到背景。图片提交 vs 构建时生成为什么 docs build 不依赖权重与样例图这是本次文档改革最关键的工程收益其实现机制在于区分了两个示例图生成脚本脚本何时运行产物是否下载权重docs/generate_model_examples.py手动运行一次产物提交进仓库docs/source/_static/img/models/*.jpg14 张是RT-DETR、SAM、SOLD2、DeFMO 等预训练权重docs/generate_examples.py每次 Sphinx 构建时自动运行docs/source/_static/img/*.png增强、颜色、滤波等示例图是KeyNet、DISK、ALIKED、XFeat 四个模型后者由 docs/source/conf.py 在构建期通过importlib.util.spec_from_file_location(generate_examples, ../generate_examples.py)加载并直接调用generate_examples.main()第 88-93 行前者则刻意不接入构建流程。generate_model_examples.py的 docstring 解释了原因Unlikegenerate_examples.pythis script isnotrun by the Sphinx build: it downloads several pretrained checkpoints (RT-DETR, SAM ViT-B, SOLD2, DeFMO, ...) and runs them on the CPU, which is too slow and too download-heavy for a docs build. Run it once when a model or its API changes and commit the resulting figures underdocs/source/_static/img/models/.即模型推理 权重下载对每次文档构建来说太慢、太重因此改为变更驱动的离线渲染 git 提交静态图。save()内部用OUT.mkdir(parentsTrue, exist_okTrue)保证提交目录存在图片以确定性路径落盘RST 页面用.. figure:: /_static/img/models/name.jpg直接引用。由此任何环境下跑sphinx-build或docs/Makefile中的make html都无需联网下载模型权重与样例图构建结果始终可用。此外docs/source/conf.py 还通过_landing_page_counts()把模型页面数、各模块算子数等动态数值注入rst_epilog替换符|count-models|等并统一为每个页面注入 Open Graph/Twitter 社交标签说明示例图 最短脚本只是这套文档工程化的一部分。从源码结构看如何为新增模型页面接入这套流程综合脚本与页面的约定为一个新模型添加最短脚本 真实输出图页面的流程可以概括为写页面骨架在 docs/source/models/ 下新建name.rst按meta 描述 → 徽章 → 简介 → Run it 代码块 → figure 引用 → Paper 卡片的顺序组织并在 index.rst 的清单表与对应分组的 toctree 中登记写 figure 函数在 docs/generate_model_examples.py 中新增figure_name()用figure装饰函数内使用与页面 Run it 片段完全一致的 builder、权重、输入与提示词通过sample()/knchurch()获取真实输入最后save(fig, name)离线渲染并提交运行python docs/generate_model_examples.py name确认docs/source/_static/img/models/name.jpg生成若函数名拼写有误脚本会直接报unknown figure(s)并列出可用名称将该 jpg 提交进仓库保持同步后续若模型 API 或默认权重变更需同时更新页面代码块与 figure 函数否则文档代码示例与示例图会不一致——这是脚本 docstring 明确要求的维护纪律。总结migration-023.added.md记录的并非一次简单的排版调整而是一套可复用的模型文档工程化模式以最短可运行脚本满足拿来即用以程序化渲染的真实输出图建立所见即所得的信任以离线渲染 静态图提交将权重下载与推理成本挡在文档构建之外。对于想要为 Kornia 增加新模型页面、或在自己的项目里复刻类似文档体系的开发者docs/generate_model_examples.py 与 docs/source/models/ 的组合是一个完整的参考实现。赞分享计算机视觉深度学习图像处理【免费下载链接】kornia Geometric Computer Vision Library for Spatial AI项目地址https://gitcode.com/GitHub_Trending/ko/kornia点击查看免费下载相关推荐Kornia 文档 Models 章节重构以「最短可运行脚本 真实输出图」开篇的模型文档实践Kornia 文档 Models 章节重构以「最短可运行脚本 真实输出图」开篇的模型文档实践 导读 本文基于 Kornia 仓库的迁移记录 changel人工智能计算机视觉深度学习图像处理Yaegi文档示例可运行代码片段最佳实践Yaegi文档示例可运行代码片段最佳实践 你是否在开发Go项目时遇到过这些痛点需要动态执行代码却不想重新编译整个项目希望在应用中嵌入脚本功能但找不到轻量级编程语言解释器语言运行时Shieldstral-1.0-3B模型架构解密Pixtral视觉编码器与Ministral底座的完美结合Shieldstral 1.0 3B模型架构解密Pixtral视觉编码器与Ministral底座的完美结合 Shieldstral 1.0 3B是一款革命性的上一篇暗黑2存档编辑器 d2s-editor 上手指南3 分钟本地改档旧档复活、新号毕业下一篇一份硬件报告一步产出可用的 OpenCore EFIOpCore Simplify 完整新手指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/2 1:39:05

Linux 游戏兼容入门:Proton-GE 从安装到调参 4 步跑通

Linux 游戏兼容入门:Proton-GE 从安装到调参 4 步跑通 【免费下载链接】proton-ge-custom Compatibility tool for Steam Play based on Wine and additional components 项目地址: https://gitcode.com/gh_mirrors/pr/proton-ge-custom 某款 Steam 大作在 L…

2026/11/2 1:39:05

RecastDemo 实战教程:从场景模型到可用的导航网格系统

RecastDemo 实战教程:从场景模型到可用的导航网格系统 【免费下载链接】recastnavigation Industry-standard navigation-mesh toolset for games 项目地址: https://gitcode.com/GitHub_Trending/re/recastnavigation RecastDemo 是 RecastNavigation 开源项…

2026/11/2 1:39:05

Python变量名的命名规则:规范、易读与可维护性的艺术

于编程之时, 变量名之命名规则相当关键, 良好的变量名可提升代码的可读性, 还可提高代码的可维护性。关于变量名的命名规则, 相关内容会在本文里被系统性地予以介绍, 其中涵盖了字母、数字、以及下划线之间的组合规则, 还有命名规范以及最佳实践, 另外还包括命名约定和惯例等方…

2026/11/2 4:50:04

短剧系统高并发架构与支付闭环实战

1. 项目概述:短剧系统的商业价值与技术挑战短剧内容近年来呈现爆发式增长,这种单集时长3-5分钟的碎片化娱乐形式,特别适合移动互联网时代的用户消费习惯。一个成熟的短剧系统需要同时解决内容生产、高效分发、即时互动和商业变现四大核心需求…

2026/11/2 4:50:04

短剧平台高并发架构设计与支付系统优化实践

1. 项目背景与核心价值短剧内容消费正在成为数字娱乐领域的新风口。根据行业数据显示,2023年国内短剧市场规模同比增长超过300%,单部爆款作品日播放量可达数千万次。这种内容形态具有单集时长短(3-5分钟)、剧情紧凑、制作周期快等…

2026/11/2 4:50:04

三大AI模型开发3D游戏实测:Step 5、DeepSeek、GLM谁更胜一筹?

最近我把几个新模型拉到同一个考场里做了一件挺有意思的事:用完全相同的需求,让 Step 5 Preview、DeepSeek V4 Pro 和 GLM5.3 分别从零做一个 3D 小游戏,然后对比它们从出方案到跑通、再到改需求的全过程。先说结论:三个模型都能写…

2026/11/2 4:50:04

NVIDIA自动驾驶实时检测模型的技术解析与应用

1. 项目概述:自动驾驶实时检测的技术革命NVIDIA自动驾驶实验室最新发布的"用于自主系统的实时检测基础模型"标志着自动驾驶感知技术迈入新阶段。这套解决方案通过深度融合计算机视觉与边缘计算,在嵌入式GPU平台上实现了亚毫秒级的环境感知响应…

2026/11/2 4:50:04

Next.js + LangGraph.js 构建简历 AI Agent 实战

1. 为什么简历工具值得用 AI Agent 重做一遍简历这个赛道,表面上看已经被各种模板站和在线编辑器做烂了,但真正动手做过的人都知道,传统简历工具的天花板非常低。用户打开一个网页,填表单、选模板、导出 PDF,整个链路是…

2026/11/2 4:45:04

Higress底层原理:Gateway API、Envoy深度定制与Wasm沙箱机制解析

1. 为什么今天必须搞懂 Higress 的底层逻辑Higress 不是又一个“换个壳的网关”,它是一次对云原生流量治理范式的重新定义。如果你正在用 Kubernetes 做生产级服务编排,却还在用 Nginx Ingress 手写 rewrite 规则、靠 ConfigMap 硬 reload、为 TLS 终止反…

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑