0

0

飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别

P粉084495128

P粉084495128

发布时间:2025-07-16 15:01:51

|

422人浏览过

|

来源于php中文网

原创

本文介绍如何用PaddleX参与极市计算机视觉开发者榜单大赛的安全帽检测任务。先简述大赛及新手任务,再说明参赛步骤,包括环境配置(因无内置PaddlePaddle镜像需自定义)、用PaddleX编写训练和测试代码并运行,以完成比赛流程。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别 - php中文网

1. 引入

  • Paddle 框架拥有众多好用的模型库和算法套件,比如 PaddleDetection、PaddleSeg、PaddleClas、PaddleX 等等

  • 这些工具都是算法比赛中的利器,利用他们可以快速的搭建一个基准程序跑通比赛流程,后期的优化调参也比较方便

  • 本次就介绍如何使用 PaddleX 挑战一个简单的安全帽检测比赛

2. 参考资料

  • 轻松上手安全帽检测

  • PaddleX 安全帽检测

  • 极市 CVMart

  • ECV2022 极市计算机视觉开发者榜单大赛

3. 极市计算机视觉开发者榜单大赛

3.1 简介

  • 极市计算机视觉开发者榜单大赛自 2018 年首次举办以来,至今已成功举办四届赛事

  • 随着赛事的逐年升级,极市计算机视觉开发者榜单大赛的影响力也在逐步提升,如今已逐渐成为最受瞩目的 AI 大赛之一

  • 2022 极市计算机视觉开发者榜单大赛(以下简称 ECV-2022)将聚焦于计算机视觉领域的前沿科技与应用创新,全面升级赛制

  • 大赛采取多赛题并行的竞赛形式,提供真实场景数据集、免费云端算力支持、便捷在线训练系统、OpenVINO 工具套件等

  • 帮助参赛者全程线上无障碍开发、加速模型推理,真正实现在线编码训练、模型转换、模型测试等一站式竞赛体验

  • 大赛主页:ECV2022 极市计算机视觉开发者榜单大赛

3.2 比赛任务

  • 本次比赛包含如下多个赛道:

    飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别 - php中文网

3.3 比赛奖项

  • 各个赛道的奖项设置如下:

    飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别 - php中文网飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别 - php中文网

4. 参加比赛

  • 参加该比赛需要首先完成一项新手任务——安全帽识别

4.1 参赛步骤

  1. 比赛官网 -> 下滑新手任务 -> 报名 -> 开发环境

  2. 创建实例 -> 等待启动完成 -> 选择在线编码 -> VSCode -> 确定 -> 进入编码环境

    飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别 - php中文网

  3. 在编码环境中编写训练代码,并将代码保存于 /project/train/src_repo 目录中

  4. 回到之前的页面,选择训练任务 -> 新建训练任务 -> 使用命令运行训练代码 -> 等待模型训练完成

    飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别 - php中文网

  5. 在编码环境中编写测试代码,并将代码保存于 /project/ev_sdk/src 目录中

  6. 回到之前的页面,选择测试任务 -> 发起标准模型测试 -> 等待测试完成 -> 获取任务得分

    飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别 - php中文网

5. 环境配置

  • 极市平台上内置了众多深度学习框架(Pytorch / TensorFlow / MXNet / OpenVino / DarkNet 等)的镜像

  • 不过很遗憾目前并没有内置 PaddlePaddle 框架的镜像,所以只能自己动手丰衣足食了

    多面-AI面试
    多面-AI面试

    猎聘推出的AI面试平台

    下载
  • 目前最好的方式是通过平台的自定义开发环境的方法,修改一个 PaddlePaddle 框架的镜像

  • 注:此配置方法比较简单,目前未经过严格测试,可能会存在一些问题

5.1 配置步骤

  1. 极市官网 -> 右上角头像 -> 个人中心 -> 开发环境管理 -> 新建开发环境

    飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别 - php中文网

  2. 输入名称 -> 基础环境 pytorch1.10.0 -> 输入描述 -> 生成

    飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别 - php中文网

  3. 选择刚刚创建的环境,点击启动实例 -> 等待启动完成 -> 选择在线配置 -> 选择 VSCode -> 确定

  4. 进入环境后 -> 使用快捷键 Ctrl + J 打开命令行窗口

    飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别 - php中文网

  5. 拷贝如下每一行代码至命令行窗口 -> 依次运行代码安装 PaddlePaddle 框架及依赖程序

    $ apt-get update
    
    $ apt-get install -y --allow-change-held-packages libcudnn8=8.1.1.33-1+cuda11.2 libcudnn8-dev=8.1.1.33-1+cuda11.2
    
    $ pip install paddlepaddle-gpu==2.3.0.post112 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
  6. 等待所有代码执行完毕,回到开发环境管理页面,点击保存配置,保存配置完成的环境

    飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别 - php中文网

  7. 这样一个 PaddlePaddle 的环境就配置好了

6. 安全帽识别

