1.项目介绍

在前一个项目中我已经实现了对人头检测算法的开发和训练,使用的是PaddleX进行的开发,模型使用的YOLOv3作为检测模型进行人头计数。上次讲了桌面的部署,今天我们讲的是如何使用Edgeboard进行部署,我会从训练到部署全流程讲解如何使用Edgeboard部署该系统,另外我还总结了一些我在部署中遇到的问题希望对你有所帮助。

前两个项目:

可能逃不了课了!如何使用PaddleX来点人头?

可能逃不了课了——如何实现视频流预测和桌面软件部署!

效果展示

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文件到本地。其实所有部署都只需要下载以上标红的三个文件就可以了
  • 将上方三个文件对应改名为,modelparamslabel_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
}

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

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