论文阅读:Fine-Grained Recognition With Learnable Semantic Data Augmentation

论文标题:Fine-Grained Recognition With Learnable Semantic Data Augmentation
翻译:具有可学习语义数据增强的细粒度识别
发表期刊:IEEE TRANSACTIONS ON IMAGE PROCESSING
代码地址:https://github.com/LeapLabTHU/LearnableISDA

摘要

细粒度图像识别是计算机视觉中的一个长期挑战,主要聚焦于区分同一大类下多个子类的物体。由于同一大类下的图像通常具有相似的视觉外观,因此挖掘区分细粒度类别的视觉线索是关键。然而,尽管常用的图像级数据增强技术在通用图像分类问题中取得了显著成功,但它们在细粒度场景中的应用较少,因为其随机编辑区域的行为容易破坏隐藏在微小区域中的区分性视觉线索。本文提出通过在特征级别多样化训练数据来缓解区分性区域丢失的问题。具体而言,我们通过沿语义上有意义的方向转换图像特征来生成多样化的增强样本。这些语义方向通过协方差预测网络来估计,协方差预测网络预测样本级别的协方差矩阵,以适应细粒度图像中固有的类内大变异性。此外,协方差预测网络与分类网络以元学习的方式共同优化,从而缓解退化解问题。

方法

隐式语义数据增强

隐式语义数据增强(ISDA)在特征层面进行数据增强,即沿着有意义的语义方向转换图像特征。这些方向是基于深度特征的协方差矩阵确定的。具体来说,对于一个C类分类问题,ISDA会在每次训练迭代时,通过在线估计每个类别的协方差矩阵,从而计算出类别间的统计信息。

对于每个样本,ISDA会基于其真实标签,从与该标签相关的协方差矩阵中采样变换方向。然后,它在这些方向上对深度特征进行增强。增强后的特征会用于网络的下一层。为了实现充分的增强,ISDA会从这些方向中随机采样多个变换方向。经过多次变换后,得到的增强特征在网络中会作为新的输入,从而改变原本的训练数据。

在这个过程中,ISDA对这些增强数据进行训练,使用一种修改过的交叉熵损失函数来优化网络。这个损失函数不仅考虑了原始特征,还包括了增强后的特征。这种做法能有效提高模型的鲁棒性,提升其对不同输入数据的适应能力。

进一步地,如果我们假设采样的变换方向趋向无限多,ISDA能够推导出一个期望损失的上界,并通过优化这个上界来高效地实现特征增强的过程。最终,ISDA相当于引入了一种新的鲁棒损失函数,它能够兼容任何使用传统交叉熵损失进行训练的神经网络架构,从而提高模型的泛化能力。

协方差矩阵预测网络

前述的隐式语义数据增强(ISDA)方法的表现依赖于准确估计的类别协方差矩阵,这些协方差矩阵直接影响语义方向的质量。然而,在细粒度视觉识别任务中,训练数据量有限、类内方差较大而类间方差较小,这些特点使得协方差矩阵的估计变得非常具有挑战性。如果协方差矩阵估计不准确,就会限制模型性能的提升。因此,为了改善这一问题,我们提出了一种基于协方差矩阵预测网络(CovNet) 的方法,来自动学习每个样本的语义方向,而不再像传统方法那样依赖统计估计类别协方差矩阵。

CovNet 是一个多层感知机(MLP),接收样本的深度特征作为输入,并预测每个样本的语义方向(即协方差矩阵)。这样,通过将预测的协方差矩阵代入 ISDA 的损失函数,我们可以实现对模型的有效训练。与传统方法不同,我们的网络直接学习每个样本的协方差矩阵,而不是在全局范围内进行类别间的协方差估计。

在实际操作中,由于 GPU 内存的限制,CovNet 只预测协方差矩阵的对角元素,并将其他元素设为零,这一做法借鉴了现有的方法。此外,我们在 CovNet 的最后一层使用了 Sigmoid 激活函数,确保预测的协方差矩阵是正定的。

