冠军方案!2023第二届广州·琶洲算法大赛

news2024/11/29 18:25:38

 Datawhale干货 

作者:唐楚柳,算法工程师,冠军选手

1.简介

大家好我是‍Alex‍,31岁,现为一名图像算法工程师,主要研究方向是计算机视觉图像识别。工作之余的研究兴趣包括ocr,aigc,llm,vit。获得

  • 2021 CVPR PIC Challenge: 3D Face Reconstruction From Multiple 2D Images(第7名)

  • 2021 IKCEST第三届“一带一路”国际大数据竞赛(第10名)

  • 2022“域见杯”医检人工智能开发者大赛(第6名)

  • 2022 粤港澳大湾区(黄埔)国际算法算例大赛-路测3D感知算法(第4名)

  • 2023 CVPR 2023 1st foundation model challenge-Track1(第6名)

本次主要分享在2023第二届广州·琶洲算法大赛基于文心交通大模型的多任务联合训练赛题的Rank1方案。

35395b366283d26cd1ebf8387ac513bd.jpeg

2.赛题分析

近年来,智慧汽车、人工智能等产业发展,为智能交通发展创造了良好的发展机遇。智能交通相关技术已经渗透到我们的日常生活中,但是现有大模型的多任务处理模式以及传统的感知方法(如分类、检测、分割等)无法满足我们对更广交通场景以及更高自动驾驶水平的追逐。我们从当前实际技术研究中的关键问题出发,解决多任务、多数据间冲突的问题。本赛道联合分类、检测、分割三项CV任务三大数据集至单一大模型中,使得单一大模型具备能力的同时获得领先于特定单任务模型的性能。

b4aefffb6222494972e0d86897f49d32.png

3.解题思路

在本次赛题的数据挖掘中,我们发现赛题的难点在于类别不平衡的语义分割和小目标检测,在backbone选型的问题上我们有一点小分歧,Convnext-Large 和Swin-L。从实践的角度看在数据量充足的情况考虑transformer,而数据量少的情况下优先考虑cnn,当前比较 优秀的两个backbone为swin-transformer和convnxet。我们在这两个backbone上的实验比较多,主要为了解决类别不平衡的语义分割和小目标检测,主要围绕以下的几点展开:

  • 骨干网络选型Convnext-Large 和Swin-Large

  • 检测头和分割头的选型 (DINO,RT-DETR,YOLOv5,yolov7)(upernet,maskformer,mask2former)

  • 多尺度训练

  • 检测的sahi切图方案。

  • 检测的copypaste方案。

  • TTA 后处理 (检测的多尺度推理,分割的多次结果ensemble mulit scale推理)

4.方案

4.1 ConvNeXt多任务网络结构

我们的整体的方案如下图所示,主体的网络结构为ConvNeXt-Large,在网络的每一个stage后输出一个特征图feature,主体的设计为三个任务共享feature,目标检测部分单独使用一个FPN(输入为feature1,2,3)后接上yolov5Head,分类使用了feature4的特征,分割使用feature1,2,3,4,后接上mask2former Head。

4.2 YOLOCSPPAN的网络结构图

P2,P3,P4 对应4.1中的feature2,3,4。P4经过卷积,上采样和P3在通道上合并,由CSPLayer提取特征得到新P3,同理得到最终的P2,

最终输出的P2经过stride为2的卷积和新P3在通道上合并,由CSPLayer提取特征得到最终输出的P3,最终输出的P3经过stride为2的卷积和P4在通道上合并,由CSPLayer提取特征得到最终输出的P4.

a7fd3f4ceb746bc03dfbd1dc8a936bab.png

FPN输出的P2,3,4会传入三个yolov5Head,ConvNeXt配合yolohead会有较高的涨点(图出自百度AI公众号-汇集YOLO系列经典和前沿算法,实现高精度实时检测!)

037f1577ab9c7ca9a6027c44d1643173.png 9e878a05cb5acb55fad76b3c80d663a0.png

