0

0

【第十五届中国计算机设计大赛】智慧导盲组,手把手教你超越0.8

P粉084495128

P粉084495128

发布时间:2025-07-28 09:58:38

|

436人浏览过

|

来源于php中文网

原创

本文介绍了基于PaddleDetection的目标检测项目流程,包括克隆仓库、安装依赖、编译安装等步骤。还涵盖数据集准备,如查看COCO标注、解压和配置数据集,以及模型训练、预测、导出,最后说明代码提交及优化方法,如调整阈值等。

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

【第十五届中国计算机设计大赛】智慧导盲组,手把手教你超越0.8 - php中文网

一、安装PaddleDetection

In [ ]
# 克隆PaddleDetection仓库# 如果已经克隆,则不需要重复运行,可把第3行直接注释,从第6行开始运行!git clone https://gitee.com/PaddlePaddle/PaddleDetection.git# 安装其他依赖%cd PaddleDetection
!pip install -r requirements.txt# 编译安装paddledet!python setup.py install
%cd ~
   

二、数据集准备

1、数据标注查看

本次比赛为大家提供了COCO格式的数据集。

COCO数据标注是将所有训练图像的标注都存放到一个json文件中。数据以字典嵌套的形式存放。

json文件中包含以下key:

  • info,表示标注文件info。
  • licenses,表示标注文件licenses。
  • images,表示标注文件中图像信息列表,每个元素是一张图像的信息。
  • annotations,表示标注文件中目标物体的标注信息列表,每个元素是一个目标物体的标注信息。
In [1]
# 查看COCO标注文件import json
coco_anno = json.load(open('WisdomGuide/annotations/instance_train.json'))# coco_anno.keysprint('\nkeys:', coco_anno.keys())# 查看类别信息print('\n物体类别:', coco_anno['categories'])# 查看一共多少张图print('\n图像数量:', len(coco_anno['images']))# 查看一共多少个目标物体print('\n标注物体数量:', len(coco_anno['annotations']))# 查看一条目标物体标注信息print('\n查看一条目标物体标注信息:', coco_anno['annotations'][0])
       
keys: dict_keys(['images', 'categories', 'annotations'])

物体类别: [{'supercategory': 'component', 'id': 1, 'name': 'blind_path'}, {'supercategory': 'component', 'id': 2, 'name': 'green_light'}, {'supercategory': 'component', 'id': 3, 'name': 'block'}, {'supercategory': 'component', 'id': 4, 'name': 'no_light'}, {'supercategory': 'component', 'id': 5, 'name': 'red_light'}]

图像数量: 7995

标注物体数量: 25265

查看一条目标物体标注信息: {'segmentation': [[3.0, 2.5380710659898478, 3.0, 479.0, 357.11167512690355, 479.0, 357.11167512690355, 2.5380710659898478]], 'iscrowd': 0, 'image_id': 1, 'bbox': [3.0, 2.5380710659898478, 354.11167512690355, 476.46192893401013], 'area': 168720.731789018, 'category_id': 1, 'id': 1}
       

2、解压数据集

In [2]
# 解压数据集!gzip -dfq /home/aistudio/data/data137625/WisdomGuide.tar.gz
!tar -xf /home/aistudio/data/data137625/WisdomGuide.tar -C /home/aistudio/ #把数据集移到/home/aistudio下面
   

3、配置数据集

注意:生成版本,由于PaddleDetection文件夹下的文件较多,无法保存,因此数据集的配置文件需要我们自行配置

在PaddleDetection/configs/datasets/路径下新建一个coco_dog.yml文件,并配置数据集格式、类别、加载路径等信息:

metric: COCOnum_classes: 5TrainDataset:
  !COCODataSet
    image_dir: train
    anno_path: annotations/instance_train.json
    dataset_dir: /home/aistudio/WisdomGuide/
    data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']EvalDataset:
  !COCODataSet
    image_dir: val
    anno_path: annotations/instance_val.json
    dataset_dir: /home/aistudio/WisdomGuide/TestDataset:
  !ImageFolder
    ! anno_path: annotations/instance_val.json
    image_dir: val
    dataset_dir: /home/aistudio/WisdomGuide/
   

