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的错…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