SegmentationHead我们考虑到了像素的类别不平衡的问题,最先开始调试MaskFormer,Masks2Former同时调试了,从下图我们可以看出Mask2Former在semantic的指标上比高出MaskFormer 1.1%,而在instance和panoptic上比MaskFormer高出5.1%和10%。

MaskFormer和Mask2Former的区别在于后者使用了多尺度的信息。

e7e6078846cc780a0fa58aa3b7ff93f8.png 84e813e075fbcdb9c963c2f63c482358.png
4.3数据增强

随机缩放(尺度变换):对输入图像进行随机的放大或缩小操作,可以增加数据样本的多样性,使模型能够处理不同尺度的目标物体。 

随机裁剪(位置变换):从输入图像中随机裁剪出固定大小的区域作为训练样本,通过改变目标物体的位置来增加数据的多样性。

随机水平翻转(镜像):以一定的概率对输入图像进行水平翻转操作,使得模型能够学习到目标物体在不同方向上的特征。 

高斯噪声:向输入图像中添加高斯噪声,可以增加图像的复杂性,使得模型能够更好地适应真实世界中的噪声情况。 

高斯模糊:对输入图像进行高斯模糊操作,可以减少图像中的细节信息,从而使得模型能够更关注目标物体的整体形状和结构。 

旋转:对输入图像进行随机旋转操作,可以增加目标物体在不同角度下的样本,提高模型对目标物体旋转不变性的学习能力。 

网格型变:通过对输入图像进行网格型扭曲操作,可以引入局部形变,增加数据的多样性。 

随机色彩变换:对输入图像进行随机的色彩变换,如调整亮度、对比度和饱和度等,以增加图像的多样性。

随机天气(BDD雨雾天气居多):通过向输入图像中添加随机的天气效果,如雨、雾等,模拟真实场景下的变化,提高模型对复杂环境的适应能力。 

这些数据增强方法的使用可以有效地增加训练样本的多样性,从而提高模型对不同场景和变化的泛化能力。同时,合适的数据增强方法选择也需要根据具体任务的特点和需求进行调整和优化。

1574d91160e39933fbab2301278a0715.png

HSV 颜色增强:对输入图像进行 HSV 颜色空间的随机调整,如调整亮度、对比度和饱和度等,以增加样本的多样性和泛化能力。

随机裁剪:从输入图像中随机裁剪出固定大小的区域作为训练样本,这有助于模型学习到不同目标物体的局部特征,并提高模型的鲁棒性。 

Resize 1024:将输入图像的大小调整为固定的尺寸(例如 1024x1024),这既有助于减少显存占用,增大批量大小(BS),又能够在一定程度上提高模型的检测精度。 

随机翻转:以一定的概率对输入图像进行水平或垂直翻转操作,以增加数据样本的多样性,并保持目标物体的不变性。

2592546d4099c6671aacbcd11f18da96.png
4.4调参优化策略

整体考虑到显存数据集规模和模型收敛的节点 50000 iter 附近

训练设置 58200 max_iter

由于是余弦周期 考虑在50000 节点 衰减学习率solver_steps=[50000],)

46740ebf1273e212dfcf07a7958db65d.png
optimizer = L(build_lr_optimizer_lazy)(
    optimizer_type='AdamW',
    base_lr=1e-4,
    weight_decay=1e-4,
    grad_clip_enabled=True,
    grad_clip_norm=0.1,
    apply_decay_param_fun=None,
    lr_multiplier=L(build_lr_scheduler_lazy)(
        max_iters=60000,
        warmup_iters=200,
        solver_steps=[50000],
        solver_gamma=0.1,
        base_lr=1e-4,
        sched='CosineAnnealingLR',
    ),
)

调参策略:

  • swin-tiny

  • upernet

  • maskformer/mask2former

  • RT-DETR

  • yolov5

  • swin-transformer

  • slice det image

  • copypaste

调优过程:

