首页 树莓派——目标检测
文章
取消

树莓派——目标检测

前言

毕业设计终于进入新阶段了,上一个阶段除了遗留的一堆的bug,以及一堆屎山代码,基本达到了实现要求,后续再慢慢的改。而接下来的2个月里,将会探索基于树莓派实现人在床上的状态检测,检测内容分别为看书学习,玩手机,睡觉这三个内容,实话说我感到很焦虑,不知道这个方案能不能行得通,自己能不能搞得了。最主要的是开题报告将至,我得搜集足够多的资料,首先确保这个方案能够通过,然后在初步的试验一下能不能实现。期间还得多跟老师沟通沟通,取取经。

记录问bingyinggpt

我要做一个毕业设计,里面有一个功能,是类似于人脸识别的状态检测功能,检测人在床上的状态,是在看书学习,还是在玩手机,还是在睡眠,我该怎么办?我再这方面有一点点的基础,我希望在树莓派上面实现这个功能

1
2
3
4
5
6
7
8
9
10
11
你可以使用OpenCV库在树莓派上实现人脸识别的状态检测功能。以下是一些基本步骤12:

安装OpenCV:首先,你需要在树莓派上安装OpenCV库。

打开摄像头:接入USB摄像头或CSI摄像头到树莓派,然后通过命令行打开摄像头。

摄像头检测:为了检测摄像头是否成功接入,你可以运行一些命令来查看当前树莓派接入的设备。

人脸识别:使用OpenCV中的人脸检测和识别部分编程。你可以收集每个人的多张头像,加上标签,用tensorflow训练数据,生成一个训练好的文件,然后把这个文件用到树莓派上。

对于检测人在床上的状态,你可能需要训练一个模型来识别不同的状态(如看书学习,玩手机,睡眠等)。这可能需要收集一些训练数据,例如人在做这些活动时的照片或视频,然后使用这些数据来训练你的模型。

如果瑶瑶开始训练这么一个睡前状态检测模型,我需要做什么,请你帮我规划一下步骤及注意事项,还有涉及的知识点的简要总结,要足够的详细。我希望能够基本的实现功能,然后我才能改进功能。你要讲过程步骤详细的告诉我,然后像是教导高中生那样,简单易懂的解释为什么。步骤要足够的详细。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
好的,我会尽量让我的解释简单易懂。以下是训练一个睡前状态检测模型的步骤:

收集数据:首先,你需要收集一些数据,这些数据应该包括人在床上的各种状态(如看书学习,玩手机,睡眠等)。你可以使用摄像头来捕捉这些状态的图像或视频。请确保在收集数据时,遵守所有相关的隐私和伦理规定。

预处理数据:收集到数据后,你需要对其进行预处理。这可能包括裁剪图像以只包含感兴趣的部分(例如,床和在床上的人),调整图像大小以适应你的模型,以及可能的颜色或强度调整。

标记数据:然后,你需要标记你的数据。这意味着你需要为每个图像或视频帧指定一个标签,表示人的状态(例如,“看书”,“玩手机”或“睡觉”)。这可以手动完成,也可以使用一些半自动的工具来帮助你。

选择模型:接下来,你需要选择一个模型。对于图像分类任务,卷积神经网络(CNN)是一种常见的选择。你可以从头开始训练一个模型,也可以使用预训练的模型并对其进行微调。

训练模型:有了数据和模型后,你就可以开始训练了。你需要将你的数据分为训练集和测试集。训练集用于训练模型,而测试集用于评估模型的性能。

评估模型:训练完成后,你需要评估你的模型。这通常涉及到使用测试集来看模型的准确性如何,以及可能的混淆矩阵来看模型在每个类别上的表现。

部署模型:最后,如果你对你的模型的性能满意,你可以将其部署到树莓派上。这可能涉及到将模型转换为可以在树莓派上运行的格式,以及编写一些代码来在树莓派上运行模型。

如果我将这个模型训练出来了,并且还部署到了树莓派上面,是不是就可以对树莓派采集的人床上的照片进行识别了。

1
是的,你完全正确。一旦你的模型被训练并部署到树莓派上,它就可以开始对树莓派采集的图像进行分类了。这意味着,如果你的树莓派设备配置了摄像头,并且你已经编写了一些代码来捕获图像并将它们输入到你的模型中,那么你的模型就可以开始识别人在床上的状态了。然后,你可以根据模型的输出来执行一些操作,比如如果检测到人已经睡着,那么可以自动调整房间的灯光或者温度等。这就是你的模型可以做的事情。但是,请记住,任何AI模型都不是100%准确的,可能会有一些误报或漏报,所以在使用模型的过程中,需要注意这一点。祝你好运!

计划安排

1.搜索了解实现目标的途径方法资料,总结关键词 2.通过各种方法了解分类相关的途径,并作出总结,作出选择(如yolov5) 3.尝试实现。(先备份上传所有资料,然后删除一些无关的东西。然后用一张新的卡训练)

