# 云训练平台模型部署

## 云训练平台简介

Canaan开发者社区模型训练功能是为简化开发流程，提高开发效率开放的训练平台。该平台使用户关注视觉场景的落地实现，更加快捷的完成从数据标注到获得部署包中的KModel模型的过程，并在搭载嘉楠科技Kendryte®系列AIoT芯片中K230、K230D芯片开发板上进行部署。用户仅需上传数据集，简单的配置参数就可以开始训练了。

![plat](https://www.kendryte.com/api/post/attachment?id=600)

📌平台地址：**[嘉楠云训练平台](https://www.kendryte.com/zh/training/start)**

📌平台使用文档参考：**[嘉楠云训练平台文档教程](https://www.kendryte.com/web/CloudPlatDoc.html)**，请注意数据集的格式！

## 支持任务介绍

云训练平台中对于K230系列芯片支持的视觉任务有7种，任务介绍如下表：

💡 **任务介绍**：

| 任务名称  | 任务说明                                                                                                           |
| ----- | --------------------------------------------------------------------------------------------------------------------- |
| 图像分类  | 对图片进行分类，得到图片的类别结果和分数。                                                                            |
| 图像检测  | 在图片中检测出目标物体，并给出物体的位置信息、类别信息和分数。                                                          |
| 语义分割  | 对图片中的目标区域进行分割，将图片中的不同标签区域切割出来，属于像素级任务。                                              |
| OCR检测 | 在图片中检测出文本区域，并给出文本区域的位置信息。                                                                        |
| OCR识别 | 在图片中识别出文本内容。                                                                                                |
| 度量学习  | 训练可以将图片特征化的模型，使用该模型创建特征库，通过特征对比，在不重新训练模型的前提下对新的类别进行分类，也可称为自学习。   |
| 多标签分类 | 对图片进行多类别分类，一些图片可能不只是属于某个单一的类别，天空和大海可以同时存在，得到图片的多标签分类结果。               |

## 部署步骤

## 部署包说明

训练结束后可以下载对应训练任务的部署包，下载的部署zip包解压后，目录如下：

```shell
📦 task_name
├── 📁 **_result
│   ├── test_0.jpg
│   ├── test_1.jpg
│   └──...
├── cpp_deployment_source.zip
├── mp_deployment_source.zip
└── README.md
```

内容如图所示：

![部署包](https://www.kendryte.com/api/post/attachment?id=597)

其中`mp_deployment_source.zip`即是在K230 MicroPython 镜像上部署的代码包，内部包含部署的配置文件和部署的KModel模型。

## 文件拷贝

✅ **固件选择**：请在 `github` 按照您的开发板类型下载最新的 [PreRelease固件](https://github.com/kendryte/canmv_k230/releases/tag/PreRelease) 以保证**最新的特性**被支持！或者使用最新的代码自行编译固件，教程见：[固件编译](../../userguide/how_to_build.md)。

✅ **固件烧录**： 按照开发板类型烧录固件，固件烧录参考：[固件烧录](../../userguide/how_to_burn_firmware.md)。

✅ **部署脚本**：固件烧录成功后，上电开机，您可以在文件系统根目录下发现`CanMV/sdcard`目录，将`mp_deployment_source.zip`解压后拷贝到`CanMV/sdcard`目录下。

## 脚本运行

打开CanMV IDE K230，选择左上角`文件(F)`->`打开文件`->`选择CanMV/sdcard/examples/19-CloudPlatScripts`中的不同任务的脚本运行。

💡 **脚本介绍**：

|脚本名称|脚本说明|
|--|--|
|deploy_cls_image.py|图像分类单图推理脚本，您需要在自行增加测试图片，并修改脚本内读入图片的路径。|
|deploy_cls_video.py|图像分类视频流推理脚本，脚本详情见脚本内注释。|
|deploy_det_image.py|目标检测单图推理脚本，您需要在自行增加测试图片，并修改脚本内读入图片的路径。|
|deploy_det_video.py|目标检测视频流推理脚本，脚本详情见脚本内注释。|
|deploy_seg_image.py|语义分割单图推理脚本，您需要在自行增加测试图片，并修改脚本内读入图片的路径。|
|deploy_seg_video.py|语义分割视频流推理脚本，脚本详情见脚本内注释。|
|deploy_ocrdet_image.py|OCR检测单图推理脚本，您需要在自行增加测试图片，并脚本修改读入图片的路径。|
|deploy_ocrdet_video.py|OCR检测视频流推理脚本，脚本详情见脚本内注释。|
|deploy_ocrrec_image.py|OCR识别单图推理脚本，您需要在自行增加测试图片，并脚本修改读入图片的路径。考虑到平台OCR识别模型单次推理读入的数据为长条状文本，因此**不支持**视频流推理。|
|deploy_ocr_image.py|OCR单图推理脚本，您需要在自行增加测试图片，并脚本修改读入图片的路径。双模型任务，需要同时添加OCR检测和OCR识别的部署包，注意修改脚本内目录路径。|
|deploy_ocr_video.py|OCR视频流推理脚本，脚本详情见脚本内注释。双模型任务，需要同时添加OCR检测和OCR识别的部署包，注意修改脚本内目录路径。|
|deploy_ml_image.py|度量学习单图推理脚本，您需要在自行增加测试图片，并脚本修改读入图片的路径。输出为对应维度的特征，后续操作视应用场景修改。|
|deploy_ml_video.py|度量学习视频流推理脚本，脚本详情见脚本内注释。输出为对应维度的特征，后续操作视应用场景修改。|
|deploy_multl_image.py|多标签分类单图推理脚本，您需要在自行增加测试图片，并脚本修改读入图片的路径。|
|deploy_multl_video.py|多标签分类视频流推理脚本，脚本详情见脚本内注释。|

## 部署说明

- 📢 在部署模型时如果效果不理想，首先调整对应任务的阈值和推理图像的分辨率，测试结果是否可以有好转！

- 📢 学会定位问题，比如查看·部署包中的`**_results`目录下的测试图片，如果该图片正常，则可能是部署代码、模型转换或者阈值的问题！

- 📢 调整模型训练的参数，比如`epoch`、`learning_rate`等，防止出现训练不充分的情况！

- 📢 如果在线训练平台无法满足您的要求，您可以选择使用YOLO等开源模型完成训练，并在训练时指定合适的模型大小和输入分辨率，YOLO教程见：**[K230 YOLO大作战](./YOLO大作战.md)**！