我们从swin-tiny开始 再到convnext-L的upernet,dino(减少transformer层的)检测的效果一直不佳。优先考虑单任务的调参,从Segmentation开始,从PaddleSeg调试maskformer,mask2former其实在同阶段已经调通,我们为了节省调优的时间,mask2former需要更长的训练周期 2Days more,而且maskformer的精度是接近当时榜上的最好的成绩。检测部分仍然很差,开始调优ppyoloe-head,ppyolo的head  train需要额外的参,过于复杂,所以调试了RT-DETR,这个过程中尝试了slice切图,2048的大尺度推理等策略,经过多轮的调参,我们把检测的head换回yolov5 anchor base的head,继续尝试多尺度的ms tta。

在6月底,重新修改了baseline。使用convnext-L+maskformer-fc head -yolov5 head,作为新基线。继续尝试1024 切图,mosaic 等transform。发现反而掉点,接下来对检测的目标进行crop,随机贴图全类别做会导致seg的掉点,我们平衡了数据集,将<400 个目标的class 进行贴图训练,指标能到94.8  接下来换backbone,我们将backbone 换成swin-transformer-L  那么当前的结构为  swin-L+maskformer +fc head yolov5。seg 直接涨到 0.69 但是 配上RT-DETR head 检测不佳。最终我们换回new base 7.1号的方案,把maskformer换成mask2former。

更多的实验结果可以去我的repo查看:https://github.com/chuliuT/OneForAll_mask2former_yolov5

5.调参经验

  • 3e-4通常是一个很好的学习率,AdamW+CosineWarmup

  • 在模型选型的前期可以使用少量的数据和轻量级的网络来尝试调优

  • 数据集的EDA分析在调优的同时尽快找出赛题难点,需要处理的地方

  • 数据增强的组合需要更多的实验的尝试,但有效的只有那么两三个

  • 模型训练的收敛时间节点需要实验去预估

  • 不到最后一刻,不要放弃你的提交

6 .总结

随着数据的规模大小和模型的日益更新,越来越多的研究者开始倾向于使用transformer模型来处理图像任务。因为transformer模型具有较好的表现力和良好的迁移性,逐渐取代了传统的convnet模型在图像处理领域的主导地位。

然而,尺度变化一直是一个令人头疼的问题。在处理图像中的尺度变化时,尝试了各种策略,如多尺度训练和图像金字塔等方法,以应对不同尺度下的物体检测和分类任务。除了尺度变化,图像中还存在着其他挑战,例如小目标检测、细粒度分类和语义分割中的像素不平衡。

对于小目标检测问题,采用了random_crop和ms推理的方式来提高性能。在细粒度分类任务中,致力于解决类别之间差异较小导致的难题,通过引入更加精细的特征表示和auto-augment来改善分类结果。而在语义分割任务中,类别像素不平衡问题一直存在,探索了各种通用和任务特定的解决方案,如不确定损失函数、像素平衡采样等方法来解决。ConvNeXt和Swin-Transformer是当前主流的两种模型派系。ConvNeXt具有更快的收敛时间,适合处理大规模数据集,而Swin-Transformer在表现力和迁移能力方面更好。

在本赛题中,我们在设计方案时考虑了精度和收敛时间之间的权衡关系,选择了ConvNeXt-Large作为基础网络结构,并结合了clshead、mask2former和yolov5Head组合以达到更好的综合性能。然而,在多任务训练中,如何控制grad的scale仍然是一个待解决的问题。当前的训练策略导致了语义分割任务过早进入收敛期,而分类和目标检测任务仍处于欠拟合阶段。展望未来,多任务大模型的联合训练仍然是一个具有挑战性的课题。同时,在微调阶段如何保持历史知识也是一个重要的问题。视觉提示微调(Visual Prompt Tuning)给了我们一些启示,但还需要进一步的研究和验证其效果。我们相信通过不断地探索和创新,可以进一步提升多任务视觉大模型的性能和应用范围。

7 .参考文献

