面向视觉识别的卷积神经网络 CS231n Introduction
计算机视觉的历史 the history of computer vision
重要节点:
1959 Hubel & Wiesel
利用和人比较相像的猫的视觉神经做实验:简单细胞反应灯的位置;复杂细胞反应灯的位置和移动;超常细胞反应最后的点的移动
1963 Block world
特征点的选择
1970s Stage of Visual Representation 视觉表征阶段
input image -> edge image(primal sketch) -> 2-D shetch -> 3-D model
1973 Pictorial Structure
1979 Generalized Cylinder
1987 maybe 重要轮廓?
1997 Normalized Cut 图像像素分割
2001 Face Detection 面部检测
1999 SIFT & Object Recognition 尺度不变特征变换
2006 Spatial Pyramid Matching 金字塔匹配
2005 Histogram of Gradients HoG 梯度直方图
2009 Deformable Part Model 可变形的部件模型
2006-2012 PASCAL Visual Object Challenge
图像分类 image classification
- visual recognition:视觉识别
- 目标检测object detection
- 图像摘要image captioning:根据图片内容生成描述信息
- 但是视觉上的智能要远远超过简单的目标检测,比如可以识别图像表达的含义,图像中的物体相互之间的联系,推断图像中正在发生什么 等等等
图像分类流程 Image Classification pipeline
在机器视觉当中,图像分类是一个核心的任务
图像分类会遇到很多问题
比如语义鸿沟:用像素点去表示图像
视角变化、光线变化、目标变形、目标被遮挡、背景和目标相似性大、同类目标之间的差异性对图像造成的影响。。。
解决方法 - 数据驱动
收集大量的各种各样的目标图像,为了让模型学习到更多样的特征,更具有泛化性和鲁棒性
第一种分类器:近邻算法
我的理解就是两张图片的相似性吧 下面是相似性的计算方法
图像比较的距离度量标准:
L1 distance
但是这种算法存在训练时时间复杂度为1,推理时时间复杂度为n的情况,我们想要的是训练耗时但推理很快的模型
L2 distance
K最近邻算法:K-Nearest Neighbors:
这种算法不是从最近邻复制标签, 而是从K个最近点中采取多数表决majority vote
K最近邻算法可以采取上述图像比较的距离度量标准的任意一种
两种问题:
k的选择
当需要对一个新样本进行预测的时候,模型会在训练集中寻找与该样本最相似的k个样本,然后以这k个样本中哪个种类数最多来判断这个新样本的中来,so K 决定了 “参考多少个邻居” 来做预测,是 KNN 的核心超参数。
L1 / L2 distance的选择
L1/L2 距离 用于量化样本间的相似度,决定了 “谁是最近邻”,直接影响邻居的选择结果。
解决方法 - 训练集 验证集 测试集
设定不同的超参数k,在分成几份的训练集上训练,用验证集验证,在测试集上观察对完全崭新样本的预测
(训练集:模型在训练集当中进行反向传播更新参数;验证集:验证集仅用来作为判断模型预测的结果和真实结果的误差,不进行参数更新;测试集:就是模拟真实世界的情况,观察预测的结果)
但是K最近邻算法几乎不用在图像上:推理速度慢、基于像素的距离度量缺乏信息量(就是说可能肉眼几个差异大的图片输进去可能和原图的像比较的距离度量标准相同)、会发生维度灾难(高维的运算量大)
线性分类 Linear Classification
参数化方法 parametric approach 用线性分类器,就是可以通过线性的曲线将所有类别都分隔开来
但是肯定不是所有的类别都能用线性的曲线分隔开来的
问题:
- 怎么确定参数是不是合适的?
解决方法:
- 损失函数 (计算真实结果和预测结果的差值 我们的目标就是最小化它)
- 优化器(梯度下降方法 等)
- 卷积网络 (可以处理非线性的问题)