【AI达人创造营】基于Edgeboard部署逃课检测系统
点人头神器来了,以后再也逃不了课了。
1.项目介绍
在前一个项目中我已经实现了对人头检测算法的开发和训练,使用的是PaddleX进行的开发,模型使用的YOLOv3作为检测模型进行人头计数。上次讲了桌面的部署,今天我们讲的是如何使用Edgeboard进行部署,我会从训练到部署全流程讲解如何使用Edgeboard部署该系统,另外我还总结了一些我在部署中遇到的问题希望对你有所帮助。
前两个项目:
效果展示
b站视频链接:https://b23.tv/FCLr0U
2.模型训练和导出
【遇到的问题】:我在部署Edgeboard之前PaddlePaddle使用的是2.1.2版本训练的,但部署的时候才知道Edgeboard部署暂时支持的PadddlePaddle版本是≤1.8.5,所以我必修修改环境再训练一次。由于本文重点是部署训练具体细节可以看我这篇文章。
模型训练
# pip安装PaddleX
!pip install paddlex==1.3.7
# 解压数据集到MyDataset文件夹中
!unzip data/data104969/SCUT_HEAD_Part_A_B.zip
# 数据划分
!paddlex --split_dataset --format VOC --dataset_dir MyDataset --val_value 0.2 --test_value 0.1
import paddlex as pdx
from paddlex.det import transforms
# 定义训练和验证时的transforms
# API说明 https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/det_transforms.html
train_transforms = transforms.Compose([
transforms.MixupImage(mixup_epoch=250), transforms.RandomDistort(),
transforms.RandomExpand(), transforms.RandomCrop(), transforms.Resize(
target_size=608, interp='RANDOM'), transforms.RandomHorizontalFlip(),
transforms.Normalize()
])
eval_transforms = transforms.Compose([
transforms.Resize(
target_size=608, interp='CUBIC'), transforms.Normalize()
])
# 定义训练和验证所用的数据集
# API说明:https://github.com/PaddlePaddle/PaddleX/blob/release/2.0-rc/paddlex/cv/datasets/voc.py#L29
train_dataset = pdx.datasets.VOCDetection(
data_dir='MyDataset',
file_list='MyDataset/train_list.txt',
label_list='MyDataset/labels.txt',
transforms=train_transforms,
shuffle=True)
eval_dataset = pdx.datasets.VOCDetection(
data_dir='MyDataset',
file_list='MyDataset/val_list.txt',
label_list='MyDataset/labels.txt',
transforms=eval_transforms,
shuffle=False)
【注意】一定查看官方支持的模型列表,不然也是白训练,我就因为这个问题训练了几个模型。
# 初始化模型,并进行训练
# 可使用VisualDL查看训练指标,参考https://github.com/PaddlePaddle/PaddleX/tree/release/2.0-rc/tutorials/train#visualdl可视化训练指标
num_classes = len(train_dataset.labels)
model = pdx.det.YOLOv3(num_classes=num_classes, backbone='MobileNetV1')
model.train(
num_epochs=241,
train_dataset=train_dataset,
train_batch_size=8,
eval_dataset=eval_dataset,
learning_rate=0.001 / 8,
warmup_steps=1000,
warmup_start_lr=0.0,
save_interval_epochs=1,
lr_decay_epochs=[216, 243, 275],
s=1,
lr_decay_epochs=[216, 243, 275],
save_dir='output/yolov3')
模型导出
模型训练后保存在output文件夹,如果要使用PaddleInference进行部署需要导出成静态图的模型,运行如下命令,会自动在output文件夹下创建一个inference_model的文件夹,用来存放导出后的模型。
参数 | 说明 |
---|---|
–export_inference | 是否将模型导出为用于部署的inference格式,指定即为True |
–model_dir | 待导出的模型路径 |
–save_dir | 导出的模型存储路径 |
–fixed_input_shape | 固定导出模型的输入大小,默认值为None |
使用TensorRT预测时,需固定模型的输入大小,通过--fixed_input_shape
来制定输入大小[w,h]。
!paddlex --export_inference --model_dir=output/yolov3/best_model --save_dir=output/inference_model --fixed_input_shape=[608,608]
3.部署准备
工欲善其事,必先利其器!我们在部署之前首先要准备相应的软硬件和具体的模型文件。具体可以参考Edgeboard的官网文档,你也可以跟着官方文档完成了PaddleX模型部署。
硬件准备
本项目使用的是FZ3B硬件,具体说明可见文档。
准备的硬件清单:FZ3B、电源线、Mini DP转HDMI线、网线、usb串口连接线、usb摄像头、TF卡
【遇到的问题】:如果你有一条HDMI线,想买一个Mini DP转HDMI的转接头,一定要买主动式的转接头(详见文档)!!!非主动式是显示不了的!当然如果你不在外接显示器显示的话可以不需要Mini DP转HDMI线。
【注意】usb串口连接线和网线与电脑连接,MiniDp线和显示器连接,摄像头与开发板连接。
软件准备
-
首先下载MobaXterm工具,负责串口连接和网口连接的命令操作,并且可以通过工具直接上传下载文件。
-
然后是进行网口连接设备通讯,可以参考官方文档
-
再一个是串口连接设备通讯,可以参考官方文档
-
使用MoboXterm配置串口和网口进行通讯
(1)串口连接在上面的官方文档中已经介绍了。
【注意】插上电源其实已经开机了,在你连接好所有硬件后,你可以通过再次点击开机键就会激发启动程序MobaXterm就有显示了。启动完成后输入用户名和密码root/root,即可进入设备系统。输入命令
startx
就可以在显示器上显示系统了。
(2)网口连接根据官方文档已经可以通过Windows PowerShell连接了,但是MobaXterm工具的好处就是可以进行ssh文件传输,非常方便。具体步骤如下:
登录直接输入root就行。
模型准备
本项目的输出和部署文件我已经上传到数据集中,自行下载就行。
生成的部署文件如下图所示:
- 首先需要下载output/inference_model文件夹和MyDataset/labels.txt文件到本地。其实所有部署都只需要下载以上标红的三个文件就可以了
- 将上方三个文件对应改名为,
model
、params
、label_list.txt
,另外还要配置一个config.json
文件。
{
"network_type":"YOLOV3",
"model_file_name":"model",
"params_file_name":"params",
"labels_file_name":"label_list.txt",
"format":"RGB",
"input_width":608,
"input_height":608,
"mean":[123.675, 116.28, 103.53],
"scale":[0.0171248, 0.017507, 0.0174292],
"threshold":0.3
}
- 具体根据官方的PaddleX模型部署文档修改文件。
4.Edgeboard管理系统部署
Edgeboard管理系统安装直接跟着文档进行安装就可(你硬件连接好后,可直接访问下方的出厂网址说不定已经安装了呢)。
用户在浏览器中输入设备管理系统首页地址,即可显示登录页面,登录完成后进入设备的管理页面。
管理系统出厂默认地址:http://192.168.1.254:8899/
管理系统初始账号和密码:Admin/admin
进入系统后你可以选择性的是否修改密码。
添加模型
模型添加如上图,唯一要讲的是模型的准备,其实就是我们上面配置好的四个文件,替换下载示例中的对应文件即可。
文件目录结构为:
headDet/ # 项目名
|--config/ # 配置文件夹
| |--config.json
|--model/ # 模型文件夹
| |--model
| |--params
| |--label_list.txt
【注意】config.json配置需要改以下,因为config.json和其他文件不在一个文件目录下,具体修改后如下(其实就是修改了模型的目录):
{
"network_type":"YOLOV3",
"model_file_name":"../model/model",
"params_file_name":"../model/params",
"labels_file_name":"label_list.txt",
"format":"RGB",
"input_width":608,
"input_height":608,
"mean":[123.675, 116.28, 103.53],
"scale":[0.0171248, 0.017507, 0.0174292],
"threshold":0.3
}
添加摄像头
摄像头配置也很简单,视频流地址即usb摄像头的位置,通过命令ls /dev/video*
可以查看,一般都是/dev/video0
。
摄像头添加模型
最后效果
点击查看监控可以显示最后效果
5. PaddleLiteDemo完成部署
【注意】如果你是先进行的管理系统部署,需要在管理界面把摄像头删掉,两个进程不能同时调用摄像头。
- 下载PaddleLiteDemo,我使用的是1.8.1版本的demo,其他版本可以在官方文档中查找
- 将
PaddleLiteDemo/res/models/detection/yolov3
中的文件替换为你刚才准备的四个文件,且config.json不需要修改,img文件夹中的图片修改为自己要预测的图片(并把名字改为示例中文件的名字,不然你还要去修改另外一个配置文件。)
- 将修改好的PaddleLiteDemo文件拖拽到edgeboard中的workspace文件夹中,如下图
单张图片预测
【注意】1.8.1版本的PaddleLiteDemo和其他版本有点区别,所用的命令有点点不一样,不过原理都是一样的。
Python预测
- 在Serial页面首先输入:
cd workspace/PaddleLiteDemo/Python
- 设置预测结果输出路径位置:
export PYTHONPATH=/home/root/workspace/PaddleLiteDemo/Python/
- 执行预测操作:
python3 detection.py ../configs/detection/yolov3/image.json
摄像头预测
Python预测
- 在Serial页面首先输入:
cd workspace/PaddleLiteDemo/Python
- 设置预测结果输出路径位置:
export PYTHONPATH=/home/root/workspace/PaddleLiteDemo/Python/
- 执行预测操作:
python3 detection.py ../configs/detection/yolov3/usb_camera.json
6.个人介绍
CSDN地址:https://blog.csdn.net/weixin_43267897?spm=1001.2101.3001.5343
Github地址:https://github.com/KHB1698
我在AI Studio上获得钻石等级,点亮6个徽章,来互关呀~ https://aistudio.baidu.com/aistudio/personalcenter/thirdview/791590
更多推荐
所有评论(0)