Grove Vision AI V2 基于 Arm Cortex-M55 和 Ethos-U55 嵌入式视觉模块。Ethos-U55 具有 64 至 512 GOP/s 的算术能力,可满足日益增长的将机器学习模型下载到边缘进行推理的需求。将Grove Vision AI V2与Petoi机器狗进行协同工作,实现无比强大的人工智能机器人系统。
本章分为三个小节,第一小节为模型训练,讲解如何在本地电脑或者在云端进行模型训练,以及数据集的制作。另外,我们实现了COCO数据集的DIY训练功能,您可以选择任意数量感兴趣的标签来进行模型训练。
第二小节为模型量化,通过模型量化,可以降低模型计算复杂度,更易于在嵌入式系统中进行部署。同样的,我们考虑了本地和云端训练模型两种方式的不同,这两种方式得到的模型都可以进行模型量化。
第三节为模型部署,讲解了如何将模型下载到Grove Vision AI V2上并且实现其与机器狗之间的通信,这样我们就完成了从模型训练到模型部署整个流程的学习。
相信通过本章的细致讲解,您一定可以学会如何在我们的机器狗上部署您喜爱的模型,并为其强大的功能所惊叹。
在上一节的最后,我们已经得到了能够部署在Grove Vision V2上的模型。这一节我们要学习如何将模型上载到硬件上,并且完成与机器狗的通信。
Grove Vision AI V2可以通过在线网站进行部署,网站本身就有很丰富的模型资源供您选择,所以除了自己训练模型外也可以直接使用网站上的模型。
在该页面顶部,您将看到三个栏目,标题分别为: AI 模型、设备工作区、关于 SenseCraft AI。点击设备工作区,选择 Grove - Vision AI V2。
在 "模型 "区域,您可以选择 SenseCraft AI 提供的模型,也可以上传您自己训练的模型。
上传模型需要一点时间,因此您需要耐心等待。
在预览部分,您可以实时观察摄像机推理后的输出结果,例如,下载宠物检测功能后,Grove Vision AI V2 成功检测到猫。
在 "设备记录器 "部分,设备向计算机发送实时检测数据,在 "方框 "部分的数据为
您可以使用 Arduino IDE 修改我们的开放源代码程序,以使用 Grove Vision AI V2。我们的程序将目标跟踪与 Grove Vision AI V2 集成在一起。您只需修改代码即可启用该功能。
此外,您还可以使用与 SSCMA 库相关的 API 开发更丰富的功能。
在“模型训练”章节,讲解了如何训练一个yolov8模型,但是为了部署在Grove Vision V2上,我们还需要进一步对模型进行量化。本节内容如下:
模型INT8量化
模型图优化
首先,我们要得到pt模型文件,在“模型训练”中,我讲解了可以通过本地训练和云端训练两种方式得到经过训练后的pt模型文件。
利用anaconda新建一个环境(例如可以命令为petoi_convert_local),在新环境中依次执行:
(!注意:我们在模型训练章节的本地训练部分使用anaconda新建了petoi_train_local环境,而本节使用的petoi_convert_local环境和petoi_train_local环境是两个不同的环境,不可使用petoi_train_local进行以下操作。)
下面,我们需要对模型进行量化,执行:
你将会在当前文件夹下看到一个 yolov8n_saved_model
文件夹,其中包含 yolov8n_full_integer_quant.tflite
模型文件。
下面进行图优化。如果您是windows电脑,您需要安装 Microsoft C++ Build Tools。如果您是Mac用户或者Linux用户,则不需要安装。
执行
创建vela_config.ini,将以下内容复制到vela_config.ini
在终端执行
将${Save path of the optimized model}替换为你想要的输出目录
将${The path of the tflite model that needs to be optimized}替换为你刚才得到的经过量化后的模型文件
然后你就会得到以“_vela”结尾的模型,这个模型是可以用于部署在Grove Vision V2上的模型文件。
具体使用详情,请参考:
通过深度学习网络可以从大量数据中学习数据特征,从而应用于各种检测,分割任务。想要使用深度学习解决具体问题,必须了解如何通过已知数据进行网络模型的训练。因此我们首先讲解了如何训练深度学习神经网络。本节的内容如下:
在本地进行模型训练
在云端进行模型训练
制作自己的训练集
本小节介绍如何在个人PC上进行模型训练,您需要拥有以下硬件:
一台带有英伟达显卡的笔记本或台式机,安装Windows系统(如果您的电脑并不含有英伟达显卡,那么我们建议您使用云端进行模型训练。)
请安装Anaconda软件用来管理您的python环境。Anaconda有Windows,Max,Linux三个版本可以选择,请根据您的系统选择对应的版本。
安装VScode作为您的代码编辑软件。
使用anaconda创建我们训练模型要使用的环境:
下面打开Anaconda Propmt
输入以下命令,进入工作命令,激活环境,打开vscode(注意,将工作目录和环境名称替换成你自己的相应的名称)。
在Terminal里输入以下命令:
完成后输入
pip uninstall torch torchvision
卸载后安装GPU适用的torch版本
安装前请查看您显卡所安装的cuda驱动,安装对应cuda版本的pytorch及torchvision。例如,我的cuda版本高于12.1,所以我安装
这时你已经完成了模型训练所需的所有环境配置,下面就可以愉快的训练模型了😊。
训练模型需要执行以下命令:
其中,model为你所需要训练的模型路径,目前的Grove Vision V2只支持yolov8n.pt的部署,所以请选择yolov8n.pt。
data为模型训练所需训练集的路径,在这里我们使用一个很小的数据集作为测试,在本节的后面会讲解如何创建训练集进行训练。另外我们实现了coco数据集的自定义部分标签训练,您可以按照自己的喜好以及用途选择特定标签进行训练,实现更灵活的推理功能。
imgsz为模型输入接受的图像大小,这里必须为192
epochs为训练的次数,一般来说,训练次数越多,模型与数据拟合程度越好。
训练结束后,您可以在命令行显示的模型保存的位置找到您训练后的模型(例如我的模型保存在runs\detect\train3)
如果您的电脑不带有英伟达显卡,那么很可惜您无法在本地进行模型训练,不过您可以在云端进行模型训练,两种训练方法得到的模型效果是相同的。
我们使用ultralytics进行云端模型训练。以下是 Ultralytics HUB 的链接,打开链接,你就可以看到它的介绍和使用教程。
要使用 Ultralytics HUB,你需要一个 github 账户或谷歌账户或苹果账户。
ultralytics hub支持训练用户自己的数据集,如何制作并上传数据集请查看之后章节。
设置高级模型配置(Advanced Model Configuration),如果以后使用 Google Colab 进行模型训练,建议将 Epochs 改为 30,因为虽然 Google Colab 是免费的,但使用有时间限制,30 次训练约为 2 小时,正好在时间限制范围内。如果要在 Grove Vision V2 模块上部署模型,还需要将图像大小改为 192,这更符合我们的实际应用场景。
此外,使用 Google Colab 还需要 Google 邮箱。
如果您想要对开源数据集之外的标签进行检测,那么您需要自己制作数据集。数据集应该包括图像和对应标签。
下面是yolov8指定的数据集格式
我们使用Make Sense在线数据标注工具来完成训练集制作过程:
有关如何使用Make Sense,可以参考:
当您完成了数据集标签的标注,您需要将图像和标签数据合并起来,构成一个完整的数据集。
数据集需要满足以下格式:
您需要把Make Sense生成的标签数据拷贝到相应的位置。比如您标记了用于训练的标签数据,那么训练所需的图像应该位于images/train,而标签数据应该位于labels/train。另外您需要编写一个dataset.yaml文件。该文件需要放在dataset目录下,文件内容为:
(!注意:dataset.yaml命名要与文件夹命名相一致,否则数据集上传到ultralytics时会遇到问题)
names需要和Make Sense标注时的标签相对应。
如果您在本地进行训练,建议您将train,val,test的路径修改为绝对路径,而在云端训练则不需要。
到此步骤您已经可以使用制作好的数据集进行模型训练了,只需要将
中的“data=coco128.yaml”路径改为您制作的数据集中dataset.yaml即可。
如果您在云端进行训练,那么您需要将数据集上传到ultralytics hub上,上传过程非常简单:
这样Ultralytics HUB中就存有了您的数据集,您此时便可以使用您自己的数据集进行模型训练。
本节介绍如何利用Petoi提供的脚本工具,提取COCO数据集部分标签及数据进行训练。
下面是对COCO数据集的简要介绍:
COCO数据集总体约20G,整个数据集数据量大,标签多,能够做到对多达80个标签进行检测,但是相应的,检测的准确度有所下降,为了满足用户在不同场景下对模型识别种类和识别精度的取舍权衡,Petoi实现了对COCO数据集中任意数量的标签进行数据集重新制作。
下面将讲解如何制作属于您自己的COCO数据集。
将下列代码复制为复制为coco_download.py,脚本位于COCO数据集的目标位父目录。
执行:
python .\coco_download.py
如果您在下载的过程中发现由于网络不稳定或者其他原因没有办法完整下载COCO数据集,那么请手动下载COCO数据集并将压缩包解压到相应位置。
保证最后的数据集格式为:
使用下面的脚本对COCO数据集进行提取,可以命名为coco_remake.py
脚本运行前请将src_coco_path修改为COCO2017的路径,将dst_coco_path修改为DIY_COCO数据集的路径。将src_yaml_file修改为COCO2017官方YAML文件的路径,将dst_yaml_file修改为DIY_COCO的YAML文件路径。如果您的数据集是手动下载的,您还需要手动下载COCO.yaml。下载链接如下:
https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml
您可以将DIY_COCO的YAML文件写成如下样式,其中标签需要选取COCO数据集里本来就存在的标签。但是标签的顺序不必与COCO数据集相同,只需要从0开始计数即可。
该YAML文件包括了train和val两个目录的路径以及标签顺序和对应标签。对于本地训练,请使用绝对路径。对于云端训练,需要将该YAML文件修改为如下格式:
并且,在云端训练时,一定要遵从下面这种数据集的组织形式:
再结合模型训练部分的步骤,您就可以训练出属于您自己的基于COCO部分数据集的模型啦!