大比分领先!ACCV 2022 国际细粒度图像分析挑战赛冠军方案

news2024/11/25 18:38:08

写在前面

在刚刚结束的 ACCV 2022 国际细粒度图像分析挑战赛中,我们团队在 133 支参赛队伍中脱颖而出,在 Leadboard-B 上以 2.5 的绝对优势取得冠军。

比赛成绩截图

在比赛过程中,我们使用了一些对细粒度分类十分有效的解决方案。

  • 例如,在数据清洗方面我们去掉二义性的图片;
  • 模型选择和方法方面我们使用了 ViT-L和 Swin-v2;
  • 为了提高实验效率,方便整个实验过程的管理,我们基于 MMSelfSupMMClassification 两个开源算法框架开展比赛。

所有的模型权重和全部代码都已经开源,欢迎大家使用。

本次赛事相关的所有预训练,微调以及推理的代码和配置文件分别放在 MMSelfSup 以及 MMClassification 的 projects 中, 欢迎大家 star 和使用。

自监督预训练部分:

https://github.com/open-mmlab/mmselfsup/tree/dev-1.x/projects/fgia_accv2022_1st

微调与模型推理:

https://github.com/open-mmlab/mmclassification/tree/dev-1.x/projects/fgia_accv2022_1st

今天这篇文章我们将整体介绍此次夺冠的方案,希望为大家提供一些经验以供参考

本周四晚,受 OpenMMLab 社区开放麦栏目的邀请,我们也将会针对本次的冠军方案开展直播,介绍更多的比赛细节,分享比赛期间的经验教训,欢迎大家预约观看!

(插入预约链接)

比赛介绍

ACCV 2022 细粒度图像分析挑战赛是由南京理工大学和澳大利亚 University of Wollongong 主办、极市平台提供技术支持的国际性赛事。

本赛事涉及的细粒度图像分析是计算机视觉和模式识别中的热门研究课题,其目标是对细粒度级别图像中的物体子类(如不同种类的“狗”:“哈士奇”、“阿拉斯加”、“萨摩耶”)进行定位、识别及检索等视觉分析任务的研究,具有真实场景下广泛的应用价值。然而因细粒度级别子类别间较小的类间差异和较大的类内差异,使其区别于传统图像分析问题成为更具挑战的任务。

此次我们参加的赛题是:网络监督的细粒度识别,接下来我们将从数据清洗模型选择训练技巧(Bag-of-tricks)、模型集成和后处理等角度介绍我们的方案。

数据清洗

官方提供的数据包含: Train, Test-A, Test-B。Train 是用于训练的数据,这部分数据官方提供了 label。同时因为这项比赛分为 A/B 榜,所以 Test A 和 Test B 分别是用于评测的数据,这两部分数据是可以获得的,但是他们的 label 是不提供的。 这几部分的数据的详细信息如下:

Train: 835K

Test-A: 60K

Test-B: 90K

对于用于训练的数据 Train, 其分布如下:

可以发现该数据为长尾分布,其中最多类的数据有 422 张图,最少类数据却只有 3 张图, 均值为 166 张。 除了以上的分布问题,训练数据还存在以下几个问题:

  1. 有噪声的图片,数据集中存在大量的图表图片(如下面这些图片所示)
  1. 有些图片的分辨率非常小
  1. 有一部分图片有多个 label
  1. 有些数据不可读取

针对以上问题,我们尝试了以下几种方案:

成功的方案:

  1. 我们过滤掉这些不可读取的图片,一共 4687 张
  1. 根据哈希文件名,过滤掉这些具有多个 label 的图片
  1. 我们不创建额外的 validation set,所有数据用于训练

无明显效果的方案:

  1. 由于数据集是一个长尾分布,我们尝试了 class-balanced sampler
  1. 采用聚类方法,将这些离群的异常值除去掉

模型选择和方法

考虑到模型性能和速度,我们所有实验均采用 ViT-L 和 Swin-V2。方法总览如下图所示:

总结起来就以下几步:

  1. 对 ViT-L[1] 和 Swin-V2[2] 进行自监督预训练
  1. 使用预训练的权重进行微调(fine-tunine)
  1. 然后对各个模型进行集成
  1. 推理时候进行数据的后处理

其中第 2 步和第 3 步通过自蒸馏的形式进行迭代,自蒸馏是指本次训练得到的集成模型充当 teacher 对下一轮模型的训练进行指导。

调试技巧

在分类微调(fine-tuning)的过程中我们使用了以下几种策略:

模型集成

