基于Paddle Paddle的火灾检测项目

Paddle Paddle是一个集成多种功能的深度学习开发工具。本项目基于Paddle Paddle核心框架,使用Paddlex、Paddle inference等工具进行模型的训练以及部署。最终在jetson nano上部署了训练好的PPYOLOv2模型,检测速度大约在7~8帧左右。

目录

  • 基于Paddle Paddle的火灾检测项目
    • 使用paddlex进行模型训练、预测及评估
      • 环境准备
      • 数据集
      • 训练、评估及预测
      • 本地部署
    • 使用Paddle inference在Jetson Nano上部署模型
      • 安装Paddle Paddle
      • 用PaddleX导出静态模型
      • Paddle inference API接口(PYTHON)
      • 官方文档汇总

使用paddlex进行模型训练、预测及评估

环境准备

因为在本地训练需要大量GPU资源,所以本项目在训练中采用在云上训练的方式。AI Studio是飞桨的在线云平台,提供所有的Paddle Paddle环境资源以及16G、32G的GPU资源进行训练。这里提供一个基于Paddlex的项目以便了解AI Studio的配置及使用: https://aistudio.baidu/aistudio/projectdetail/442375?channelType=0&channel=0.其中包含了Paddlex的云上配置。

数据集

数据集的格式需要按照Paddlex官方指定的格式生成,官方格式说明链接: https://github/PaddlePaddle/PaddleX/blob/develop/docs/data/format/README.md.

训练、评估及预测

环境准备的链接中其实已经包含了完整的训练、预测等代码,但这里我用的是PPYOLOv2,并非YOLOv3,因此其中用来训练的代码需要进行修改。
训练的代码如下,主要是对训练参数的修改。训练参数说明可以查看这个文档链接: https://github/PaddlePaddle/PaddleX/blob/develop/docs/parameters.md.

num_classes = len(train_dataset.labels)
model = pdx.det.PPYOLOv2(num_classes=num_classes, backbone='ResNet50_vd_dcn') #指定训练的模型为ppyolov2,骨干网络为ResNet50_vd_dcn
model.train(
    num_epochs=170, #训练轮数
    train_dataset=train_dataset, #数据集
    train_batch_size=16, #一个batch训练多少张图片
    eval_dataset=eval_dataset, #验证集
    pretrain_weights='COCO', #预训练模型
    learning_rate=0.005 / 6, #学习率
    warmup_steps=1000, 
    warmup_start_lr=0.0, 
    lr_decay_epochs=[105, 135, 150], #在指定数值学习率衰减
    save_interval_epochs=5, #每5轮保存一次模型
    save_dir='output/ppyolov2_r50vd_dcn')

本地部署

Paddlex的本地部署较为简单,先安装Paddle Paddle,再安装PaddleX即可。下面给出官方安装PaddleX的文档链接: https://github/PaddlePaddle/PaddleX/blob/develop/docs/install.md#1-paddlex-api%E5%BC%80%E5%8F%91%E6%A8%A1%E5%BC%8F%E5%AE%89%E8%A3%85.

使用Paddle inference在Jetson Nano上部署模型

Paddle inference是Paddle Paddle的原生推理库,并且它是包含在Paddle Paddle内的,因此只要安装Paddle Paddle即可使用。

安装Paddle Paddle

Jetson系列的Paddle Paddle安装需要先下载安装包,链接如下链接: https://paddle-inference.readthedocs.io/en/master/user_guides/download_lib.html.
安装需要pip3安装工具,如果没有安装pip3则参考以下链接链接: https://blog.csdn/qintaiwu/article/details/89393028.安装完成后即可,可以通过import paddle来验证安装是否成功,在我import的时候遇到过six包版本过低的情况,这时候需要卸载six包后重新安装。

用PaddleX导出静态模型

由于训练好的模型格式与推理需要的格式并不一样,所以这里需要进行转换,转换方法可以参考下面的链接链接: https://github/PaddlePaddle/PaddleX/blob/develop/docs/apis/export_model.md.

Paddle inference API接口(PYTHON)

安装完成后,则可以通过Paddle inference的API接口进行模型的推理,官方文档如下https://paddle-inference.readthedocs.io/en/master/api_reference/python_api_index.html.官方文档中也有很多部署的例子,但大多是推理图像分类网络的,我在官方GitHub文档中找到一个YOLOv3推理的例子,链接如下: https://github/PaddlePaddle/Paddle-Inference-Demo/tree/master/python/yolov3.按照这个模改一下就可以用在自己的模型上了。
最后是推理代码开发中一些重要的点,首先是GPU和tensorrt的使用需要在config中设定,具体接口可以查看文档。其次是模型的输入,YOLO系列模型的输入tensor一般来说有三个,但官方给的分类模型输入只有一个,这个bug困扰了我很久,另外输出的tensor也需要经过处理才能得到最后的结果,具体的细节请仔细阅读上面的例子,包括图像预处理也包含很多细节。

官方文档汇总

PaddleX官方文档链接: https://paddlex.readthedocs.io/zh_CN/release-1.3/quick_start.html.(包含jetson部署等资料)

PaddleX GitHub文档链接: https://github/PaddlePaddle/PaddleX/tree/develop.

Paddle inference官方文档链接: https://paddle-inference.readthedocs.io/en/master/product_introduction/summary.html.(包含部署所需的预测库,API接口等)

Paddle inference demo链接(Python版本): https://github/PaddlePaddle/Paddle-Inference-Demo/tree/master/python.(内含目标检测的推理demo,官方文档中只有分类模型的推理样例)

Paddle Paddle官方云平台链接: https://aistudio.baidu/aistudio/index.

更多推荐

基于Paddle Paddle的火灾检测项目