一、问题描述
共包含3类:0:'head', 1:'helmet', 2:'person' 提交格式要求,提交名为pred_result.txt的文件:每一行代表一个目标,每一行内容分别表示 图像名 置信度 xmin ymin xmax ymax 类别
二、环境配置
paddlepaddle平台
算力尽量选择高一些的,跑模型花的时间少一些
主要应用了paddleX以及 PaddleDetection-2.5.0,paddleX主要用在了数据分割,数据增强等数据预处理的过程中;PaddleDetection-2.5.0中选择了一个模型,没能完全运行完,
模型文件(包含完整路径)为
/home/aistudio/PaddleDetection-2.5.0/configs/yolox/yolox_cdn_tiny_300e_coco.yml,我跑了40epoch,共300epoch,跑完大概需要六七个小时,时间充裕建议跑完
我的数据集存储路径:
三、数据预处理,导库
导库
!pip install paddlex
!pip show paddlex
分割数据集
!paddlex --split_dataset --format VOC --dataset_dir /home/aistudio/helmet-dataset/train --val_value 0.15
此时可能归遇到的问题:
这时需要运行
!pip install --upgrade pip
!pip install --user --upgrade pyarrow==11.0.0
之后就可以成功运行上面分割数据集的代码啦
运行结果截图
建议代码生成上述文件,不要自己创建,这是一种人工智能领域常用的文件格式:VOC
安装paddledetection
安装结果会显示在paddle paddle环境左侧主页面中
四、数据增强
import paddlex as pdx
dataset = pdx.datasets.VOCDetection(
data_dir='/home/aistudio/helmet-dataset/train',
file_list='/home/aistudio/helmet-dataset/train/train_list.txt',
label_list='/home/aistudio/helmet-dataset/train/labels.txt',
transforms=pdx.transforms.Compose([
pdx.transforms.MixupImage(mixup_epoch=-1),
pdx.transforms.RandomDistort(),
pdx.transforms.RandomExpand(),
pdx.transforms.RandomCrop(),
pdx.transforms.RandomHorizontalFlip(),
pdx.transforms.BatchRandomResize(
target_sizes=[320, 352, 384, 416, 448, 480, 512, 544, 576, 608],
interp='RANDOM'
),
pdx.transforms.Normalize(
mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]
)
])
)
# 评估时的数据增强
eval_dataset = pdx.datasets.VOCDetection(
data_dir='/home/aistudio/helmet-dataset/train',
file_list='/home/aistudio/helmet-dataset/train/val_list.txt',
label_list='/home/aistudio/helmet-dataset/train/labels.txt',
transforms=pdx.transforms.Compose([
pdx.transforms.Resize(
target_size=480, interp='CUBIC'
),
pdx.transforms.Normalize(
mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]
)
])
)
注意根据自己的数据集存储位置修改路径
运行结果
五、修改配置文件
在paddledetection中有些决定模型各类参数的yml文件,需要对这些文件做一定修改,以保证模型训练成功
我的修改路径:/home/aistudio/PaddleDetection-2.5.0/configs/datasets/voc.yml
修改后的版本:红色荧光笔标注处为重点修改路径
修改路径:/home/aistudio/PaddleDetection-2.5.0/configs/runtime.yml
修改路径:/home/aistudio/PaddleDetection-2.5.0/configs/yolox/yolox_cdn_tiny_300e_coco.yml
修改后的版本:
六、开始训练
import paddle
# 切换到 PaddleDetection 目录
%cd /home/aistudio/PaddleDetection-2.5.0/
# 训练模型,并启用 VisualDL 和评估
#!python -u tools/train.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml --use_vdl=True --vdl_log_dir=/home/aistudio/work --eval
!export CUDA_VISIBLE_DEVICES=0,1,2,3
!python -u tools/train.py -c configs/yolox/yolox_tiny_300e_coco.yml --use_vdl=True --vdl_log_dir=/home/aistudio/work --eval --resume /home/aistudio/PaddleDetection-2.5.0/output/yolox_tiny_300e_coco/19.pdparams
这里是我训练到第19轮后中断了一下,选择继续训练
训练过程截图
这里有恢复训练的日志显示
信息分析:
这段日志是来自于一个使用PaddleDetection(PPDet)框架进行目标检测任务时的输出。PaddleDetection是PaddlePaddle深度学习框架下的一个目标检测工具箱。从日志中,我们可以提取以下信息:
- 保存检查点(Checkpoint):
- 时间戳 [05/20 20:45:55] 显示了保存检查点的时刻。
- ppdet.utils.checkpoint INFO: Save checkpoint: output/yolox_tiny_300e_coco 表示检查点文件被保存在了 output/yolox_tiny_300e_coco 这个路径下。检查点文件通常包含了模型训练时的参数和状态,可以用于之后的继续训练或模型评估。
- 评估迭代(Eval Iteration):
- [05/20 20:45:57] ppdet.engine INFO: Eval iter: 0 表明评估过程开始了,并且这是第一个评估迭代。
- 评估结果:
- [05/20 20:46:24] ppdet.metrics.metrics INFO: Accumulating evaluatation results... 表明正在收集评估结果。
- [05/20 20:46:25] ppdet.metrics.metrics INFO: mAP(0.50, 11point) = 84.38% 显示了在IoU阈值为0.5,采用11点插值法(PASCAL VOC的标准)计算出的mAP(平均精度均值)为84.38%。这是一个表示模型性能的指标。
- 样本数量和帧率:
- [05/20 20:46:25] ppdet.engine INFO: Total sample number: 600, averge FPS: 21.286932199614828 说明了评估过程中总共使用了600个样本,并且平均每秒处理的帧数为21.29帧。
- 最佳测试bbox AP:
- [05/20 20:46:25] ppdet.engine INFO: Best test bbox ap is 0.844. 表明到目前为止,在测试集上得到的最佳bbox(边界框)AP(平均精度)是0.844。
- 再次保存检查点:
- [05/20 20:46:26] ppdet.utils.checkpoint INFO: Save checkpoint: output/yolox_tiny_300e_coco 在评估完成后,可能由于达到了某个条件(如最佳AP)或设置,系统再次保存了检查点文件。
从日志中可以看出,使用YOLOX Tiny模型在COCO数据集上进行了训练和评估,并且模型表现良好,达到了84.38%的mAP。
七、结果展示
预测代码
%cd /home/aistudio/PaddleDetection-2.5.0/
!python tools/infer.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml -o weights=/home/aistudio/PaddleDetection-2.5.0/output/yolov3_darknet53_270e_voc/best_model.pdparams --infer_img=/home/aistudio/helmet-dataset/test/images/hard_hat_workers1013.png
选择一张图片预测
模型和预测结果都被保存在output文件夹下
路径:/home/aistudio/PaddleDetection-2.5.0/output/hard_hat_workers1013.png
预测结果如图: