# YOLO 的简化转换

> 这是一个旧版工具。我们建议切换到
> [HubAI 转换](https://docs.luxonis.com/cloud/hubai/model-registry/detailed-conversion.md)
> 或使用 Python API，如
> [迁移指南](https://docs.luxonis.com/software-v3/ai-inference/conversion/rvc-conversion/online/hubai.md)
> 中所述。

## 概述

我们创建了一个工具来简化 Yolo 目标检测器的导出过程。具体来说，我们的工具支持从 Yolov5 到 Yolov11 以及 Gold Yolo 的转换。

> 请注意，我们的工具仅支持从 Ultralytics 转换 YOLOv9 权重（支持的版本概览请参见
> [此处](https://docs.google.com/spreadsheets/d/16k3P-LxPMFREoePLvoLqDZo0Xu_tRcSpm_BjQE3PHQY/edit?usp=sharing)
> ）。 我们强烈建议您切换到
> [HubAI 转换](https://docs.luxonis.com/cloud/hubai/model-registry/detailed-conversion.md)
> ，因为它正在积极维护，并且支持更新的 YOLO 版本（例如 YOLOv12）。

上传预训练模型的权重（.pt 文件），设置输入图像形状，选择目标设备的 Robotics Vision Core 代次（在
[工具选项](https://docs.luxonis.com/software-v3/ai-inference/conversion/rvc-conversion/online/yolo.md) 中了解更多参数），我们将编译一个 blob 文件和 JSON
文件，其中包含 DepthAI 解码结果所需的信息。

## 示例

此示例展示了如何转换 YoloV6n R4 以及如何在 OAK 设备上运行编译后的模型。

 1. 首先，我们需要下载模型权重。您可以从[此处](https://github.com/meituan/YOLOv6/releases/download/0.4.0/yolov6n.pt)下载。

 2. 在您选择的浏览器中打开[工具](https://tools.luxonis.com/)。然后，上传下载的 yolov6n.pt 权重，并将 输入图像形状 设置为 640 352（我们选择此输入图像形状，因为长宽比接近
    16:9，且吞吐量和延迟仍然不错）。其余选项保持默认。

 3. 点击 提交 按钮。模型将自动转换并下载到一个压缩文件夹中（该压缩文件夹将包含转换后的 blob 文件、JSON 文件以及用于生成输出 blob 文件的中间表示）。

 4. 在本地解压 ZIP 文件夹，然后使用以下脚本对导出的模型进行推理。请务必设置 MODEL_PATH，并参考 .json 文件获取所需的输入尺寸和标签信息。

```python
import depthai as dai
from depthai_nodes.node import YOLOExtendedParser

MODEL_PATH = ... # 例如 "yolov6n.blob"
INPUT_SIZE = ... # 例如 (640, 352)
LABELS = ... # 例如 ["person","bicycle","car", ...]

visualizer = dai.RemoteConnection(httpPort=8080)
device = dai.Device()
platform = device.getPlatform().name
frame_type = (
    dai.ImgFrame.Type.BGR888i if platform == "RVC4" else dai.ImgFrame.Type.BGR888p
)

with dai.Pipeline(device) as pipeline:

    # 模型节点
    nn = pipeline.create(dai.node.NeuralNetwork)
    nn.setModelPath(MODEL_PATH)

    # 解析节点
    parser = pipeline.create(YOLOExtendedParser, n_classes=len(LABELS), label_names=LABELS)

    # 输入节点
    camera = pipeline.create(dai.node.Camera).build()
    camera_stream = camera.requestOutput(size=INPUT_SIZE, type=frame_type)                                  

    # 连接节点
    camera_stream.link(nn.input)
    nn.out.link(parser.input)

    # 可视化
    visualizer.addTopic("Video", nn.passthrough, "images")
    visualizer.addTopic("Detections", parser.out, "images")

    pipeline.start()
    visualizer.registerPipeline(pipeline)

    while pipeline.isRunning():
        key = visualizer.waitKey(1)
        if key == ord("q"):
            print("从远程连接获取到 q 键！")
            break
```

> 有关运行模型的更多详细信息，请参阅
> [推理](https://docs.luxonis.com/software-v3/ai-inference/inference.md)
> 部分。

## 工具选项

 * Yolo 版本 - 必需，选择要使用的 Yolo 版本转换。工具内部集成了自动 Yolo 版本检测器，当您上传模型权重时，它会自动检测 Yolo 版本并进行设置。
 * RVC2 或 RVC3 - 必需，目标设备的 Robotics Vision Core 代次。
 * 文件 - 必需，预训练模型的权重（.pt 文件），大小需小于 300Mb。
 * 输入图像形状 - 必需，如果是正方形输入图像形状则为整数，或者用空格分隔的宽度和高度。该值必须能被 32（或 64，取决于步长）整除。
 * Shaves - 可选，默认值为 6。使用的 shaves 数量。要了解更多关于 shaves 的信息，请参考[此处](https://docs.luxonis.com/software-v3/ai-inference/conversion.md)。
 * 使用 OpenVINO 2021.4 - 可选，默认值为 true。此复选框控制编译为 IR 时是否使用旧版前端标志。如果关闭，则默认为 OpenVINO 2022.1。我们注意到使用 2022.1 时性能略有下降。因此，我们建议将其设置为 true。