然而,如果我们直接将协方差矩阵预测网络和分类网络一起训练,可能会导致一个问题。由于协方差矩阵必须是正定的,简单的联合训练会促使 CovNet 产生一个零矩阵,这样就不会对分类性能产生任何实质性的提升。因此,直接的联合训练策略可能无法带来分类准确率的显著提高,需要进一步改进训练方法。

元学习方法

为了应对退化解问题,我们提出了一种基于元学习的解决方案。通过设置一个元学习目标,并利用元梯度优化 CovNet,我们能够让 CovNet 学会通过挖掘元数据中的元知识,自动生成合适的协方差矩阵。以下是该方法的详细流程。

元学习目标

在我们的方案中,分类网络的优化目标是最小化基于学到的协方差矩阵计算出的 ISDA 损失。具体来说,在训练过程中,对于每个输入样本,分类网络首先通过其特征提取器生成样本的特征。然后,CovNet 根据该特征预测样本的协方差矩阵,这个协方差矩阵随后作为 ISDA 损失函数的参数进行计算。整个训练过程的目标是通过优化分类网络和 CovNet 的参数来最小化这个损失函数。

CovNet 的网络参数是通过元学习进行优化的。我们从一个单独的元数据集(即不同于训练数据的数据集)中获取元数据,用于优化 CovNet。优化目标是最小化由元数据计算出的交叉熵损失函数,即网络预测与实际标签之间的误差。通过这种方式,CovNet 学会生成合适的协方差矩阵,从而帮助分类网络在训练中做出更好的决策。

优化流程

我们的优化过程分为三个主要阶段,分类网络和 CovNet 会交替更新,每个阶段都有其特定的任务和作用:

伪更新阶段

在这个阶段,分类网络会使用训练数据进行更新。这一更新过程并不会直接用于最终的分类结果,而是作为“伪更新”进行。伪更新后的分类网络(即伪更新的网络)用于提供梯度信息,帮助 CovNet 在下一个阶段根据当前的训练数据找到最合适的协方差矩阵。这个过程是分类网络和 CovNet 之间的一种间接互动,目的是为后续的元更新提供基础。

元更新阶段

在伪更新后,CovNet 会基于元数据进行更新。此时,CovNet 会在元数据的帮助下,通过优化生成合适的协方差矩阵。这个阶段的目标是让 CovNet 学会如何根据不同样本的深度特征生成合适的语义方向,从而有效提升分类网络的性能。

真实更新阶段

在元更新之后,分类网络会根据更新后的 CovNet 预测出的协方差矩阵进行“真实更新”。这个更新步骤是分类网络的实际优化过程,它依赖于最新的 CovNet 生成的协方差矩阵,进行特征级的数据增强,从而提高分类准确性。

训练数据的重用

与传统的元学习方法不同,我们的方法不需要单独的元数据集,而是直接使用训练集作为元数据集。这种做法使得我们的方案更加高效。在每次训练迭代中,我们从训练集随机选择一批数据,并将其分成两个不同的批次:一个用于训练网络(训练批次),另一个用于进行元学习(元批次)。在每次优化迭代后,我们会交换这两个批次,以确保训练数据和元数据互不重叠,从而提高训练效率。

元学习算法的收敛性

我们证明了所提出的元学习算法在特定的条件下能够收敛。具体而言,算法中的元损失和训练损失的梯度会逐步趋近于零,这意味着算法在优化过程中会稳定到一个临界点。

元损失的收敛性:在训练的每一轮中,随着迭代步数的增加,元损失的梯度期望会逐渐减小。根据收敛性定理,这种减小的速度是以 1/根号T 的比例进行的,其中 T 是优化的步数。这表明,算法的优化过程会随着时间的推移越来越接近一个稳定的状态。

训练损失的收敛性:随着迭代的进行,训练损失的梯度期望会收敛到零。也就是说,模型最终会学到一个稳定的解决方案,不再发生剧烈的更新,最终达到最优状态。

加速元学习框架

由于元更新过程需要计算二阶梯度,导致其计算开销较大。为了提高训练效率,我们采用了一种加速方法,即冻结部分分类网络的参数。在伪更新过程中,我们冻结了网络的前几个模块,只让后面的模块参与梯度计算。这样,在进行元更新时,元梯度的计算只依赖于伪网络的一部分,从而减少了计算量。这种方法显著提高了训练效率,同时确保了模型性能不受影响。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[极客大挑战 2019]Http 1

进入环境: 检查源码发现有一个链接,但是这里没有绑定,需要手动跳转,打开后,发现提示: 这里就是需要我们从https://Sycsecret.buuoj.cn来访问它 因此我们抓包,使用referer:服务器伪造…

吾杯网络安全技能大赛——Misc方向WP

吾杯网络安全技能大赛——Misc方向WP Sign 题目介绍: 浅浅签个到吧 解题过程: 57754375707B64663335376434372D333163622D343261382D616130632D3634333036333464646634617D 直接使用赛博橱子秒了 flag为 WuCup{df357d47-31cb-42a8-aa0c-6430634ddf4a} 原神启动…

如何查看下载到本地的大模型的具体大小?占了多少存储空间:Llama-3.1-8B下载到本地大概15GB

这里介绍一下tree命令,可以方便的查看文件目录结构和文件大小。 命令行tree的具体使用,请参考笔者的另一篇博客:深入了解 Linux tree 命令及其常用选项:Linux如何显示目录结构和文件大小,一言以蔽之,sudo a…

【Java回顾】Day2 正则表达式----异常处理

参考资料:菜鸟教程 https://www.runoob.com/java/java-exceptions.html 正则表达式 有一部分没看完 介绍 字符串的模式搜索、编辑或处理文本java.util.regex包,包含了pattern和mathcer类,用于处理正则表达式的匹配操作。 捕获组 把多个字符…

招银网路Java后端一面,难度有点大!

这是一位武汉理工大学同学的招银网络一面面经,同样附带超详细的参考答案。大家可以用来查漏补缺,针对性地补短板。 招银网络一面还是比较简单的,基本都是一些比较重要且高频的常规八股,项目问的不多。到了二面的时候, 会开始主要考察你的项目。 1、自我介绍 自我介绍一般…

xadmin后台首页增加一个导入数据按钮

xadmin后台首页增加一个导入数据按钮 效果 流程 1、在添加小组件中添加一个html页面 2、写入html代码 3、在urls.py添加导入数据路由 4、在views.py中添加响应函数html代码 <!DOCTYPE html> <html lang

arcgis模版空库怎么用(一)

这里以某个项目的数据为例&#xff1a; 可以看到&#xff0c;属性表中全部只有列标题&#xff0c;无数据内容 可能有些人会认为空库是用来往里面加入信息的&#xff0c;其实不是&#xff0c;正确的用法如下&#xff1a; 一、下图是我演示用的数据&#xff0c;我们可以看到其中…

GJB系统设计说明模板

GJB系统设计说明模板及详解 1 范围 1.1 标识 1.2 系统概述 1.3 文档概述 2 引用文档 GJB XXX XXX XXX&#xff1b; XXX XXX。 前2章通用不再赘述 3 系统级设计决策 系统设计决策的目的:对系统规格说明中的关键需求(包括功能、质量属性和设计约束)进行分析,得到系统级概念性架构…

某小程序sign签名参数逆向分析

文章目录 1. 写在前面2. 接口分析3. 分析还原 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

2000-2020年各省财政一般预算支出面板数据

2000-2020年各省财政一般预算支出面板数据 1、时间&#xff1a;2000-2020年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;年份、省份、地方财政一般预算支出 4、范围&#xff1a;31省 指标解释&#xff1a;地方财政一般预算支出‌是指地方ZF根据预算安排&#xff0…