[1]. Liu, Zhuang, et al. A ConvNet for the 2020s. arXiv preprint arXiv:2201.03545, 2022.
[2]. Liu, Ze, et al. Swin transformer: Hierarchical vision transformer using shifted windows. In: Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021. p. 10012-10022.

[3] https://mp.weixin.qq.com/s/Hki01Zs2lQgvLSLWS0btrA

[4] Per-Pixel Classification is Not All You Need for Semantic Segmentation

[5] Masked-attention Mask Transformer for Universal Image Segmentation

[6] DETRs Beat YOLOs on Real-time Object Detection

[7] Unified Perceptual Parsing for Scene Understanding

[8]https://aistudio.baidu.com/aistudio/projectdetail/6337782?sUid=930878&shared=1&ts=1691544272476

[9]https://github.com/xiteng01/CVPR2023_foundation_model_Track1

[10] https://github.com/HandsLing/CVPR2023-Track1-2rd-Solution

bd3e91aa3ebcaee1ff734c1e5d0a8f64.png

整理不易,三连

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1096008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[自学记录06|*Animation]四元数、死锁与方位插值

一、前言 还记得在很久以前不知道什么时候&#xff0c;看到过一个TA的面经&#xff0c;里面提到了四元数和万向锁&#xff0c;当时自己也查了一些资料&#xff0c;但是看的也是云里雾里&#xff0c;恰巧这两天学校的动画原理课讲到了这&#xff0c;打算整理一下做个小结。 二、…

【Linux学习笔记】 - 项目自动化工具make/Makefile的使用

一、背景知识 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力。一个工程中的源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中。makefile定义了一系列的规则来指定&#xff0c;哪些文件需要先编译&#xff0c;哪些文件需…

芯片学习记录SN74AHC1G14DBV

SN74AHC1G14DBV 芯片介绍 SN74AHC1G14器件是单个逆变器门。该器件执行布尔函数Y /A.The器件作为独立的逆变器门发挥作用&#xff0c;但由于施密特作用&#xff0c;门可能对正&#xff08;VT&#xff09;和负&#xff08;VT−&#xff09;信号具有不同的输入阈值电平。 引脚信…

07测试Maven中依赖的范围,依赖的传递原则,依赖排除的配置

依赖的特性 scope标签在dependencies/dependency标签内,可选值有compile(默认值),test,provided,system,runtime,import compile&#xff1a;在项目实际运行时真正要用到的jar包都是以compile的范围进行依赖 ,比如第三方框架SSM所需的jar包test&#xff1a;测试过程中使用的j…

大数据基础技能入门指南

本文介绍了数据工作中数据基础和复杂数据查询两个基础技能。 背景 当下&#xff0c;不管是业务升级迭代项目&#xff0c;还是体验优化项目&#xff0c;对于数据的需求都越来越大。数据需求主要集中在以下几个方面&#xff1a; 项目数据看板搭建&#xff1a;特别是一些AB实验的看…

【算法练习Day20】修剪二叉搜索树将有序数组转换为二叉搜索树把二叉搜索树转换为累加树

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 修剪二叉搜索树将有序数组转…

Grade 5 Math

数形结合 5 2 3 https://download.csdn.net/download/spencer_tseng/88431286

深入理解 Java 中的 synchronized 关键字

引入多线程的重要性和挑战 可以参考另一篇文章 https://blog.csdn.net/qq_41956309/article/details/133717408 JMM&#xff08;Java Memory Model&#xff0c;Java 内存模型&#xff09; 什么是JMM JMM&#xff08;Java Memory Model&#xff0c;Java 内存模型&#xff09…

怎么在抖音上引流?分享五个抖音引流推广必备的几个方法

大家好&#xff0c;我是 小刘今天为大家分享的是抖音引流知识分享&#xff0c;今天咱们聊一些干货知识&#xff0c;绝对会让你们有一个重新的认知。抖音的流量大&#xff0c;是毋庸置疑的&#xff0c;抖音也是最早一批短视频平台。抖音于2017年上线&#xff0c;一开始主要是通过…

