夏天就要到了,一起找个游泳池清凉一夏

转自AI Studio,原文链接:夏天就要到了,一起找个游泳池清凉一夏 - 飞桨AI Studio

基于PaddleX2.0的卫星图像游泳池检测

一、项目背景

夏天就要到了,炎热的夏天没个泳池怎么能行。这里介绍一种通过PaddleX2.0-PicoDet目标检测模型来快速在地图上找游泳池的方法。

二、PaddleX 介绍

PaddleX 集成飞桨智能视觉领域图像分类、目标检测、语义分割、实例分割任务能力,将深度学习开发全流程从数据准备、模型训练与优化到多端部署端到端打通,并提供统一任务API接口及图形化开发界面Demo。开发者无需分别安装不同套件,以低代码的形式即可快速完成飞桨全流程开发。PaddleX 经过质检、安防、巡检、遥感、零售、医疗等十多个行业实际应用场景验证,沉淀产业实际经验,并提供丰富的案例实践教程,全程助力开发者产业实践落地。

模型丰富: 包含目标检测、实例分割、人脸检测、关键点检测、多目标跟踪等250+个预训练模型,涵盖多种全球竞赛冠军方案。

使用简洁: 模块化设计,解耦各个网络组件,开发者轻松搭建、试用各种检测模型及优化策略,快速得到高性能、定制化的算法。

端到端打通: 从数据增强、组网、训练、压缩、部署端到端打通,并完备支持云端/边缘端多架构、多设备部署。

高性能: 基于飞桨的高性能内核,模型训练速度及显存占用优势明显。支持FP16训练, 支持多机训练。 

三、PP-PicoDet算法介绍

百度研发团队提出的全新轻量级系列模型PP-PicoDet,在移动端具有卓越的性能,成为全新SOTA轻量级模型。详细的技术细节可以参考我们的arXiv技术报告。

PP-PicoDet模型有如下特点:

  • 🌟 更高的mAP: 第一个在1M参数量之内mAP(0.5:0.95)超越30+(输入416像素时)。
  • 🚀 更快的预测速度: 网络预测在ARM CPU下可达150FPS。
  • 😊 部署友好: 支持PaddleLite/MNN/NCNN/OpenVINO等预测库,支持转出ONNX,提供了C++/Python/Android的demo。
  • 😍 先进的算法: 我们在现有SOTA算法中进行了创新, 包括:ESNet, CSP-PAN, SimOTA等等。目前

2.数据格式

目前PP-PicoDet支持 VOC 和 COCO 两种格式,可根据需要选择。

3.基线

模型输入尺寸mAPval
0.5:0.95
mAPval
0.5
参数量
(M)
FLOPS
(G)
预测时延NCNN
(ms)
预测时延Lite
(ms)
下载配置文件
PicoDet-S320*32027.141.40.990.738.136.65model | logconfig
PicoDet-S416*41630.745.80.991.2412.379.82model | logconfig
PicoDet-M320*32030.945.72.151.4811.279.61model | logconfig
PicoDet-M416*41634.850.52.152.5017.3915.88model | logconfig
PicoDet-L320*32032.948.23.302.2315.2613.42model | logconfig
PicoDet-L416*41636.652.53.303.7623.3621.85model | logconfig
PicoDet-L640*64040.957.63.308.9154.1150.55model | logconfig

更多的配置

模型输入尺寸mAPval
0.5:0.95
mAPval
0.5
参数量
(M)
FLOPS
(G)
预测时延NCNN
(ms)
预测时延Lite
(ms)
下载配置文件
PicoDet-Shufflenetv2 1x416*41630.044.61.171.5315.0610.63model | logconfig
PicoDet-MobileNetv3-large 1x416*41635.652.03.552.8020.7117.88model | logconfig
PicoDet-LCNet 1.5x416*41636.352.23.103.8521.2920.8model | logconfig
PicoDet-LCNet 1.5x640*64040.657.43.10---model | logconfig
PicoDet-R18640*64040.757.211.10---model | logconfig

注意事项:

  • 时延测试: 我们所有的模型都在骁龙865(4xA77+4xA55) 上测试(4线程,FP16预测)。上面表格中标有NCNN的是使用NCNN库测试,标有Lite的是使用Paddle Lite进行测试。 测试的benchmark脚本来自: MobileDetBenchmark。
  • PicoDet在COCO train2017上训练,并且在COCO val2017上进行验证。
  • PicoDet使用4卡GPU训练(PicoDet-L-640使用8卡训练),并且所有的模型都是通过发布的默认配置训练得到。

其他模型的基线