[羊城杯 2024]1z_misc

得到FL4G.zip和天机不可泄露.txt文件&#xff0c;其中压缩包需要解压密码&#xff1a; 二十八星宿&#xff1a; 东方苍龙七宿&#xff1a;角、亢、氐、房、心、尾、箕 南方朱雀七宿&#xff1a;鬼、井、柳、星、张、翼、轸 西方白虎七宿&#xff1a;奎、娄、胃、昴、毕、觜、…

右值引用全面剖析

为什么要有右值引用&#xff0c;右值引用出现前程序员们的困境&#xff1a; 在右值引用出现以前&#xff0c;想要把一块内存空间里的内容放到另一块内存空间&#xff0c;只能再开辟一块内存&#xff0c;然后将原来内存里的内容复制到新开辟的内存里&#xff0c;然后再把原来的…

mac下载Homebrew安装nvm

通过Homebrew安装 - 国内下载地址 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"安装nvm brew install nvm 配置nvm环境变量 export NVM_DIR“$HOME/.nvm” [ -s “/usr/local/opt/nvm/nvm.sh” ] && . “/usr/…

解决chatgpt(mac app登陆)出现报错:获取您的 SSO 信息时出错

由于我们是app登陆的&#xff0c;不能直接修改网站的链接&#xff0c;将 URL 的域名部分从 auth.openai.com 变更为 auth0.openai.com&#xff0c;然后加载新的地址&#xff0c;这时候应该就可以正常登录或注册了。 所以我们使用邮箱先载入auth0的地址&#xff0c;再更改自己的…

C#编写的盘符图标修改器 - 开源研究系列文章

这天在网上遇到一个Windows的盘符图标修改软件&#xff0c;但是它那个是.net framework 2.0的&#xff0c;所以就将其改成4.8.1的了&#xff0c;用于Windows 11等默认不安装2.0库的操作系统里使用。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 它直接进行注册表的修改…

【第二部分--Python之基础】03 容器类型的数据

Python内置的数据类型如序列&#xff08;列表、元组等&#xff09;、集合和字典等可以容纳多项数据&#xff0c;我们称它们为容器类型的数据。 序列 序列&#xff08;sequence&#xff09;是一种可迭代的、元素有序的容器类型的数据。 序列包括列表&#xff08;list&#xff…

HTML5实现好看的二十四节气网页源码

HTML5实现好看的新年春节元旦网站源码 前言一、设计来源1.1 主界面1.2 关于我们界面1.3 春季节气界面1.4 夏季节气界面1.5 秋季节气界面1.6 冬季节气界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看的二十四节气网页源码&#xff0c;春季节气&#xf…

走进深圳华为总部参观研学

在这个科技日新月异的时代&#xff0c;每一次与行业标杆企业领先者对话&#xff0c;都是开眼界的好时机。华研标杆游学高老师组织了一场企业家参访团体考察&#xff0c;带大家去到深圳华为总部研学&#xff0c;亲身感受科技巨头的风采&#xff0c;一起探讨未来的发展。 第一站-…

【unity错误】Unity 6 LTS 打开就报错Assertion failed on expressionxxx?

unity6发布已经有一段时间了&#xff0c;如果目前你已经使用了unity6进行项目开发&#xff0c;可能打开会发现如下报错 Assertion failed on expression: ‘!(o->TestHideFlag(Object::kDontSaveInEditor) && (options & kAllowDontSaveObjectsToBePersistent) …

集线器,交换机,路由器,mac地址和ip地址知识记录总结

一篇很不错的视频简介 基本功能 从使用方面来说&#xff0c;都是为了网络传输的标识&#xff0c;和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器&#xff0c;下面是区别&#xff1a; 集线器 集线器&#xff1a;一个简单的物理扩展接口数量的物理硬件。…