这套笔记是跟着七月算法五月深度学习班的学习而记录的,主要记一下我再学习机器学习的时候一些概念比较模糊的地方,具体课程参考七月算法官网:
图像相关任务
1. 物体的识别和定位
对于一张给定的图片,判定图片中的物体属于那个类别
对于输入图片,输出物体所在的位置。
关于定位问题的处理方式:
1.1 看做回归问题,因为输出是四个数字,用欧氏距离测损失:
步骤1:
先解决简单问题,搭一个识别图像的神经网络
在AlexNet VGG GoogleLenet上fine-tuning一下
步骤2:
在上述神经网络的尾部展开
成为classification + regression模式
在最后的卷积层分成两个部分,判断分类损失和回归损失
步骤3:
Regression那个部分用欧氏距离损失
使用SGD训练
步骤4:
预测阶段把2个头部拼上
完成不同的功能
对每个类都有一个回归
egression的部分加在哪
一种接在最后一个卷积层之后,另一种接在全连接层后。
如果对于猫也要区分不同的部位
2. 取图像窗口
还是刚才的classification + regression思路
咱们取不同的大小的“框”
让框出现在不同的位置
判定得分
取得分最高的那个
如何取图像窗口?
取一个比原来图像小一点的框在图像四个角滑动,左上角测得是猫的概率为0.5
然后移到右上角:
除了移动的黑色的框,还有红色的那个框,这个框是通过上面的regression得到的。
在最开始的应用中,用非常多不同的window划过图片,从左上角移到右下角,简单粗暴:
对得到的得分最高的框合并,最终得到目标的定位
对其做一个优化:
网络有两个头部:
1. 类别
2. bounding-box
将上图4096的全连接改为卷积:减少参数和计算量。
3. 物体识别:
3.1 边缘策略
预先找出一些边缘:
3.2 选择性搜索
将一张图片通过色阶分割图片,在每个区域找到覆盖这个区域最小的框,将小的框合并成较粗粒度的框。然后在较大的区域里做分类。
4. R-CNN
其做法是,首先对图像做select search,做完之后可以得到2000个左右的框,将得到的框resize到输入规模的大小(简单粗暴),分别训练这些框。用SVM判断这些框是否是物体的边缘。
4.1 R-CNN的训练过程:
扒一个分类的model。
用自己的数据微调
提取特征,并存储
训练一个SVM的分类器判断是否是边缘。
对于每个类训练一个回归模型,判定主题内容的位置信息。如果框刚好覆盖猫,结果为(0,0,0,0),如果左侧有背景,则左侧非0,即告诉网络下一步的调整以什么为标准。
R-CNN速度太慢,因为每个图像中的那2000框都要经过神经网络。
5. Fast-rcnn
Fast-RCNN解决分别训练的问题,分类和找框公用一个神经网络。因为大图经过网络之后,已经包括了所有小框的区域。
在第五个卷积的位置把原本候选框的位置取出来。
在RCNN中SVM是独立跑的。不会因为候选框拟合的不好而跟新权值,但是Fast-RCNN在同一个网络里面。不用单独将特征存盘
这里指示了原始图像在最后一个卷积特征中相应的位置。
将区域划分为网格
仅对绿色框(候选框)中的区域下采样
然后对其做后续的操作。
Fast-RCNN对RCNN的改进,但它依然需要在网络之外用select search选取候选框
6. Faster-rcnn
Faster-rcnn是一个end-to-end的网络结构,它不需要额外提供候选框,而是在网络中训练得到
最后的卷积层插入RPN,获取所有的区域(Region)
在卷积结果上取出一个Silde window,在这个框中做分类和拟合。
7. NeuralStyle
https://github.com/jcjohnson/neural-style
https://deepart.io/ 可以上传一张图片,选择一种风格合成。
过程
对于原始图过CNN得到激励
代表风格的图片过神经网络也同样可以拿到一些activation。
两个优化目标:
a. 和原始图片的接近程度
b. 与风格图片的相似程度
参考资料:
七月算法:http://www.julyedu.com/
图片来自于课程PPT