模型输入尺寸mAPval
0.5:0.95
mAPval
0.5
参数量
(M)
FLOPS
(G)
预测时延NCNN
(ms)
YOLOv3-Tiny416*41616.633.18.865.6225.42
YOLOv4-Tiny416*41621.740.26.066.9623.69
PP-YOLO-Tiny320*32020.6-1.080.586.75
PP-YOLO-Tiny416*41622.7-1.081.0210.48
Nanodet-M320*32020.6-0.950.728.71
Nanodet-M416*41623.5-0.951.213.35
Nanodet-M 1.5x416*41626.8-2.082.4215.83
YOLOX-Nano416*41625.8-0.911.0819.23
YOLOX-Tiny416*41632.8-5.066.4532.77
YOLOv5n640*64028.446.01.94.540.35
YOLOv5s640*64037.256.07.216.578.05

四、项目具体内容


该项目内容主要包括环境的配置,数据的准备,配置文件的修改,模型训练,模型评估,模型推理测试等

In [ ]

!unzip -oq /home/aistudio/data/data147252/Annotations.zip -d work/

4.1环境配置


安装PaddleX的依赖,这里使用的Paddle版本为paddlepaddle-gpu2.3

In [1]

!pip install paddlex

4.2划分数据集


由于相关的数据集较少,数据集里面包括156张包含泳池的卫星图像图片,使用Labelme进行标注,生成voc格式数据集。

只需要下面一行代码就可以将数据集进行划分

In [ ]

!paddlex --split_dataset --format voc --dataset_dir work/ --val_value 0.2
2022-05-18 11:24:42 [INFO]	Dataset split starts...
2022-05-18 11:24:42 [INFO]	Dataset split done.
2022-05-18 11:24:42 [INFO]	Train samples: 125
2022-05-18 11:24:42 [INFO]	Eval samples: 31
2022-05-18 11:24:42 [INFO]	Test samples: 0
2022-05-18 11:24:42 [INFO]	Split files saved in work/

4.3开始训练

In [ ]

import paddlex as pdx
from paddlex import transforms as T# 定义训练和验证时的transforms
# API说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/transforms/transforms.md
train_transforms = T.Compose([T.RandomCrop(), T.RandomHorizontalFlip(), T.RandomDistort(),T.BatchRandomResize(target_sizes=[576, 608, 640, 672, 704], interp='RANDOM'), T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])eval_transforms = T.Compose([T.Resize(target_size=640, interp='CUBIC'), T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])# 定义训练和验证所用的数据集
# API说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/datasets.md
train_dataset = pdx.datasets.VOCDetection(data_dir='work/',file_list='work/train_list.txt',label_list='work/labels.txt',transforms=train_transforms,shuffle=True)eval_dataset = pdx.datasets.VOCDetection(data_dir='work/',file_list='work/val_list.txt',label_list='work/labels.txt',transforms=eval_transforms,shuffle=False)# 初始化模型,并进行训练
# 可使用VisualDL查看训练指标,参考https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/visualdl.md
num_classes = len(train_dataset.labels)
model = pdx.det.PicoDet(num_classes=num_classes, backbone='ESNet_l')# API说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/models/detection.md
# 各参数介绍与调整说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/parameters.md
model.train(num_epochs=100,train_dataset=train_dataset,train_batch_size=16,eval_dataset=eval_dataset,pretrain_weights='COCO',learning_rate=.01,warmup_steps=24,warmup_start_lr=0.005,save_interval_epochs=1,lr_decay_epochs=[6, 8, 11],use_ema=True,save_dir='output/picodet_esnet_l',use_vdl=True)
2022-05-18 11:36:13 [INFO]	Start to evaluate(total_samples=31, total_steps=31)...
2022-05-18 11:36:15 [INFO]	Accumulating evaluatation results...
2022-05-18 11:36:15 [INFO]	[EVAL] Finished, Epoch=100, bbox_map=98.818871 .
2022-05-18 11:36:15 [INFO]	Current evaluated best model on eval_dataset is epoch_53, bbox_map=99.45796500418349
2022-05-18 11:36:15 [INFO]	Model saved in output/picodet_esnet_l/epoch_100.

4.4训练结果可视化

最终训练结果map=98.82,训练的效果非常不错

4.5模型测试

使用模型进行预测,同时使用pdx.det.visualize将结果可视化,可视化结果将保存到./output/picodet_esnet_l下,其中threshold代表Box的置信度阈值,将Box置信度低于该阈值的框过滤不进行可视化。

In [2]

import paddlex as pdx
model = pdx.load_model('output/picodet_esnet_l/best_model')
image_name = 'work/31.jpg'
result = model.predict(image_name)
pdx.det.visualize(image_name, result, threshold=0.5, save_dir='./output/')

4.6模型测试结果可视化

通过预测结果可以发现模型很好地检测出了游泳池

五、项目总结

1、PaddleX2.0将强大的目标检测算法PicoDet集成在内,大大方便了开发者的模型训练,本项目提供的Baseline很好地展示了这一强大功能,非常推荐各位小伙伴使用!

2、在模型部署方面,PaddleX2.0同样提供了C++ inference部署方案,在GitHub中提供了C#部署Demo,欢迎大家学习参考https://github.com/PaddlePaddle/PaddleX

请点击此处查看本环境基本用法.
Please click here for more detailed instructions.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部