6.1 任务简介

  • 算法背景:工地、工厂等地方在进行安全生产时,需要要求进入工地的所有人员佩戴安全帽。

  • 算法目的:在人员没有佩戴安全帽的情况下,算法需要识别出来。

6.2 数据集

  • 数据介绍:数据集是一个包含三个类别(person / hat / head)的 VOC 格式目标检测数据集。

  • 数据数量:训练集:3000 测试集:800 样例集:100

7. 基线项目

  • 由于平台操作有点复杂,这里给出一个非常简单的基线项目

  • 可以用来快速上手这个平台的编码规则,并且快速通过这个新手任务

7.1 简介

  • 使用 PaddleX 快速实现安全帽检测模型

  • 选择的模型为 PicoDet

7.2 模型训练

  1. 在编码环境的 /project/train/src_repo 中创建一个脚本文件 train.py,将如下代码拷贝至该文件中:
import osimport jsonimport randomimport argparseimport paddlex as pdxfrom paddlex import transforms as Tdef split_dataset(data_dir, save_dir, split_num, label_list):
    '''
    分割数据集

    参数
        data_dir 数据目录
        save_dir 保存目录
        split_num 验证集数量
        label_list 标签列表

    返回
        train_file 训练集列表文件
        val_file 验证集列表文件
        label_file 标签列表文件
    '''

    # 遍历数据文件
    jpg_files = []
    xml_files = []
    data_files = os.listdir(data_dir)    for data_file in data_files:        if data_file.endswith('.jpg'):
            jpg_files.append(data_file)        elif data_file.endswith('.xml'):
            xml_files.append(data_file)    # 排序并组成数据对
    datas = []
    jpg_files.sort()
    xml_files.sort()    for jpg, xml in zip(jpg_files, xml_files):
        datas.append(f'{jpg} {xml}\n')    # 打乱顺序
    random.shuffle(datas)    # 写入文件
    train_file = os.path.join(save_dir, 'train.txt')
    val_file = os.path.join(save_dir, 'val.txt')
    label_file = os.path.join(save_dir, 'label_list.txt')    with open(train_file, 'w', encoding='UTF-8') as f:        for data in datas[:-split_num]:
            f.write(data)    with open(val_file, 'w', encoding='UTF-8') as f:        for data in datas[-split_num:]:
            f.write(data)    with open(label_file, 'w', encoding='UTF-8') as f:        for label in label_list:
            f.write(f'{label}\n')    # 输出信息
    states = {}
    states['label_list'] = label_list
    states['datas_num'] = len(datas)
    states['train_num'] = len(datas[:-split_num])
    states['val_num'] = len(datas[-split_num:])
    states['train_file'] = train_file
    states['val_file'] = val_file
    states['label_flie'] = label_file    print(json.dumps(states, indent=4))    return train_file, val_file, label_fileif __name__ == '__main__':    # 命令行参数
    parser = argparse.ArgumentParser()
    parser.add_argument('--data_dir', '-d', default='/home/data/831', type=str)
    parser.add_argument('--label_list', '-l', default='person,head,hat')
    parser.add_argument('--save_dir', '-s', default='/project/train/src_repo', type=str)
    parser.add_argument('--ckpt_dir', '-c', default='/project/train/models', type=str)
    parser.add_argument('--split_num', '-n', default=50, type=int)
    args = parser.parse_known_args()[0]    # 打印命令行参数
    print(json.dumps(vars(args), indent=4))    # 参数转换
    data_dir = args.data_dir
    save_dir = args.save_dir
    ckpt_dir = args.ckpt_dir
    split_num = args.split_num
    label_list = args.label_list.split(',')    
    # 切分数据集
    train_file, val_file, label_file = split_dataset(data_dir, save_dir, split_num, label_list)    # 训练集数据增强
    train_transforms = T.Compose([
        T.MixupImage(mixup_epoch=-1),
        T.RandomDistort(),
        T.RandomExpand(im_padding_value=[123.675, 116.28, 103.53]),
        T.RandomCrop(),
        T.RandomHorizontalFlip(),
        T.BatchRandomResize(
            target_sizes=[320, 352, 384, 416, 448, 480, 512, 544, 576, 608],
            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=480, interp='CUBIC'),
        T.Normalize(
            mean=[0.485, 0.456, 0.406],
            std=[0.229, 0.224, 0.225]
        )
    ])    # 训练集
    train_dataset = pdx.datasets.VOCDetection(
        data_dir=data_dir,
        file_list=train_file,
        label_list=label_file,
        transforms=train_transforms,
        num_workers=0,
        shuffle=True
    )    # 验证集
    eval_dataset = pdx.datasets.VOCDetection(
        data_dir=data_dir,
        file_list=val_file,
        label_list=label_file,
        transforms=eval_transforms,
        num_workers=0,
        shuffle=False
    )    # 检测模型
    model = pdx.det.PicoDet(
        num_classes=len(train_dataset.labels),
        backbone='ESNet_s',
        nms_score_threshold=.025,
        nms_topk=1000,
        nms_keep_topk=100,
        nms_iou_threshold=.6
    )    # 模型训练
    model.train(
        num_epochs=20,
        train_dataset=train_dataset,
        eval_dataset=eval_dataset,
        train_batch_size=16,
        pretrain_weights='COCO',
        learning_rate=0.0001,
        warmup_steps=200,
        warmup_start_lr=0.0,
        save_interval_epochs=3,
        lr_decay_epochs=[15, 18],
        save_dir=ckpt_dir,
        use_vdl=False
    )
  1. 在平台训练任务页面上新建一个训练任务,使用如下代码启动训练:
$ python /project/train/src_repo/train.py -n 100
  1. 等待模型训练完成,或者训练到某个合适阶段手动终止训练

7.3 模型测试

  1. 在编码环境的 /project/ev_sdk/src 中创建一个脚本文件 ji.py,将如下代码拷贝至该文件中:
import jsonimport numpy as npimport paddlex as pdx# 模型路径model_path = '/project/train/models/best_model'# 阈值threshold = 0.5def init():
    '''
    初始化

    返回
        model PaddleX 模型
    '''
    model = pdx.load_model(model_path)    return modeldef process_image(handle=None, input_image=None, args=None, **kwargs):
    '''
    处理图像

    参数
        handle init 函数的返回值
        input_image 输入图像 (CHW / BGR)
        args / **kwargs 其他参数
    
    返回
        result json 格式的结果
    '''
    results = handle.predict(input_image)
    objects = []    for dt in np.array(results):
        cname, bbox, score = dt['category'], dt['bbox'], dt['score']        if score > threshold:
            objects.append({                "x": round(bbox[0]),                "y": round(bbox[1]),                "width": round(bbox[2]),                "height": round(bbox[3]),                "confidence": score,                "name": cname
            })
    result = {        "model_data": {            "objects": objects
        }
    }    return json.dumps(result, indent=4)if __name__ == '__main__':    import cv2    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--img', '-i', default='/home/data/831/helmet_38270.jpg', type=str)
    args = parser.parse_known_args()[0]
    model = init()
    img = cv2.imread(args.img)
    process_image(model, img)
  1. 在平台测试任务页面中发起一个标准模型测试,选择需要的模型文件,比如:

    • /project/train/models/best_model/model.pdparams

    • /project/train/models/best_model/model.pdopt

    • /project/train/models/best_model/model.yml

  2. 提交后等待评估结果即可

    飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别 - php中文网

相关专题

更多
vscode
vscode

VS Code(Visual Studio Code)是一款免费、开源的跨平台代码编辑器,由微软开发和维护。它被广泛用于软件开发和编程,支持多种编程语言和框架。VS Code 同时提供了丰富的功能和扩展性,使开发者可以高效地编写、编辑和调试代码。

576

2023.06.30

vscode怎么运行代码
vscode怎么运行代码

vscode是一个运行于MacOS X、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器;vscode免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全、Emmet插件等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

219

2023.07.21

vscode使用的框架介绍
vscode使用的框架介绍

VSCode是一款跨平台代码编辑器,它基于Electron框架和Monaco Editor构建。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

384

2024.03.14

vscode一般用来写什么语言
vscode一般用来写什么语言

VSCode是一款功能强大的代码编辑器,支持多种编程语言和文件格式。它内置对 JavaScript、Python、Java、C++、TypeScript、HTML/CSS、Go 等语言的支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

372

2024.03.14

vscode可以写什么语言
vscode可以写什么语言

vscode是一款强大的代码编辑器,支持多种编程语言的开发。通过安装扩展,可以为 JavaScript/TypeScript、Python、Java、C#、PHP、Go、Ruby、Rust、HTML/CSS 等语言提供智能代码补全、调试和格式化等功能。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

538

2024.03.15

vscode中文设置方法
vscode中文设置方法

方法一:在设置页面中,搜索“locale”,并选择“zh-cn”。方法二:按“Ctrl Shift P”快捷键,输入“Configure Display Language”,将语言修改为“zh-cn”。如果上述方法无效,可考虑安装中文插件。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

540

2024.03.15

vscode用途介绍
vscode用途介绍

Visual Studio Code(VSCode)是一款由 Microsoft 开发的多功能文本编辑器,适用于各种编程语言。作为一款开源软件,VSCode 拥有代码高亮、自动补全、调试、Git 集成等强大功能,成为程序员不可或缺的工具。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

439

2024.03.15

vscode和visualstudio的区别
vscode和visualstudio的区别

Visual Studio是一款功能强大的集成开发环境(IDE),适用于专业开发人员进行复杂项目的构建。而VSCode则是一款轻量级的代码编辑器,更适合各种规模的项目开发。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

502

2024.03.15

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

25

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.1万人学习

Git 教程
Git 教程

共21课时 | 2.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号