我们最终使用了 17 个模型进行集成,其中包含 10 个 ViT-L 模型和 7 个 Swin-v2 模型,集成的权重通过其分别在 Test A 上的精度,按比例得到。总体来说就是,高精度模型权重更大,低精度模型权重更小。

后处理

因为比赛中有说明,Train 集中的类别不平衡,但 Test 集中类别是按均匀分布的,所有对最后的预测结果,我们微调了标签的分布,调整前后的标签分布如下图所示:

总结

最终,我们模型的消融效果如下图所示:

图十一 性能消融实验分析

代码仓库

考虑到效率和实验管理,我们选择了 MMSelfSupMMClassification,这两个库均来自于 OpenMMLab 开源框架。

此次赛事相关的所有预训练,微调以及推理的代码和配置文件分别放在 MMSelfSup 和 MMClassification 的 projects 中, 欢迎大家 star 和使用。

自监督预训练部分:

https://github.com/open-mmlab/mmselfsup/tree/dev-1.x/projects/fgia_accv2022_1st

微调与模型推理:

https://github.com/open-mmlab/mmclassification/tree/dev-1.x/projects/fgia_accv2022_1st

相较于市面上的其他库,这两个库具有以下优点:

  1. 丰富的模型库,便捷的跨库调用。例如 MMSelfSup 自带 MAE,其预训练无需改变任何代码就可以在 MMClassification 中使用。
  1. 方便的实验管理。下图展示了本次比赛的实验记录,每次实验都会保存在对应的文件夹下,包括详细的训练日志、可复现的 config、相关 checkpoint 等等,可便捷地进行配置对比。
  1. 丰富多元的各种数据增强策略,包括 RandomAug,RandomErase,MixUP,CutMiX,TTA 等等。

实验日志信息截图

我们也将于本周四晚在 OpenMMLab 社区开放麦开展直播,介绍冠军方案更多的比赛细节,分享比赛经验,欢迎预约观看!

引用

[1] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

[2] Swin Transformer V2: Scaling Up Capacity and Resolution

[3] ArcFace: Additive Angular Margin Loss for Deep Face Recognition

[4] Masked Autoencoders Are Scalable Vision Learners

[5] SimMIM: A Simple Framework for Masked Image Modeling

[6] Sub-center ArcFace: Boosting Face Recognition by Large-scale Noisy Web Faces

[7] AdaptiveMarginArcFace: Google Landmark Recognition 2020 Competition Third Place Solution

[8] The Equalization Losses: Gradient-Driven Training for Long-tailed Object Recognition

[9] Learning with not Enough Data Part 1: Semi-Supervised Learning

[10] Model soups: averaging weights of multiple fine-tuned models improves accuracy without increasing inference time

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

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

相关文章

服务器渲染技术-->Thymeleaf

目录 一.基本介绍 1.Thymeleaf 是什么 2.Thymeleaf 的优点 3. Thymeleaf 的缺点 二.Thymeleaf 机制说明 三.Thymeleaf 语法 1. 表达式 1. 表达式一览 2. 字面量 3. 文本操作 2.运算符 1. 数学运算 2. 布尔运算 3. 比较运算 4. 条件运算 3.th 属性 4.迭代 5.条…

PLC模拟量传输过程

网上对PLC模拟量的一些解释含糊不清,令参考人疑惑重重,搞不懂现场—>PLC—>上位机的过程走向。 . 应该了解什么是数字量?什么是模拟量?下面是我的理解。 数字量:没有单位,表示一个数字,0~…

Linux-iNode-软硬链接

文章目录inode磁盘了解站在OS角度磁盘就是线性结构如何确认inode和后面的那个block相关联呢?如何在大的inode Table中安排一个新文件的inode?目录下创建文件的过程都发生了什么软硬链接软链接:特别像快捷方式使用场景硬链接二者区别:硬链接有…

nodejs+vue+element+eachers构建开源项目大型连续剧(1)搭建nodejs服务器

在前端开发过程中,可能某些时候需要自己搭建一台服务器用于一些文件图片请求或者进行后端相关知识的学习。本文主要讲解如何通过nodejs进行一个基础服务器的搭建,包括如何将文件布置的服务器,以及基础接口的开发。后面可能会更新关于通过node…

从根源帮助改变数据延误, Qlik 辅助金融行业实现信贷渠道预测

信贷行业面临的业务挑战 传统方式下,营利性增长和正确管理信贷组合风险的能力是通过静态报告和电子表格完成的,不仅数据单独进行汇总,同时交付过程也存在延迟。这种情况导致组织不得不基于不完整的信息来制定关键的信贷和定价决策。信贷员需…

研发中台拆分过程的一些心得总结

