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

news2025/1/5 7:15:47

论文标题: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.coloradmin.cn/o/2270335.html

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

相关文章

vue-table-<td colspan=“2“>不生效

代码是2:1:4:1:4五分布局,效果却是如下: 因为这里的表格没有指定表格布局算法 /*设置表格布局算法*/ 2 table{ 3 table-layout:fixed; 4 } 这里需要了解table-layout属性值、定义和用法、固定表格布局、自动表格布局。 1定义和用法 tableLayout属性用来显示表格单元格、…

Windows系统提示ffmpeg.dll丢失怎么解决?

一、了解ffmpeg.dll文件 ffmpeg.dll是FFmpeg项目的一个动态链接库文件,FFmpeg是一个开源的多媒体处理框架,能够解码、编码、转码、混流、过滤和播放几乎所有已知格式的音频和视频文件。当Windows系统提示ffmpeg.dll丢失时,通常意味着某个需要…

QT:控件属性及常用控件(1)------核心控件及属性

一个图形化界面上的内容,不需要我们直接从零去实现 QT中已经提供了很多的内置控件: 按钮,文本框,单选按钮,复选按钮,下拉框等等。。。。。 文章目录 1.常用控件属性1.1 enabled1.2 geometry1.2.1 geometry…

使用Diffusion Models进行图像超分辩重建

Diffusion Models专栏文章汇总:入门与实战 前言:图像超分辨率重建是一个经典CV任务,其实LR(低分辨率)和 HR(高分辨率)图像仅在高频细节上存在差异。通过添加适当的噪声,LR 图像将变得与其 HR 对应图像无法区分。这篇博客介绍一种方式巧妙利用这个规律使用Diffusion Mod…

药片(药丸)和胶囊识别数据集,使用yolo,pasical voc xml, coco json格式标注,可识别药片和胶囊两种标签,2445张原始图片

药片(药丸)和胶囊识别数据集,使用yolo,pasical voc xml, coco json格式标注,可识别药片和胶囊两种标签,2445张原始图片 数据集分割 训练组80% 1967图片 有效集13% 317图片 测试集7% 161图片 预处…

【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)

💡总结一下就是: 日常防护的话,医用口罩就可以啦。要是想长时间佩戴N95(KN95)口罩的话也可以. 在高风险环境(像医院、疫情防控期间),一定要选不带呼吸阀门的N95口罩KN95&#xff09…

贪心算法概述

贪心算法总是作出当前看来最好的选择,是局部最优 可以使用贪心算法的问题一般具有两个重要的性质 贪心选择性质最优子结构性质 贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择来达到 其与动态规划的问题区别在于,动态规划算法通…

SD下载、安装、使用、卸载-Stable Diffusion整合包v4.10发布!

目录 前言概述 SD安装1、安装软件2、启动3、配置4、运行5、测试 导入SD模型【决定画风】常用模型下载安装模型 SD卸载SD文生图提示词提示词使用技巧提示词的高级使用技巧强调关键词 前言 我向来不喜欢搞一些没有用的概念,所以直接整理可能用到的东西。 sd简单的说…

【LeetCode】2506、统计相似字符串对的数目

【LeetCode】2506、统计相似字符串对的数目 文章目录 一、哈希表位运算1.1 哈希表位运算 二、多语言解法 一、哈希表位运算 1.1 哈希表位运算 每个字符串, 可用一个 int 表示. (每个字符 是 int 的一个位) 哈希表记录各 字符组合 出现的次数 步骤: 遇到一个字符串, 得到 ma…

【GO基础学习】gin的使用

文章目录 模版使用流程参数传递路由分组数据解析和绑定gin中间件 模版使用流程 package mainimport ("net/http""github.com/gin-gonic/gin" )func main() {// 1.创建路由r : gin.Default()// 2.绑定路由规则,执行的函数// gin.Context&#x…

溯源取证-手机取证-简单篇

好久没有写了,水一篇简单的 案例摘要: 我们目前正在调查一起谋杀案,目前已经获得了受害者的手机作为关键证据。在与证人和受害者核心圈子相关人员进行面谈后,您的目标是分析我们收集的信息,并努力追踪证据&#xff0…

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(四)

****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释! 四、提示范式(Explanation for Prompting Paradigm) 随着语言模型规模的扩大,基于提示(prom…

基于TCP的Qt网络通信

基于TCP的Qt网络通信 项目源码:https://github.com/say-Hai/TcpSocketLearn/tree/QTcpSocket 在标准C没有提供专门用于套接字通信的类,所以只能使用操作系统提供的基于C的API函数,但是Qt就不一样了,它是C的一个框架并且里边提供了…

java vscode springboot 问题汇总

问题1 VSCODE配置SpringBoot,创建新项目运行时报错程序包不存在 找不到符号解决方法 选择Run Java即可 , 不是Run Code DemoApplication.java:3: 错误: 程序包org.springframework.boot不存在 import org.springframework.boot.SpringApplication; …

BLIP论文笔记

论文地址 BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 论文思想 其实Clip就相当于只用了ITC

linux上使用cmake编译的方法

一、hello 例程仅基于一个cpp文件 C文件或工程进行编译时可以使用g指令(需要对每一个程序和源文件分别使用g指令编译),当程序变大时,一个工程文件往往会包含很文件夹和源文件,这时我们需要的编译指令将越来越长&#…

Speech Recognition vs. Voice Recognition | 语音识别工作原理 | 模型训练 | 应用

注:Speech Recognition 与 Voice Recognition 机翻混淆,未校。 Speech Recognition vs. Voice Recognition: In Depth Comparison 语音识别与语音识别:深度比较 Calendar12 July 2023 Have you ever stopped to think about how your voice…

Tushare提示本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/document/2

1、解决办法 tushare pro版本需要注册登录后获取tocken然后在代码中配置接口即可。 2、如何获取tushare? tushare是免费、开源的python财经数据接口,现在使用需要先注册tushare账号 1、跳转到tushare注册页面 Tusharez注册 Tushare数据 2、注册成功…

高频 SQL 50 题(基础版)_1068. 产品销售分析 I

销售表 Sales: (sale_id, year) 是销售表 Sales 的主键(具有唯一值的列的组合)。 product_id 是关联到产品表 Product 的外键(reference 列)。 该表的每一行显示 product_id 在某一年的销售情况。 注意: price 表示每…

【Ubuntu】Ubuntu server 18.04 搭建Slurm并行计算环境(包含NFS)

Ubuntu server 18.04 搭建Slurm并行计算环境(包含NFS) 一、Munge 认证模块 1.1、安装 munge 主节点和子节点都安装munge #安装 sudo apt update && sudo apt install munge libmunge-dev#设置开机启动 sudo systemctl enable munge sudo syste…