本文是视频学习全球人工智能与机器学习技术大会演讲内容所做笔记
持续更新中。。。。。
1. 图像理解的定义
- 互联网中的图像理解
- 图像理解的研究内容
1)互联网中的图像理解
图像是互联网最大的多媒体载体
未来大量的探索都将与图片相关,而不是关键字。
互联网图像的多样性
证件照、自拍、商品照、景点活动照以及特殊照片。
图像理解与以前我们接触到的与知识图谱、CTR预估不一样的地方在于,图像实际上是一个很泛的概念,一方面是其多样性,另一方面每种图像都有不同的处理技术。同时每一张图像都很复杂,比如下图:
我们常说:一图胜万言。比如这张图像包含了哪些内容呢?这张图是网上爬的也是知乎上点赞比较多的一张图。什么样的图像能够包含最多的内容?比如这张图像就包含了以下内容:
- 第三世界
- 美帝国主义(军队)
- 中国制造(书包)
- 日本文化渗透(书包上的奥特曼)
- ...
不同的信息都包含在里面,按图像理解,就是怎么从一张图像当中能够得出所有有关的信息,因为这些都有可能会对后面的比如做检索、用户画像等,都会产生直接的联系。
图像理解是一个比较泛的领域,大致归纳:
- 常见的就是Google或者百度中的图像搜索,或者一些APP对图像打标签。
- 比如微信扫一扫,一个典型的场景:拍一张照片能够直接链接到京东商城对应商品的购买链接,这个在现在的电商网站应用的都非常的广泛。这里面就包含了要做一些logo的识别,做一些细粒度分类的识别,比如这个人穿了什么鞋子,穿了什么裤子,衣服的识别等等。
- 更特定的场景,比如说人脸、文本等。人脸现在是一个很火的概念,但它不同于图像的地方是它是一个特别窄的领域,比如单独一张人脸照就可能包含人脸检测、识别、定位、检索等。文本也同样如此,文本分为自然场景的文本、打印的文本、各种手写体。所有的这些图像都属于图像理解的一个特定范畴。
- 视频领域:包含视频监控中车辆的定位车辆的识别以及姿势识别。
- 图像处理领域:风格迁移
图像搜索与标签领域:
商品搜索与推荐领域:
人脸/文本等特定领域
视频领域
图像处理领域
2)图像理解的研究内容
- 图像理解是计算机视觉领域的基础技术
- 图像理解研究图像的类型,图像中物体的位置,物体之间的关系等
可以将图像理解的研究内容总结为4类:
- 识别。能够识别并分类出图像里有什么东西。比如上图有一个女人一条狗和一台电视机。
- 检测。不仅需要知道这个图像里笼统的一个概念,还需要知道每个对象的位置。
- 分割。更进一步,不仅需要知道位置,还要知道每个像素到底什么意思,把每个对象能分割出来。
- 图像问答。用自然语句描述出每个对象之间的内在关系。
图像分类
图像分类是所有研究的基础,上面所说的4类都可以归纳为图像分类。
图像分类无处不在,许多场景都在用图像分类。第一张图,是ImageNet做的一个狗的识别,后面第二三四张是人脸识别、文本识别、车辆识别,以及除了互联网领域在其他领域的应用,比如肿瘤识别、卫星云图的识别。这些都属于我们给一张图,能够把它分类出它到底属于什么样的类型。
ImageNet:
14,197,122 images
21841 synsets
1,034,908 with boxes
1000 classes
126w trainset
2017最后一届比赛
其他数据库:
MNIST:10classes, 60000images(5w训练,1w测试)
CIFAR:10 classes, 60000images
PASCAL VOC:20classes
webvision:2.4million weekly supervised
物体检测
上图左侧文本检测,右侧人脸检测。做物体检测的意义就是我们能够把这个物体给crob出来然后align到一个标准的形状,比如人脸,都归一到一个大小,就能去掉很多噪声信息,做一个更好的识别。所以物体检测是分类的一个进化。我们也可以这么理解,物体检测的算法核心就是首先能够得到每个物体的位置,然后对每个位置crob出来的图像再一次识别。
物体分割
物体检测/分割目前最通用的数据库:MSCOCO:330k images(>200k labled); 1.5million object instances; 80 obejct categories; 91 stuff categories; 5 captions per image
由微软亚研提出。
图像问答
图像问答问题就是如何用描述性语句来表示它。我们通常有一些场景,我们对这个场景提出问题,它可以对应作出回答。
图像理解的研究内容
图像分类:
- 图像检索-->图像检测
- 人脸识别-->人脸检测/定位
- 文本识别-->字符定位/切分
- 商品识别-->logo定位/商品分割
- 黄恐识别-->显著性检测
- 车辆识别-->车辆检测/定位
- 行人RID-->行人检测/姿态
- 肿瘤识别-->肿瘤定位
- 卫星云图识别
- ...
2. 传统图像理解技术
- 图像分类的问题描述
- 图像分类的基本方法
- 图像搜索系统
1)图像分类问题描述
- F(x) representation learning 【如何获得更好的特征:将原始输入转化为特征向量】
- C(x) classificatin learning 【如何学习目标函数:基于特征向量学一个优化问题】
相似图像检索
问题描述:
- 给定输入图像x和图像库X
- 从X中找出与x最相似的一组图像y
问题抽象:
- F(x):抽取x和X的图像特征
- C(x):计算x和X两组特征之间相似度
- 相似度排序
图像指纹:
- 低级信息能够提供近似的形状和纹理信息
- 图像灰度化后缩放到8*8大小;
- 计算图像平均值,比较每个像素与平均值大小输出0/1;
- 组合64维0/1值得到图像指纹;
- 计算hash向量的汉明距离。
- 优点:速度快,存储小,对图像缩放颜色变化不敏感
- 缺点:平移/噪声
- PHash:DCT变换抽取低频特征
- dHash:计算相邻像素点
颜色直方图:
- 两幅相似的图像之间具有类似的颜色直方图
- F(x):抽取图像颜色直方图特征
- C(x):计算两组直方图之间距离【】
- 优点:特征提取简单,相似度计算方便,对图像旋转、尺度等变化不敏感
- 缺点:颜色相似,没有形状信息
- 颜色空间:RGB,YUV,Gray
- 特征空间:特征量化,颜色矩,颜色熵,分块直方图,颜色聚类
- F(x): 图像灰度值;hash指纹;dct交换;颜色直方图
- C(x):欧氏距离;汉明距离;余弦距离
2)图像分类的基本方法
图像特征
将一幅图像转化为一个数学表达(vector):
- 相似的图像具有相似的表达
- 不相似的图像具有相异的表达
一个好的特征描述子:
- 鲁棒:对尺度,遮挡,光照等不敏感
- 准确:个体鉴别信息
- 高效:快速计算;存储空间小;方便查询
全局特征与局部特征两种:
全局特征:
如何使特征具有本体不变性:
gradiant filter:领域不变性
wavelet filter:高频低频分离
Gabor:以高低函数为窗函数的短时傅里叶变换
LBP:统计邻域的图像变化
- 分块计算lbp
- 分块统计直方图
- 直方图串联
- LTP
- LLE
- Multi-Block LBP
- CLBP
- ...
Hog梯度方向直方图
- 图像归一化
- 计算图像梯度:;
- 按梯度方向统计直方图
- 串联邻域块直方图,并归一化
gist:(一张图像,如何用不同尺度的信息)
centrist:
如何应对图像旋转变化?
图像分块:
局部特征:
如何应对图像旋转变化?
- 局部特征检测
- 更鲁棒的图像特征描述子
使用最广泛的局部特征:SIFT
① 特征点检测:
- 金字塔匹配
- 邻域插值
- 去除边缘点
- 极大值抑制
② 基于特征点计算极值点
③ 基于hessian计算曲率
④ 特征描述:
- 统计关键点邻域的梯度方向:
- 生成梯度方向直方图,基于主方向旋转图像
- 分块统计梯度直方图,组合邻域直方图为特征描述子,并归一化【通常每个特征点,选取邻域4*4块,每块对应8维直方图,共128维特征】
⑤ SIFT加速-->SURF
- 不建立金字塔,而改变kernel
- 通过hessian矩阵计算极值点
- 计算harr小波响应,只有水平和垂直两个方向
- 从一个扇形方向开始,以固定步长进行旋转,找到其中最大响应的扇形为主方向
- 特征描述子维度为4*4*4=64维
- 速度是SIFT的3-7倍;大部分情况下它和SIFT的性能相当
⑥ SIFT加速-->DAISY
- sift特征点旋转时,需要重新计算梯度直方图
- daisyk通过高斯核卷积代替方向投影,实现快速计算
特征点检测
- 提供旋转不变性
- 减少特征描述子数目
- 重复性:相同的区域能被重复检测,且不受旋转模糊光照等影响
- 可分区:基于检测子抽取的特征能够相互匹配
- 数量适宜:减少匹配复杂度和提升精度
- 速度快:检测速度越快越好
传统的特征检测子:
- Maximally Stable Extremal Regions(MSER)
- Difference of Gaussians(DoG)
- Harris-Affine and Hessian-Affine
Harris角点:
- 一个patch各方向移动时,patch内图像灰度没有变化,则patch内不存在角点
- 一个patch向某个方向移动时,patch内图像灰度发生了变化,而在另一些方向上没有发生变化,则窗口内的图像可能是一条直线
Fast/AGAST:
- 若某像素点与其周围邻域内足够多的像素点处于不同的区域,则该像素点可能为角点
- 取每个像素p为中心的16邻域点
- 迭代计算:
- 计算p1/p9与中心p的像素差,均超过阈值
- 计算p1/p9/p5/p13与中心p的像素差,至少3个超过阈值
- 计算p1-p16与中心p的像素差,至少9个超过阈值
- 对所有特征点进行非极大值抑制
fast相比于SIFT/SURF:
- 不具备尺度不变性
- 对噪声更加敏感
- 对旋转放射变换敏感
特征描述子
二进制描述子:
- SIFT和SURF float特征维度过高
- PCA特征降维
- hash二值化
BRIEF:
在特征点邻域内任意比较点对大小获得0/1编码,每个patch获得N维0/1向量
BRISK:
以特征点为圆心,构建多个不同半径的离散化Bresenham同心圆,然后在每一个同心圆上获得具有相同间距的N个采样点
FREAK:
越靠近中心的区域采样更密集,四周区域采样稀疏,随机对比各区域的像素得到一组2值特征
ORB(Oriented FAST and Rotated BRIEF):
- 增加FAST的旋转不变性:角点的灰度与质心之间存在一个偏移
- 增加BRIEF的旋转不变性
- BRIEF描述子是一个长度为n的二值码串,该2n点可以组成矩阵
- 根据角点方向投影每组向量到对应的角度空间
图像特征:
- 图像检测子和描述子紧密关联
- 检测子越多,抽取特征时间越长,噪声也越多
- 检测子越少,有效匹配对数越少
- 加速和场景紧密相关
- FAST+ORB在物体跟踪与匹配上很有效
- SIFT在图像检索中很有效
分类器与降维
- 低维特征包含信息太少
- 高维特征包含噪声和冗余
- 非线性空间的表达能力
- 减小计算量
PCA
LLE:
- 获得最近邻点
- 基于近邻点计算出局部重建权值矩阵
- 基于局部重建权值矩阵和近邻点得到投影
Sparse Coding:
- 基于一组给定的随机patches,学习一个字典
- 对其中每个向量,解一个LASSO使得
- 迭代优化
- 固定字典f,优化a
- 固定a,优化字典
- 对于输入的原始特征,计算基于字典的系数a作为降维后的表达
- 稀疏模型:
- 稀疏响应:
- Local coordinate coding
- Hierarchical sparse coding
- Super-Vector Coding
- VQ coding
SVM
小结
3) 图像搜索系统
评价指标
- 召回率recall:预测正确的正样本/所有正样本
- 正确率precision:预测正确的正样本/所有预测为正确的样本
- F-score:召回与正确的调和平均
- mAP:每个候选的检索正确率的平均(Mean Average Precision)
- img1有4个相似图,检索rank在1,2,4,7;ap=(1/1+2/2+3/4+4/7)/4=0.83
- img2有4个相似图,检索rank在1,3,5,6;ap=(1/1+2/3+3/5+4/6)/4=0.73
- mAP=(0.83+0.73)/2=0.78
相关数据库
- UKBench
- http://www.vis.uky.edu/~stewe/ukbench/
- 640*480图像,每组4张
- Stanford Mobile Visual Search
- http://purl.stanford.edu/rb470rw0983
- 包括8种场景,如CD封面、油画等,采自不同相机(手机),共500张图
- Oxford Building
- http://www.robots.ox.ac.uk/~vgg/data/oxbuildings/
- VGG组从Flickr搜集了6412张巴黎旅游照片
- INRIA Holidays
- http://lear.inrialpes.fr/~jegou/data.php
- 来自Flickr60K,共1491张图,500张query和991张相关图像
相似图像检索pipline
- 如何将不定长的特征投影到定长的空间?
- 如何进行海量比对?
BoW(Bag of Visual Word):
- 特征抽取:对训练图像进行预处理后抽取SIFT特征
- 构造码本:K-means对所有SIFT特征进行聚类得到字典,字典的维度对应聚类中心
- 特征抽取:模板每幅图像的每个SIFT特征投影到K维字典中,对应第K维向量+1
- 向量归一化
- K维字典对应K维特征向量
- 缺点:
- 由于后台数据集一直更新,k-means重新聚类的代价太大
- 字典过大,单词缺乏一般性,对噪声敏感,计算量大;字典太小,单词区分性能差,对相似的目标特征无法表示
- 图像表示成一个无序局部特征集的特征包方法,丢掉了空间特征信息
新的改进:VLAD(Vector of Locally Aggregated Descriptors)
- BOW仅仅保存了字典种图像特征的分布
- 特征抽取:对训练图像集进行预处理后抽取SIFT特征
- 构造码本:K-means对所有SIFT特征进行聚类得到字典,字典的维度对应聚类中心
- 特征抽取:计算每幅图像的SIFT特征在每个字典下与字典中心的偏差
- 向量归一化
- K维字典对应K*128维特征
比较 BOW和FV
BOW:
FV:
结果对比:
快速搜索
倒排索引
- query的SIFT描述子投影到字典中,以字典为中心描述该图像为:
- 查找模板库中分别包含每个字典中心的样本合并
KD树搜索:按照特征每一维度开始检索
product quantization:
重排序:
- PANSAC几何校验
- 针对量化检索到的图像,进行重排序
- 随即计算任意两张图像之间任意两组SIFT特征匹配,以匹配点为基准重新投影其他特征点
- 判断投影特征点是否重叠
图像检索pipeline:
- 训练集:
- 从所有商品图像中抽取局部特征描述
- 计算K-mean聚类
- 模板集:
- 基于聚类计算模板计算fv特征
- 向量量化
- 验证集:
- 抽取局部特征描述,计算fv特征并量化
- 比较模板集的量化表
- 选取最大10候选几何校验重排序
图像检索部署
- 每幅图像对应一个图像识别指纹
- 在图像云平台服务中,无需构建倒排表,开发者增、删图像时,后台只需在数据库对应的增加、删除指纹即可
- 识别过程时,只需对比开发者数据库中的指纹即可
传统图像理解方法总结
- 图像分类
- 图像特征学习
- 局部特征
- 全局特征
- 图像特征学习
- 典型应用:图像搜索
- 图像特征抽取
- 向量量化
- 快速搜索
- 重排序
相似图像检索
角度,遮挡,类内相似性,类间相似性等
3. 深度学习基础知识
图像理解
- 如果没有人工设计的特征会如何:设计一组非线性函数来同时学习特征表示和分类器
- 如果更深的网络是否会效果更好:更深层的非线性表示
AlexNet
1)深度学习的基础模块
多层感知机(multilayer perception)
基础模型结构
-
卷积层(Convolutional Layer)
-
池化层(Pooling Layer)
-
全连接层(Fully-connected Layer)
-
激活函数(activation function)
全连接层
- 没有考虑局部信息
- 特征存在冗余
局部连接层
- 参数大大减少
- 局部filter之间没有联系
卷积层
- 保持输入图像的大小
- 连接隐含层与每个小patch
- 共享参数
全连接vs卷积层
- 卷积层优点:
- filter为低层特征
- 不同层之间参数共享,减少冗余
- 参数量少,计算量少
- 全连接层优点:
- 全连接是卷积核为h*w的卷积
- 冗余特征也会有帮助(global pooling?)
- 局部特征映射到全局空间
池化层
- 增大感受野
- 去噪
批量归一化层(Batch Normalization)
- 减小每个minibatch方差,加速训练
DNN的基础模块
- 如何获得每个节点的参数?
- 每次迭代:
- 前向:Forward Propagation
- 后向:Backward Propagation
- 更新参数
前向:
- 在测试时,只需要前向
- yd对应输出的特征/分类结果
损失函数(Loss Function)
- 通过误差回传来更新参数
SGD
- 基于每个minibatch,更新每个权重(SGD)
- 通常会带上Momentum ,
有监督学习与无监督学习
- 有监督学习通常指给定标签
- 无监督学习的典型是auto-encoder,利用反向传播算法,让目标值等于输入值
2)深度学习的模型设计
非线性特征
线性投影+非线性激活函数
相比于传统分类
- 联合学习:同时更新所有模块参数
- 共享特征:全局特征与局部特征的层级学习
- 深度非线性,学习能力更强
- 一个三层的NN可以表示任意分类函数
- 多任务学习可以共同完成
模型设计
- 越深,越宽
- 多分支(multi-path, multi-scale)
- 残差
- 慎用激活函数
- 稀疏连接
典型模型设计
典型网络
3)深度学习的训练技巧
激活函数
学习率
注意力机制
Bilinear CNNs
其他
- 预训练
- 基于imagenet训练的结果优于直接训练
- 数据分布
- 迭代选择分布均衡的数据/更准确的数据
- 无监督训练
- 增加无监督loss或弱监督数据
小结
- 网络结构
- 超参数学习
- 优化方法
- 模型表达能力
- 减少冗余,快速计算
- 减少过拟合
- 容易优化
- 超参数调节
- 联合学习
- 注意力机制
4. 深度学习图像理解
1)图像分类框架
图像检索
数据搜集
- 有监督学习主要依赖分类标签
- 模型提取特征能力的上限,体现在标签体系质量上
- 标签体系建立
- 多层标签体系:长裤,上衣
- 多类标签体系:花纹,V领
- 语义信息:潮款,年轻
数据清洗
- 人工清洗:解决标注和类别不一致的问题
- 模型预测
- 人工标注
- 模型自动更新
- 种子样本
- 人工标注,初始化模型
- 模型预测
- 增加高置信度样本finetune
- 模型迭代
模型训练
- 模型结构
- 模型学习能力
- pretrain model
- 考察flops
- triplet loss
- 兼顾分类网络和类间差
- 的设计
- hard sample mining
- TriHard loss
- 对于每一个训练batch,随机挑选P个ID的样本,每个ID随机挑选K张不同的图片,即一个batch含有P×H张图片。
- 对于batch中的每一张图片,我们可以挑选一个最难的正样本和一个最难的负样本和组成一个三元组。
- Quadruplet loss
- 四张图片由图片,正样本p,负样本n1和负样本n2组成
- 其中n1和n2是两张不同类别的图片
- Margin sample mining loss
- multi-task
- 同时出多标签
重排序
- 基于k阶导数编码
- 计算出马氏距离和杰卡德距离的加权和
2)模型加速与优化
模型加速
- pruning model
- lowbit model
- 激活函数:ReLU->Hard TanH
- 低比特近似估计
- deep hash
- 模型pruning有效但费力
- 离散情况下难以找到最优解
- deephash不一定要end2end
3)图像检测/分割
检测/分割的目的是为了精细分类/去除背景
- one stage vs two stage
- Loss sampling
- Loss function
- anchor and multi-scale
图像语义分割:FCN
- decoder vs encoder
- semantic vs segmentation
- attention model
- boundary loss
4)图像分类应用场景
相似图像检索:基于多类联合训练的模型抽取图像特征
图像自动标签:组合模型预测结果
- 多类标签的概率分布
- 多层次标签的组合
3535353535