- 博客(23)
- 收藏
- 关注
原创 论文泛读:Towards Robustness Prompt Tuning with Fully Test-TimeAdaptation for CLIP’s Zero-Shot Generaliz
本文介绍了ACMMM'2024论文提出的SCP算法,通过"共轭伪标签"和"自文本蒸馏"两大创新技术,解决了CLIP模型在零样本泛化中的分布偏移和新类别适配问题。该算法在测试阶段直接更新模型,无需重新训练或增加计算资源,同时克服了传统测试时自适应方法的过拟合、高内存占用和推理速度慢等缺陷。共轭伪标签结合熵值和梯度信息提升鲁棒性,自文本蒸馏通过单模型内部的知识蒸馏实现正则化,在保持高效的同时显著提升了模型性能。实验表明,SCP在多种分布偏移场景下均优于现有方法。
2025-10-20 20:44:15
886
原创 论文泛读:BATCLIP: Bimodal Online Test-Time Adaptation for CLIP
BATCLIP:一种双模态在线自适应方法提升CLIP模型鲁棒性 本文提出BATCLIP算法,通过双模态(视觉+文本)在线测试时自适应(TTA)解决CLIP模型在图像损坏情况下的性能下降问题。算法仅更新两个编码器的LayerNorm参数(占总参数0.044%),兼顾效率与效果。创新性地设计了投影匹配损失强化模态对齐,以及类间分离损失增强特征判别性,配合熵最小化损失形成整体优化目标。实验表明,该方法在CIFAR-C等数据集上达到SOTA,单batch适配仅需0.2秒,且保持预训练知识的98%以上。该算法突破了现
2025-10-20 16:25:39
825
原创 论文泛读:DYNAPROMPT: DYNAMIC TEST-TIME PROMPT TUNING(动态测试时调优)
摘要:本文介绍ICLR2025论文《DynaPrompt》提出的动态测试时提示调优算法。针对传统方法存在的测试样本关联性缺失和误差积累问题,DynaPrompt通过动态管理的提示缓冲区实现自适应优化。核心创新包括:1)双指标筛选机制(预测熵+概率差)选择有效提示;2)动态追加机制应对新分布样本;3)缓冲区更新策略保持信息有效性。该方法在提升视觉语言模型零样本泛化能力的同时,有效解决了提示崩溃问题。实验表明其性能显著优于传统测试时调优方法。
2025-10-20 15:14:51
763
原创 论文精读:Test-Time Prompt Tuning for Zero-ShotGeneralization in Vision-Language Models(测试时提示调优)
《TPT:基于单测试样本的动态提示优化方法》论文摘要 本文针对视觉语言模型在零样本泛化中依赖手工设计提示或下游训练数据的问题,提出了一种创新解决方案TPT。该方法首次实现了仅通过单个测试样本动态优化提示,在自然分布偏移、跨数据集任务和视觉推理任务中显著提升了零样本性能。TPT通过数据增强生成多个视图,利用置信度过滤机制排除高熵样本,并最小化预测结果的边际熵来优化提示嵌入。实验表明,TPT在ImageNet变体数据集上平均准确率提升3.4%,在10个细分类数据集上展现优异跨域泛化能力,同时保持真正的零样本特性
2025-10-04 13:46:09
1053
原创 论文精读:Continual Test-Time Domain Adaptation(持续测试时域自适应)
本文介绍了2022年CVPR上的CoTTA论文,针对动态目标域下的持续测试时自适应问题。传统方法在长期适应中会出现错误累积和灾难性遗忘。CoTTA通过权重平均和增强平均生成高质量伪标签,并采用随机恢复机制保留源知识。实验表明,在CIFAR10/100-C、ImageNet-C分类任务和Cityscapes→ACDC分割任务上,CoTTA显著优于其他方法。该方法无需源数据,可部署于任何预训练模型,有效解决了动态环境下的自适应难题。
2025-08-16 10:57:23
1261
7
原创 论文精读:TENT:FULLY TEST-TIME ADAPTATIONBY ENTROPY MINIMIZATION(tent:熵最小化完全测试时自适应)
本文介绍了2021年ICLR论文《TENT: Test-Time Adaptation via Entropy Minimization》。该研究针对深度学习模型在测试时遇到数据分布偏移(如噪声、模糊等)导致性能下降的问题,提出了一种完全测试时自适应方法TENT。该方法仅利用目标数据和模型参数,通过最小化预测熵(香农熵)来优化批归一化层的仿射参数(γ/β)和当前批次统计量(μ/σ),无需源数据或监督信息。实验表明,TENT在CIFAR10-C、CIFAR100-C和ImageNet-C等损坏数据集上取得了S
2025-08-13 15:15:12
1143
原创 数据结构之排序
本文系统总结了常见排序算法,包括插入排序(直接插入、折半插入、希尔)、交换排序(冒泡、快速)、选择排序(简单选择、堆)、归并排序和基数排序。详细分析了每种算法的思想、实现代码、时间/空间复杂度及特点(稳定性、适用场景等)。时间复杂度从O(n²)到O(nlogn)不等,空间复杂度多为O(1)。各类排序各有优劣:插入排序适合近有序数据,快速排序效率高但不稳定,堆排序适合大数据但实现复杂,基数排序无需比较但需额外空间。文章通过代码示例和复杂度对比,为数据结构学习提供了全面的排序算法参考资料。
2025-06-02 19:11:50
1258
原创 C++面向对象特性之多态篇
本文详细介绍了C++中的多态性,包括其定义、分类及实现方式。多态性分为编译时多态(如函数重载和模板)和运行时多态(如虚函数和继承)。运行时多态通过基类指针或引用调用虚函数实现,具体行为由实际对象类型决定。文章还探讨了虚函数的重写、协变、析构函数的虚函数化、override和final关键字的使用,以及纯虚函数和抽象类的概念。此外,文章解释了多态的实现原理,包括虚函数表指针和动态绑定机制,并对比了重载、重写和隐藏的区别。通过这些内容,读者可以深入理解C++多态性的核心概念及其在面向对象编程中的应用。
2025-05-09 18:40:57
787
原创 array与自己创建的静态数组的区别
C++的容器中提供了array即数组,但是我们一般很少用,而是一般用自己创建的静态数组如int arr[10],那么这两者有什么区别呢.同时二者还有一些其他的区别,如array是模版类,提供了一些更便捷的方法,以及array可以直接赋值,而静态数组不能直接进行赋值操作等。同时我们要注意的是,编译器对于这种静态数组没有进行越界读的检查,也就是当我们cout << arr1[10]时,这说明编译器对这个arr1的越界写检查是一种抽查 并不一定是越界写就会报错。当然我们这里主要讲的是越界检查和安全性的问题。
2025-04-12 18:29:56
242
原创 一文带你搞清C语言文件操作
根据数据组织形式,文件分为文本文件或二进制文件在内存中以二进制的形式存储,不加转换输出到外存的文件中,就是二进制文件如果在外存上要以ASCII码形式存储,则需要在存储前转换,这种方式存储的文件就是文本文件。
2024-09-29 17:10:54
971
原创 动态内存管理
如果我们先释放p,那么p指向的这个结构体的空间就不能被访问了,我们也就不能通过p访问结构体成员int*arr 然后释放arr 那么这时候p->arr就不能被释放,会给程序带来隐患,因此我们必须先释放p->arr 再释放p 记得还要都置为空指针。在我们释放该空间之后,这块空间的使用权限还给操作系统,但是p依然指向这块空间,只不过不能再访问这次空间了,等下次操作系统重新分配空间,p很可能会成为野指针,在程序运行中很危险,因此我们有必要在释放后将p置为NULL。
2024-09-24 15:00:11
674
原创 冒泡排序与qsort函数
qsort函数是库函数,可以直接使用。qsotr函数是一种快速排序的方法并且qsort函数可以排序任意类型的数据。上面介绍的排序方法存在一定问题,因为并不是所有的数据类型都能直接使用> <等比较符号来直接比较,而同时交换变量时到底创建什么类型的变量也是一个未知的问题,因此我们用到qsort函数。这是cplusplus.com官网给出的qsort函数的介绍我们来分析一下其参数以及返回类型。
2024-09-23 10:53:20
1258
原创 C语言指针详解(四)
字符指针的类型为 char* 我们一般用其来接收字符的地址如图所示,我们可以像其他指针一样进行最基本的操作 不过,字符指针不是只能针对字符,对于字符串,我们来看很多人会误以为,p得到的是整个字符串的地址,但本质上其得到的是首字符地址这里的意思其实是p里面得到字符串第一个字符H的地址,然后在打印时以这个地址为起始开始打印,直到遇到‘\0’结束,字符串是以'\0'为结束标志的 因此此处打印整个字符串注意:字符串是常量,不能修改其内容。
2024-09-20 15:03:43
1502
原创 求字符串长度strlen函数的三种模拟实现
这是cplusplus官网的strlen介绍我们可以看到 其参数类型是一个const修饰的字符指针类型 返回类型为size_t 功能是得到字符串长度,返回值是C语言字符串长度 接下来我们试着模拟实现一下。
2024-09-17 15:19:45
500
原创 传值调用与传址调用
正确的理解:x和y是两个形参 他们在接收到a和b传过来的值后,在函数内部创建了空间用来存放a和b的值 那么新创建的这两块空间地址和原来a和b的地址肯定不一样 我们现在只是对新创建的这块空间里面的值进行交换,因而对a和b没有影响。那么我们想要对a和b改变的话,需要找到他们的地址,那么在函数传参的时候接收的就应该是a和b的地址,这样就能对a和b进行操作了。按理来说,我们将a和b分别传给x和y两个形参然后在函数里面交换变量,但实际上这种方法只是将a和b的值传给了x和y。写一个函数:交换两个变量的值。
2024-09-17 14:37:45
304
原创 C语言指针详解(一)
所谓指针,初学者可能会认为很高级,通俗来讲,指针就是个地址。那么指针变量,就是存放地址的变量。拿生活中的例子来举例,把几件不同的东西分别放在特定编号的柜子里,那么每个柜子就是存放这些东西的容器,柜子就是一个指针变量,可以通过编号的柜子找到存放的东西。那么,在程序中,我们创建了变量,就是向内存申请一块空间,当我们要用的时候怎么在计算机内存中找到这个变量呢,可以通过指向该变量的指针来寻找,这个指针存放了变量的地址。如和创建和使用指针变量呢 我们一一来看。
2024-09-17 10:47:27
965
原创 C语言分支循环语句的简单介绍
根据expression的值找的相应的case值进入程序 若表达式结果于case分支均不一致 则执行default分支 default语句可以在switch语句里面的任意位置。当然若几个case分支对应的语句相同(即结果相同)可以将前面的case分支的语句省略 只留case value 直到最后一个相同的case分支再写对应语句 此处不再示例。***同时常见while(scanf()!***注意:switch后面的表达式必须为整型表达式 case后面的值也必须为整型常量表达式。
2024-07-19 18:48:32
1977
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