目录
系列文章目录
第一课:【OpenMMLab】OpenMMLab概述
第二课:【OpenMMLab】人体姿态估计、关键点检测与MMPose
一、MMPreTrain 算法库介绍
MMPretrain 是一个全新升级的预训练开源算法框架,旨在提供各种强大的预训练主干网络,并支持不同的预训练策略。
MMPretrain 源自 MMClassification 和MMSelfSup,并开发了许多新功能。预训练阶段对于视觉识别至关重要,凭借丰富而强大的预训练模型,能够用于改进各种下游视觉任务。 代码库旨在成为一个易于使用和用户友好的代码库,并简化学术研究活动和工程任务。
博客视频:https://www.bilibili.com/video/BV1PN411y7C1
代码仓库:https://github.com/open-mmlab/mmpretrain
文档教程:https://mmpretrain.readthedocs.io/en/latest
安装步骤
conda create -n your_env_name python=3.8
conda activate your_env_name
pip install -U openmim
# 此处省略配置pytorch环境,具体可参考 《【OpenMMLab】人体姿态估计、关键点检测与MMPose》
git clone https://github.com/openmmlab/mmpretrain.git
cd mmpretrain
mm install -e .
# 多模态依赖
mim install -e ".[multimodal]"
配置文件
配置文件涉及一下几个方面:
- 模型结构 模型几层,每层的通道数等
- 数据 数据集划分、数据文件路径、批大小、数据增强策略等
- 训练优化 优化器的选择、学习率参数、训练总轮次、学习率调整策略等
- 运行时 GPU、分布式环境配置等
- 辅助功能 打印日志、保存 checkpoints 等
代码框架
- apis: 顶层 api 接口,支持各类推理任务
- datasets:支持了各类数据集,数据变换等
- engine: 支持各类钩子,优化器等训练相关组件
- evaluation:各类评测相关函数和指标计算
- models:各类算法模型的定义
- backbones 图像的特征提取器,各类主千网络的定义
- necks 承接 backbone 和 head 之间的其它计算 (例如高维特征解码,多尺度特征融合等)
- heads 主要为相关 loss 计算和推理结果的预测classifier,selfsup,multimodal 则为模型高阶抽象定义
- structures: DataSample 数据结构的定义
- utils: 相关工具
- visualization:可视化的支持
配置文件的运作方式
二、经典主干网络
AlexNet VGG GoogLeNet
ResNet
ViT
- 将图像切分成若干 16x16 的小块,所有块排列成“词向量”,先经过线性层映射,一张[H,W,C]维度的图片变为[L, C],再经多层 Transformer Encoder 的计算产生相应的特征向量
- 图块之外加入额外的 token,用于 query 其他 patch 的特征并给出最后分类
- 注意力模块基于全局感受野,复杂度为尺寸的4次方(像素数量的2次方)
三、自监督学习
SimCLR (ICML 2020)
基本假设:如果模型能很好地提取图片内容的本质,那么无论图片经过什么样的数据增强操作,提取出来的特征都应该极为相似。
对于某种图片
x
x
x,分别对它进行两次数据增强,得到
x
1
x_1
x1和
x
2
x_2
x2
- x 1 x_1 x1和 x 2 x_2 x2互为正样本
- 其他图片的增强结果都是
x
1
x_1
x1和
x
2
x_2
x2的负样本
InfoNCE Loss
ℓ i , j = − l o g e x p ( s i m ( z i , z j ) / τ ) ∑ k = 1 2 N 1 [ k ≠ 1 ] e x p ( s i m ( z i , z k ) / τ ) \ell_{i, j}=-log\frac{exp(sim(z_i, z_j)/\tau)}{\sum_{k=1}^{2N}\mathbb{1}_{[k \neq1]}exp(sim(z_i, z_k)/\tau)} ℓi,j=−log∑k=12N1[k=1]exp(sim(zi,zk)/τ)exp(sim(zi,zj)/τ)
MAE
基本假设: 模型只有理解图片内容、掌握图片的上下文信息,才能恢复出图片中被随机遮挡的内容