配方
左侧项目树的模型叶子上右键 → 配方,页签标题是「配方编辑」。给某个模型分支登记一组推理用参数和标签,落在配方注册表里。它不是训练超参页,也不是出厂配方打包器。

图:配方编辑 — 配方 ID、模型、检测参数与描述都以项目内真实配方为准。
功能概览
| 想做什么 | 在哪 |
|---|---|
| 建一个模型分支 | 左列 新建模型 |
| 建 / 拷 / 删一份配方 | 中列 新建 / 复制 / 删除 |
| 找一份配方 | 中列 搜索框 |
| 改推理参数和描述 | 右列 参数面板,改完点 保存 |
| 管类别名 | 右列 标签编辑 |
| 拿一份 JSON 走人 | 右列 导出 |
标签编辑对话框的表格四列是类别 ID、标签名、颜色、启用;顶部可只看启用标签,右下是添加与删除。配方没有覆盖标签时表格为空,按数据集原有类别名走。
快速开始
- 左列点 新建模型,注册一个模型分支(默认名
new-model)。 - 中列点 新建,出一份默认配方(默认名
new-recipe)。 - 右列把 RecipeName 改成好认的名字,调 confThreshold / nmsThreshold / topK,写上描述。
- 点 标签编辑 把类别名对齐你的数据集,确定。
- 点 保存。要给别的工具用就点 导出 存一份 JSON。
页面布局
三列从左到右是 模型 / 配方 / 参数。列宽固定(250 / 300 / 其余),没有分隔条,不能拖比例。
| 列 | 内容 |
|---|---|
| 模型 | 模型分支树 + 新建模型按钮。空表合法,提示用「新建模型」创建第一个模型分支,不伪造演示数据 |
| 配方 | 搜索框 + 新建 / 复制 / 删除 + 配方列表 |
| 参数 | 保存 / 导出 / 标签编辑 + 当前配方的键值 |
顶栏标题是「配方编辑」,下面一条状态行。状态行有四种写法:出错时优先显示错误;没选模型写「选择模型」;选了模型没选配方写模型 ID 和配方条数;都选了写模型 ID、配方名和条数。校验失败也写在这里,不弹「操作成功」。
全页只有导出失败会弹一个错误框,其余提示一律写状态行。
模型分支
新建模型 注册一个新分支:名字从 new-model 起,忽略大小写地跟现有分支比,重名就退到 new-model-1、new-model-2…… 注册成功立刻写进注册表,状态行写「模型分支已注册」。分支已存在时是幂等的,不改不写。
选中分支后,中列加载这个分支下的配方。
配方列表
搜索框按配方名做过滤,忽略大小写的子串匹配,不搜参数、不搜描述,输入即刷新。
新建 造一份最小可用配方:
| 项 | 值 |
|---|---|
| 配方名 | new-recipe,重名则 new-recipe-1、new-recipe-2…… |
| Kind | Detection |
| Parameters | confThreshold = 0.25、nmsThreshold = 0.45、topK = 300 |
| Labels / Preprocessor / Postprocessor | 空 |
| Author / CreatedUtc | studio-user / 当前时间 |
| Description | 空 |
不塞预处理数组,也不编 resize 或 keypoint——那些属于模型本身,等你真需要再加。
复制 在同分支下造一份:名字是 原名-copy,再重名就 原名-copy-1…… 描述自动写 Duplicated from 原名。Kind、参数、标签、预处理、后处理、Tags 都带走,但 Author 会重置成 studio-user、CreatedUtc 重置成当前时间。
删除 从注册表去掉当前配方,不弹确认。删掉的是当前生效的那份时,生效项自动回落到剩余第一条。
参数面板
选中配方后列出这些行:
| 键 | 可否改 | 说明 |
|---|---|---|
| RecipeName | 可改 | 空名不能保存;改名后与同分支已有名冲突也不能保存 |
| ModelId | 只读 | |
| Kind | 只读 | |
| Author | 只读 | |
| CreatedUtc | 只读 | 显示成 yyyy-MM-dd HH:mm:ss |
| Description | 可改 | 多行 |
| 其余 Parameters | 可改 | 逐键一行 |
预处理、后处理不进这个面板,只列 Parameters。
保存 写回注册表。校验顺序是:数字校验 → 收参数 → 空名校验 → 重名校验 → 落盘。改名时先写入新名再删旧名,中间不会出现没有这份配方的空档。
数字参数原来是数字的,保存时必须仍能解析成数字,否则状态行报错并中止,不会把数字静默改成字符串。但有两个边界要知道:值留空会跳过这道校验并存成空值;原本是整数的键填成 300.5 会存成小数(类型变了,不报错)。
导出 弹保存对话框(标题「导出配方」,类型限 JSON),默认文件名 模型Id-配方名.recipe.json,写的是 UTF-8 缩进 JSON。导出的字段是 ModelId、RecipeName、Kind、Parameters、Labels、Preprocessor、Postprocessor、Metadata(内含 Author、CreatedUtc、Description、Tags)。
导出成功只写状态行(含落盘路径);序列化或写盘失败才弹错误框。
标签编辑
标签编辑 打开「标签编辑」对话框,表格四列:
| 列 | 可否改 | 说明 |
|---|---|---|
| 类别 ID | 只读 | 身份,改不了 |
| 标签名 | 可改 | |
| 颜色 | 只读 | 只是一块色标,没有取色器 |
| 启用 | 可勾 | 只影响本对话框的显示 |
显示禁用标签 默认勾上。取消后只看得到启用的行——这是视图过滤,保存时不会把禁用的行丢掉。
添加 接着最大类别 ID 排下一个,名字先给 class_下个ID,颜色从调色板取,默认启用。删除 移除选中行,不弹确认。
颜色和启用状态是对话框里的临时状态,不写进注册表,下次打开会重新按类别 ID 配色、全部默认启用。真正持久化的是类别 ID 到标签名的映射。标签名留空的行在确定时会被丢掉。
点确定后注册表已落盘,参数面板会重读当前配方并刷新。
按钮什么时候可用
| 按钮 | 未选模型 | 选了模型没选配方 | 选了配方 |
|---|---|---|---|
| 新建模型 | 可用 | 可用 | 可用 |
| 新建 | 禁用 | 可用 | 可用 |
| 复制 | 禁用 | 禁用 | 可用 |
| 删除 | 禁用 | 禁用 | 可用 |
| 保存 | 禁用 | 禁用 | 可用 |
| 导出 | 禁用 | 禁用 | 可用 |
| 标签编辑 | 禁用 | 禁用 | 可用 |
默认路径固定是 Z:\DarraAIModels\_recipes.json(仅开发机;客户机没有 Z 盘)。想换位置只能设环境变量 DARRA_AI_RECIPES_PATH 指到另一个文件,客户机建议指到 %LOCALAPPDATA%\DarraAI\models\_recipes.json。
没有 Z 盘时不会自动回落到本机目录——模型/数据集根目录影响不到它。文件不存在时打开是一张空表,首次保存会因为建不出 Z 盘目录而失败。客户机上要先设好 DARRA_AI_RECIPES_PATH。
边界
- 这里登记的是推理时要用的参数和标签,不改模型本身,也不是训练超参页,更不是出厂配方打包器。
- 标签的颜色和启用状态不保存,只在对话框里有效。
- 注册表路径固定,不跟设置里的模型/数据集根走。
- 删配方不弹确认,删了就没了。