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…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

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…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...