对比学习历程

对比学习定义

根据同类别个体在高维空间特征相近,不同个体高维空间特征不相近的思想,通过构成正负样本对配合loss的方式来进行特征学习与训练以达到上述思想的目的。(正样本同类别,负样本不同类别)

对比学习发展历程

论文1: Instance Discrimination(经典baseline) 个体判别工作

动机:如下图所示,受有监督学习的启发,喂给一个训练好的神经网络某类别的输入图片,他给出的高分响应仍然是和该类别相关的,而不相关的其他类别则分数较低(以豹为例,分数高的仍是某类豹子或者动物,而其他类别的物体则分数低)。但产生这种现象的原因并不是因为图片所给的label语义相似,而是因为类别object本身相似(特征共性)从而提出了个体判别任务。
把每一个图片(Instance)作为一个类别,目标是学习一个特征,使得能够把每一张图片区分开来。
代理任务:分类
在这里插入图片描述
架构
在这里插入图片描述
使用对比学习的方法去训练一个图像编码器使得获取的特征能够将每一个个体作为不同类别。本文特点使用memory Bank来存储样本特征(构造正负样本对),每个学习到的特征,在memory bank里面进行更新,不停地迭代更新编码器和memory bank,使学到的特征更具区分性。

不足:缺乏特征一致性(该次memory bank里面的生成特征的编码器无法保证与前后时刻编码器参数相同)

论文2: Unsupervised Embedding Learning via Invariant and Spreading Instance Feature (SimCLR前身 InvaSpread)

动机:同一实例在不同数据增强下的特征应是类似的(下图同一行),而不同实例的特征应是分离的(下图同一列)。
代理任务:分类
在这里插入图片描述
架构
在这里插入图片描述
亮点:与上文不同没有使用额外的数据结构存储负样本,正负样本均来自统一个minibatch,并且只是用一个编码器进行端到端的学习。
不足:负样本不足够多(batch_size只有256),缺少数据增广。

论文3: Representation Learning withContrastive Predictive Coding (CPC)

代理任务:预测
架构
在这里插入图片描述
方法过程:输入可以是音频、图片、文本等也可用于强化学习。
以音频为例,时间序列输入到编码器(genc)获取特征,并将每个序列的特征送入自回归模型(gar),输出红色特征用于预测下一时刻序列特征 Z,Z和下一时刻输入形成正样本对,与任意不对齐时刻形成负样本对,完成训练。
特点:模型通用性强,非常灵活,

论文4: Contrastive Multiview Coding (CMC)

动机:多传感器,多视角,强大的特征具有视角不变性(不管是看到狗还是听到狗叫声均可以判断出狗),学习所有视角下的互信息,抓住关键因素。(如下图Vi同类,Vj不同类)
正负样本定义:不同视角(模态)相同内容为正样本,不同内容则为负样本
在这里插入图片描述
局限:使用几个视角(模态)就需要几个类型的编码器,计算代价过高。

论文5: Momentum Contrast for Unsupervised Visual Representation Learning (MoCo_v1)

codehttps://github.com/facebookresearch/moco
亮点

  1. 使用队列构建动态字典(负样本不足问题)
  2. 动量编码器 (特征一致性问题)
  3. 较好的下游任务迁移性

架构
在这里插入图片描述
MoCo通过使用contrastive loss将被编码的q和字典内被编码的keys匹配来训练一个视觉表示编码器。keys是通过队列构建的动态字典(当前的mini-batch进来,以前的mini-batch出队)并由缓慢进展的编码器编码,缓慢进展的编码器由查询编码器动量更新来驱动。

对比学习机制的比较
在这里插入图片描述
(a)端到端的方式:使用两个编码器同时进行更新(两个编码器可以不同)。由于计算性能的限制,可能会有负样本不足的问题。
(b)memory bank:key由memory bank采样获得。面临特征一致性问题。
(c)MoCo:采用动态字典以及动量更新的方式进行训练获得视觉表示编码器。
动量更新方式:
Θ k ← m Θ k + ( 1 − m ) Θ q \Theta_{k} \leftarrow m\Theta_{k} + (1-m)\Theta_{q} ΘkmΘk+(1m)Θq
伪代码如下:
在这里插入图片描述

论文6: Improved Baselines with Momentum Contrastive Learning (MoCo_v2)

MOCo_v2是MoCo_v1与SimCLR_v1(论文9)的结合
与MoCo_v1比较, 使用了MLP projection head (用于编码器后)和更多的数据增强。

论文7: An Empirical Study of Training Self-Supervised Vision Transformers (MoCo_v3)

较之前主要不同:Backbone替换为ViT
伪代码:
在这里插入图片描述
出现问题:替换后训练回产生振荡影响实验效果。
在这里插入图片描述
论文中解决方案使训练更稳定:冻住ViT中patch projection layer层参数。

论文8: Emerging Properties in Self-Supervised Vision Transformers (DINO)

