一、常见的CV任务与区别
- 图像分类:图像层面,最基础的任务,常作为目标检测、图像分割任务的BackBone提取图像特征
- 目标检测:像素粒度(细粒度),对图像中的目标物体进行框选检测,分通用目标检测与特定目标检测两方面,人脸识别属于特定目标检测,识别世界中大千万物属于通用目标检测
- 语义分割:像素粒度,对图像中的单类或多类物体进行分割,仅可按照类别进行区分,同类物体具有相同的像素值
- 实例分割:像素粒度,对图像中的单个或多个物体进行分割,不同于语义分割,实例分割可分割出同类中的不同物体,每个物体具有单独的像素值以供区分
二、计算机视觉的发展之路
- 早期萌芽阶段:以Robert算子为代表的边缘检测算法提出,为计算机视觉的发展做出了不可磨灭的贡献
- 机器学习阶段:将机器学习技术应用到计算机视觉领域,EigenFace和Adaboost等机器学习方法开始将人脸识别领域推向实用化。
- 特征工程阶段:传统任务中,研究者常常针对实际场景进行特征工程,手动设计底层特征进行CV任务,不同的目标对象具备不同的滤波器提取特征,泛用性极差。
- 数据驱动:2006年,李飞飞教授启动了ImageNet数据库项目,机器可以通过学习大量数据,去自主学习出图像特征。无需手动构造。
- 视觉系统:2010年NEC-UIUC集合了层次结构、边缘检测以及机器学习方法,构建出一个完整的视觉分类系统,但仍未摆脱手动构造特征
- 深度学习阶段:AlexNet的提出使得计算机视觉取得了突破性的进展,7层卷积结构相较传统方法取得了接近10%的提升,计算机视觉正式步入深度学习时代。
- 当今现状:以大模型为基础的AIGC开始成为新的内容生产方式,在AI绘画、AI写作等方向均取得了显著的进展。各大厂商也纷纷开始构建属于自己的视觉大模型。
三、OpenMMLab简介
常用的深度学习框架:theano、Caffe、TF、mxnet、Jax、Pytorch等
OpenMMLab是基于Pytorch所开发的Code Base,以Pytorch为底层,内含大量视觉算法库可供调用。目前OpenMMLab提供了统一先进的底层架构支持,覆盖目标检测、轨迹检测、视觉超分以及图像生成等诸多计算机视觉方向,同时提供了SOTA算法支持,可轻松实现base的部署调用。
常用算法框架:
- MMDetection:目标检测开源工具箱,支持Faster R-CNN以及Mask R-CNN等诸多主流算法和顶会SOTA方案。
- MMClassification:图像分类开源工具箱,具备从VGG到Swin-Transformer等40+预训练模型和大量主流数据集支持
- MMSegmentation:图像分割开源工具箱,针对无人驾驶、遥感以及医疗影像分割领域,实现了30+以上论文复现和420+预训练模型,同时提供大量消融实验方案,以便实现公平对比
- MMEditing:对当前火热的图像生成、修复以及视觉超分领域提供15种以上的算法支持和30多个预训练模型,通过几行代码即可轻松调用
OpenMMLab 2.0:
相较于1.0版本,2.0时代的OpenMMLab主要特点在于统一化和通用化,在实现了设备、大规模训练以及流行算法库的通用支持后,对1.0版本的模块抽象、训练流程以及数据接口进行了统一化。多个算法库仅需一套接口定义和一套统一的训练流程即可完成,同时对日志和模型结构实现了灵活可视化,以便用户进行分析。预计在年内完成迁移。
四、PyTorch基本模块
- Torch数值计算库:对多维数组结构Tensor及其运算提供多种后端设备(CPU、GPU、TPU)支持
- torch.autograd:通过loss.backward() 实现权重的反向传播,并将结果储存在w.grad和b.grad内
- torch.nn.functional:提供构建神经网络所需的计算函数,如线性函数、卷积、池化以及非线性激活函数等
- torch.nn.Module:定义神经网络模型的抽象接口,实现通用模型封装,通常网络类继承自nn.Module
- torch.optim:对常用的如SGD、Adam以及RMSprop等优化算法提供支持,同时还提供常用的学习率策略,如步长衰减、指数衰减以及学习率循环等
- torch.utils.data:提供统一方便的数据集类型Dataset以及支持多线程预读的数据加载器DataLoader