This commit is contained in:
2026-08-29 01:11:01 +08:00
parent 474d561173
commit 5c43370fc9
37 changed files with 1309 additions and 409 deletions
+17 -100
View File
@@ -34,117 +34,33 @@ app:
# 图像生成(管理端「AI 生成图片」):provider 必填项缺失时生成接口返回「图像生成服务未配置」
imageGen:
provider: localai # dashscope | localai
baseUrl: "http://192.168.3.210:18080" # localai 必填:训练机 local-ai 地址(/v1/images/generations
model: z-image-turbo # localai 上加载的模型名;dashscope 用 qwen-image-3.0
baseUrl: "http://localhost:8080" # localai 必填:训练机 local-ai 地址(/v1/images/generations
model: flux2-klein # localai 上加载的模型名;dashscope 用 qwen-image-3.0
apiKey: "" # dashscope 必填:DashScope API Key
timeoutSeconds: 600 # 每张生成超时(默认 120z-image-turbo 首次加载含模型入显存,稳态秒级~分钟级)
# 通用提示词模板(管理端填「动物名称」时启用,每张随机取池组装):{species} 优先用表单填写的名称,
# 未填则按数据集名取 speciesByDataset 池(再未配置直接用数据集名);{count} 为数量词(固定 "1只",每张仅 1 个目标;原表单
# 数量选择已取消);{scene}/{action}/{light} 池内随机;{tone} 为物种轮廓色词(默认深色,白化个体配浅色);
# 物种只写名字不写羽毛细节(细节会把镜头拉近,详见技术设计)。不带拍摄角度描述(2026-08-28):
# 角度描述会与目标位置耦合,仰拍使贴地目标沉底、固定俯拍构图单一——交由模型平视先验自由构图,
# 目标自然落在中部/上部
poolSize: 1 # 生成任务并发度(z-image 显存独占,默认 1)
# 通用提示词模板:{species} 取数据集 gen_species(单值,空回退数据集名);{count} 为数量词
# (固定 "1只",每张仅 1 个目标;原表单数量选择已取消);{scene}/{action}/{light} 池内随机
# scene/action/occlusion 从数据集表 gen_scenes/gen_actions/gen_occlusions 池随机,无 config 兜底);
# {tone} 取数据集表 gen_tone(默认深色,白化个体配浅色);{sizeHint} 按数据集表 gen_heights 站高与
# 表单距离算出像素占比。物种只写名字不写羽毛细节(细节会把镜头拉近,详见技术设计)。不带拍摄角度
# 描述(2026-08-28):角度描述会与目标位置耦合,仰拍使贴地目标沉底、固定俯拍构图单一——
# 交由模型平视先验自由构图,目标自然落在中部/上部
promptTemplate: "野外大远景实拍:广角镜头下{scene}{distanceWord}有且仅有{count}{species}的小小身影{sizeHint}在{action}{occlusion}{species}离镜头很远,只是很小的{tone}轮廓,隐约可辨,画面绝大部分是{scene},没有任何靠近镜头的动物,{light},写实野外摄影,真实照片质感"
speciesByDataset: # 数据集名 → 物种池(表单未填动物名称时随机取一个)
鸽子: [家鸽,火斑鸠,虎纹斑鸠,珠颈斑鸠,灰斑鸠]
雉鸡: [雉鸡,白雉鸡]
兔子: [兔子]
鸭子: [野鸭]
鹌鹑: [鹌鹑]
speciesTone: # 物种轮廓色词(模板 {tone} 占位,未配置默认深色):远景小目标深色剪影易辨,
# 白化个体(白雉鸡)用「深色轮廓」描述与白色羽毛矛盾,须配浅色
白雉鸡: 浅色
scenes: # 环境场景池(统一远景原则:每条含开阔/延伸向远方/地平线元素,
# 把地平线推开、消除近拍暗示;同一短语在模板中出现两次,须两处都读得通)
- "一望无际的玉米地,玉米秆两米多高,田间土路和田埂延伸向地平线"
- "一望无际的金黄麦茬田,收割后一直铺到地平线"
- "乡村土路穿过广阔的农田伸向远方,路边杂草丛生"
- "广阔的农田和道路延伸向远方,一根细电线横贯画面远处"
- "广阔田野间一棵高大的树,四周的农田一直延伸到地平线"
- "村边开阔的打谷场延伸向远方,尽头是零星的农舍"
- "收割后的稻茬田一望无际,铺向远处的村庄"
- "果树成行的果园延伸向远方,树下是剪短的草地"
- "开阔的沙石滩地和蜿蜒的乡间水渠延伸向远处的田野"
- "长满枯黄荒草的田埂和弃耕地延伸向远方"
actions: [觅食, 走动啄食, 低头啄食, 踱步, 停落休憩]
lights: [清晨柔和阳光, 正午明亮天光, 傍晚金色斜阳, 阴天柔和散射光]
sceneByDataset: # 数据集名 → 场景池(按动物习性配置,未配置的数据集回退通用 scenes;
# 每条仍含「延伸向远方」元素,且同一短语在模板中出现两次须两处都读得通)
雉鸡:
- "田边茂密的草丛和矮灌丛连绵延伸到远方"
- "荒草坡和灌木丛连成一片,一直铺向远处地平线"
- "收割后的农田边缘杂草丛生,矮灌丛点缀延伸到远方"
- "稀疏灌木点缀的草坡,一直延伸到远处的林地边缘"
兔子:
- "枯黄的草坡和荒草地一直延伸到远方"
- "弃耕地和田埂长满野草,延伸向远处的林地"
- "草丛和矮灌丛交错的荒地,向远处延展"
鸭子:
- "宽阔的池塘水面延伸到远方,岸边芦苇丛生"
- "水田和浅滩连成一片,水面延伸到远处"
- "河湖水面平展到远方,岸边是泥滩和杂草"
鹌鹑:
- "茂密草丛的田野,草层延伸到远方"
- "稻茬田边草丛和荒地相连,延伸向远处"
actionByDataset: # 数据集名 → 动作池(按动物习性;动作词不得以「在/于」开头,模板为「在{action}」)
雉鸡: [低头啄食, 草丛中觅食, 踱步, 停歇理羽, 警觉张望]
兔子: [低头啃食草叶, 警觉地竖起耳朵, 小步跳跃前行, 蹲坐不动, 啃食草叶]
鸭子: [缓缓游动于水面, 低头潜入水中觅食, 水面梳理羽毛, 缓慢划水前行, 岸边泥滩觅食]
鹌鹑: [低头啄食, 草丛间觅食, 小步疾走, 停歇不动]
# 遮挡描述池(模板 {occlusion} 占位,插在「在{action}」之后):身体完全暴露的个体对识别/标注训练
# 无意义,每张必取一条(全池覆盖轻~重遮挡,程度随机);遮挡物多样(杂草/树叶/枝条等),须与场景自洽
occlusions: # 通用遮挡池(未配置 occlusionByDataset 的数据集回退此池)
- "身体部分被前景的杂草遮挡"
- "大半个身体隐入草丛,只露出头背"
- "身体被身前的杂草枝条半遮半掩"
- "只有头背部从茂密草丛中露出"
- "身体部分被低垂的树叶和枝条遮挡"
- "大半个身体隐在枝叶间,只露出头背"
occlusionByDataset: # 数据集名 → 遮挡池(按动物习性与场景配置;未配置回退通用 occlusions)
雉鸡:
- "身体部分被前方的草丛和矮灌丛遮挡"
- "大半个身子隐入灌丛枝叶间,只露出头颈"
- "身体被身前的枯草丛半遮半掩"
- "只有头背部从密草丛中露出"
- "身体藏在树影下,被垂落的树叶半遮"
兔子:
- "身体部分被荒草遮挡,只露出头部"
- "大半身体隐入草丛,一对长耳竖在草尖上方"
- "身体被身前的枯黄野草半掩"
- "身体部分被林缘的树叶和枝条遮挡"
鸭子:
- "身体部分隐入岸边芦苇丛中"
- "半身没入水面,只露出头背"
- "身体被岸边的芦苇和杂草半遮"
- "身体部分隐入岸边垂落的枝叶间"
鹌鹑:
- "身体隐在密草丛中,只露出头部"
- "大半身体藏进草丛,隐约只见头和背部"
- "身体藏在草叶和落叶之间,只露出头部"
# 目标尺寸提示(sizeHint):按「体高 × focalPx ÷ 表单距离」算出目标在图中的像素高与占比,
# 注入模板 {sizeHint}——把「厘米」换算成「米」再参与投影公式;focalPx = 图高/2 ÷ tan(vfov/2)
# 注入模板 {sizeHint}——把「厘米」换算成「米」再参与投影公式;focalPx = 图高/2 ÷ tan(vfov/2)
# 站高取数据集表 gen_heights(创建数据集时 VLM 生成,界面不维护,代码/配置不硬编码)
assumedVfovDeg: 52 # 镜头垂直视场角(度),固定为手机默认主摄(2026-08-28 用户定案;
# 曾随机 [15,90]、曾试超广角 90,均已否决);体高按物种查 speciesHeights
speciesHeights: # 物种站高(厘米,垂直尺度:鸟=脚底到头顶、兽=蹲坐高度);
# 与「高度」像素描述及检测框高(≈站高)自洽,勿用体长(体长是水平尺度);
# 未配置的物种代码兜底 35cm
家鸽: 20
珠颈斑鸠: 20
灰斑鸠: 18
火斑鸠: 15
虎纹斑鸠: 18
雉鸡: 55
白雉鸡: 55
兔子: 35
野鸭: 35
鹌鹑: 12
# 曾随机 [15,90]、曾试超广角 90,均已否决)
# 训练通道(并发度 1:GPU 独占,同时仅一个 running 任务):
# mode=subprocess 训练机与服务器同机;mode=ssh 异机(训练脚本/数据集经 ssh 通道同步)
training:
mode: ssh # subprocess | ssh
ssh:
host: "192.168.3.210" # 训练机地址(mode=ssh 必填)
# host: "192.168.3.210" # 训练机地址(mode=ssh 必填)
host: "192.168.3.210"
user: "root"
port: 22
privateKeyPath: "" # 私钥路径与 password 二选一
@@ -167,7 +83,8 @@ localAi:
confConfirmed: 0.2 # 高于此视为确认(class 0),否则疑似(class 1)
overlapThreshold: 0.3 # 重叠去重阈值(交叠/较小框面积,NMS 风格;RF-DETR 同目标常输出一大一小两框,minIoU 比 IoU 更能命中)
inputSize: 700 # 提交前整图等比缩放最长边
classNames: [pheasant, suspect] # 标注类别名(写入 data.yaml,随 result.json 存模型 labels
# 标注类别名(写入 data.yaml,随 result.json 存模型 labels从数据集表取:
# 第一类 = gen_species(空回退数据集名),第二类 = gen_classes(空回退 class0/class1
labelTask:
# 预标注并发度(逐张调 RF-DETR,缺失或非法时回退默认值)