项目介绍
硬件框图
主要代码片段及原理说明机器学习的原理
Read more使用XIAO ESP32S3 Sense开发板对宠物进行识别
设计思路该项目使用到机器学习的相关技术,所以需要进行数据收集与预处理,特征提取,模型训练,评估与优化和应用几大步骤。
- 给XIAO ESP32S3 Sense开发板烧录拍照的程序,使其发送指令进行拍照,从而采集图像,获得原始数据。
- 📷
- 使用roboflow平台对图片进行预处理,如压缩图像等,同时给图片数据打标签。然后导出数据集为链接形式,供其他程序调用。
- 进行模型训练,使用百度AI Stduio 中的ModelAssisant 来进行辅助开发,使用优化的YOLOv5-Tiny Model来进行训练,然后到处对应的tensorflow lite文件
- 使用SenseCraft 将模型部署到XIAO ESP32S3上
效果展示:
- 数据收集与预处理:首先,需要收集大量的图片数据,这些数据将被用来训练模型。数据预处理包括调整图片大小、归一化、增强等,以提高模型的训练效果。
- 特征提取:机器学习模型需要从图片中提取有用的信息(特征)。在早期的方法中,如卷积神经网络(CNN)之前,这些特征通常需要手动选择。而现代的深度学习方法,特别是CNN,能够自动从图像中学习到复杂的特征。
- 模型训练:使用已标记的数据集训练模型。在训练过程中,模型会不断调整其内部参数,以最小化预测结果和实际标签之间的差异。这个过程通常需要大量的计算资源。
- 评估与优化:在模型训练完成后,使用一组未在训练中使用的图片(测试集)来评估模型的性能。根据评估结果,可能需要对模型进行进一步的调整和优化。
- 应用:一旦模型被训练并验证了其性能,它就可以被用来识别新的图片。在识别过程中,模型会分析图片的特征,并基于其训练数据来预测图片的内容或类别。
采集图像的代码,使用的是官方的take_photos例程来进行修改,只修改了loop函数内的部分内容,原始的代码是每2秒自动进行拍照,并将照片储存到内存卡中,现在修改为当串口收到'1'时拍一张照片。
void loop() {
// Camera & SD available, start taking pictures
if(camera_sign && sd_sign){
// Get the current time
unsigned long now = millis();
//If it has been more than 1 minute since the last shot, take a picture and save it to the SD card
//if ((now - lastCaptureTime) >= 60000)
char ch = Serial.read();
if(ch=='1')
{
Serial.println(ch);
char filename[32];
sprintf(filename, "/image%d.jpg", imageCount);
photo_save(filename);
Serial.printf("Saved picture: %s\r\n", filename);
Serial.println("Photos will begin in one minute, please be ready.");
imageCount++;
lastCaptureTime = now;
}
}
}
模型训练使用默认配置进行训练
!python tools/train.py \
configs/swift_yolo/swift_yolo_tiny_1xb16_300e_coco.py \
--cfg-options \
epochs=10 \
num_classes=${NUM_CLASSES} \
workers=1\
imgsz=192,192 \
data_root=${DATA_ROOT} \
load_from=https://files.seeedstudio.com/sscma/model_zoo/detection/person/person_detection.pth
模型导出和优化将YOLOv5-Tiny PyTorch模型导出到TFLite模型
!python tools/export.py \
configs/swift_yolo/swift_yolo_tiny_1xb16_300e_coco.py \
$(cat work_dirs/swift_yolo_tiny_1xb16_300e_coco/last_checkpoint) \
--cfg-options \
data_root=${DATA_ROOT} \
num_classes=${NUM_CLASSES} \
imgsz=192,192
遇到的主要难题及解决方法遇到的问题:对机器学习整套流程不清楚,导致学习的时候一头雾水,没有一个大致的框架。
解决方法:去百度和B站以及博客查找了一些资料,了解了机器学习的原理,并动手实践。
未来的计划目前的项目仅做到了目标检测识别功能,后续的控制算法还没有进行研究,所以,后期会将二者融为一体进行开发,设计出更多有意思的小项目。
Comments