【人工智能项目】基于paddlepaddle平台的安全帽检测比赛

一、问题描述

共包含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深度学习框架下的一个目标检测工具箱。从日志中,我们可以提取以下信息:

  1. 保存检查点(Checkpoint)
    • 时间戳 [05/20 20:45:55] 显示了保存检查点的时刻。
    • ppdet.utils.checkpoint INFO: Save checkpoint: output/yolox_tiny_300e_coco 表示检查点文件被保存在了 output/yolox_tiny_300e_coco 这个路径下。检查点文件通常包含了模型训练时的参数和状态,可以用于之后的继续训练或模型评估。
  2. 评估迭代(Eval Iteration)
    • [05/20 20:45:57] ppdet.engine INFO: Eval iter: 0 表明评估过程开始了,并且这是第一个评估迭代。
  3. 评估结果
    • [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%。这是一个表示模型性能的指标。
  4. 样本数量和帧率
    • [05/20 20:46:25] ppdet.engine INFO: Total sample number: 600, averge FPS: 21.286932199614828 说明了评估过程中总共使用了600个样本,并且平均每秒处理的帧数为21.29帧。
  5. 最佳测试bbox AP
    • [05/20 20:46:25] ppdet.engine INFO: Best test bbox ap is 0.844. 表明到目前为止,在测试集上得到的最佳bbox(边界框)AP(平均精度)是0.844。
  6. 再次保存检查点
    • [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

预测结果如图:

  • 34
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
安全帽检测是一种常见的计算机视觉应用,可以用于工业安全和交通安全等领域。基于 OpenCV 的安全帽检测可以通过以下步骤实现: 1. 导入 OpenCV 库和其他必要的库。 2. 加载输入图像并将其转换为灰度图像。 3. 使用 Haar 级联分类器检测人脸,并将检测到的人脸区域保存。 4. 在人脸区域内使用 Haar 级联分类器检测安全帽,并将检测到的安全帽区域保存。 5. 绘制边界框和标签,以显示检测结果。 6. 显示输出图像或保存输出图像。 以下是一个基于 OpenCV 的安全帽检测的 Python 示例代码: ```python import cv2 import numpy as np # 加载 Haar 级联分类器 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') helmet_cascade = cv2.CascadeClassifier('haarcascade_helmet.xml') # 加载输入图像 img = cv2.imread('test.jpg') # 将图像转换为灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 使用 Haar 级联分类器检测人脸 faces = face_cascade.detectMultiScale(gray, 1.3, 5) # 在人脸区域内使用 Haar 级联分类器检测安全帽 for (x,y,w,h) in faces: roi_gray = gray[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] helmets = helmet_cascade.detectMultiScale(roi_gray, 1.3, 5) for (hx,hy,hw,hh) in helmets: cv2.rectangle(roi_color,(hx,hy),(hx+hw,hy+hh),(0,255,0),2) cv2.putText(roi_color, 'Helmet', (hx, hy-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (36,255,12), 2) # 显示输出图像 cv2.imshow('img',img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 注意:在使用此代码之前,需要先下载并安装 Haar 级联分类器模型。可以从 OpenCV 官方网站下载预训练模型,或者使用已经训练好的模型。在上面的示例中,我们使用了两个模型:`haarcascade_frontalface_default.xml` 和 `haarcascade_helmet.xml`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值