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

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

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

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

一、安装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 jsoncoco_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 - 创想鸟        

将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 - 创想鸟        

4.导出模型

转换并保存静态图模型。

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

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

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     from deploy.python.preprocess import preprocess, Resize, NormalizeImage, Permute, PadStride  File "PaddleDetection/deploy/python/preprocess.py", line 17, in     from keypoint_preprocess import get_affine_transformModuleNotFoundError: 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 - 创想鸟        

我们把阈值参数由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 - 创想鸟        

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

3、尝试不同的模型

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

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

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

5、修改loss

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

6、修改lr

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

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

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

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

以上就是【第十五届中国计算机设计大赛】智慧导盲组,手把手教你超越0.8的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/52264.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
sublime的AFileIcon插件怎么用_sublime AFileIcon插件使用技巧
上一篇 2025年11月9日 03:24:28
如何利用Layui实现自动完成的搜索功能
下一篇 2025年11月9日 03:24:33

相关推荐

  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • Matplotlib 地图中多类型图例的创建与优化

    Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化

    本教程旨在解决matplotlib地图可视化中,如何在一个图例中同时展示颜色块(如区域分类)和自定义标记(如特定兴趣点)的问题。文章详细介绍了当传统`patch`对象无法正确显示标记时,如何利用`matplotlib.lines.line2d`创建标记图例句柄,并将其与颜色块图例句柄合并,从而生成一…

    2026年5月10日 用户投稿
    100
  • Golang JSON序列化:控制敏感字段暴露的最佳实践

    本教程探讨golang中如何高效控制结构体字段在json序列化时的可见性。当需要将包含敏感信息的结构体数组转换为json响应时,通过利用`encoding/json`包提供的结构体标签,特别是`json:”-“`,可以轻松实现对特定字段的忽略,从而避免敏感数据泄露,确保api…

    2026年5月10日
    000
  • 利用海象运算符简化条件赋值:Python教程与最佳实践

    本文旨在探讨Python中海象运算符(:=)在条件赋值场景下的应用。通过对比传统if/else语句与海象运算符,以及条件表达式,分析海象运算符在简化代码、提高可读性方面的优势与局限性。并通过具体示例,展示如何在列表推导式等场景下合理使用海象运算符,同时强调其潜在的复杂性及替代方案,帮助开发者更好地掌…

    2026年5月10日
    100
  • 比特币新手教程 比特币交易平台有哪些

    比特币是一种去中心化的数字货币,基于区块链技术实现点对点交易,具有匿名性、有限发行和不可篡改等特点;新手可通过交易所购买,P2P交易获得比特币,常用平台包括Binance、OKX和Huobi;交易流程包括注册账户、实名认证、绑定支付方式、充值法币并下单购买,可选择市价单或限价单;比特币存储方式有交易…

    2026年5月10日
    000
  • c++中的SFINAE技术是什么_c++模板编程中的SFINAE原理与应用

    SFINAE 是“替换失败不是错误”的原则,指模板实例化时若参数替换导致错误,只要存在其他合法候选,编译器不报错而是继续重载决议。它用于条件启用模板、类型检测等场景,如通过 decltype 或 enable_if 控制函数重载,实现类型特征判断。尽管 C++20 引入 Concepts 简化了部分…

    2026年5月10日
    000
  • Go语言mgo查询构建:深入理解bson.M与日期范围查询的正确实践

    本文旨在解决go语言mgo库中构建复杂查询时,特别是涉及嵌套`bson.m`和日期范围筛选的常见错误。我们将深入剖析`bson.m`的类型特性,解释为何直接索引`interface{}`会导致“invalid operation”错误,并提供一种推荐的、结构清晰的代码重构方案,以确保查询条件能够正确…

    2026年5月10日
    100
  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    000
  • Golang goroutine与channel调试技巧

    使用go run -race检测数据竞争,结合runtime.NumGoroutine监控协程数量,通过pprof分析阻塞调用栈,利用select超时避免永久阻塞,有效排查goroutine泄漏、死锁和数据竞争问题。 Go语言的goroutine和channel是并发编程的核心,但它们也带来了调试上…

    2026年5月10日
    000
  • 《魔兽世界》将于6月11日开启国服回归技术测试

    《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试

    《%ign%ignore_a_1%re_a_1%》官方宣布,将于6月11日开启国服回归技术测试,时间为7天,并称可以在6月内正式开服,玩家们可以访问官网下载战网客户端并预下载“巫妖王之怒”客户端,技术测试详情见下图。 WordAi WordAI是一个AI驱动的内容重写平台 53 查看详情 以上就是《…

    2026年5月10日 用户投稿
    200
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • 如何在HTML中插入表单元素_HTML表单控件与输入类型使用指南

    HTML表单通过标签构建,包含action和method属性定义数据提交目标与方式,常用input类型如text、password、email等适配不同输入需求,配合label、required、placeholder提升可用性,结合textarea、select、button等控件实现完整交互,是…

    2026年5月10日
    000
  • 创建指定大小并填充特定数据的Golang文件教程

    本文将介绍如何使用Golang创建一个指定大小的文件,并用特定数据填充它。我们将使用 `os` 包提供的函数来创建和截断文件,从而实现快速生成大文件的目的。示例代码展示了如何创建一个10MB的文件,并将其填充为全零数据。掌握这些方法,可以方便地在例如日志系统或磁盘队列等场景中,预先创建测试文件或初始…

    2026年5月10日
    000
  • Python命令怎样使用profile分析脚本性能 Python命令性能分析的基础教程

    使用Python的cProfile模块分析脚本性能最直接的方式是通过命令行执行python -m cProfile your_script.py,它会输出每个函数的调用次数、总耗时、累积耗时等关键指标,帮助定位性能瓶颈;为进一步分析,可将结果保存为文件python -m cProfile -o ou…

    2026年5月10日
    000
  • 使用 WebCodecs VideoDecoder 实现精确逐帧回退

    本文档旨在解决在使用 WebCodecs VideoDecoder 进行视频解码时,实现精确逐帧回退的问题。通过比较帧的时间戳与目标帧的时间戳,可以避免渲染中间帧,从而提高用户体验。本文将提供详细的解决方案和示例代码,帮助开发者实现精确的视频帧控制。 在使用 WebCodecs VideoDecod…

    2026年5月10日
    000
  • 如何插入查询结果数据_SQL插入Select查询结果方法

    如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法

    使用INSERT INTO…SELECT语句可高效插入数据,通过NOT EXISTS、LEFT JOIN、MERGE语句或唯一约束避免重复;表结构不一致时可通过别名、类型转换、默认值或计算字段处理;结合存储过程可提升可维护性,支持参数化与动态SQL。 将查询结果数据插入到另一个表中,可以…

    2026年5月10日 用户投稿
    000
  • Debian Copilot的社区活跃度如何

    debian copilot是codeberg社区维护的ai助手,旨在为debian用户提供服务。尽管搜索结果中没有直接提供关于debian copilot社区支持活跃度的具体数据,但我们可以通过debian社区的整体活跃度和特点来推断其活跃性。 Debian社区的一般情况: Debian拥有详尽的…

    2026年5月10日
    000
  • Discord.py 交互按钮超时与持久化解决方案

    本教程旨在解决Discord.py中交互按钮在一段时间后出现“This Interaction Failed”错误的问题。我们将深入探讨视图(View)的超时机制,并提供通过正确设置timeout参数以及利用bot.add_view()方法实现按钮持久化的具体方案,确保您的机器人交互功能稳定可靠,即…

    2026年5月10日
    000
  • Python递归函数追踪与性能考量:以序列打印为例

    本文深入探讨了Python中一种递归打印序列元素的方法,并着重演示了如何通过引入缩进参数来有效追踪递归函数的执行流程和参数变化。通过实际代码示例,文章揭示了递归调用可能带来的潜在性能开销,特别是对调用栈空间的需求,以及Python默认递归深度限制可能导致的错误,为读者提供了理解和优化递归算法的实用见…

    2026年5月10日
    000
  • python中zip函数详解 python多序列压缩zip函数应用场景

    zip函数的应用场景包括:1) 同时遍历多个序列,2) 合并多个列表的数据,3) 数据分析和科学计算中的元素运算,4) 处理csv文件,5) 性能优化。zip函数是一个强大的工具,能够简化代码并提高处理多个序列时的效率。 在Python中,zip函数是一个非常有用的工具,它能够将多个可迭代对象打包成…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信