深度学习03-CNN 应用
说明:本系列是七月算法深度学习课程的学习笔记
文章目录
- 1 概述
- 2 图片识别+定位
- 3 物体监测
- 3.1 选择性搜索
- 3.2 R-CNN
- 3.3 Fast R-CNN
- 3.4 Faster R-CNN
- 4 语义分割
- 4.1 滑窗处理
- 4.2全卷积神经网络
- 5 代码
1 概述
CNN主要任务包含物体识别+定位、物体识别、图像分割。
图片识别:图片分类,假设图片中是一个主要对象。
图片识别+定位:可以用矩形框,画出图片中的物体。
物体识别:实际情况中一个图片是包含多个对象的。用矩形框标出所有物体。
图像分割:在物体识别的基础上,检测出物体边缘。
2 图片识别+定位
图片识别:输入:图片;输出:类别标签;评价标准:准确率
图片定位:输入:图片;输出:物体边界框(x,y,w,h);评价标准:交并准则
(x,y)是左上角的点,w是宽度,h是高度
交并准则:两个矩形交的面积/两个矩形并的面积,值需要>=0.5才可以用
图片识别是分类问题,使用交叉熵损失。
图片定位是回归类问题,使用 L2 distance (欧氏距离)损失函数。
图片分类问题是在知名模型上fine-tune。
在知名模型的尾部,可以接在全连接层之后,也可以接在全连接层之前。分类问题加一个分类头,定义一个交叉熵损失函数;回归类问题接一个回归头,定义一个欧式距离损失函数。
思路1:看做回归问题
能否对物体做进一步定位?
例如定位猫的2只眼睛,2只耳朵,1个鼻子。上一个问题中是一个物体,有4个数字。现在的问题有5个物体,那就会有20个数字。预估一个长度为20的向量。这里的前提是:物体的结构是相同的。遇到只有一只猫的眼睛就出错了。
进一步可以识别人的姿势。类似火柴拼成的人。每个关键是一个坐标,做一个回归。论文:Toshev and Szegedy,“DeepPose: Human Pose Estimation via Deep Neural Networks”, CVPR 2014
思路2:图窗+识别与整合
取不同大小的框,
让框出现在不同的位置
对取得的内容做分类判定得分,
对取得的内容做回归(框)判定得分,
按照得分高低对结果框做抽取和合并。
克服问题:参数多,计算慢
1 用卷积核替换全连接层:参数可复用。
感知眼。卷积层不同位置的点相当于只能看到第一层的不同区域。
这样就不用上面方法中把不同位置的图片抠出来,送到神经网络做计算。
2 降低参数量
论文:Sermanet et al,“ntegrated Recognition,Localization and Detection using Convolutional Networks”,ICLR2014
3 物体监测
其实不知道有多个物体
在上面的步骤中有滑窗,每次滑窗,做一次类别识别,判断是否是一种动物,也可以。
问题:框的位置不同,大小不同,比例不同,导致计算量大
解决方法1:边缘策略
3.1 选择性搜索
类似于聚类,基于同样的物体像素基本相同,自下而上融合成区域。
将区域扩展为框。
论文:Uijilings et al,“Selective Search for Object Recognition”,IJCV 2013
框的选择算法如下表。
3.2 R-CNN
步骤1:输入层是图片,用候选框选择算法选择大概2000个候选框,对每个候选框缩放为同样的尺寸,作为入参,交给卷积层。
在一个知名模型上做fine-tune。根据自己的模型修改参数。例如有20个分类,再加一个背景分类,表示不属于任何类型。
步骤2:用图框候选算法选择图框,抠出图框。缩放为同样的尺寸。这一步是在CPU上计算的。
步骤3:卷积层,学习参数和特征
以上一步的图框作为输入,用CNN做前向运算,取第5个池化层做特征,将特征保存到硬盘上。
步骤4:做SVM分类
将上面的特征用SVM做分类。
步骤5:bbox regression
将上面的特征做回归,与标准答案相比。判断候选框是不是要上下左右移动。
论文:Girschick et al, “Rich feature hierarchies for accurate object detection and semantic segmentation”, CVPR 2014
3.3 Fast R-CNN
1 2000个候选框过神经网络抽取特征,花费时间多。
利用卷积层的透视眼,实现共享图窗计算,从而加速。
不再分为2000个子图,而是利用卷积层的透视眼,某一层卷积层的一个点是可以对应到原图的一部分区域的,通过共享参数的方式减少计算量。
2 做成端对端的系统
3 不同大小的图怎么接全连接层
RIP Region of Interest Pooling方式处理
如果得到的矩阵大小是500x300,但是最后想要的结果是100x100,先把图片分成很多个格子,使用max-pool做池化,变成想要的大小。
一般来说候选框不会小于目标大小。
3.4 Faster R-CNN
Region Proposal(候选图窗)一定要另外独立做吗?
候选图窗选择是在CPU上做的。
region proposal network
选择中心点为中心滑窗 3x3,1:2,2:1,1:1,按照这样的比例,选择候选图窗。
选择中心点的方法是超参数,自己选择。可以是将原始图片分为几个区块,以每个区块的中心作为中心。
论文:Ren et al, “Faster R-CNN: Towards Real-Time Object
Detection with Region Proposal Networks”, NIPS 2015
one-stage vs two-stage
faster-rnn是两段式的。第一阶段先找到候选框,第二阶段判断候选框内有没有物体以及边界情况
yolo/ssd是一段式的。把原图画成不同的格子,以格子中心点为中心,取不同比例的框,通过神经网络获得值:(dx,dy,dy,dw,confidence)以及class。前面4个是微调参数,confidence表示是否是物体,class表示是哪种物体。
4 语义分割
语义分割是对每个像素做分类。
4.1 滑窗处理
参数多
4.2全卷积神经网络
CxHxW C是类别的数量
输入是 3xHxW,输出是HxW,输出每个像素的分类
HxW可能很大。
训练数据是把边框标出来。
先做下采样,再做上采样。
怎么做上采样?
专业名称transpose convolution。
例如一个2x2的区域,步长是2,那输出就是4x4,每次增加1列。
例如粉色区域=3,步长=2,pad=1,一个格子扩为9个格子。每个格子填充3a(a为系数)。
例如蓝色区域=2,系数为b,那么蓝色框线内每个单元格都为2b。两次交叉的3个方格值=3a+2b。
逆卷积就是这样不断还原。
5 代码
tensorFlow object detection https://github.com/tensorflow/models/tree/master/research/object_detection
可以使用TensorFlow做物体识别,从install开始。
faster-rnn https://github.com/rbgirshick/py-faster-rcnn
发现物体检测那块其实写的云里雾里,找了一篇博客写的不错,记录下来。
最后总结一下各大算法的步骤:
RCNN
1.在图像中确定约1000-2000个候选框 (使用选择性搜索Selective Search)
2.每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取
3.对候选框中提取出的特征,使用分类器判别是否属于一个特定类
4.对于属于某一类别的候选框,用回归器进一步调整其位置
Fast R-CNN
1.在图像中确定约1000-2000个候选框 (使用选择性搜索Selective Search)
2.对整张图片输进CNN,得到feature map
3.找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层
4.对候选框中提取出的特征,使用分类器判别是否属于一个特定类
5.对于属于某一类别的候选框,用回归器进一步调整其位置
Faster R-CNN
1.对整张图片输进CNN,得到feature map
2.卷积特征输入到RPN,得到候选框的特征信息
3.对候选框中提取出的特征,使用分类器判别是否属于一个特定类
4.对于属于某一类别的候选框,用回归器进一步调整其位置
(CSDN博主「丿回到火星去」的原创文章,原文链接:https://blog.csdn.net/H_hei/article/details/87298097)
深度学习03-CNN 应用相关推荐
- 深度学习03——CNN
说明:本系列是七月算法深度学习课程的学习笔记 文章目录 1神经网络与卷积神经网络 1.1 深度神经网络适合计算机视觉处理吗 1.2CNN的结构 1.2.1 数据输入层 1.2.2 卷积层 1.2.3 ...
- 【深度学习】CNN神经网络应用(用于亚洲大黄蜂分类)
[深度学习]CNN神经网络应用(用于亚洲大黄蜂分类) 文章目录 1 概述 2 假设条件 3 网络结构 4 数据集和参数 5 Asian hornet classification experiment ...
- [caffe]深度学习之CNN检测object detection方法摘要介绍
[caffe]深度学习之CNN检测object detection方法摘要介绍 2015-08-17 17:44 3276人阅读 评论(1) 收藏 举报 一两年cnn在检测这块的发展突飞猛进,下面详 ...
- [Python人工智能] 三十.Keras深度学习构建CNN识别阿拉伯手写文字图像
从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章分享了生成对抗网络GAN的基础知识,包括什么是GAN.常用算法(CGAN.DCGAN.infoGAN.WGAN). ...
- [Python图像识别] 四十七.Keras深度学习构建CNN识别阿拉伯手写文字图像
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践
https://zhuanlan.zhihu.com/p/25928551 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文题目便是文本分类问题,趁此机会总结下文本分类 ...
- 【深度学习】CNN图像分类:从LeNet5到EfficientNet
深度学习 Author:louwill From:深度学习笔记 在对卷积的含义有了一定的理解之后,我们便可以对CNN在最简单的计算机视觉任务图像分类中的经典网络进行探索.CNN在近几年的发展历程中,从 ...
- 【深度学习】CNN在大规模图像数据集上的应用(基于keras和MNIST)
[深度学习]详解CNN实现手写数字识别(keras) 文章目录 1 MNIST数据集 2 导入数据 3 MLP 4 简单CNN 5 改进CNN 6 训练API的介绍 7 通道和卷积核辨析 1 MNIS ...
- 深度学习《CNN架构续篇 - 梯度下降的优化》
骚话一下: 今天是2020年10月2号,继续学习.本文依然是<CNN架构>的延续博文,重点介绍优化的新的梯度下降算法. 一:梯度下降的种类 说到梯度下降的方法,确实是求最优解的比较好的途径 ...
- 深度学习《CNN架构》
摘要:今天来写第一篇深度学习的博文,也是学习CNN的第一篇. 骚话一下: 今天是2020年10月1号,是祖国的71岁生日,也是传统节日中秋节,而我由于工作的安排身在海外不得回家,怀念祖国的乡土,倍加思 ...
最新文章
- ML 04、模型评估与模型选择
- Linux监听进程是否存在,并加入定时任务
- js时间选择器_Vuestic Admin一款免费与美妙基于Vue.js开发的管理模板
- oracle异机恢复 open resetlogs 报:ORA-00392
- 带你自学Python系列(十五):Python中类的用法(一)
- Recommended Browsers for Oracle E-Business Suite 11i/R12
- 深度学习之神经网络(二)
- 根据卫星星历在cesium画卫星轨迹
- 微信的企业号开发流程
- 周鸿祎杀出的一片红海:杀毒软件的死伤现场
- python古诗代码案例_用python实现古诗词横板竖版显示 【二维列表的使用】
- 别让这些遗憾 变成你的遗憾
- HDU 1024 Max Sum Plus Plus 动态规划
- JAVA和MySQL实现公交管理_基于JSP公交管理系统的设计与实现(SSH,MySQL)(含录像)
- uboot实践:uboot引导内核相关笔记
- CSDN:2018年度CSDN博客之星评选竞赛——094号,感谢您,投上的宝贵一票,感谢!感恩!
- 网页悬浮在线人工客服代码.
- C#DataTable DataSet DataRow区别详解
- SpringCloud之Sleuth
- 朗科U208优盘制作启动盘的方法