AI算法创新赛-人车目标检测竞赛总结05
队伍:AI0000043
1. 算法方案
由于赛题同时要求速度和精度,所以我们优先考虑小模型,在保证模型速度的同时通过模型调优稳 定提升模型精度。此外,由于图片分辨率比较大,且数据集中小目标占比高,我们计划使用更大的图片 尺寸输入,这就要求网络具有更大的感受野,所以我们使用yolov5s6而不是yolov5s作为我们的 baseline。
同时,为了稳步提升模型性能,我们在使用一些通用tricks的同时,例如coco数据集的预训练权 重,多尺度训练,模型平均以及同步BN,还使用了大量的数据增强来进一步增强网络的泛化性,使用的 数据增强包括RandomFlip、Mosaic、Mixup、Cutout、Blur和ToGray,整体方案如下:
- Yolov5 s6 + 4head
- 大量数据增强(randomflip、mosaic、mixup、cutout、albu库等) img size896 + multi-scale training
- 300epochs训练周期
- int8模型量化
2. 模型移植
我们在模型移植方面进行了大量的尝试以及实验,整体思路是在保持或是较小影响模型性能的同时,尽 可能提升模型推理速度,技术路线分为Pytorch2Fp32bmodel和Pytorch2Int8bmodel
Pytorch→FP32bmodel
由于我们使用的是s6模型,输出个数、锚框尺寸以及下采样倍数与主办方提供的s模型不同,所以我们需 要修改推理脚本中的anchor generator来适配,最终模型的输出结果与pt输出结果基本一致,且速度相 较于jit模型推理有显著提升。
Pytorch→Int8bmodel
我们通过模型量化来进一步提升模型的推理速度。在量化过程中,我们也碰到了一些问题。首先是量化 时间过长。通常来说,量化数据集图片数量多的话,量化的精度损失也会下降,我们在实验中发现,使 用所有数据集(训练集+val_a+val_b)需要超过20h的量化耗时,使用验证集(val_a+val_b)需要大概 10~20h的量化耗时,使用val_b能够将量化用时控制在10h以内。为了解决量化时间过长的问题,我们最 终只将b榜验证集作为我们的量化数据集,专注于降低模型在b榜数据集上的量化误差。第二个问题是量 化后模型精度下降过大,考虑到网络某些层由于作用明显,不适合int8量化,所以在实际量化过程中, 由于网络检测头的卷积输出坐标以及得分等关键信息,我们对其使用fp32单独量化。此外,由于一键量 化工具会自动进行量化策略搜索,但对同一模型搜索路线是相同的,所以我们通过使用一键量化工具量 化多个模型取最优来保证量化后的模型性能。最后,我们还进行了其它尝试,比如将模型量化的误差指 标由feature_similarity更换为detect_accuracy,在分步量化时通过calibration_use_pb命令行添加- th_method指定计算各个层量化阈值的方法。最终我们量化后的模型在推理速度上相较于fp32的模型能 够提升22ms,虽然AP50有所下降,但是最终得分还是得到了显著提高。
3. 模型推理
在模型推理的优化上,我们的策略如下:
- 改进NMS
- 优化后处理,裁剪越界框
- 进行尺度实验,权衡模型的速度和精度
在具体实验中,我们观察到原有的nms实现太耗时,我们尝试使用nms变种进行替换,在尝试过 fast_nms等nms变种后,我们最终引入torchvision.ops.nms来替换原本的nms,改进的nms能在保持 模型精度的同时,提升模型推理速度10ms。此外,原有的推理脚本未对越界框进行处理,使得模型的输 出结果中包含许多跨出边界的检测框,我们将这些跨出边界的检测框限制在图像尺寸内,这个操作能够 在不影响推理速度的同时,提升AP50大约0.5个点。最后,我们还进行了大量的尺度实验来权衡速度和 精度,包括960尺度训练(960尺度推理)、960尺度训练(896尺度推理)、896尺度训练(896尺度推 理)等,最终使用方案896尺度训练(896尺度推理)
4. 参赛感悟与建议
由于时间原因,模型还有更多的优化空间,我们未来考虑从以下三方面来进行优化:
- 模型训练优化:在同等模型大小下,通过一些训练技巧,模型精度还能得到进一步的提升
- 模型量化优化:Int8量化后的模型精度有所下降,可以尝试更多的优化策略来减少精度的损失,从 而进一步提升模型的性能
- 推理过程优化:多batch size推理,多卡多线程推理
在这里,也感谢算能平台提供的机会以及资源,让我们对TPU有了进一步的了解。在有限的比赛时间 内,我们也发现了一些问题,比如说明文档的不完善,在比赛过程中,我们有考虑使用多卡多线程推 理,但是在阅读过平台相关的说明文档后,发现这方面的资料稀少且表述不清晰,所以最终也没有成功 实现,另外就是推理脚本的不完善,在比赛过程中,我们通过优化推理脚本就显著提高了模型的推理速 度,模型的推理脚本仍有很大的优化空间。最终衷心祝愿算能平台能发挥自身优势,越来越好。
相关文章:
AI算法创新赛-人车目标检测竞赛总结05
队伍:AI0000043 1. 算法方案 由于赛题同时要求速度和精度,所以我们优先考虑小模型,在保证模型速度的同时通过模型调优稳 定提升模型精度。此外,由于图片分辨率比较大,且数据集中小目标占比高,我们计划使用…...
CSS 浮动【快速掌握知识点】
目录 前言 一、设置浮动属性 二、确定浮动元素的宽度 三、清除浮动 总结: 前言 CSS浮动是一种布局技术,它允许元素浮动到其父元素的左侧或右侧,从而腾出空间给其他元素。 一、设置浮动属性 使用CSS float属性将元素设置为浮动。例如&…...
在做自动化测试前需要知道的
什么是自动化测试? 做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念,广义上来讲&a…...
机器人学习的坚持与收获-2023
所有的机会都需要自己努力去争取,毕竟天会下雨下雪,但是不会掉馅饼。之前写过关于毕业生的一些博文。机器人工程ROS方向应用型本科毕业设计重点课题学生验收成果(暂缓通过)机器人工程ROS方向应用型本科毕业设计重点课题学生验收成…...
RSA签名加密解密
目录Java 接口RSAUtils.java示例中的依赖生成密钥对示例签名示例验证签名示例加密和解密示例Javascript 接口引入依赖生成密钥对示例签名示例验证签名示例加密和解密示例说在最后Java 接口 支持的密钥长度包括4种 RSA512、RSA1024、RSA2048、RSA4096支持的签名算法包括7种 MD2…...
【C语言】数据的存储
☃️内容专栏:【C语言】进阶部分 ☃️本文概括: C语言中的数据类型及其存储方式。 ☃️本文作者:花香碟自来_ ☃️发布时间:2023.2.24 目录 一、数据类型详细介绍 1.1 基本的数据类型 1.2 整型家族 1.3 构造类型 1.4 指针类型…...
「RISC-V Arch」SBI 规范解读(上)
术语 SBI,Supervisor Binary Interface,管理二进制接口 U-Mode,User mode,用户模式 S-Mode,Supervisor mode,监督模式 VS-Mode,Virtualization Supervisor mode,虚拟机监督模式 …...
2023年全国最新二级建造师精选真题及答案5
百分百题库提供二级建造师考试试题、二建考试预测题、二级建造师考试真题、二建证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 51.下列国有资金占控股或者主导地位的依法必须进行招标的项目,可以采取邀请招标的…...
365智能云打印怎么样?365小票无线订单打印机好用吗?
365智能云打印怎么样?365智能云打印是有赞官方首推的订单小票打印机,荣获2016年有赞最佳硬件服务商。可以实现远程云打印,无需连接电脑,只需通过GPRS流量或者WIFI即可连接,不受地理位置和距离限制。365小票无线订单打印…...
细说react源码中的合成事件
最近在做一个功能,然后不小心踩到了 React 合成事件 的坑,好奇心的驱使,去看了 React 官网合成事件 的解释,这不看不知道,一看吓一跳… SyntheticEvent是个什么鬼?咋冒出来了个事件池? 我就一…...
【架构师】零基础到精通——架构演进
博客昵称:架构师Cool 最喜欢的座右铭:一以贯之的努力,不得懈怠的人生。 作者简介:一名Coder,软件设计师/鸿蒙高级工程师认证,在备战高级架构师/系统分析师,欢迎关注小弟! 博主小留言…...
Hadoop命令大全
HDFS分布式文件系统 , 将一个大的文件拆分成多个小文件存储在多台服务器中 文件系统: 目录结构(树状结构) "/" 树根, 目录结构在namenode中维护 目录 1.查看当前目录 2.创建多级目录 3.上传文件 4.查…...
一文带你快速初步了解云计算与大数据
目录 🔍一、云计算基础 1、云计算的概念、特点、关键技术 2、云计算的分类 3、云计算的部署模式 4、云计算的服务模式:IaaS、PaaS、SaaS分别是什么,具体含义要清楚 5、物联网的概念 6、物联网和云计算、大数据的关系 7、了解云计算的…...
STM32 OTA应用开发——通过USB实现OTA升级
STM32 OTA应用开发——通过USB实现OTA升级 目录STM32 OTA应用开发——通过USB实现OTA升级前言1 环境搭建2 功能描述3 BootLoader的制作4 APP的制作5 烧录下载配置6 运行测试结束语前言 什么是OTA? 百度百科:空中下载技术(Over-the-Air Techn…...
JavaScript高级程序设计读书分享之6章——6.2Array
JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 除了 Object,Array 应该就是 ECMAScript 中最常用的类型了。 创建数组 使用 Array 构造函数 在使用 Array 构造函数时,也可以省略 new 操作符。 let colors new Array() let …...
MySQL递归查询 三种实现方式
1 建表脚本1.1 建表DROP TABLE IF EXISTS sys_region; CREATE TABLE sys_region (id int(50) NOT NULL AUTO_INCREMENT COMMENT 地区主键编号,name varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 地区名称,short_name varchar(50) CHARA…...
Servle笔记(7):过滤器
1、过滤器的作用与目的 过滤器的目的 在客户端的请求访问后端资源之前,拦截请求在服务器的响应发送回客户端之前,处理响应 2、过滤器的类型 身份验证过滤器(Authentication Filters)数据压缩过滤器(Data compressio…...
2023年:我成了半个外包
边线业务与主线角色被困外包; 012022年,最后一个工作日,裁员的小刀再次挥下; 商务区楼下又多了几个落寞的身影,办公室内又多了几头暴躁的灵魂; 随着裁员的结束,部门的人员结构简化到了极致&am…...
HTTP中GET与POST方法的区别
1. HTTP HTTP即超文本传输协议(Hyper Text Transfer Protocol),是因特网上应用最广的一种协议。 设计目的:保证客户端与服务器之间的通信(发布和接受HTML页面);工作方式:客户端-服务器端的请求-应答协议 …...
使用ChatGPT需要避免的8个错误
如果ChatGPT是未来世界为每个登上新大陆人发放的一把AK47, 那么现在大多数人做的事,就是突突突一阵扫射, 不管也不知道有没有扫射到自己想要的目标。每个人都在使用 ChatGPT。但几乎每个人都停留在新手模式。 避免下面常见的8个ChatGPT的错…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...