背景在 21 年,中台拆分在 21 年,以下为中台拆分的过程心得,带有一定的主观,偏向于中小团队中台建设参考(这里的中小团队指 3-100 人的团队),对于大型团队不太适用,毕竟大型团队人中 …

Elasticsearch8系列【2】Windows环境安装ES8

有道无术,术尚可求,有术无道,止于术。 文章目录前言Windows安装Elasticsearch8.5.21. 下载2. 获取密码3. 注册服务4. 登录安装可视化工具前言 Elasticsearch使用Java语言开发,在安装之前需要安装JDK环境。基本支持所有主流操作系统…

Kioptrix Level2靶机

0x01信息收集 nmap -sV -O 10.121.65.83 0x02 万能密码&&命令执行 访问80端口(经测试 443端口并没有办法访问) 登录框尝试弱口令和sql注入 发现存在万能密码 admin# 存在一个ping命令,尝试通过管道符看是否会执行命令 127.0.0.0|id 存在命令执行漏洞&am…

network判断是否瓶颈

首先判断连接是否建立: tcp主机a->主机b的请求连接命令,半连接队列在主机b 判断半连接队列命令 netstat -s |grep -i listen 值过大,半连接队列无法建立 2.tcp主机a收到主机b的回复,主机a->主机b的连接请求,全…

成才之路杂志社成才之路编辑部成才之路杂志2022年第33期目录

高教与成才研究《成才之路》投稿:cn7kantougao163.com 融媒体时代大学生职业发展与就业指导课程体系建设研究 张效良;李玉波; 1-4 “三全育人”背景下高职辅导员思政教育方法研究 杨春蕊; 5-8 “五育”学生管理模式对高校思政教育的影响研究 张晓英; 9-…

基数排序python

一、基数排序介绍 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,…

【Windows逆向】Windows进程动态patch入门+pyqt5搭建GUI

目标 希望学习对Windows进程的动态patch,我们选择的exe是buuoj的“不一样的flag”。这题是迷宫题的hello world,没有加壳,没有任何代码混淆,且可以把它当成一个超小型的游戏,有助于提升信心。 为了直观,以…

【学习笔记】SAP固定资产的减值功能

SAP固定资产的减值功能 若固定资产出现减值迹象,也就是固定资产的可收回金额小于账面价值时,就要计提固定资产减值准备。 分录: 借:资产减值损失(损益科目) 贷:固定资产减值准备(资…

软件测试 | APP测试 —— Appium 的环境搭建及工具安装教程

推荐阅读: [内部资源] 想拿年薪30W的软件测试人员,这份资料必须领取~ Python自动化测试全栈性能测试全栈,挑战年薪40W 从功能测试进阶自动化测试,熬夜7天整理出这一份超全学习指南【附网盘资源】 大家应该都有同一种感觉&…

传奇怎么设置GM帐号GM命令

传奇怎么设置GM帐号GM命令 我们先创建账号进入游戏 进入到服务器里面打开我的电脑 计算机D:\Mirserver\Mir200\Envir打开AdminList.txt文件 退出保存文本,小退一下游戏再次进入就是GM号了 方法二:在任务栏找到M2Server 点击查看-----列表信息一 保存后我…

微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.6 TCC 模式原理

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式事务 文章目录微服务框架分布式事务38 动手实践38.6 TCC 模式原理38.6.1 TCC 模式原理38.6.2 举个栗子38.6.3 工作流程38.6.4 总结38 …

TensoRT—— buffers管理(samplesCommon::BufferManager)

BufferManager类处理主机和设备buffer分配和释放。 这个RAII类处理主机和设备buffer的分配和释放、主机和设备buffers之间的memcpy以帮助inference,以及debugging dumps以验证inference。BufferManager类用于简化buffer管理以及buffer和 engine之间的交互。 代码位…

web前端网页制作课作业:校园科技节活动网站 (纯HTML+CSS布局制作)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

cleanmymac x免费版安装包下载使用教程

我这台用了7年的MacBook Air ,硬盘容量只有 128G ,用段时间就会被系统提醒「您的磁盘几乎已满」,并且变得有点卡顿。这时,清理一下垃圾,腾出更多储存空间,就能让它满血复活。 这个时候我们可以用 CleanMyM…

Kafka系列之:使用kafka manager增加topic分区和副本

Kafka系列之:使用kafka manager增加topic分区和副本) 一、相关技术博客二、增加分区三、增加副本一、相关技术博客 Kafka系列之:实现kafka topic优先副本的选举Kafka系列之:使用Kafka Manager实现leader分区平衡和broker节点上分区平衡二、增加分区 增加分区: 增加完分区…