AI算法创新赛-人车目标检测竞赛总结02
源码目录
--AI0000026/
--models/ #存放原始模型文件
--scripts/ #存放模型编译、量化所用到的命令脚本,标签格式转换的脚本。
--data/ #存放B榜数据集102张图片
--bmodel/ #存放编译或量化生成的xxx.bmodel
--test/ #存放执行推理的代码,会调用bmodel/中的xxx.bmodel,最终结果存放在result/中
--result/ #存放推理生成的结果,与提交到github上的文件一致。
--README.md #执行推理程序相关的说明,要求简洁、清楚,能够复现推理过程。
环境安装及操作步骤:
1)下载SDK软件包
wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/08/15/09/bmnnsdk2_bm1684_v2.7.0_20220810patched.zip
2)解压缩SDK包
apt-get install unzip
unzip bmnnsdk2_bm1684_v2.7.0_20220810patched.zip
tar -zxvf bmnnsdk2-bm1684_v2.7.0.tar.gz
3)安装库
cd ./bmnnsdk2-bm1684_v2.7.0/scripts
./install_lib.sh nntc
4)设置环境变量
source envsetup_cmodel.sh
source envsetup_pcie.sh bmnetp
$$需要注意的是导出的环境变量只对当前终端有效,每次进入容器都需要重新执行一遍
5)安装sophon包
cd ./bmnnsdk2-bm1684_v2.7.0/lib/sail/python3/pcie/py37
pip3 install sophon-2.7.0-py3-none-any.whl
6)推理并保存结果
cd ../test
python3 yolov7_opencv_3output.py --bmodel ../bmodel/compilation.bmodel --input ../data/ --label label_name --conf 0.001
7)复制结果到result目录
cp -r output/yolov7_opencv_3output/bmodel/labels/ ../result/
数据分析


通过分析数据集的特点,我们可以发现,图片中的人和车有着不同的尺度和密度,如上图所示,同一目标和不同目标尺度都相差巨大。 由于卷积神经网络下采样作用,会使得原始图片上的区域在经过卷积后尺寸变小,特别是远距离的目标区域将会丢失特征,导致精度降低,因此有必要将不同尺度的特征图进行特征融合并进行分别预测,同时,为保证人车图片的推理效果,适当的增大图片尺寸,有利于提高检测效果,但计算量也会呈指数级增加,我们需要兼顾精度和速度。
基线选择和评价指标
YOLOV7是目前YOLO系列最先进的算法,在准确率和速度上超越了以往的YOLO系列。我们选择最新的YOLOv7进行图片的训练和验证,评测指标包括精度和速度两个方面。在精度方面,通过mean Average Precision(mAP)评估模型精度;在速度方面,通过模型推理时间i_time评估模型性能,i_time为数据集图片推理的平均时间,单位为ms。
最终得分计算公式为:score = mAP*100+(1000-i_time)*0.1
模型介绍
YOLOv7主要优点和创新点包括:
1、在训练中采用多种“免费”训练技巧,极大地提高了实时检测器的检测精度。其中“免费”指仅在训练过程中起作用,不增加推理过程时间消耗。
2、不同的特征融合方式和多尺度特征预测头可以提高模型对不同尺度的人车的精度。
3、提出了一种复合放缩的方法来更有效地利用实时检测器的参数和计算量,提高推理速度。
4、YOLOv7比当前最优模型参数量小,计算量少,拥有更快的推理速度和更高的检测精度。
模型网络结构

