6- 深度学习: 图像搜索
github: https://github.com/mtianyan/graphLabStartedML
深度学习: 图像搜索
基于图片的相似度来选购商品
可视化商品推荐
我想买双新鞋,但是。。。
mark符合我的风格,我又感兴趣的鞋子真不容易
文本搜素不能帮助我们
mark搜素时装鞋,只能找到一双我们觉得有意思的。而我想找的是真正有个性不同的鞋子
可我又不知道用什么关键字搜索,用图像的特征找到相似的鞋子
神经网络
特征是机器学习的关键
在做机器学习时我们一般会有输入值,比如情感分析中的评价语句
mark目标;重新检视分类器,但是应用更复杂的非线性特征
图像分类
我们的目标是从一个图像出发。
mark输入图像的像素,输出预测的对象值。
分出狗狗的品种。
特征指的是我们的数据的表现形式,我们把他们当做输入送入分类器。
数据有很多种表现形式:
- 比如文字,就可以用词袋模型和tf-idf的形式。
- 对于图片也有很多其他的表现形式。
神经网络: 学习"非常" 非线性的特征
线性分类器
线性分类器区分开正类和负类
mark分类器的图表示: 用于定义神经网络
mark对于每一个特征变量我们都有一个与之对应的特征节点,直到第d个特征变量。
对于我们要预测的输出值y我们也有一个节点来对应。
将特征节点与权重相乘然后累加得到分数。
分值大于零时我们输入1,分值小于0时我们输出0
小型线性分类器,小型神经网络或单层神经网络。
线性分类器可以表示什么?
mark mark逻辑的或运算可以用线性分类器来表示。
定义一个打分函数,在后三行的情况下输出正值,值大于0即可。
- 第一行时值小于0
权重为 -0.5 1 1 时满足条件。
与运算,只有x1 和x2 都等于1的时候才能大于0
单层神经网络来表示逻辑与运算和或运算。
线性分类器不能表示什么?
mark在这个函数中没有哪条线能将加号,减号分割开。
mark异或运算: 任何事情的反例
我们之前讲过的线性特征就不够用了,我们需要一些非线性的特征
解决XOR问题: 添加一层
markXOR结果为1的情况是x1为真,x2为假 或 x1为假,x2为真时
mark添加两个单元。z1,z2
我们要做的是建立一个神经网络:
- 不能直接输入x1,x2预测y,但是它能预测中间值z1,z2
- 然后我们再通过中间值来预测y
与运算:
z1:节点1的权重-0.5, x1权重1,因为是not x2权重-1
z2: 节点1权重-0.5, x1权重-1,x2权重1
此时当x1 x2全为真时: x1*1
为1 x2*1
为-1加起来为0,而我们需要的值是此时小于0.所以常数项-0.5
其他情况略。
神经网络
对数据进行多层次的变换。
有多层的线性和非线性变换
mark神经网络已经被发明接近50年了
- 在90年代进入低谷
大约十年前,最近几年有了大的复兴
- 在一些典型问题的准确率大大提升
- 大量的数据集,(计算能力)gpu和新的建模学习算法使它如虎添翼
深度学习在计算机视觉中的应用
图像特征
特征 = 局部探测器
- 组合在一起构成预测
- 现实中,特征都是很底层的
鼻子探测器,眼睛探测器,嘴巴探测器。
如果每个探测器都探测成功,就可以通过这个小型神经网络做出预测这是个人脸。
典型的局部探测器寻找图像中的局部兴趣点
图像特征: 局部兴趣点的组合
- 组合在一起构成分类器
角落探测器
有很多手工构造的特征被用于寻找兴趣点
SIFT特征
mark典型图像分类方法
mark根据sift特征被激活的地方构成向量。这些特征在有些地方激活,有些地方不激活
这跟寻找一篇文章的单词是类似的。
图像特定的地方有没有特定的角,然后就可以把这些信息输入到分类器
线性识别分类器: 告诉我们是否是人脸
挑战在于这些人工的特征很难设计
mark深度学习: 自动学习特征
mark输入到一个三层的神经网络
mark识别这些局部神经探测器,每一层都会发现这些特征。在不同的层次探测不同的图像性质。
- 第一个探测器作用:
- 找到对角线的边缘
- 中间是从另外一个方向抓取对角线边缘
- 最后一个抓取过渡特征,从深色到绿色的变化
- 第二个探测器: 会把这些对角线边缘综合起来形成更复杂的探测器
发现弯弯曲曲的线,一些角
- 第三个探测器会更为复杂,识别出脸蛋
深度学习的性能
应用深度学习神经网络的结果示例
- 德国交通信号识别问题
99.5%准确率(IDSIA团队)
- 房屋门牌号识别(google 街景)
每个字符97.8%准确率
ImageNet2012竞赛: 120万张训练图像,1000种类别
对于图片进行分类,不是识别是不是一条狗,而是这个狗是啥品种的问题
marksuperVision团队采用了深度神经网络,大幅度超过对手
大大提高了大家对于深度学习网络在计算机视觉领域应用的兴趣。
mark8层的神经网络,有6000万个参数
获得这种惊人的结果需要:
- 新的学习算法
- GPU实现
计算机视觉中的深度学习
识别图片中狗的品种
利用深度学习进行景物解析
mark每个像素进行分类,发现特定的区域。天空区域,草坪区域。
这类景物解析,也称为场景理解。
神经网络对于这种需求非常有效
检索相似图像
mark我们输入一张自己中意的鞋子的图片,输出风格等类似的鞋子的图片
深度学习的挑战
使学习特征成为可能,而不是手动的去调节
卓越的性能提升:
- 计算机视觉
- 语音识别
- 一些文本分析
潜在更多的影响
深度学习工作流
mark需要大量的标注数据,包含哪种狗。(人工标注)
- 划分训练集和验证集。学习深度神经网络之后进行验证。
验证发现不符合,我们又需要进行修改模型。我们需要不停的迭代
很多技巧可以让结果更好
- 不同类型的层和连接
- 可以提供高准确率
不同特征的层和很多复杂的细节。
深度学习的劣势
为了达到高准确率,需要非常多的数据
计算特别昂贵
非常难调节模型
- 架构的选择(层数)
- 参数类型
- 元参数
- 学习算法
昂贵的计算成本+太多的选择 = 模型非常难以调节
深度特征: 深度学习 + 迁移学习
帮助建立神经网络,甚至当你没有很多数据的时候都可以建立。
标准图片分类方法
mark我们能不能从数据中学习特征。
迁移学习: 应用一个任务的数据来帮助学习其他任务
很老的方法
mark在你拥有很多的数据的时候,训练神经网络。
如果我们有一个区分猫和狗的任务,我们训练了一个八层1600个参数的复杂网络。
最后我们得到了一个非常准确的猫狗分类器。
假如我们有了新的任务,此时我们只拥有很少量的数据。检测椅子大象,相机等
我们使用从猫狗神经网络中学习到的特征再加上一个简单的分类器,来获取一个对于101个类别上的高准确率
这就是迁移学习,我们在猫狗中学习到的特征可以被迁移到新的任务中。
神经网络学习了什么?
mark我们更改一下学习方法。对于猫狗分类而言这个网络非常准确。
最后的几层: 主要用于猫和狗的分类。
就跟之前例子中最后一层进行颜色检测
中间的层很一般化,代表角落检测,弯弯曲曲的画面等。
转换学习细节
对于任务2,要预测101个类别,只需要学习神经网络的末端
mark把最后这一块中专门针对猫和狗的部分剔除掉。
markmark保持前面各层的权重固定。
利用这些特征再加上一个简单的分类器。
我们就能用很少的椅子汽车大象等图片数据来训练一个模型
mark注意分割点,后面的层可能太特定于任务了
应用深度特征的迁移学习流程
mark深度特征的通用性有多强?
垃圾回收
mark垃圾车挨个回收路径优化。
深度学习总结
mark以前的回归,分类,机器学
输入图像和相应的标签,标签是要么是一只猫,要么是一只狗,或者是一个房子。
特征提取: 采用深度特征进行特征提取。
输出的是图片和图片的深度特征X
使用机器学习模型来分类这类特征。拿出我们预测的标签y帽子和真正的标签y。在性能度量中。
y y帽子 性能度量取决于你的任务。(我们本次的任务中使用了分类准确率)
这时的w帽子才是真正的逻辑回归的权重参数
机器学习要做的是保证分类准确率,尝试改变和更新w帽子来使准确率更高
我们学到了
- 描述多层神经网络模型
- 解释在计算机视觉中特征作为局部探测器的作用
- 神经网络和手动构建的特征的关系
- 描述了深度学习获得成功的一些场景
- 深度学习模型的优势和劣势
- 应用转换学习的概念
- 应用一个领域训练的神经网络作为特征来构建另一个领域的模型
- 应用深度特征构建图像检索工具
深度学习实践
见jupyter notebook
深度学习图片检索工具
网友评论