首页 游戏 软件 资讯 排行榜 专题
首页
AI
飞桨打比赛:极市计算机视觉开发者榜单大赛——安全帽识别

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

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

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

1. 引入

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

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

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

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

2. 参考资料

轻松上手安全帽检测

PaddleX 安全帽检测

极市 CVMart

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

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

3.1 简介

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

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

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

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

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

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

3.2 比赛任务

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

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

3.3 比赛奖项

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

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

4. 参加比赛

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

4.1 参赛步骤

比赛正式 -> 下滑新手任务 -> 报名 -> 开发环境

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

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

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

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

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

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

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

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

5. 环境配置

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

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

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

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

5.1 配置步骤

极市正式 -> 右上角头像 -> 个人中心 -> 开发环境管理 -> 新建开发环境

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

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

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

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

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

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

拷贝如下每一行代码至命令行窗口 -> 依次运行代码安装 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
登录后复制

等待所有代码执行完毕,回到开发环境管理页面,点击保存配置,保存配置完成的环境

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

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

6. 安全帽识别

6.1 任务简介

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

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

6.2 数据集

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

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

7. 基线项目

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

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

7.1 简介

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

选择的模型为 PicoDet

7.2 模型训练

在编码环境的 /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('.webp'):            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    )
登录后复制在平台训练任务页面上新建一个训练任务,使用如下代码启动训练:
$ python /project/train/src_repo/train.py -n 100
登录后复制等待模型训练完成,或者训练到某个合适阶段手动终止训练

7.3 模型测试

在编码环境的 /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.webp', type=str)    args = parser.parse_known_args()[0]    model = init()    img = cv2.imread(args.img)    process_image(model, img)
登录后复制

在平台测试任务页面中发起一个标准模型测试,选择需要的模型文件,比如:

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

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

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

提交后等待评估结果即可

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

来源:https://www.php.cn/faq/1410176.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

37年历史落幕!Linux取消支持Intel 486 CPU
电脑教程
37年历史落幕!Linux取消支持Intel 486 CPU

4月6日消息,诞生37年的Intel486处理器,即将彻底告别现代Linux系统。据科技媒体Phoronix报道,Linux内核开发者已启动对486处理器支持的移除工作,相关补丁确认将合入Linux

热心网友
04.07
Win11 → WSL2 → Ubuntu → OpenClaw大龙虾安装
AI
Win11 → WSL2 → Ubuntu → OpenClaw大龙虾安装

Win11 → WSL2 → Ubuntu → OpenClaw 的直接流程 想在 Windows 上顺畅地用上 OpenClaw?其实核心就一条:先在 WSL2 里搭好 Ubuntu 这个“标准环境”。下面这个流程,你按顺序一步步执行就行,能避开不少弯路。 第一步:安装 WSL2 与 Ubuntu

热心网友
04.07
wsl安装OpenClaw
AI
wsl安装OpenClaw

参考指南与学习资料 若您希望在本地快速搭建并部署一个个人智能助手,OpenClaw 框架是一个理想的入门选择。为了帮助开发者更高效地上手,社区中已有丰富的学习资源与讨论可供参考,主要包括:OpenClaw 新手入门教程、核心命令行工具使用指南(openclaw -h 查看帮助)、配置文件的参数详解,

热心网友
04.02
openclaw 究极离谱的坑
AI
openclaw 究极离谱的坑

1 openclaw 工具权限报错解决方案:无法使用 exec read write webfetch 等工具的修复方法 当您在配置 openclaw 时遇到工具权限报错,提示缺少 exec、read、write、webfetch 等关键工具的使用权限,通常无需深入排查复杂的系统环境。此问题在多数

热心网友
04.02
OpenClaw 安装教程(Linux)
AI
OpenClaw 安装教程(Linux)

本次部署指南的核心目标非常明确:在 Linux 环境中,无论是云服务器还是本地物理机,我们都需要完整地完成 OpenClaw 智能体框架的安装与部署,并通过基础的健康检查与功能验证,确保整个系统能够成功启动并稳定运行。 一、环境要求 在开始动手安装之前,我们首先需要确认系统满足所有的基础运行环境要求

热心网友
04.02

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

美国SEC主席Paul Atkins证实:加密货币安全港提案已送交白宫审查
web3.0
美国SEC主席Paul Atkins证实:加密货币安全港提案已送交白宫审查

加密货币行业翘首以盼的监管里程碑,终于有了实质性进展。美国证券交易委员会(SEC)主席保罗·阿特金斯(Paul Atkins)近日证实,那份允许加密项目在早期获得注册豁免权的“安全港”框架提案,已经正式送抵白宫,进入了最终审查阶段。 在范德堡大学与区块链协会联合举办的数字资产峰会上,阿特金斯透露了这

热心网友
04.08
微策略Strategy报告:第一季录得144.6亿美元浮亏 再斥资约3.3亿美元买进4871枚比特币
web3.0
微策略Strategy报告:第一季录得144.6亿美元浮亏 再斥资约3.3亿美元买进4871枚比特币

微策略Strategy报告:第一季录得144 6亿美元浮亏 再斥资约3 3亿美元买进4871枚比特币 市场震荡的威力有多大?看看Strategy的最新季报就明白了。根据其最新向美国证管会(SEC)提交的8-K报告,受市场剧烈波动影响,这家公司所持的比特币在第一季度录得了一笔惊人的数字——144 6亿

热心网友
04.08
稳定币发行商Tether再扩Web3版图!Paolo Ardoino:正开发去中心化搜索引擎Hypersearch
web3.0
稳定币发行商Tether再扩Web3版图!Paolo Ardoino:正开发去中心化搜索引擎Hypersearch

稳定币巨头Tether的动向,向来是加密世界的风向标。这不,它向Web3基础设施的版图扩张,又迈出了关键一步。公司执行长Paolo Ardoino在社交平台X上透露,其工程团队正在全力“烹制”一个新项目——去中心化搜索引擎 “Hypersearch”。这个消息一出,立刻引发了行业的广泛猜想。 采用D

热心网友
04.08
Base链首个原生DeFi借贷协议Seamless Protocol倒闭 将于2026年6月30日下线
web3.0
Base链首个原生DeFi借贷协议Seamless Protocol倒闭 将于2026年6月30日下线

基地位于Coinbase旗下以太坊Layer2网络Base的Seamless Protocol,日前正式宣告了服务的终结。这个曾经吸引了超过20万用户的原生DeFi借贷协议,在运营不到三年后,终究没能跑赢时间。它主打的核心产品是Integrated Leverage Markets(ILMs)——一

热心网友
04.08
PAAL代币如何参与治理?社区投票能决定哪些事项?
web3.0
PAAL代币如何参与治理?社区投票能决定哪些事项?

PAAL代币揭秘:深度解析Web3社区治理的核心钥匙 在去中心化自治组织的浪潮中,谁真正掌握了项目的话语权?PAAL代币提供了一套系统化的答案。它不仅是生态内流转的价值媒介,更是开启链上治理大门的核心凭证。通过持有并质押PAAL代币,用户能够对协议升级、资金分配乃至战略方向等关键事务投出决定性的一票

热心网友
04.08