YOLOv5-Lite(方法一)

1
https://blog.csdn.net/black_sneak/article/details/131374492
  1. YOLOv5概述

YOLOv5 网络模型算是 YOLO 系列迭代后特别经典的一代网络模型,作者为:Glenn Jocher。部分学者可能认为YOlOv5的创新性不足,其是否称得上 YOLOv5 而议论纷纷。作者认为 YOLOv5 可以算是对 YOLO 系列之前的一次集大成者的总结和突破,其属于非常优秀经典的网络模型框架,各种网络结构和 trick 是非常值得借鉴的! 代码地址:ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite (github.com)

可考虑到实际情况,部署的本地机器通常并没有 PC 端那么计算能力强劲。这时候为了整体目标检测系统的稳定运行,往往需要牺牲掉网络模型的精度以换取足够快的检测速度。因此,轻量化部署的网络模型结构就此孕育而生

  1. YOLOv5-Lite训练

数据集制作

常规的神经网络模型训练是需要收集到大量语义丰富的数据集进行训练的。但是考虑实际工程下可能仅需要对已知场地且固定实物进行目标检测追踪等任务,这个时候我们可以采取偷懒的下方作者使用的方法!

1、作者使用树莓派4B的 Camera 直接在捕获需要识别目标物的图片信息(捕获期间转动待识别的目标物体);

2、将捕获到的待识别目标物照片传输到PC端,利用 Labelme 软件进行标注(Labelme不会使用的建议相关博客);

3、使用 JSON 转 txt 的 YOLO 格式 label 的python代码进行转换(可以直接使用作者提供的代码):

我们需要根据自己的需要自定义字典 dic_lab,字典中的 ratio = 0.9 的作用是将数据集拆分成训练集和验证集 9:1。读者朋友可以根据自己的实际情况去修改字典的标签内容,成功执行 lablemetoyolo.py 代码后效果如下:

labels文件夹下的标签成功转换了 YOLO 系列可以使用的 label 标签,到此时就已经成功准备好我们需要的训练集了!

特别说明:该方法仅适用于上述作者所说的场景下,实际情况下,建议大家还是使用合格的数据集进行训练(即目标与背景语义丰富的数据集),使得训练出来的神经网络具有良好的泛化性与鲁棒性,否则训练出来的网络很容易过拟合!

YOLOv5-Lite训练

Yolov5-Lite 训练就是常规的神经网络模型训练,我们从 GitHub 上下载 Yolov5-Lite 的源代码,训练平台为:PyCharm 2020.1 x64,GPU:RTX3060 6G,CPU:AMD Ryzen 7 5800H 3.2GHZ。

在 Yolov5-Lite 的目录下找到 train.py (训练文件)的 main 函数入口,进行如下配置:

1
2
3
4
5
6
7
8
我们设置如下几个核心配置:
--weights v5lite-s.pt
--cfg models/v5Lite-s.yaml
--data data/mydata.yaml
--img-size 320
--batch-size 16
--data data/mydata.yaml
device 0/cpu                        (可以不使用CUDA训练) ————————————————

读者朋友一定要将数据集存放的地址位置搞正确!!!

Yolov5-Lite 网络模型的训练可以不一定必须使用 CUDA 进行加速,但是 pytorch 架构等依赖库一定需要满足,模型训练依赖要求如下:

训练成功之后,将会在当前目录下的 run 文件下的 trian 文件下找到 expx (x代表数字),expx 则存放了第 x 次训练时候的各种数据内容,包括:历史最优权重best_weight,当前权重last_weight,训练结果result等等;

树莓派4B运行 Yolov5-Lite 网络模型进行目标检测需要依赖 OpenCV 等视觉Lib,读者朋友可以直接使用作者第一篇博客的配置。

博客地址:http://t.csdn.cn/jbHQm

ONNX概述

Open Neural Network Exchange(ONNX)是一个开放的生态系统,它使人工智能开发人员在推进项目时选择合适的工具,不用被框架或者生态系统所束缚。ONNX支持不同框架之间的互操作性,简化从研究到生产之间的道路。ONNX支持许多框架(TensorFlow, Pytorch, Keras, MxNet, MATLAB等等),这些框架中的模型都可以导出或者转换为标准ONNX格式。模型采用ONNX格式后,就可在各种平台和设备上运行。

开发者根据深度学习框架优劣选择某个框架,但是这些框架适应不同的开发阶段,由于必须进行转换,从而导致了研究和生产之间的重大延迟。ONNX格式一个通用的IR,能够使得开发人员在开发或者部署的任何阶段选择最适合他们项目的框架。ONNX通过提供计算图的通用表示,帮助开发人员为他们的任务选择合适的框架。

