AI实战训练营&预训练与MMPreTrain
一 MMPreTrain算法库组成
MMPreTrain是一个全新升级的预训练开源算法框架,旨在提供各种强大的预训练主干网络,并支持不同的预训练策略
MMPreTrain源自MMClassification和MMSelfSup,并开发了许对新功能。目前,预训练阶段对于视觉识别至关重要,凭借丰富而强大的预训练模型,我们能够改进各种下游视觉任务,我们的代码库旨在成为一个易于使用和用户友好的代码库,并简化学术研究活动和工程任务。
算法库与任务组成
支持多样的主干网络与预训练模型
支持多种训练策略(有监督学习,无监督学习,多模态学习等)
提供多种训练技巧
大量的训练配置文件
高效率和高可扩展性
功能强大的工具箱,有助于模型分析和实验
支持多种开箱即用的推理任务
图像分类
图像描述(Image Caption)
视觉问答(Visual Question Answering)
视觉定位(Visual Grounding)
检索(图搜图,图搜文,文搜图)
python推理API
框架概览
以下是简单的安装步骤:
conda create -n open-mmlab python=3.8 pytorch==1.10.1 torchvision==0.11.2 cudatoolkit=11.3 -c pytorch -y
conda activate open-mmlab
pip3 install openmim
git clone https://github.com/open-mmlab/mmpretrain.git
cd mmpretrain
mim install -e .
如果需要多模态模型,请使用如下方式安装额外的依赖:
mim install -e ".[multimodal]"
OpenMMLab项目中的重要概念——配置文件
深度学习模型的训练涉及几个方面:
- 模型结构 模型有几层,每层多少个通道数等
- 数据 数据集划分、数据文件路径、批大小、数据增强策略等
- 训练优化 梯度下降算法、学习率参数、训练总论数、学习率变化策略等
- 运行时 GPU 分布式环境配置等
- 辅助功能 如打印日志、定时保存checkpoint等
数据流
二 经典主干网络
ResNet
可看我之前的博客:https://blog.csdn.net/shengweiit/article/details/129402747
卷积退化为恒等映射时,深层网络与浅层网络相同,所以深层网络应具备不差于浅层网络的分类精度。
Vision Transformer
- 将图片切成若干16X16的小块,所有块排成词向量,先经过线形层映射,一张[H,W,C]的维度的图片变成[L,C],在经过多层Transformer Encoder的计算产生相应的特征向量。
- 图块之后加入额外的token,用于query其他patch得特征并给出最后的分类
- 注意力模块基于全局感受野,复杂度为尺寸的4次方
注意力Attention Mechanism
实现层次化特征:后层次化是空间领域内的前层特征的加权求和,权重越大,对应位置特征越重要
权重是可以学习的参数,但是与输入无关,只能建模局部关系,远距离关系只能通过多层卷积实现。
权重是输入的函数,与输入有关,可以不局限于领域,显式建模远距离关系。
可以用注意力机制对图像建模
self Attention
通过自身的输入,产生K Q V,然后融合。
Multi-head
不同头的注意力可以对不同头进行特征提取
三 自监督
-
基于各种代理任务
-
基于对比学习
-
-
基于掩码学习
SimCLR
基本假设:如果模型能很好地提取图片内容好,那么无论图片经过什么样的数据增强操作,提取出来的特征都应该极为相似。
对于某种图片x,对它进行两次数据增强,得到x1和x2
- x1和x2互为正样本
- 其他图片增强的结果都是x1和x2的负样本
MAE
基本假设:模型只能理解图片内容,掌握图片的上下文信息,才能恢复出原图片中被随机遮挡的内容
输入信息:划分成规划不重叠的图像块,随机掩盖掉一部分图像块
然后:将没有遮挡的图像块按照顺序送入Transformer Encoder中,获得特征向量
将遮蔽的图像块按位置插入特征向量中
放入到decoder中,生成原始图片
拉近重建图像与原始图像的距离
四 多模态算法
CLIP(双流网络)
BLIP
对三种loss进行了结合,从此构建了新的vision language pre-training框架,并且可以完成各类下游任务。例如:
- 图文检索
- 图像描述生成
- 视觉问答