PaddleClas PaddleDetection使用总结
前言:关于环境搭建,我是在本地windows系统上,有3060GPU显卡,驱动和cuda版本都是适配显卡的。cuda版本是11.2。我装了conda 4.10.3,Python3.8.8 , 直接在base环境下pip install Paddlepaddle。
ref1: 智慧交通:基于PP-Vehicle的交通监控分析系统_副本 (baidu.com)
ref2: 智慧交通:基于PP-Vehicle的交通监控分析系统 - 飞桨AI Studio (baidu.com)
ref3: PaddleDetection/PPVehicle_QUICK_STARTED.md at develop · PaddlePaddle/PaddleDetection · GitHub (github地址)
ref4:
(1)打开Anaconda Prompt
(2)cd 到D:\yolov5train\PaddleDetection目录下
(3)输入下列命令:(下列命令一行输入完成,不要回车,否则会报错)
python deploy/pipeline/pipeline.py --config deploy/pipeline/config/examples/infer_cfg_illegal_parking.yml --video_file=images/car_test.mov --device=gpu --draw_center_traj --illegal_parking_time=3 --region_type=custom --region_polygon 600 300 1300 300 1300 800 600 800
上述(3)中 --config 为配置文件路径,根据本地下载好的模型文件路径更改配置文件的内容;–video_file为待检测视频名称,pipeline.py文件的85-87行可以修改为对应的其他文件参数如camera_id,rtsp;–region_polygon 如果作违停判断,需要写入违停区域;–illegal_parking_time设定判断违停时长。
python deploy/pipeline/pipeline.py --config deploy/pipeline/config/examples/infer_cfg_vehicle_attr.yml --video_file=images/car_test.mov --device=gpu --draw_center_traj
上述命令中,指定 配置文件路径,修改相应配置文件中指定模型路径,指定pipline.py运行的相关参数以达到相应文件或功能的实现。
ref: GitHub - PaddlePaddle/PaddleClas: A treasure chest for visual classification and recognition powered by PaddlePaddle (github源码下载地址)
ref: 智慧交通:基于PP-Vehicle的交通监控分析系统 - 飞桨AI Studio (baidu.com)
ref: https://github.com/PaddlePaddle/PaddleDetection/blob/develop/deploy/pipeline/docs/tutorials/PPVehicle_QUICK_STARTED.md
通过如下命令运行 ./PaddleClas-release-2.5/tools/train.py执行训练
export CUDA_VISIBLE_DEVICES=0,1,2,3
python3 -m paddle.distributed.launch --gpus="0,1,2,3" tools/train.py -c ./ppcls/configs/PULC/vehicle_attribute/PPLCNet_x1_0.yaml
上述命令中,-c ./ppcls/configs/PULC/vehicle_attribute/PPLCNet_x1_0.yaml 是对应训练所需的配置文件。
(1)配置文件路径:PaddleClas-release-2.5\ppcls\configs\PULC\vehicle_attribute\PPLCNet_x1_0.yaml
(2)配置文件需要修改的内容:
① 修改Arch下的class_num,对应属性总位数。
# model architecture
Arch:
name: "PPLCNet_x1_0"
pretrained: True
class_num: 19 # 对应属性总位数
② 修改训练数据路径:修改DataLoader中Train、Eval下的 image_root和cls_label_path。分别表示训练数据根路径和标注文件路径(注意:标注文件train_list.txt中的图片路径是相对于image_root目录的相对路径。)如下
# data loader for train and eval
DataLoader:
Train:
dataset:
name: MultiLabelDataset
image_root: "dataset/VeRi/" # 训练数据根路径
cls_label_path: "dataset/VeRi/train_list.txt" # 标注文件路径
label_ratio: True
transform_ops:
... ...
Eval:
dataset:
name: MultiLabelDataset
image_root: "dataset/VeRi/" # 验证数据根路径
cls_label_path: "dataset/VeRi/test_list.txt"
label_ratio: True
transform_ops:
③ 其他参数可以根据实际情况修改。
标注数据格式: 车辆属性模型采用VeRi数据集的属性,共计10种车辆颜色及9种车型, 具体如下:
# 车辆颜色
- "yellow"
- "orange"
- "green"
- "gray"
- "red"
- "blue"
- "white"
- "golden"
- "brown"
- "black"
# 车型
- "sedan"
- "suv"
- "van"
- "hatchback"
- "mpv"
- "pickup"
- "bus"
- "truck"
- "estate"
在标注文件中使用长度为19的序列来表示上述属性。例如:
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
训练完成后可以执行以下命令进行性能评估:
export CUDA_VISIBLE_DEVICES=0,1,2,3
python3 -m paddle.distributed.launch --gpus="0,1,2,3" tools/eval.py -c ./ppcls/configs/PULC/vehicle_attribute/PPLCNet_x1_0.yaml -o Global.pretrained_model=./output/PPLCNet_x1_0/best_model
如果模型性能达到预期,可以使用以下命令导出模型,就可以在PP-Vehicle中使用了。
python3 tools/export_model.py -c ./ppcls/configs/PULC/vehicle_attribute/PPLCNet_x1_0.yaml -o Global.pretrained_model=output/PPLCNet_x1_0/best_model -o Global.save_inference_dir=deploy/models/PPLCNet_x1_0_vehicle_attribute_model
在PP-Vehicle的配置文件中使用修改属性模型路径为刚导出的模型路径
配置文件路径:PaddleDetection\deploy\pipeline\config\infer_cfg_ppvehicle.yml
修改该配置文件中的 VEHICLE_ATTR 下的 model_dir 。
VEHICLE_ATTR:
model_dir: deploy/pipeline/ppvehicle/rec_word_dict.txt
batch_size: 8
color_threshold: 0.5
type_threshold: 0.5
enable: False