AI算法创新赛-人车目标检测竞赛总结05_yolov5s6和yolov5s-程序员宅基地

技术标签: TPU编程竞赛  算法  竞赛  目标检测  人工智能  编程  

队伍: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有了进一步的了解。在有限的比赛时间 内,我们也发现了一些问题,比如说明文档的不完善,在比赛过程中,我们有考虑使用多卡多线程推 理,但是在阅读过平台相关的说明文档后,发现这方面的资料稀少且表述不清晰,所以最终也没有成功 实现,另外就是推理脚本的不完善,在比赛过程中,我们通过优化推理脚本就显著提高了模型的推理速 度,模型的推理脚本仍有很大的优化空间。最终衷心祝愿算能平台能发挥自身优势,越来越好。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lily_19861986/article/details/129196888

智能推荐

java发送http请求获取响应结果【工具包系列】_httpprotocolhandler-程序员宅基地

文章浏览阅读5.7k次。import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.NameValuePair;import org.apache.log4j.Logger;import java.io.BufferedReader;import java.io.IOException;impo_httpprotocolhandler

酷开会员 | 有了酷开系统和好朋友一起K歌,客厅秒变KTV-程序员宅基地

文章浏览阅读184次。每个人都轮流上台演唱,有的人歌声婉转动听,有的人歌声豪放有力,有的人歌声深情款款。酷开系统是一款高度智能化的电视操作系统,它有着丰富的功能和应用,其中的大屏K歌,更是成为了很多消费者的心头好。酷开系统的K歌版块中拥有大量的歌曲,包括流行金曲、经典老歌、网络热歌等等,不管你喜欢什么曲目、什么风格,你的音乐需求在这里都能得到满足。虽然家中没有激情的舞台和华丽的灯光,但我们有真挚的情感和热情的朋友。酷开系统的大屏K歌还有许多有趣的功能,比如评分系统,可以对我们的演唱进行打分,让我们知道自己的唱歌水平如何。

Android系统移植与调试之------->如何修改Android默认字体大小和设置里面字体大小比例_源泉怎么改初始字体-程序员宅基地

文章浏览阅读5.5k次,点赞2次,收藏2次。因为我修改 ro.sf.lcd_density的值,将它从160修改 为120,所以导致整个系统的字体都变得很小。因此需要将整个字体变大,并且在设置-->显示-->字体大小的4个选项的值都必须变大。我想到的思路是将字体的缩放比例调大一些,下面是我的修改步骤。1、修改默认字体的大小Step1: 修改frameworks/base/core/java/android/content/res_源泉怎么改初始字体

面向对象--领域模型,设计模型,实现模型总结-程序员宅基地

文章浏览阅读1.1k次。--基于面向对象葵花宝典读书总结。领域建模是面向对象真正开始。2个作用:发掘重要的业务领域概念;建立业务领域之间的关系。找名词:从用例中找名词。加属性:找出名词的属性。连关系:使用ER图,连类的关系。设计模型: 领域模型只是从用例模型中提炼出反应业务领域的概念,还不是软件类。设计模型就是实现领域类到软件类的转换。 静态模型:类模型,类的名词..._设计模型和领域模型

Spring Boot 2.x监控数据可视化(Actuator + Prometheus + Grafana手把手)-程序员宅基地

文章浏览阅读1.2w次,点赞10次,收藏21次。TIPS本文基于Spring Boot 2.1.4,理论支持Spring Boot 2.x所有版本众所周知,Spring Boot有个子项目Spring Boot Actuator,它为应用提供了强大的监控能力。从Spring Boot 2.0开始,Actuator将底层改为Micrometer,提供了更强、更灵活的监控能力。Micrometer是一个监控门面,可以类比成监控界的 Slf4...

pandas dataframe 两列转字典_dataframe两列变字典-程序员宅基地

文章浏览阅读6.3k次,点赞2次,收藏25次。在数据处理时,时常需要将数据表的两列转化为字典映射形式df[[‘A’,‘B’]] -----> dict(key:A, value:B)方法一:使用zipd = dict(zip(df['A'],df['B']))import pandas as pdimport numpy as nptest_dict = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'gender':[0,_dataframe两列变字典

随便推点

Educoder jQuery DOM操作_educoder第2关:实现 jquery 获取 dom 节点并修改 class-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏27次。Educoder jQuery DOM操作第1关:jQuery获取内容和属性第2关:jQuery设置内容和属性第3关:jQuery添加元素第4关:jQuery删除元素_educoder第2关:实现 jquery 获取 dom 节点并修改 class

Unity3D中避免在点击UGUI的按钮时触发射线检测方法_fairygui如何关闭按钮的射线检测-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏10次。在Unity3D中,我们经常需要通过射线检测对物体进行相关操作,但是常常会遇到当我们点击按钮时,射线检测同样会执行,为解决这种问题的困扰,我们需要判断该物体是否是给定的EventSystem对象。_fairygui如何关闭按钮的射线检测

ssm项目练习-电商平台后台管理系统_2_ssm电子商城后台管理系统》项目开发组的程序员,请实现如下功能: 用户信息列-程序员宅基地

文章浏览阅读1.4k次,点赞7次,收藏21次。7.后台登陆与管理首页面引入EasyUi所需文件登陆界面admin_login.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html><head><title>电子商务平台——后台登录页</title><!-- 引入E..._ssm电子商城后台管理系统》项目开发组的程序员,请实现如下功能: 用户信息列

ATT&CK红队评估(红日靶场三)_红日靶场第三套下载-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏9次。ATT&CK红队评估(红日靶场三)通关,拿下所有五台主机,包括:Centos、Ubantu、Windows xp、Windows 2008、Windows 2012_红日靶场第三套下载

运行PHP出现No input file specified错误解决办法-程序员宅基地

文章浏览阅读2.6k次。配置了一台新服务器,使用的是IIS + Fastcgi + PHP 5.3.X,访问php页面的时候就会报错“No input file specified”在php.ini文件里面修改:1、增加一行(这个最重要)fastcgi.impersonate = 12、修改两项(解开注释,这步看个人需要)cgi.fix_pathinfo=1cgi.force_redirect = 0..._访问.php no input file specified.

【Python】所有常用Python库和功能查询表_python库查询-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏30次。所有常用Python库和功能查询表_python库查询

推荐文章

热门文章

相关标签