三、模型训练

Baseline选择的模型是PP-Picodet,本项目就继续使用PP-Picodet,在Baseline的基础上进行微调

1.训练配置

在正式开始训练前,我们需要选择配置文件,并修改参数

【第十五届中国计算机设计大赛】智慧导盲组,手把手教你超越0.8 - php中文网        

将PaddleDetection/configs/picodet/picodet_m_320_coco_lcnet.yml里的数据集配置改成我们前面自己新建的数据集配置,也就是coco_dog.yml

2、模型训练

注意:数据集配置一定要改为前面我们自行配置的

In [ ]
# 模型训练%cd ~
%cd PaddleDetection
!python tools/train.py -c configs/picodet/picodet_m_320_coco_lcnet.yml
   

如果需要更换模型,直接在上述代码中修改路径即可,注意:更换模型时,检查数据集是不是我们要用的数据集。

如果训练时,突然中断了,需要恢复训练,使用-r参数,后面加上模型路径即可

例:!python tools/train.py -c configs/picodet/picodet_m_320_coco_lcnet.yml -r -r output/picodet_m_320_coco_lcnet/best_model

想要边训练边评估,末尾加 --eval 即可

例:!python tools/train.py -c configs/picodet/picodet_m_320_coco_lcnet.yml --eval

训练时的日志输出已单独保存在vdl_log_dir/scalar/vdlrecords.1649487648.log

注意:以下代码运行,需等模型训练完成后

3.模型预测

训练好模型以后,我们可以检验一下效果。

In [ ]
%cd ~
%cd PaddleDetection# 更换"--infer_img"里的图片路径以预测不同的图片!python tools/infer.py -c configs/picodet/picodet_m_320_coco_lcnet.yml \
                    --infer_img=/home/aistudio/WisdomGuide/val/no_light_629.png \
                    --output_dir=infer_output/ \
                    --draw_threshold=0.5 \
                    -o weights=/home/aistudio/PaddleDetection/output/picodet_m_320_coco_lcnet/best_model.pdparams \
                    --use_vdl=Ture
   

【第十五届中国计算机设计大赛】智慧导盲组,手把手教你超越0.8 - php中文网        

4.导出模型

转换并保存静态图模型。

这里假设我们已经在线训练10小时,获得了模型

如果要生成版本,由于PaddleDetection文件夹下的文件较多,无法保存,故要把训练好的模型单独拿出来,例如放在/home/aistudio/checkpoint/best_model.pdparams。

天工大模型
天工大模型

中国首个对标ChatGPT的双千亿级大语言模型

下载
In [ ]
%cd ~
%cd PaddleDetection# 将"-o weights"里的模型路径换成你自己训好的模型!export CUDA_VISIBLE_DEVICES=0!python tools/export_model.py -c configs/picodet/picodet_m_320_coco_lcnet.yml \
                    -o weights=/home/aistudio/PaddleDetection/output/picodet_m_320_coco_lcnet/best_model.pdparams \
                    TestReader.fuse_normalize=true
   

四、代码提交

这一步与Baseline操作基本一样

AI Studio上提供了一套测评系统,我们将训练好的模型和预测代码打包上传,测评系统会自动算分。

提交格式:

| -- model| | -- xxx.pb| | … 
| -- env| | -- 
| |…| -- predict.py| -- …
   
In [5]
%cd ~# 在work目录下整理提交代码# 创建model文件夹(已经创建好的话,就不用再创建了)!mkdir /home/aistudio/work/model# 将检测模型拷贝到model文件夹中!cp -r /home/aistudio/PaddleDetection/output_inference/picodet_m_320_coco_lcnet/ /home/aistudio/work/model/# 将训练脚本拷贝到work目录下,与model同级!cp /home/aistudio/PaddleDetection/tools/train.py /home/aistudio/work/# 将PaddleDetection也复制进来!cp -r /home/aistudio/PaddleDetection/ /home/aistudio/work/
       
