ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从零构建猫品种检测数据集:YOLOv8训练实战指南

从零构建猫品种检测数据集:YOLOv8训练实战指南 1. 项目整体设计与思路拆解先聊个实际的场景。我前段时间帮一个宠物医疗方向的客户做初筛系统需求是识别猫的品种方便接诊时快速建档。当时网上找了一圈现成数据集要么是几百张图塞在一起连品种标注都没有要么是那种 ImageNet 风格的多分类集直接拿来训 YOLO 检测模型根本没法用——因为我要的是“框出猫的位置 识别品种”而不是单纯判断图里有没有猫。后来我自己整理了一批数据前前后后筛出 2400 张可用图凑成了这套猫品种检测数据集。这篇文章就是把这套数据集的从无到有、从标注到训练的全过程拆开揉碎了讲一遍包括目录结构、标注格式、训练时的参数选择以及我踩过的那些坑。先给新接触目标检测的同学解释一下为什么这种“检测数据集”不是随便拿一堆猫图就行。分类数据集和检测数据集的本质区别在于分类数据集只需要每张图有一个类别标签告诉模型“这张图是布偶猫”检测数据集则需要标注出猫在画面中的位置也就是边界框bounding box坐标加类别格式类似 class x_center y_center width height。在 YOLO 系列模型中训练数据必须提供位置信息模型才知道去哪里找猫而不仅仅是判断“有没有猫”。这意味着数据集的整理逻辑完全不同需要额外做画框标注需要处理一张图里有多只猫的情况还需要处理猫只占画面很小一部分的情况。这就是为什么我在整理数据时花了大量精力在筛选、清洗和标注规范上。这套数据集面向的需求也分几类一是做宠物识别 App 的原型验证二是做猫舍或宠物店的品种登记自动化三是做动物收容所的信息化管理辅助。检测模型的优势在于它天然支持一张图中多个目标同时识别——比如一个画面里有三只猫每只都被独立框出并标上品种这个能力是分类模型做不到的。如果你正在做类似方向这篇文章里的数据组织方式、标注规范、训练参数和踩坑记录基本可以直接照搬参考。另外要说明的是2400 张这个量级并不是随便定的。我实际测试下来对于 10 个品种以内的检测任务在 COCO 预训练权重的基础上做微调2000 张以上的干净数据已经能让 mAP 达到比较可用的水平。如果数据量太少比如几百张模型容易出现严重的过拟合尤其是对背景环境的过拟合——模型不是记住了猫的样子而是记住了“那种沙发旁边才是猫”。这份数据的核心价值不在于盲目追求数量而在于每张图都经过严格筛选保证目标清晰、标注准确、类别均衡。2. 数据集深度解析目录结构、标注格式与类别分布2.1 数据集目录与文件组织先看一下这套数据集的实际目录结构我按 YOLO 的标准组织方式来摆放这样后续丢进 YOLOv5、YOLOv8、YOLOv11 都能直接使用cat_breed_dataset/ ├── images/ │ ├── train/ # 1920张 │ ├── val/ # 360张 │ └── test/ # 120张 ├── labels/ │ ├── train/ # 与images/train一一对应 │ ├── val/ # 与images/val一一对应 │ └── test/ # 与images/test一一对应 ├── data.yaml └── README.md这里要解释一下 train/val/test 划分的逻辑。我按 8:1.5:0.5 的比例拆分不是常规的 8:1:1为什么因为总量只有 2400 张如果 test 占 10% 就是 240 张在实际检测任务里这么小的测试集已经够用了我反而希望 val 能多分一点因为训练过程中的早停early stopping和超参数调优都依赖验证集的反馈。验证集的数据越有代表性训练过程的判断就越准确。images 和 labels 目录严格一一对应这个非常关键。在数据准备阶段就要确保每个 image 文件都有对应的 label 文件否则训练过程中 YOLO 会直接报错。我写了一个快速检查脚本遍历 images 目录检查对应 labels 目录下是否存在同名 .txt 文件import os image_dir cat_breed_dataset/images/train label_dir cat_breed_dataset/labels/train img_files [f for f in os.listdir(image_dir) if f.endswith(.jpg)] missing [f for f in img_files if not os.path.exists(os.path.join(label_dir, f.replace(.jpg, .txt)))] print(f总图片数: {len(img_files)}) print(f缺少标签: {len(missing)})2.2 YOLO 标注格式的核心规范YOLO 系列的标注格式是每张图对应一个 .txt 文件文件里每行代表一个目标格式如下class_id x_center y_center width height需要特别注意的是这里的坐标都做了归一化处理取值在 0 到 1 之间是相对于图片宽度和高度的比例不是像素绝对值。这个设计是 YOLO 系列能高效训练的基础——不同分辨率的图片输入同一个模型标注格式保持一致省去了每次按像素换算的麻烦。举个例子一张 640x480 的图片里面有一只猫边界框的像素坐标为左上角 (100, 80)右下角 (400, 320)。换算成 YOLO 格式就是框宽高400-100300320-80240中心点坐标(100300/2)/640250/640≈0.390625(80240/2)/480200/480≈0.416667归一化宽高300/6400.46875240/4800.5所以标注行0 0.390625 0.416667 0.46875 0.5这里最容易犯的错就是把中心点坐标搞成左上角坐标。LabelImg 等标注工具导出时如果选了 PASCAL VOC 格式坐标是 x_min, y_min, x_max, y_max转成 YOLO 格式时需要用上面的公式换算忘记归一化是新手最常踩的坑之一。我在标注时用的流程是先用 LabelImg 手工画框导出 VOC 格式的 XML再写脚本批量转成 YOLO 格式的 txt。转换脚本的核心部分长这样import xml.etree.ElementTree as ET def voc_to_yolo(xml_file, class_list): tree ET.parse(xml_file) root tree.getroot() img_w int(root.find(size/width).text) img_h int(root.find(size/height).text) yolo_lines [] for obj in root.findall(object): cls_name obj.find(name).text cls_id class_list.index(cls_name) bndbox obj.find(bndbox) x_min int(bndbox.find(xmin).text) y_min int(bndbox.find(ymin).text) x_max int(bndbox.find(xmax).text) y_max int(bndbox.find(ymax).text) x_center (x_min x_max) / 2.0 / img_w y_center (y_min y_max) / 2.0 / img_h width (x_max - x_min) / img_w height (y_max - y_min) / img_h yolo_lines.append(f{cls_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}) return yolo_lines手工标注 2400 张图的工作量不小但这里我不建议完全依赖自动标注工具。我之前试过用预训练检测模型做自动预标注然后人工修正效率能提升一半以上但自动标注出来的框经常不够紧凑或者漏掉画面角落的小猫人工修正时反而要花更多精力去检查。如果是从零开始标注我建议按品种分组标注——先标完全部布偶猫的图再标完全部英短的图。这样做的好处是连续标注同一品种时你对这个品种的体型特征会形成稳定的判断框的松紧度一致性更好。2.3 品种分布与类别均衡设计数据集共 10 个品种每类 240 张。具体分布品种训练集验证集测试集特点说明布偶猫1923612毛色分布广重点色区域明显英短1923612脸圆与美短易混淆波斯猫1923612扁脸特征突出暹罗猫1923612重点色蓝眼睛缅因猫1923612体型大耳部特征明显美短1923612花纹呈条纹状德文卷毛猫1923612卷毛大耳朵橘猫1923612中华田园猫花色变化多黑猫1923612纯色不易对焦三花猫1923612多色块分布这里特别想聊一下品种选择的坑。最初我考虑加入“无毛猫”“苏格兰折耳猫”这类特征极其鲜明的品种但后来实际标注时发现无毛猫和德文卷毛猫在幼猫阶段外形相似度很高折耳猫和非折耳猫在非标准坐姿下也不容易被 AI 模型区隔。经过两轮测试后我把容易混淆的组合做了调整把“暹罗猫”和“重点色布偶猫”同时保留但额外筛选了图片确保布偶猫的图片不是那种只有脸部特写的——如果只有一张大脸图重点色区域和暹罗猫几乎无法区分。每类 240 张这个数量是怎么定的核心逻辑是类别均衡 样本多样性。如果一类 500 张、另一类 50 张模型会天然偏向多数的那个类YOLO 虽然不像传统分类模型那样对类别不平衡极度敏感但做推理时少数类的置信度会偏低这是训练数据分布直接决定的。把每类控制在相近数量mAP 才能稳定在合理区间。单看品种还不够同一品种内部的形态多样性同样重要。猫的姿势、拍摄角度、光线条件、背景复杂度都会影响模型的泛化能力。我在选图时对每个品种都做了场景抽样室内光线充足的图占 40%自然光下的户外或窗边图占 25%偏暗环境加人工补光的占 20%逆光或阴影较重的占 15%。这样做是刻意让模型见到各种光线条件否则实际部署时会发现模型在某种光照下直接“失明”。另外我还刻意保留了一些猫在运动中、耳朵后压、回头舔毛的瞬间这些非标准姿态会显著提升模型的鲁棒性。3. YOLOv8 实战训练从环境准备到模型评估3.1 环境搭建与预训练权重选择训练这套数据集我用的是 YOLOv8 框架。选择 YOLOv8 而不是 YOLOv5 或 YOLOv11原因有几个一是 YOLOv8 的工程化做得最好Ultralytics 库把训练、验证、导出封装的非常完整适合快速验证二是 YOLOv8 在 COCO 上的预训练权重容易获取做迁移学习很方便三是它的 Anchor-Free 设计对无特定先验框的目标更友好。当然如果你是 YOLOv11 的熟练用户用 v11 跑这套数据也没有任何问题标注格式是通用的。环境搭建以 Ultralytics 库为核心的命令如下# 创建虚拟环境 conda create -n yolov8 python3.10 conda activate yolov8 # 安装 PyTorch按 CUDA 版本选择命令 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 # 安装 Ultralytics pip install ultralytics # 验证安装 yolo version这里有个经验之谈安装 CUDA 版 PyTorch 时别直接用 pip install torch 装默认版本因为默认版本大概率装的是 CPU 版后面训练时你会发现自己明明是 NVIDIA 显卡却慢得像在跑 CPU。正确做法是到 PyTorch 官网找到与你的 CUDA 版本匹配的安装命令。3.2 data.yaml 配置与数据集校验训练前先要写好 data.yaml 文件这是 YOLO 读取数据集的配置文件path: /your/absolute/path/cat_breed_dataset train: images/train val: images/val test: images/test names: 0: ragdoll 1: british_shorthair 2: persian 3: siamese 4: maine_coon 5: american_shorthair 6: devon_rex 7: orange_tabby 8: black_cat 9: calico注意这里的 path 字段建议写绝对路径。写相对路径时如果你从不同目录启动训练脚本路径解析会出错排查起来非常痛苦。另外class 编号必须和标注 txt 里的第一列数字严格对应这个检查一遍就好但一定要真的检查不要想当然。在训练之前可以先用一个简单的可视化脚本检查标注是否加载正确from ultralytics import YOLO model YOLO(yolov8n.pt) # 仅是加载框架不训练 results model.val(datacat_breed_dataset/data.yaml, imgsz640, batch1, workers0)这段代码会按 YOLO 的验证流程读取数据如果标签格式有错会在加载阶段直接报错包括标出坐标越界、类别索引错误等问题。用这种方式做数据体检远比直接开训练后中途崩溃更高效。3.3 训练参数选择与过程监控我实际训练用的命令和关键参数如下yolo detect train \ modelyolov8m.pt \ datacat_breed_dataset/data.yaml \ epochs150 \ imgsz640 \ batch16 \ lr00.005 \ lrf0.01 \ momentum0.937 \ weight_decay0.0005 \ patience30 \ workers8 \ device0 \ projectcat_breed_experiment \ nameexp_001为什么要选 yolov8m 而不是 yolov8n 或 yolov8s因为数据集只有 2400 张用最小的 n 模型虽然训练快但容量不够对品种这种细粒度特征的区分能力会明显不足。但直接上 yolov8x 又会因为数据量太小而严重过拟合验证集的 Loss 会在某一步后直线上升。经过两轮对比m 模型是这套数据量下的最佳平衡点。如果你用的是更好的显卡可以把 batch 调大到 32如果显存只有 6G 左右batch8 也勉强够用但 BatchNorm 的统计量会波动更大建议开启 --cosine 学习率调度来平滑一点。imgsz 这个参数我设了 640这是 YOLOv8 的默认值。你可能想问换成 1280 是不是精度更高对分辨率提升确实能涨点但训练时间大约是原来的两倍多而且 2400 张数据训练 1280 分辨率容易把细节噪声也学进去。如果你的目标部署设备是手机端且只跑猫品种识别建议先 640 训一版再在 640 基础上用 960 或 1280 微调 20~30 个 epoch效果比直接高分辨率训练更稳。训练过程中一定要注意观察 loss 曲线和验证指标的统一变化。下面给一个我在实际训练中观察到的典型指标变化节奏供你对照参考训练阶段epoch区间观察点我的判断标准热身期1-10train_loss快速下降正常应看到从 1.x 降到 0.5 左右特征学习期10-50val_loss持续下降mAP50缓慢上升正常每个品种逐渐可区分收敛期50-90mAP50和mAP50-95同步上升应看到 mAP50 超过 0.85过拟合预警90val_loss不再降train_loss继续降如果 train 降但 val 持平或反弹要停3.4 数据增强策略的影响YOLOv8 自带了一系列数据增强策略默认开启的包括随机水平翻转、随机缩放、色彩抖动、马赛克增强Mosaic、混合拼接MixUp等。在这些增强中Mosaic 对这套数据集的影响最大。Mosaic 增强会把 4 张训练图拼接成一张图相当于模型每次迭代能看到不同场景的组合。它的好处是显著增加了样本多样性对小数据集尤为关键但对猫品种检测来说它有一个副作用——拼接后猫的尺寸被缩小到原图的四分之一左右品种特征尤其是毛色花纹的辨识度会下降。我测试过关闭 Mosaic 的情况训练前期 Loss 收敛更快但最终 mAP 反而低了 1-2 个百分点。所以更合理的做法是保留 Mosaic但在最后 20 个 epoch 左右将其关闭YOLOv8 中可以通过设置 close_mosaic 参数实现让模型在最后阶段回归到正常尺度进行精调。yolo detect train \ modelcat_breed_experiment/exp_001/weights/best.pt \ datacat_breed_dataset/data.yaml \ epochs20 \ imgsz640 \ close_mosaic10 \ device0这段代码是在前一轮训练结果的基础上继续微调 20 个 epoch并且从第 10 个 epoch 开始关闭马赛克增强给模型一个“看清楚原图”的收尾阶段。实测这个操作能让 mAP50-95 提升 1.5 个点值得一试。关于色彩抖动有一点要提醒橘猫和三花猫这类品种严重依赖颜色和花纹特征过强的色彩抖动会破坏这些关键信息。我建议把 hsv_h 从默认值稍微减小比如从 0.015 降到 0.01避免模型在颜色维度上过度增强后反而忽略了纹路结构。3.5 模型评估与结果分析训练完成后YOLOv8 会在实验目录下生成 weights/best.pt 和 last.pt。best.pt 是按验证集综合指标选出的最优权重last.pt 是最后一个 epoch 的权重。实际部署时用 best.pt这没有悬念。用 best.pt 在测试集上做评估的命令yolo detect val \ modelcat_breed_experiment/exp_001/weights/best.pt \ datacat_breed_dataset/data.yaml \ imgsz640 \ splittest我跑了 120 张测试图最终结果大概是mAP50: 0.912mAP50-95: 0.748各类别 Precision 平均: 0.88各类别 Recall 平均: 0.84上面的数字是基于一次实际实验的典型值每次训练会有浮动但量级差不多。看这些指标时要留意混淆矩阵因为它能直观看出哪些品种之间容易互相认错。从我的实验看最常混淆的是英短和美短——两者的毛色和脸型轮廓在非正脸照片中差异确实较小其次是布偶猫和暹罗猫当布偶猫的脸部特写比较明显、身体白色毛发没有入镜时模型会误判。如果你也遇到类似混淆解决办法有两个要么补充更多“全身可见”的布偶猫图片要么对易混淆品种单独做二次分类器后一种方案在工程上更可控。4. 训练过程中的常见问题与排查技巧实录4.1 标注坐标越界导致 Loss 变成 NaN这个坑我几乎在每次新数据集上都会遇到。训练开始几百步后突然出现 Loss 为 NaN训练直接挂掉。排查后发现绝大多数情况下是标注的边界框超出了图像边界。常见的原因包括标注工具导出的坐标是负数目标在画面边缘被裁切、图片 resized 之后坐标没同步换算、某些大图中的猫超出边界后被标注人员用“惯性”画了个不合法框。解决思路在训练前做一次标注合法性检查把坐标在 0 到 1 范围之外的 label 全部找出来。我刚整理完这套数据集时写过这么一段检查脚本def check_labels(label_dir, img_dir): issues [] for label_file in os.listdir(label_dir): if not label_file.endswith(.txt): continue with open(os.path.join(label_dir, label_file), r) as f: for line_num, line in enumerate(f, 1): parts line.strip().split() if len(parts) ! 5: issues.append(f{label_file}:{line_num} 长度异常) continue cls, x_center, y_center, w, h map(float, parts) x_min, y_min x_center - w / 2, y_center - h / 2 x_max, y_max x_center w / 2, y_center h / 2 if x_min 0 or y_min 0 or x_max 1 or y_max 1: issues.append(f{label_file}:{line_num} 越界) return issues这个脚本把越界的标注框全部揪出来后我回到原图上人工确认是直接裁剪图片还是调整标注框大半情况下把坐标 clamp 到 0~1 范围就可以但如果目标本身超出画面太多建议直接丢弃该图硬保留反而给模型输入噪声。4.2 品种不均衡导致个别类 mAP 偏低训练完看逐类指标时发现黑猫的精度明显低于其他品种这让我困惑了很久。后来分析了一下原因不是图片数量不够而是黑猫的图片在暗光背景下目标与背景差异度太低特征提取困难。同样的 240 张图橘猫这种暖色调品种在暗背景下依然轮廓清晰黑猫则直接隐入背景。这也解释了为什么实际部署时很多宠物识别模型最容易翻车的场景都是深色宠物。怎么解决我给黑猫做了一次专门的难例挖掘用第一版训练好的模型去跑验证集把所有预测置信度低于 0.5 的图片筛出来人工确认哪些是模型难以识别的再把同类特征的图片比如运动中虚影、逆光场景、黑色猫在黑色沙发上的图做数据清洗。如果难例过多就在训练集中增加这类图的占比。其实说到底数据集的质量衡量标准不是简单的图片数量而是模型在难例上的表现这部分优化空间往往比调模型结构更大。当时我把这批难例重新处理后黑猫一类 mAP50 从 0.86 提升到了 0.90。4.3 预测时多目标重叠的处理猫品种检测和一般物体检测有个不同点多只猫出现在同一画面时很容易相互遮挡边界框重叠度很高。模型推理时YOLO 的后处理 NMS非极大值抑制会把重叠度高的框合并掉导致只输出其中一个目标。实际使用时宁可给用户把两只猫都框出来也不要因为 NMS 阈值太紧而漏掉一两只。我在部署时调整了 NMS 参数。YOLOv8 的 predict 命令支持直接设置 conf 和 iouyolo detect predict \ modelcat_breed_experiment/exp_001/weights/best.pt \ sourcetest_images/cats_in_room.jpg \ conf0.3 \ iou0.5conf 设为 0.3 是个平衡点太低了会产生大量误检太高了又漏掉被遮挡的猫。iou 阈值从默认的 0.7 降到 0.5能保留更多互相重叠的框。不过要注意如果场景中猫确实非常密集还要结合特定的业务逻辑去处理该用跟踪算法时就要上跟踪算法。如果说上面这些都是能稳健解决的问题那我要额外强调一个容易被忽略的点图像的 EXIF 信息。有些手机拍的猫图有旋转信息标注工具打开时会自动旋转显示但保存的 label 坐标可能还是按原方向算的。这就是为什么训练时图像方向会“对不上”。处理办法很笨但很有效把所有图片统一转正后输出为 JPG覆盖原文件再重新检查一遍标注。训练之前花一个小时做这个检查能省下后面一整天的排障时间。4.4 常见问题速查表现象可能原因解决方案Loss 出现 NaN标注框越界、学习率过大检查 label 坐标范围降低 lr0mAP 每类差距大类别数量不均或特征差异小补充难例、增加多样性图片训练很快就过拟合数据量不足或模型过大换更小模型、增强数据增强、早停预测漏掉重叠猫NMS 阈值过高iou 降到 0.5conf 降到 0.3深色猫检测不到目标与背景对比度低增加暗光下的数据做难例挖掘品种混淆严重图片角度单一、毛色重叠增加全身图、侧脸图或用二次分类器训练速度极慢PyTorch 装成 CPU 版检查 torch.cuda.is_available()5. 模型部署与推理优化要点5.1 格式转换与端侧部署训练完成后面向实际应用需要把权重转换为合适的格式。如果你在服务器上用 Python 做推理直接用 .pt 文件即可。如果要上移动端或边缘设备需要把模型导出为 ONNX、TensorRT 引擎文件或 TFLite。Ultralytics 库把这部分操作封装的非常简洁yolo export modelcat_breed_experiment/exp_001/weights/best.pt formatonnx dynamicTrue导出为 ONNX 是因为它是一个开放的中间格式后续转到 TensorRTNVIDIA 显卡加速、OpenVINOIntel 平台、CoreMLiOS都非常方便。用 dynamicTrue 保留动态输入尺寸的能力避免部署时因为输入分辨率必须固定 640 而限制场景。这里有个小经验导出的 ONNX 模型用 onnxruntime 跑一遍测试确认推理结果和 PyTorch 原模型一致再做格式转换避免到了 TensorRT 阶段才发现中间有算子不兼容的问题。5.2 推理性能调优推理速度主要取决于模型尺寸和输入分辨率。yolov8m 在消费级显卡比如 RTX 3060上跑 640 分辨率单帧推理大约 10-15ms在 CPU 上大约 200-300ms。如果你的应用需要实时处理视频流有几个优化方向第一把模型换成 TensorRT 的 FP16 推理通常能在不损失精度的前提下提速 2 倍左右第二压缩输入分辨率到 416 或 320速度翻倍但精度会下降几个点要在业务可接受的范围内测试第三如果场景中猫是固定的比如猫舍监控可以用背景差分先框出运动区域再只对局部区域做检测大幅降低计算量。这些方案不是说上来就要全做而是根据实际性能指标逐级优化过度优化反而会增加系统复杂度。在处理视频流时每隔几帧做一次检测比逐帧检测更高效但会导致猫跑动时漏框。建议折中策略每两帧检测一次中间帧用跟踪算法如 ByteTrack做位置预测这样既保证流畅度又不丢目标。5.3 实际推理结果的解读标准拿到模型的推理结果后输出包含四部分信息边界框坐标、类别 ID、置信度、类别名称。在实际业务里用好这些信息比单纯追求 mAP 更重要。比如做猫舍登记置信度低于 0.6 的检测结果建议标记为“待人工确认”而不是让系统直接写死一个品种。做宠物 App 时可以把置信度作为一个软参数暴露给用户让用户拍照后看到“系统判定为布偶猫置信度 0.92”而不要让用户感觉系统在“硬猜”。关于置信度的阈值不同场景差异很大如果只是给用户建议conf0.3 以上都可以接受漏检的负面影响更小如果是用于自动登记身份conf0.85 以上才可写入库中宁可机器少判也不要误判。这个取舍需要结合实际业务需求动态调整。最后再分享一点我的心得数据集的整理说实话比训练模型本身更耗精力。2400 张图我从原始图片收集、筛选、标注到清洗前后花了接近两周的工作量。很多人以为训练效果差是模型不够好换个更牛的模型结构就能解决但实际上大部分问题都出在数据质量上。标签错了、边界框画歪了、类别分布不均衡、图片尺寸混乱这些才是性能的天花板。我至今还记得第一次用一个干净数据集训练时的那种错觉明明模型结构没有变化训练脚本没有变化仅仅是把训练数据重新清理了一遍mAP 直接从 0.7 蹦到 0.9。从那时候起我就把数据质量检查写进了每一次训练的流程里绝不跳过。如果你打算在这个数据集基础之上扩展自己的方案有两个方向值得做。一是增加品种数把 10 类扩到 20 类但每类的图片数量要同步保证二是考虑把检测和分类分开检测网络只负责找猫分类网络负责细分品种两个网络各干各的在端侧部署时灵活性更高。不过这是后话了先把检测这一层做扎实再说细分的事情。这套数据集的结构、标注规范和训练流程已经帮你把最脏最累的活干完了剩下的就是按自己的应用场景去调配参数和部署方案。
返回列表