模型训练和验证
模型 | Test Size | mAP | i_time |
yolov7-tiny | 640 | 66.8% | 2.2ms |
yolov7 | 640 | 77.4% | 2.9ms |
yolov7x | 640 | 77.3% | 4.0ms |
yolov7-e6e | 1280 | 81.7% | 15.7ms |
我们将官方给出的训练集划分出102张图片作为验证集,并采用不同版本的YOLOv7进行推理实验,如上表所示,yolov7算法在精度和推理速度达到较好的平衡,因此选择yolov7作为后续实验的推理模型。
基于TPU平台的移植开发
1.首先是研究官方提供demo的整体流程,从服务器环境、SDK环境到移植开发。
2.研究发现,在其他条件相同的条件下,图片大小的缩放会直接影响推理的精度和速度,一个好的缩放比例能够保证图片缩小的情况下,精度不降,但是如果调整的不好的话精度有可能会下降明显,我们可以尝试修改图片预处理时的图片大小。
3.除此之外,batch size和不同的前处理方法也会直接影响推理的速度(包括3output和1output,python版的bmcv_3output,opencv_3output和pytorch,python推理方式和C++推理方式)
4.量化工具其他改进策略和参数
推理优化部分(图片大小的缩放及模型预测前处理部分)
通过缩放图片大小,查看mAP和FPS的变化,随着YOLO模型复杂度和图片尺寸的增加,score逐渐降低,并且前处理Python版OpenCV比BMVC和Pytorch要快,且INT8综合分数通常低于FP32。
从下表可以看出,最佳的成绩预处理设置图片尺寸640*640是效果最好的,故选择YOLOv7算法,模型输入大小固定为640*640,Batch Size固定为1,FP32 BModel模型推理作为最终方案。
model | img_size | mAP0.5 | i_time(FP32_opencv) | i_time(FP32_bmvc) |
yolov7 | 640 | 0.774 | 102 | 114 |
| 768 | 0.788 | 146 | 230 |
| 800 | 0.79 | 160 | - |
yolov7x | 640 | 0.773 | 159.4 | 170 |
| 864 | 0.797 |
|
|
| 960 | 0.805 |
|
|
yolov7e6e | 640 | 0.727 |
|
|
| 864 | 0.788 |
|
|
| 960 | 0.796 |
|
|
| 1280 | 0.817 | 633 |
|
遇到的问题
1.模型移植开发环境不熟悉,开发流程不熟练。
解决:查阅SDK开发文档,理解并实践。
2.在模型转换过程中遇到许多bug,如转换成int8model时会出现核心错误。
解决:认真查阅开发文档和资料,模型转换过程输入不匹配,需重新转换等;
总结与感悟
通过该比赛了解到模型落地的困难,认识到模型部署还是存在很大的研究价值,同时学习并使用了国产TPU进行量化和推理,了解了深度学习从模型训练、验证到量化、部署等一体化完整的过程,这锻炼了我的开发和解决问题的能力。比较遗憾的是,由于时间不足,没有对INT8量化造成较大精度损失原因进一步分析,也没有更加深入研究官方量化工具其他改进策略。希望日后能更加深入理解和使用TPU的量化工具,也感谢主办方和承办方等各单位提供本次竞赛的平台和资源,也感谢算能科技工作人员的热心解答,希望算能科技越发壮大,推动国内人工智能产业的发展。
AI算法创新赛:https://www.sophgo.com/competition/introduction.html?id=2
相关文章:
AI算法创新赛-人车目标检测竞赛总结02
源码目录--AI0000026/ --models/ #存放原始模型文件 --scripts/ #存放模型编译、量化所用到的命令脚本,标签格式转换的脚本。 --data/ #存放B榜数据集102张图片 --bmodel/ #存放编译或量化生成的xxx.bmodel --test/ #存放执行推理的代码,会调用bmodel/中…...
Python 编程必备:盘点nginx和gunicorn的几大用法,建议收藏
程序员是新兴技术工种中比较高薪的一个,在互联网公司,程序员往往与秃头,压力大,找不到女朋友等等挂钩。 最近,最新技能类榜单出炉,这是一个关于程序员自己给自己贴的几个标签。 其中,不难看出…...
USB3.0移动硬盘启动Win7的方法(AHCI/AMD USB3.0/Win7)
古董电脑(intel处理器,无USB3.0接口)突然坏了,已经没有维修价值了,硬盘还是完好的。欲把硬盘拆下来,装到USB3.0硬盘盒上,然后在新电脑(AMD R5-4650G/A520)上从USB3.0硬盘盒上启动。 一、需要工具 SATA数据线PS/2鼠标…...
Python学习-----函数3.0(嵌套函数、闭包、装饰器)
目录 1.函数嵌套 2.闭包 3.装饰器 这一节,我会详细Python中讲解函数的进阶内容,包括嵌套函数、闭包和装饰器。一起来学习吧!!! 1.函数嵌套 概念:函数里面再定义一个函数 作用:当我们在一个多…...
最新版EasyRecovery数据恢复软件使用测评介绍
我们在逐渐适应信息电子化的同时,也有一些潜在的麻烦接踵而来,其中较为常见的就是文件和数据的保存问题。显然,设备的存储空间是有限的,这就不可避免地会出现数据被删除、覆盖或丢失的现象,如果丢失的是重要数据&#…...
关于知识图谱TransR
论文题目 Learning Entity and Relation Embeddings for Knowledge Graph Completion 论文链接 TransR 文中指出,不管是TransE还是TransH都是将实体和关系映射同一空间,但是,一个实体可能具有多个层面的信息,不同的关系可能关注…...
始于日志,不止于日志,Elastic Stack全面介绍
1、Elastic Stack是什么? 说Elastic Stack之前,先说一下ELK Stack。这个词相信很多人都是耳熟能详的,作为一个著名的日志系统解决方案,应用非常广泛。 “ELK”是三个开源项目的首字母缩写词:Elasticsearch、Logstash…...
FDX-B|EMID格式低频RFID 读卡模块LD6900技术选型与说明
FDX-B|EMID格式低频RFID 读卡模块LD6900是华翔天诚推出一款基于 RFID 无线射频识别技术的低频(LF)读卡模块,工作频率支持 134.2KHZ、125KHZ,符合 ISO 11784/5 国际标准,支持对 FDX-B、EMID 两种协议格式电子标签的读取…...
《SQL基础》11. 索引
SQL - 索引索引概述结构B-TreeBTreeHash思考分类语法SQL性能分析SQL执行频率慢查询日志profile详情explain执行计划索引失效情况范围查询索引列运算字符串不加引号模糊查询or连接条件数据分布影响使用规则最左前缀法则SQL提示覆盖索引前缀索引设计原则索引 概述 索引…...
【前端】进阶Mac OS软件商城页面_缤纷多彩的创意UI
非常漂亮的仿Mac OS界面,更改下参数就可以变成你需要的界面。 还可以一键更换背景主题 灵感来源于米科瓦伊加文齐奥夫斯基 附上css、html、js源码 下面是html文件 <!DOCTYPE html> <html lang"en" > <head><meta charset"…...
格创东智与金羽新能合作|先进工业互联网助力固态电池智能化运营
2022年12月,浙江金羽新能源科技有限公司(以下简称金羽新能)与格创东智签订战略合作框架协议,并在湖州安吉举行金羽新能固态电池MES项目启动会。 固态电池是一种使用固体电极和固体电解质的电池。相较传统锂电池(液态电…...
软件测试面试刷题app包含了各种难题
软件测试的生命周期: V模型:与软件开发阶段呼应 软件开发:需求分析-->概要设计-->详细设计-->编码阶段软件测试:单元测试-->集成测试-->系统测试-->验收测试从基本流程的角度讲: 需求阶段ÿ…...
19、ClickHouse企业中常见的20种用法
文章目录19、ClickHouse企业中常见的20种用法-- 1、表结构添加字段-- 2、删除语句-- 3、更新语法-- 4、查询表字段结构-- 5、展示字段加密处理 身份证号(字母加数字)加密-- 6、展示字段加密处理 手机号(纯数字)加密-- 7、计数 去重…...
怎么样用香港主机搭建游戏网站
香港是全球主要的互联网骨干节点,拥有质量较高的网络基础设施,在网络速度和稳定性方面表现良好。因此,使用香港主机搭建游戏网站可以使用户在游戏中的体验流畅且基本不会延迟情况。本文将向用户解释如何使用香港主机搭建游戏网站。在搭建游戏…...
重磅!GitLab 提出五大预测,洞见 2023 年 DevSecOps 发展趋势
本文来源:about.gitlab.com 作者:Sandra Gittlen 译者:极狐(GitLab) 市场部内容团队 2023 年,企业会将更多的时间和资源投入到持续的安全左移上,完成从 DevOps 到 DevSecOps 的演变。 GitLab CMSO Ashley Kramer 表示…...
内核模块(传参和依赖)
目录 一、模块传参 二、模块依赖 三、内核空间和用户空间 四、执行流 五、模块编程与应用编程的比较 六、内核接口头文件查询 七、小作业 一、模块传参 module_param(name,type,perm);//将指定的全局变量设置成模块参数 name:全局变量名 type: 使用符号 …...
基础篇:03-SpringCloud工程部署启动
目录 1.工程搭建部署 方案一:完整工程导入 方案二:从零开始搭建 1.工程与module创建 2.数据库导入 3.项目启动 3.1 启动并访问user-service 3.2 启动并访问order-service 4.服务远程调用 时序图说明 服务远程调用实现 注入RestTemplate Res…...
二、产品经理——【需求收集】【需求管理】
0. 学习目标 能够理解并描述需求能够收集并管理需求 1. 如何定义需求 1.1. 需求的定义 原始需求:没有经过任何分析,或者没有经过任何额外解读的需求信息 避免日后纠纷,尽量记录一下原始需求!先记录下来,后面再进行分…...
蓝桥杯stm32 USART 串口接收数据
文章代码使用 HAL 库。 文章目录 前言一、创建 CubeMX 工程:二、 中断接收数据 函数:三、串口接收回调函数实验效果四、接收固定长度的数据。五、串口接收 不定长数据。总结前言 上篇文章是 串口的发送数据,这篇文章接着上次的 讲 串口的接受数据。 一、创建 CubeMX 工程:…...
CellularAutomata元胞向量机-9-生命游戏MATLAB代码分享
主程序:%%Conways life with GUI clf % 清除图形clc, clear% %build the GUI %define the plot button plotbuttonuicontrol(style,pushbutton,... string,Run, ... fontsize,12, ... position,[100,400,50,20], ... callback, run1;); %define the stop button era…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
