勘智开发者社区模型训练功能是为简化开发流程,提高开发效率开放的训练平台。该平台使用户关注视觉场景的落地实现,更加快捷的完成从数据标注到获得部署包中的KModel模型的过程,并在搭载嘉楠科技Kendryte®系列AIoT芯片中K230、K230D和K210芯片开发板上进行部署。用户仅需上传数据集,简单的配置参数就可以开始训练了。
进入嘉楠开发者社区,注册账号。社区地址:勘智开发者社区-模型训练
进入 数据集 界面,点击创建数据集,可以看到如下界面:
您可以选择创建的任务类型,并输入数据集名称。
💡 任务介绍:
| 任务名称 | 任务说明 |
|---|---|
| 图像分类 | 对图片进行分类,得到图片的类别结果和分数。 |
| 图像检测 | 在图片中检测出目标物体,并给出物体的位置信息、类别信息和分数。 |
| 语义分割 | 对图片中的目标区域进行分割,将图片中的不同标签区域切割出来,属于像素级任务。 |
| OCR检测 | 在图片中检测出文本区域,并给出文本区域的位置信息。 |
| OCR识别 | 在图片中识别出文本内容。 |
| 度量学习 | 训练可以将图片特征化的模型,使用该模型创建特征库,通过特征对比,在不重新训练模型的前提下对新的类别进行分类,也可称为自学习。 |
| 多标签分类 | 对图片进行多类别分类,一些图片可能不只是属于某个单一的类别,天空和大海可以同时存在,得到图片的多标签分类结果。 |
点击数据集条目的配置按钮,进入数据集详情页,如下图:
数据上传分为两种方式:
一种是上传图片,您需要了解任务的数据标注过程,并在平台内部完成标注过程,需要注意的是:OCR识别任务不支持在线标注。
💡Tips: 图片上传时,选择一张起始位置图片,按住shift键选择结束位置的图片,起始位置和结束位置中间的所有图片均会被选中,点击打开,所有选中的图片开始上传。
一种是上传压缩包,压缩包内包含已经标注好的数据,包含原图和标注文件,数据组织格式查看压缩包格式说明,进行压缩时需要注意:将文件夹内的所有子文件夹和文件选中,右键选择压缩,而不是选中外部的文件夹压缩。
具体操作步骤见后两小节。
🔶图像分类任务:图像分类任务的标注步骤在上传图片之后,会出现输入标签的弹框,你可以在弹框中输入上传这一批图片的标签类别信息,弹框如下图所示:
🔶图像检测任务:图像检测任务上传图片后,可以看到数据集的图片概览,点击标注按钮,进入标注界面完成图片标注,如下图所示,按照图中步骤可以完成标注:
🔶语义分割任务:语义分割任务上传图片后,可以看到数据集的图片概览,点击标注按钮,进入标注界面完成图片标注,如下图所示,按照图中步骤可以完成标注:
🔶OCR检测任务:OCR检测任务上传图片后,可以看到数据集的图片概览,点击标注按钮,进入标注界面完成图片标注,如下图所示,按照图中步骤可以完成标注:
🔶OCR识别任务:OCR识别任务可以使用上传压缩包的形式上传数据,不支持线上标注。
🔶度量学习任务:度量学习训练过程是为了获取一个将图片特征化的模型,其标注过程和分类过程类似。上传图片后,会出现输入标签的弹框,你可以在弹框中输入上传这一批图片的标签类别信息,弹框如下图所示:
🔶多标签分类任务:多标签分类任务上传图片后,针对待标注图片,点击编辑标签,然后依次输入标签信息回车即可。如下图所示,按照图中步骤可以完成标注:
数据集标注结束后,平台支持数据集导出下载,请您及时保留标注的数据集,受限于后台存储资源,数据集过多时会不定期清理。
进如数据集页面,选择下载的数据集条目,点击操作中的下载按钮,完成下载。
除了上传图片标注方法外,还可以使用压缩包的形式上传数据,压缩包内包含已经标注好的数据,包含原图和标注文件。不同的任务有不同的组织形式,这里对几种任务的数据组织格式进行说明。
🔶图像分类任务:图像分类任务的压缩包内结构如下所示,数据集目录下包括子类别文件夹,每个子类别中包括该类别的所有图片。
1📦 my_dataset2├── 📁 class_03│ ├── 0.jpg4│ ├── 1.jpg5│ └── ...6├── 📁 class_17│ ├── 0.jpg8│ ├── 1.jpg9│ └── ...10├── 📁 class_211│ ├── 0.jpg12│ ├── 1.jpg13│ └── ...14└── ...🚩Note: 压缩
zip包时,请进入到my_dataset目录,选中所有子目录class_0、class_1、class_2等,右键选择压缩,而不是选中外部的文件夹压缩。
🔶图像检测任务:图像检测任务使用 Pascal VOC格式,文件夹需包含images和xml两个文件夹,且一张图片对应一个同名xml文件。可以增加labels.txt文件,每行表示一个类别名称。
xxxxxxxxxx101📦 my_dataset2├── 📁 images3│ ├── 0.jpg4│ ├── 1.jpg5│ └──...6├── 📁 xml7│ ├── 0.xml8│ ├── 1.xml9│ └──...10└── labels.txt(可选)🚩Note: 压缩
zip包时,请进入到my_dataset目录,选中所有子目录和文件images、xml、labels.txt等,右键选择压缩,而不是选中外部的文件夹压缩。
🔶语义分割任务:语义分割任务需包含images和annotations两个文件夹,且一张图片对应一个同名的json文件。json文件内容同labelme格式,一个shapes数组,每个元素包含label字符串和points数组,points数组中每个元素为一个长度为2的数组,表示区域围点的坐标。
json文件示例: {"shapes":[{"label":"head","points":[[1,2],[3,4],[5,6]]}]}
xxxxxxxxxx91📦 my_dataset2├── 📁 images3│ ├── 0.jpg4│ ├── 1.jpg5│ └──...6└── 📁 annotations7 ├── 0.json8 ├── 1.json9 └──...🚩Note: 压缩
zip包时,请进入到my_dataset目录,选中所有子目录和文件images、annotations等,右键选择压缩,而不是选中外部的文件夹压缩。
🔶OCR检测任务:OCR检测任务的压缩包内部格式如下,文件夹需包含 images和txts的两个文件夹,且每张图片对应一个同名的txt标注文件。txt文件内包括对应图片的所有框信息,每个框的信息占一行,保证每行9个元素,每行为x1,y1,x2,y2,x3,y3,x4,y4,text,(x1,y1)为左上角坐标,(x2,y2)为右上角坐标,(x3,y3)为右下角坐标,(x4,y4)为左下角坐标,text为文字内容或###。
xxxxxxxxxx91📦 my_dataset2├── 📁 images3│ ├── 0.jpg4│ ├── 1.jpg5│ └──...6└── 📁 txts7 ├── 0.txt8 ├── 1.txt9 └──...🚩Note: 压缩
zip包时,请进入到my_dataset目录,选中所有子目录和文件images、txts等,右键选择压缩,而不是选中外部的文件夹压缩。
🔶OCR识别任务:OCR识别任务的压缩包中,文件夹需包含images子文件夹和labels.txt文件。labels.txt中的内容为每行是一个图片的标注内容:格式为:图片在my_dataset根目录下的相对路径\t图片的文字内容。\t为tab键输入。
xxxxxxxxxx61📦 my_dataset2├── 📁 images3│ ├── 0.jpg4│ ├── 1.jpg5│ └──...6└── 🧾labels.txt🚩Note: 压缩
zip包时,请进入到my_dataset目录,选中所有子目录和文件images、labels.txt等,右键选择压缩,而不是选中外部的文件夹压缩。
🔶度量学习任务:数据集目录下包括子类别文件夹,每个子类别中包括该类别的所有图片,最好要多一些类别,至少20个类别。数据集中最好包含更多的类别,至少20个。
xxxxxxxxxx141📦 my_dataset2├── 📁 class_03│ ├── 0.jpg4│ ├── 1.jpg5│ └── ...6├── 📁 class_17│ ├── 0.jpg8│ ├── 1.jpg9│ └── ...10├── 📁 class_211│ ├── 0.jpg12│ ├── 1.jpg13│ └── ...14└── ...🚩Note: 压缩
zip包时,请进入到my_dataset目录,选中所有子目录class_0、class_1、class_2等,右键选择压缩,而不是选中外部的文件夹压缩。
🔶多标签分类任务:多标签分类任务的数据集组织形式如下,文件夹下包含images文件夹和annotations.txt、labels.txt两个文件。对于annotations.txt,其中每一行表示一张图片的标注。格式为:图片在my_dataset根目录下的相对路径\t多标签的类别0-1向量。举例:数据集名称为nature,共有4个类别desert、mountain、river、sun,现在一张图片001.jpg包括mountain和river,该图片的标注为images/001.jpg\t0,1,1,0。\t为tab键输入。
xxxxxxxxxx71📦 my_dataset2├── 📁 images3│ ├── 0.jpg4│ ├── 1.jpg5│ └──...6├── annotations.txt7└── labels.txt🚩Note: 压缩
zip包时,请进入到my_dataset目录,选中所有子目录和文件images、annotations.txt、labels.txt等,右键选择压缩,而不是选中外部的文件夹压缩。
数据集上传并标注完毕后,您可以开启训练任务,开启训练的入口既可以从数据集条目直接点击训练,也可以在数据集详情页面点击训练按钮。如下图所示:
数据集条目进入训练:
数据集详情进入训练:
进入训练参数配置界面:
k210训练参数配置
k230训练参数配置
任务开始训练后,可以在训练记录页看到训练过的任务条目表,因为后台训练资源有限,任务提交后会视资源情况进行排队,如下图所示:
点击对应任务条目的详情按钮,可以查看任务的训练详情,包括任务的基本信息、训练日志,结束后会刷新loss曲线。如下图所示:
等待任务训练结束后,在训练记录页内,点击任务条目的资料下载按钮下载对应任务的部署包,对应的部署包也会以邮件的形式发送给您。
将下载的部署zip包解压后,目录如下:
x
111📦 task_name2├── 📁 **_result3│ ├── test_0.jpg4│ ├── test_1.jpg5│ └──...6├── mp_deployment_source7├── **_image_1_2_2.py8├── **_image_1_3.py9├── **_video_1_2_2.py10├── **_video_1_3.py11└── README.pdf内容如图所示:
其中mp_deployment_source即是在K230镜像上部署的代码包,内部包含部署的配置文件和部署的KModel模型。注意:平台生成的配置文件deploy_config.json和***.kmodel是在k230上部署的关键,它们在各种SDK中均可用。您可以阅读给出的README.pdf实现训练模型的部署。
平台限制:训练端提供的资源有限,每个任务适用于24h内结束,数据限制为1000张图片,压缩包限制200M。对于测试的简单场景是够用的,复杂场景或严格的商业场景请使用开源代码完成训练。每位用户同时仅支持1个任务运行。
数据集需要严格按照本文档上面给出的格式进行组织,不合理的数据格式不会被平台接收。
训练需要图片请上传30张以上,太少图片会导致数据集在拆分训练、验证、测试三部分的过程报错。
平台提供的部署脚本只包括micropython的脚本,在k230_rtos和k230_linux上部署训练模型请参考README.pdf,其部署代码已经内置在对应的SDK中。
部署过程中需要调整阈值参数,内置参数并不是适用于所有场景,调整参数可以通过修改deploy_config.json或者直接在读取该文件赋值变量时进行修改。
部署调试步骤:
排查阈值问题:部署过程如果效果不好,请首先采取调整阈值参数的方式进行调整,检查效果是否可以提升;如果有提升,定位为阈值设置不合理导致部署效果差,否则继续排查;
排查部署代码问题:如果视频流部署效果仍然效果不好,那么可能是部署代码参数配置的问题,需要调整分辨率、阈值等参数;如果有好转,定位为部署代码参数设置不合理导致效果差,否则继续排查;
排查量化问题:运行单张图片推理脚本,观察图片推理结果是否正常,如果图片推理正常,则说明模型量化过程正常,否则,可能是转换kmodel时模型导致的模型效果差;可以在论坛发帖联系工作人员进行测试;
排查训练问题:如果仍然无法得到好的效果,需要查看部署包中的 **_result目录下的图片,结果是否正确,该测试是使用训练的pt模型进行测试,可以确认是否是训练问题造成的;如果目录下图片测试效果正常,说明训练没有问题,否则,定位为训练步骤之前的问题,即数据、参数或训练过程的问题;可以尝试需要调整训练参数(比如迭代次数或者学习率)重新训练;
排查数据问题:最后可能是k230摄像头的图片分布和训练数据不一致,因此需要使用K230摄像头采集数据,并自行标注重新训练。
✨上述就是在线训练平台的使用方法。如有问题,欢迎在嘉楠问答社区给我们发帖留言,问答社区。