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…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
