嘉楠科技
直播中

学电超人

13年用户 894经验值
擅长:微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制
私信 关注
[问答]

在K230中,如何使用AI Demo中的object_detect_yolov8n,YOLOV8多目标检测模型?

在K230的AI开发教程文档中,可以看到有源码的AI Demo,其中包括yolov8n模型,在仓库里可以看到源码



我想请问各位大佬,如何使用这个程序?如何更改程序,替换为我自己的数据集和训练后的模型?
        
        

回帖(1)

王杰

2025-8-11 17:15:42

要使用K230 AI Demo中的object_detect_yolov8n模型并替换为您自己的数据集和训练模型,请按以下步骤操作:




1. 准备工作


① 获取源码


从嘉楠官方仓库克隆代码:


git clone https://github.com/kendryte/k230_sdk.git
cd k230_sdk/src/ai_demo/object_detect_yolov8n

② 环境配置


确保已安装:



  • K230 SDK(包含交叉编译工具链)

  • Python 3.8+

  • PyTorch >=1.8, ONNX

  • 模型转换工具 ncc(K230的NN编译器)




2. 训练自定义模型


① 数据集准备


使用YOLOv8格式的数据集:


custom_dataset/
├── images/
│   ├── train/
│   └── val/
└── labels/
    ├── train/
    └── val/

② 训练模型


用Ultralytics YOLOv8训练:


from ultralytics import YOLO

model = YOLO("yolov8n.pt")  # 加载预训练模型
results = model.train(
    data="custom_dataset.yaml",  # 数据集配置文件
    epochs=100,
    imgsz=640,
    batch=16
)



3. 模型转换


① 导出ONNX格式


model.export(format="onnx")  # 生成yolov8n_custom.onnx

② 转为K230格式(.kmodel)


使用ncc工具转换:


ncc compile yolov8n_custom.onnx yolov8n_custom.kmodel 
  --input-layout NHWC
  --output-layout NCHW
  --input-shape "1 3 640 640"
  --dataset quant_images/  # 量化校准图像



4. 修改K230源码


① 替换模型文件


将生成的yolov8n_custom.kmodel复制到K230板子的/root目录


② 修改C++代码



  • 模型加载路径main.cc):
    std::string model_path = "/root/yolov8n_custom.kmodel";  // 改为新模型路径

  • 调整后处理参数postprocess.cc):
    int num_classes = 10;  // 修改为您的类别数
    float conf_threshold = 0.3; // 置信度阈值
    float nms_threshold = 0.5;  // NMS阈值

  • 更新类别标签labels.cc):
    std::vector class_names = {"cat", "dog", ...}; // 您的类别


③ 输入图像尺寸


在预处理中匹配模型输入尺寸(如640x640):


cv::resize(img, resized_img, cv::Size(640, 640));  // 在preprocess.cc中



5. 编译与部署


① 交叉编译


mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/k230_toolchain.cmake ..
make -j4

② 推送到K230


scp object_detect root@192.168.x.x:/root/
ssh root@192.168.x.x

③ 运行


cd /root
./object_detect yolov8n_custom.kmodel test.jpg  # 测试图像



6. 关键注意事项




  1. 模型兼容性



    • 确保输入尺寸(如640x640)与训练一致

    • 使用ncc量化时需提供约100张校准图片




  2. 后处理适配



    • 如果自定义模型改动结构(如检测头),需重写postprocess.cc中的解码逻辑




  3. 性能优化



    • 在CMakeLists.txt中开启硬件加速:  
      add_definitions(-DK230_ENABLE_AI_HARDWARE)




  4. 数据精度



    • FP32模型转为INT8时在量化校准阶段需覆盖全部场景数据






调试技巧




  1. 日志输出
    在代码中添加Tensor信息打印:


    auto* data = interpreter->input_tensor(0)->data();
    printf("Input tensor shape: %d x %d x %dn", height, width, channel);



  2. PC端仿真
    使用ncc的模拟器验证输出:


    ncc run yolov8n_custom.kmodel input.bin --simulate



  3. 性能分析
    添加时间戳计算推理耗时:


    auto start = std::chrono::high_resolution_clock::now();
    // 推理代码
    auto end = std::chrono::high_resolution_clock::now();
    std::cout << "Inference time: "
            << std::chrono::duration_cast(end-start).count()
            << "ms" << std::endl;



完成以上步骤后,您的自定义YOLOv8模型即可在K230上运行。遇到问题时可优先检查:



  1. 模型转换是否成功(使用ncc version验证兼容性)

  2. 输入/输出张量维度是否匹配

  3. 后处理代码中的锚点/步长参数与模型对齐



官方资源参考:



举报

更多回帖

发帖
×
20
完善资料,
赚取积分