Golang学习记录:基础知识篇(一)

Golang学习&#xff1a;基础知识篇&#xff08;一&#xff09; 前言什么是Golang&#xff1f;Go语言的基础语法语言结构基础语法数据类型基础使用 前言 很久之前就想学Go语言了&#xff0c;但是一直有其他东西要学&#xff0c;因为我学的是Java嘛&#xff0c;所以后面学的东西…

配置VScode开发环境-CUDA编程

如果觉得本篇文章对您的学习起到帮助作用&#xff0c;请 点赞 关注 评论 &#xff0c;留下您的足迹&#x1f4aa;&#x1f4aa;&#x1f4aa; 本文主要介绍VScode下的CUDA编程配置&#xff0c;因此记录以备日后查看&#xff0c;同时&#xff0c;如果能够帮助到更多人&#xf…

操作系统导论-第四章作业(待更)

一、进程 进程就是运行中的程序&#xff0c;程序本身是没有生命周期的&#xff0c;它只是存储在磁盘上的一些指令&#xff08;或者一些静态数据&#xff09;&#xff0c;操作系统将这些指令和数据加载到内存中&#xff0c;使其运行起来。 1.1 虚拟化CPU技术 根据我们平时使用…

基于Java的共享充电宝管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

AI时代助力程序员与项目经理的双翼飞翔:从开发到成长的秘诀

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

企业网盘中支持在线编辑的有哪些选项?

企业网盘作为现代企业不可或缺的工具之一&#xff0c;为企业提供了便捷的文件存储和共享功能。而其中支持在线编辑的解决方案更是减少了对额外软件的依赖&#xff0c;使团队成员可以直接在浏览器中进行实时协作。 什么是在线编辑&#xff1f; 在线编辑是指用户无需下载文件&a…

3D 生成重建008-zero123让扩散模型了解空间信息zero-shot 单图生3d

3D 生成重建008-zero123让扩散模型了解空间信息zero-shot 单图生3d 文章目录 00 论文工作1 论文方法1.1 条件生成微调1.2 维护3d表示 2 效果 0 0 论文工作 之前分享的工作主要尝试是从一个pre-trained 文生图的diffusion模型中去蒸馏知识&#xff0c;从而去维护一个3d的表示…

数据结构上机实验——栈和队列的实现、栈和队列的应用、进制转换、约瑟夫环问题

文章目录 栈和队列上机实验1.要求2.栈的实现&#xff08;以顺序栈为例&#xff09;3.队列的实现&#xff08;以顺序队列为例&#xff09;4.利用栈实现进制转换5.利用队列解决约瑟夫环问题6.全部源码Stack.hQueue.htest.cpp 栈和队列上机实验 1.要求 1.利用栈的基本操作实现将任…

docker-compose部署elk(8.9.0)并开启ssl认证

docker部署elk并开启ssl认证 docker-compose部署elk部署所需yml文件 —— docker-compose-elk.yml部署配置elasticsearch和kibana并开启ssl配置基础数据认证配置elasticsearch和kibana开启https访问 配置logstash创建springboot项目进行测试kibana创建视图&#xff0c;查询日志…

李宏毅生成式AI课程笔记(持续更新

01 ChatGPT在做的事情 02 预训练&#xff08;Pre-train&#xff09; ChatGPT G-Generative P-Pre-trained T-Transformer GPT3 ----> InstructGPT&#xff08;经过预训练的GPT3&#xff09; 生成式学习的两种策略 我们在使用ChatGPT的时候会注意到&#xff0c;网站上…

2023/10/15

文章目录 1.uniapp之Vue2升Vue3值得注意的几点1.1 页面生命周期的使用1.2 引入资源的方式 2. 浏览器本地存储之Cookie和webStorage3. CSS变量 var()的用法4. CSS之实现线性渐变背景5. 图片无法和文字对齐的正确解决方案6. 使用正则处理接口返回的富文本内的图片7. transition实…