SimSiam(论文13)+MoCo_v3(论文7)前身BYOL(论文12)
动机:与卷积神经网络相比自监督学习是否为ViT提供了新的特性。
由下图可知,将无监督学习中ViT注意力层可视化可以看到它学习到了明显的物体边界特征。甚至优于分割网络。

非监督给ViT带来的优势:

  1. 很好的分割效果
  2. 只有一个基础的KNN分类器,不加任何微调线性分类器以及数据增强效果也很好
    在这里插入图片描述
    架构
    在这里插入图片描述
    teacher和student网络架构相同但是参数不同,tencher网络出来后的特征进行了center处理(见下图),teacher停止梯度回传使用动量更新,student正常更新。
    在这里插入图片描述
论文9: A Simple Framework for Contrastive Learning of Visual Representations (SimCLR_v1)

目标:不需要专门的框架和内存库,只需要简单的框架就能实现自监督算法。

数据增强方式
在这里插入图片描述
架构
在这里插入图片描述
过程:样本X经过数据增强得到i j 两个样本,均为正样本,其余为负样本(正样本数为N,负样本数为2(N-1)),经过参数共享的编码器f, 获取特征h, 后接一个projection head(g),再做相似性比较,在预测时不使用projection head。
贡献:对比学习需要很强的对比增强技术,增加g函数也就是mlp层,用了更大的batch_size同时训练的时间更久。
g函数:线性层+Relu+线性层
不足:Batch_size太大,需要的算力太大。

论文10: Big Self-Supervised Models are Strong Semi-Supervised Learners (SimCLR_v2)

架构:
在这里插入图片描述

内容:1. SimCLR v2 自监督对比学习训练一个大模型; 2. 小部分有标签的数据去做有监督的微调,获得teacher; 3. 利用teacher模型生成很多伪标签,这样就可以在更多无标签数据集上进行自学习。
模型改进点:更大的模型; 加深projection head(一层变为两层); 使用动量编码器

论文11: Unsupervised Learning of Visual Features by Contrasting Cluster Assignments (SwAV)

做法:将对比学习和聚类的方式合在了一起
架构
在这里插入图片描述
思路:左侧为通用对比学习,两个Z特征去做对比,右侧该论文的方法两个特征 Z(BD)和聚类中心C(DK)相作用产生目标特征 Q。
下游代理任务:如果Z特征为正样本对,那么两个特征应该是可以相互预测的(Z1点乘C和Q2是可以相互预测的,这里Q2充当了ground truth)

优点:负样本数少了,样本更有意义并且更均衡
性能提升点:训练track:Multi-crop:多个crop,获取更多的局部特征,并且为了减少计算代价,取得crop由2224224变为2160160+49696,这样计算代价也没有增大,且crop增多

论文12: Bootstrap Your Own Latent A New Approach to Self-Supervised Learning (BYOL)

特点:不使用负样本,loss: MSE
架构:
在这里插入图片描述

论文13: Exploring Simple Siamese Representation Learning (SimSiam)

不使用下列任何方法也可以使连体网络有效。
(i)负样本对,(ii)大批量,(iii)动量编码器。
停止梯度回传是防止模型坍塌的有效手段
架构
在这里插入图片描述
过程:一个样本的两个图像增强样本由相同的编码器网络(Backbone+MLP)处理,然后一边使用MLP h 一边停止梯度,最大化二者的相似性,该过程既不是用负样本对也不使用动量更新。

参考链接:
https://www.bilibili.com/video//BV19S4y1M7hm

https://www.bilibili.com/video/BV1C3411s7t9

### 配置和管理Django中的静态文件 #### 使用`collectstatic`命令收集静态文件 为了使静态文件能够被有效地管理和部署,在部署Django项目时,应利用内置的管理命令`collectstatic`将来自不同应用程序的静态资源集中到一个指定位置[^1]。 #### 定义静态文件查找方式 通过设置`STATICFILES_FINDERS`选项,可以规定Django寻找静态文件的方法。此配置项通常包含了默认的查找机制——即`FileSystemFinder`用于搜索特定目录下的静态文件;而`AppDirectoriesFinder`则负责遍历已安装的应用程序内的静态文件夹[^2]。 ```python # settings.py 中的相关配置如下所示: STATICFILES_FINDERS = [ 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', ] ``` #### 设置静态文件根目录及其他必要参数 对于静态文件的具体路径和其他相关属性,则需进一步完善settings.py里的相应条目,如设定静态文件存储的基础URL以及实际存放这些文件的目标文件系统的绝对路径等[^3]。 ```python import os from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent STATIC_URL = '/static/' STATIC_ROOT = BASE_DIR / "collected_static" ``` #### 生产环境下的静态文件服务 当处于生产模式下时,建议由专门的Web服务器(例如Nginx或者Apache)承担起向客户端分发静态内容的任务,并确保其正确设置了对外暴露静态资产所需的路由规则[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值