ONNX可视化:ONNX 模型可以通过 netron 进行可视化。

作者总结:

ONNX 顾名思义就是开放的神经网络模型转换,利用它可以轻松将模型更换框架,从而适配亦或是部署在各类设备上。

如今的开源 YOLO 系列神经网络模型的目录下作者都会预留 export.py 文件将该神经网络模型进行转换到 ONNX 模型,方便大家实际情况下部署使用!

运行 ONNX 格式的 YOLOv5-Lite 网络模型,需要在树莓派4B中安装 onnxruntim (可以直接使用作者提供的安装包),当然值得注意的是 onnxruntim 的安装需要依赖的 Numpy版本1.21 以上

1
https://blog.csdn.net/qq_44166630/article/details/119994949

我的环境 用来训练yolov5模型的电脑是win10系统,树莓派4B的系统是:2020-06-23-raspbian-buster-full(搭建好基本环境).img【32bit】

其实我yolov5模型的训练(.pt模型)和转换(转换成.onnx模型)都是在Google Colab上进行的。这是一个线上的IDE,帮你配置好了基本的环境,你可以直接用,即使没有第三方库自己安装也很方便,基本一条pip命令就行,不会出现本地配置环境时出现各种奇怪bug,大大节省时间。更NB的是它免费送你一块GPU,你可以直接用来训练模型,速度挺快的。但其实你在本地训练和转换模型也没问题。

https://blog.csdn.net/qq_44231797/article/details/133270195

等等

总结:优点:教程又多又全,很多人都实现了,并且还有官方的教程,十分亲民,可能两个月内就可以完成,缺点:可能fps较低,难度大、除了配置环境,还需要自己训练模型、工作量未知还没有保底,需要自己找一个模型同时实现手机书本人的识别、(不知道啥意思,似乎可能比较卡的样子,但我不需要实时检测,估计问题不大)(可信度:75%、难度:80%、成功率:67%)

https://zhuanlan.zhihu.com/c_1225385027342635008

tensorflow目标检测API项目ssd_mobilenet_v1_coco(方法二)

https://blog.csdn.net/Hankerchen/article/details/103561998

https://zhuanlan.zhihu.com/p/110290326

似乎这个更加简洁快速、直接使用官方训练的模型来用、然后目标检测人、手机、书本、若是同时出现手机和书本则判定为玩手机、若同时出现人和书本、则判定为学习、只出现人、且一动不动、则判定为睡觉、这各方案特别粗糙,但能做出来的可能性最大、并且似乎更容易(可信度:80%、难度:40%、成功率:80%)

学习了解完成的路线(方法三)

https://github.com/Sun-Yize/Deep-Learning-On-Raspberry-Pi-Zero

How to Set Up TensorFlow Object Detection on the Raspberry Pi

总结

树莓派和目标检测这个资料有很多,而且国外似乎也有着不少的资料,单单是TensorFlow那就有着官方的文档,有很多的硕士也用过树莓派做目标检测。我觉得我应该可以做出来…吧。

但阻碍我做出来的更多是恐惧吧,怕什么什么的,然后又担心搞这个会影响先前搞的,然后可能导致前面的用不了了。还有电脑磁盘快要满了,然后不方便训练模型啥的。太多的借口了。

1
2
3
4
问题:
1.电脑没空间了。
2.担心会影响了树莓派的环境,然后导致之前的用不了,还无法复现。这个糟糕场景想都不敢想会怎么样。
3.心态上患得患失、做不出来怎么办、做到最后没时间了怎么办、若是导致进度倒退怎么办

灵魂在闪烁,这是我要克服的问题。

1
2
3
1.花两到三天的时间、将所有东西重要资料备份,然后重新整理磁盘空间。同时还要将一些账号密码啥的记录下来,避免遗漏,导致麻烦。还要将树莓派的资料保存下来
2.重新整一张卡,然后用新的卡来做实验,先前的卡做备份。
3.心理建设、忧虑担心焦虑意为着对情况失去了掌控感,需要重新认识和定义情况,制定计划,以缓解负面情绪。灵魂的闪烁、那是对目前情况的及时反馈。

当然,上面的那些都是最坏的情况,目前而言,还是先稍微备份一下,然后再滕一腾空间,试试看能不能训练模型,能不能在树莓派上配置环境然后使用。

目前计划: 1.统计树莓派以及应用目标检测的模型。(论文、优缺点、资料多少) 2.备份资料、询问老师、然后稍微测试、 3.完成开题报告的撰写、

总结

根据关键词:树莓派、目标检测,拉取了最新的前,查阅了近10篇的期刊、发现近乎五分之四yolo的,两篇是ssd。然后硕士论文里,六篇里yolo也有两篇。估计这个方面的资料比较多。我内心也比较倾向去弄这个。便试着开始吧

本文由作者按照 CC BY 4.0 进行授权