/home/aistudio
       

这里为了让压缩包更小,建议把PaddleDetection里面不用的模型备份出来。特别地,隐藏文件.git占用存储空间较大,且在这里没有什么用,故可以手动删除。

In [9]
# 删除隐藏文件!rm -rf /home/aistudio/work/PaddleDetection/.git/
   

注意: 在打包前,请将work/PaddleDetection/deploy/python/preprocess.py的第17行改为:

from .keypoint_preprocess import get_affine_transform
       

否则会出现以下报错:

Traceback (most recent call last):
  File "predict.py", line 19, in <module>    from deploy.python.preprocess import preprocess, Resize, NormalizeImage, Permute, PadStride
  File "PaddleDetection/deploy/python/preprocess.py", line 17, in <module>    from keypoint_preprocess import get_affine_transform
ModuleNotFoundError: No module named 'keypoint_preprocess'
   
In [10]
# 打包代码%cd /home/aistudio/work/
!zip -r -q -o submission.zip model/ PaddleDetection/ train.py predict.py
       
/home/aistudio/work
       

在提交前,我们需要改动一下predict.py文件,这样我们才能上0.8 【第十五届中国计算机设计大赛】智慧导盲组,手把手教你超越0.8 - php中文网        

我们把阈值参数由0.05改为0.5,就OK啦。

预选赛时,有不少同学说:我模型的预测效果比Baseline好,为啥提交后分数比Baseline低啊,原因就是这个。

阈值由Baselin的0.05改为0.5,我们就会获得巨大提升。

然后从aistudio上下载打包好的submission.zip文件,就可以直接到官网提交啦!现在预选赛的通道关闭了,我们可以在练习赛进行提交。

如果提交成功,就可以看到自己的分数了。

本项目在baseline基础上,将阈值改为0.5,结果在0.8之上。大家可以试试。

五、优化方法

1、尝试不同的阈值,找出最佳阈值。

修改阈值能够提升一点我们的得分,0.5对有些模型来说,不是最佳阈值,我们可以试试不同阈值提交,找到该模型的最佳阈值。

2、加大训练轮数

有些模型原始的配置轮数不是最大,我们可以将训练轮数加大到,该模型最大轮数,例如Picodet-m-416模型【第十五届中国计算机设计大赛】智慧导盲组,手把手教你超越0.8 - php中文网        

最大轮数是300轮,最初设置是250轮,我们可以将轮数设置最大轮数300轮。

3、尝试不同的模型

尝试一下其他的模型,例如PP-YOLO,YOLOv3等,这里透露一下,PP-Picodet能上0.87

4、加载COCO数据集预训练模型,使用预训练模型可以有效提升模型精度

以Picodet-m-320为例: 修改Picodet_v2.yml中的pretrain_weights即可 【第十五届中国计算机设计大赛】智慧导盲组,手把手教你超越0.8 - php中文网        

5、修改loss

将picodet_v2.yml中的lossbbox name值由GIoU改为DIou 【第十五届中国计算机设计大赛】智慧导盲组,手把手教你超越0.8 - php中文网        

6、修改lr

降低学习率,尝试调整为一半或十分之一,亦或是其他学习率

以上就是一些通用的方法,非常基础外加非常简单,大家可以逐一尝试,或者觉得麻烦的话,一口气全部试在一个模型里面,模型训练完成后,通过智慧导盲练习赛进行得分验证。此外这些方法也可以在以后的一些比赛使用,屡试不爽。

或许还有一些其他不动网络的提升方法,但我并不知道,欢迎各位大佬补充

我在work目录下面放了一个导出的Picodet-m-320模型,大家把predict.py的阈值改改,复制PaddleDetion,打包进行提交,验证第一个方法。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

246

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

34

2026.03.03

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

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

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