计算机视觉基础知识(十六)--图像识别

图像识别

  • 信息时代的一门重要技术;
  • 目的是让计算机代替人类处理大量的物理信息;
  • 随着计算机技术的发展,人类对图像识别技术的认识越来越深刻;
  • 图像识别技术利用计算机对图像进行处理\分析\理解,识别不同模式的目标和对象;
  • 过程分为信息的获取\预处理\特征抽取和选择\分类器设计\分类决策;

模式识别

  • 是人工智能和信息科学的重要组成部分;
  • 指对表示事物或现象的不同形式的信息做分析和处理,得到对事物或现象描述\辨认和分类的过程;
  • 计算机图像识别技术是模拟人类的图像识别过程;
  • 在图像识别的过程中进行模式识别是必不可少的;
  • 模式识别是人类的一项基本智能;
  • 随着计算机的发展和人工智能的兴起;
  • 人类本身的模式识别满足不了生活的需要;
  • 希望用计算机代替或扩展人类的部分脑力劳动,于是产生了计算机模式识别;
  • 模式识别就是对数据进行分类,与数学紧密结合,所用思想大部分是概率与统计;

图像识别的过程

  1. 信息的获取;
  2. 预处理;
  3. 特征抽取和选择;
  4. 分类器设计;

信息的获取

  • 通过传感器,将光或声音等信息转化为电信号;
  • 通过某种方法将其转变为机器能够认识的信息;

预处理

  • 指图像处理中的去噪\平滑\变换等操作;
  • 加强图像的重要特征;
  • 图像增强;

特征抽取和选择

  • 模式识别中,需要进行特征抽取和选择;
  • 是图像识别过程中非常关键的技术;

分类器设计

  • 通过训练得到一种识别规则;
  • 通过该识别规则得到一种特征分类;
  • 使得图像识别技术可以得到高德识别率;
  • 分类决策时在特征空间中对被识别对象进行分类;
  • 从而更好的识别所研究的对象;

图像识别的应用

  • 图像分类
  • 网络搜索
  • 以图搜图
  • 智能家居
  • 拍照识别/扫描识别
  • 农林:森林调查;
  • 金融
  • 安防
  • 医疗
  • 娱乐监管

机器学习方法的发展

分类与检测

  • 分类是识别图片内容,并进行归类的过程;
  • 检测是知道了图片的内容,在图片中将其框选出来的过程;
  • 分类与检测在很多领域广泛应用;

分类与检测的应用领域

  •  人脸识别
  • 行人检测
  • 智能视频分析
  • 行人跟踪
  • 交通场景物体识别
  • 车辆计数
  • 逆行检测
  • 车牌检测与识别;
  • 基于内容的图像检索
  • 相册自动归类

常见的卷积神经网络

 

VGG

  • VGG的经典之处在首次将深度学习做的非常"深",达到16-19层;
  • 同时使用了非常小的卷积核(3x3);

VGG16

  • 一张原始图片,resize到(224,224,3);
  • conv1两次[3,3]卷积,输出特征层64,形状为(224,224,64),2x2最大池化,输出net(112,112,64);
  • conv2两次[3,3]卷积,输出特征层128,形状为(112,112,128),2x2最大池化,输出net(56,56,128);
  • conv3三次[3,3]卷积,输出特征层256,形状为(56,56,256),2x2最大池化,输出net(28,28,256);
  • conv3三次[3,3]卷积,输出特征层256,形状为(28,28,512),2x2最大池化,输出net(14,14,512);
  • conv3三次[3,3]卷积,输出特征层256,形状为(14,14,512),2x2最大池化,输出net(7,7,512);
  • 卷积模拟全链接层,效果等同,输出net(1,1,4096),进行两次;
  • 卷积模拟全链接层,效果等同,输出net(1,1,1000);

卷积层与全链接层的区别

  • 卷积层为局部链接;
  • 全链接层使用图像的全局信息;
  • 最大的局部等于全局;
  • 说明全链接层使用卷积层替代可行;

卷积层代替全链接层

  • 卷积层和全链接层都进行了一个点乘操作;
  • 他们的函数形式相同;
  • 全链接层可以转化为对应的卷积层;
  • 只需要把卷积核的尺寸变为和输入的feature map大小一致,为(h,w);
  • 这样卷积和全链接层的参数一样多;

1X1卷积的作用

  • 实现特征通道的升维和降维;
  • 控制卷积核的数量,从而控制通道数;
  • 池化层只改变尺寸,无法改变通道数;

Residual net(残差网络)

  • 将靠前若干层的某一层数输出直接跳过多层引入到后面数据层的输入;

残差神经单元

  • 某段神经网络的输入为x;
  • 期望输出为H(x);
  • 如果我们直接将输入x传到输出作为初始结果;
  • 需要学习的目标为:F(x)=H(x)-x;
  • 这就是一个残差神经单元;
  • 相当于改变了学习目标;
  • 不再是学习一个完整的输出H(x);
  • 而是学习输出和输入的差别:H(x)-x,即残差;

 直连卷积神经网络与ResNet的区别

  • ResNet有很多旁路的支线将输入直连到后面的层;
  • 后面的层可以直接学习残差;
  • 这种结构也被称为shortcut或skip connections;
  • 传统卷积层或全连接层在信息传递时会存在信息丢失\损耗等问题;
  • ResNet直接将输入信息绕道传到输出,保护信息的完整性;
  • 整个网络只学习输入\输出差别的那部分,简化了学习目标和难度;

ResNet50

  • ResNet50有两个基本的模块;
  • 分别是Conv Block和Identity Block;
  • Conv Block的输入和输出维度不一样,不能连续串联;
  • 其作用是改变网络的维度;
  • Identity Block输入维度和输出维度相同,可串联,用于加深网络;

BatchNormalization

  • 所有输出保证在0~1之间;
  • 所有输出数据的均值接近0;
  • 标准差接近1的正态分布;
  • 这样能够使数据落入激活函数的敏感区,避免梯度消失,加快收敛;
  • 加快模型收敛速度,并具有一定的泛化能力;
  • 可减少dropout的使用;

\widehat{x}^{(k)}=\frac{x^{(k)}-E[x^{(k)}]}{\sqrt{Var[x^{(k)}]}}

卷积神经网络迁移学习-fine tuning

  • 实践中,由于数据集不够大,很少有人从头开始训练网络;
  • 常见的做法是使用预训练的网络;
  • 对预训练的网络来重新fine-tuning;
  • 或者使用预训练网络作为特征提取器;
  • 迁移学习就是将训练好的模型,通过简单的调整快速移动到另一个数据集上;
  • 随模型层数及复杂度的增加,错误率不断降低;
  • 训练复杂的神经网络需要非常多的标注信息;
  • 也需要长至几天甚至几周的训练时间;
  • 为了解决上述问题可以使用迁移学习;

常见的两类迁移学习场景

  • 卷积网络当做特征提取器;
  • Fine-tuning卷积网络;

卷积网络当做特征提取器

  • 使用在ImageNet上预训练的网络;
  • 去掉最后的全连接层;
  • 剩余部分当做特征提取器;
  • 这样提取的特征称为CNN节点;
  • 可以使用线性分类器来分类图像;

Fine-tuning卷积网络

  • 替换网络的输入层;
  • 使用新的数据来训练;
  • 可以选择fine-tune全部曾或部分层;
  • 通常前面的层提取图像的通用特征(generic features);
  • 通用特征对许多任务都有用;
  • 后面的层提取与特定类别有关的特征;
  • Fine-tuning常常只需要微调后面的层;

Inception

  • Inception网络是CNN发展史上的一个重要里程碑;
  • Inception出现之前的CNN仅是堆叠卷积层,网络越来越深;
  • 以期得到更好的性能;

多层卷积网络深度存在的问题

  • 图像中突出部分的大小差别很大;
  • 由于信息位置的巨大差异,卷积操作选择合适大小的卷积核比较困难;
  • 信息分布更全局的图像偏好较大的卷积核;
  • 信息分布较局部的图像偏好较小的卷积核;
  • 非常深的网络更容易过拟合;
  • 将梯度更新传到整个网络是困难的;
  • 简单堆叠卷积层非常消耗计算资源;

Inception module解决方案

  • 鉴于多层卷积神经网络具有的以上问题;
  • 为什么不在同一层上运行多个尺寸的滤波器呢?
  • 那么网络本质上变得宽一些,而不是更深一些;

Inception模块

  • 使用三个不同尺寸的滤波器:1X1,3x3,5x5,以及最大池化;
  • 对输入执行卷积操作;
  • 所有子层的输出最后被级联起来;
  • 传送至下一个模块;
  • 一方面增加了网络的宽度;
  • 另一方面增加了网络的尺度适应性;

降维Inception模块

  •  如前,深度神经网络耗费大量资源;
  • 为了降低算力成本,在3x3,5x5卷积层之前添加额外的1x1卷积层;
  • 以此来限制输入通道的数量;
  • 尽管添加额外的卷积操作反直觉;
  • 但是1x1的卷积较5x5的卷积廉价许多;
  • 输入通道数量的减少有利于降低计算成本;

1x1卷积降低运算成本比较

 

Inception V1 

  • Googlenet出品
  • 采用了Inception 模块化结构;
  • 共计9个模块,22层;
  • 避免梯度消失,增加2个辅助softmax;
  • 用于前向传导梯度;

Inception V2

  •  输入增加了BatchNormalization;
  • 用两个连续的3x3卷积层(stride=1)组成的小网络代替单个5x5卷积;
  • 5x5卷积核参数是3x3卷积核参数的25/9=2.78倍;

  • 此外,作者将 nxn的卷积核尺寸分解为1xn和nx1的两个卷积;

  •  前面三个原则用来构建三种不同类型的Inception模块;
typepatch size/strideinput  size
conv3x3/2299x299x3
conv3x3/1149x149x32
conv padded3x3/1147x147x32
pool3x3/2147x147x64
conv3x3/173x73x64
conv3x3/271x71x80
conv3x3/135x35x192
3 X Inception35x35x288
5 X Inception17x17x768
2 x Inception8x8x1280
pool8x88x8x2048
linearlogits1x1x2048
softmaxclassifier1x1x1000

Inception V3

  • 整合了InceptionV2的所有升级,使用了7X7卷积
typepatch size/strideinput  size
conv3x3/2299x299x3
conv3x3/1149x149x32
conv3x3/1147x147x32
pool3x3/2147x147x64
conv3x3/173x73x64
conv3x3/271x71x80
conv3x3/135x35x192
3 X Inception35x35x288
3 X Inception17x17x768
3 x Inception8x8x1280
pool8x88x8x2048
linearlogits1x1x2048
softmaxclassifier1x1x1000

Inception V3 设计思想

  • 分解成小卷积很有效;
  • 可以降低参数量,减轻过拟合;
  • 增加网络非线性的表达能力;
  • 卷积网络从输入到输出;
  • 应该让图片尺寸逐渐减小;
  • 输出通道数逐渐增加;
  • 让空间结构化,将空间信息转化为高阶抽象的特征信息;
  • Inception Module使用多个分支;
  • 提取不同抽象程度的高阶特征;
  • 丰富网络的表达能力;

Inception V4

  • 图中1为基本的Inception V2/V3模块;
  • 使用两个3x3卷积代替5x5卷积;
  • 并且使用average pooling;
  • 该模块主要处理尺寸为35x35的feature map;
  • 图2中模块使用1xn和nx1卷积代替nxn卷积;
  • 同样使用average pooling;
  • 该模块主要处理尺寸为17x17的feature map; 
  • 图3将3x3卷积用1x3卷积和3x1卷积代替;
  • Inception V4中基本的Inception module沿袭了Inception V2/V3的结构;
  • 不同的是结构看起来更为简洁统一;
  • 且使用更多的Inception module,实验效果更好;

 

 Inception模型优势

  • 采用1x1卷积核,性价比高;
  • 很少的计算量可增加一层特征变换和非线性变换;
  • 提出Batch Normalization;
  • 通过一定手段,将每层神经元的输入分布拉到均值0方差1的正态分布;
  • 使其落入激活函数的敏感区;
  • 避免梯度消失,加快收敛;
  • 引入Inception module 4个分支结合的结构;

卷积神经网络迁移学习

  • 现在工程中最常用的是vgg\resnet\Inception这几种结构;
  • 设计者通常先直接套用原版模型;
  • 对数据进行一次训练;
  • 选择较好的模型进行微调与模型缩减;
  • 工程上使用的模型必须高进度和高速度;
  • 常用模型缩减的方法是减少卷积个数与减少resnet的模块数;

卷积神经网络迁移学习-Inception

  • 据相关论文,保留训练好的Inception模型所有卷积层的参数;
  • 只替换最后一层全链接层;
  • 最后全链接层之前的网络称为瓶颈层;
  • 瓶颈层输出的节点向量可作为任何图像的一个具有表达能力的特征向量;
  • 在新的数据集上,利用训练好的网络对图像进行特征提取;
  • 提取的特征向量作为输入训练一个全新的单层全连接神经网络;
  • 处理新的分类问题;
  • 在数据量足够的情况下;
  • 迁移学习的效果不如完全重新训练的效果;
  • 迁移学习所需的训练时间和样本远小于完整模型的训练;
  • Inception模型与Alexnet结构完全不同;
  • Alexnet模型中,不同卷积层串联连接;
  • Inception模型中Inception结构并联不同的卷积层;

Mobilenet

  • google针对手机等嵌入式设备提出;
  • 一种轻量级的深层神经网络;
  • 其核心思想为深度可分离卷积;
  • depthwise separable convolution;
  • 3x3卷积核厚度只有一层;
  • 卷积核在输入张量上一层层的滑动;
  • 每一次卷积生成一个输出通道;
  • 卷积完成后,利用1x1的卷积调整厚度;

  • 对于一个卷积点;
  • 假设有一个3x3大小的卷积层;
  • 其输入通道为16,输出通道为32;
  • 32个3x3大小的卷积核会遍历16个通道中的每个数据;
  • 可得所需的32个输出通道;
  • 所需参数为16x32x3x3=4608个;
  • 应用深度可分离卷积;
  • 用16个3x3大小的卷积核遍历16通道的数据;
  • 得到16个特征图谱;
  • 接着用32个1x1大小的卷积核遍历16个特征图谱;
  • 所需参数为16x3x3+16x32x1x1=656个;
  • 可以看出,depression separable convolution 可减少模型的参数;

卷积神经网络设计的问题背景

  • 熟练掌握训练神经网络的能力并不容易;
  • 与机器学习的思维一样,细节决定成败;
  • 训练神经网络需要处理更多的技术细节;
  • 应该了解数据和硬件;
  • 知道从何种网络开始;
  • 了解需要建立多少卷积层;
  • 熟悉激励函数的设置;
  • 学习速率是调整神经网络训练的最重要超参数;
  • 也是最难优化的参数之一;
  • 学习率太小,可能永远不会得到一个解决方案;
  • 学习率太大,可能会错过最优解;
  • 自适应的匹配学习率,可能需要花费代价在硬件资源上;
  • 设计选择和超参数的设置极大影响了CNN训练和性能;
  • 资源的稀缺和分散对深度学习的新进者,可能更有利于架构设计的直觉培养;

卷积神经网络的设计技巧

1.架构遵循应用

  • Google Brain 或者Deep Mind 实验室有许多耀眼的新模型;
  • 但其中很多是不可实现,或于你的需求不适用;
  • 应该使用对特定的应用最有意义的模型;
  • 这种模型或许非常简单,但仍然强大,比如VGG;

2.路径激增

  • 每年ImageNet Challenge的冠军都比上一年使用更加深层的网络;
  • 从AlexNet到Inception再到Resnets;
  • 网络路径的数量有成倍增长的趋势;

3.追求简约

  • 更大的不一定是更好的

4.增加对称性

  • 对称性是质量和工艺的标志;

5.金字塔形状

  • 总是在表征能力和减少冗余或者无用信息之间权衡;
  • CNNs通常会降低激活函数的采样;
  • 增加从输入层到最终层之间的连接通道;

6.过度训练

  • 训练准确度和泛化能力是衡量模型的另一个标准;
  • 可使用drop-out或dro-path提升泛化能力;
  • 这是神经网络的重要优势;
  • 用比实际用例更难的问题训练网络,以提高泛化能力;

7.覆盖问题的空间

  • 为了扩大训练数据和提升泛化能力;
  • 使用噪声和人工增加训练集的大小;
  • 比如随机旋转\裁剪和一些图像增强操作;

8.递增的功能结构

  • 成功的结构会简化每一层的工作;
  • 在非常深的神经网络中,每层会递增的修改输入;
  • 在ResNet中,每一层的输出可能类似于输入;
  • 在实践中,请在ResNet中使用短的跳过长度;

9.标准化层的输入

  • 标准化是可以使计算层的工作变得更加容易的一条捷径;
  • 在实际中可以提升训练的准确性;
  • 标准化 把所有曾的输入样本放在了一个平等的基础上;
  • 允许反向传播可以更有效的训练;

10.使用微调过的预训练网络(fine tuning)

  • 如果你的视觉数据和ImageNet相似;
  • 可用预训练网络使得模型学习的更快;
  • 低水平的CNN通常可被重复使用;
  • 他们大多能够检测线条和边缘这些常见的模式;
  • 比如用自己的层替换分类层,用特定的数据训练最后几层;

11.使用循环的学习率

  • 学习率的实验会消耗大量时间;
  • 且中间会遇到错误;
  • 自适应学习率在计算上可能是非常昂贵的;
  • 循环学习率不会大量消耗计算资源;
  • 使用循环学习率,可设置一组最大最小边界;
  • 并在最大最小范围内改变;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/423043.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

N皇后问题详解:回溯算法的应用与实践(dfs)

目录 一.问题描述二.思路分析1.DFS三.代码实现与解析1.分析2.完整代码 一.问题描述 题目如上图所示,在一个n*n的国际象棋棋盘上怎么摆放能使得皇后互相攻击不到(也就是在任意一列、一行、一条对角线上都不存在两个皇后) 二.思路分析 1.DFS …

C/C++内存管理及内存泄漏详解

目录 C/C内存分布 C语言中动态内存管理方式:malloc/calloc/realloc/free C内存管理方式 new/delete操作内置类型 new和delete操作自定义类型 operator new与operator delete函数 new和delete的实现原理 内置类型 自定义类型 内存泄漏 概念 内存泄漏分类 ⭐…

虚拟化介绍

虚拟化理论介绍 什么是虚拟化: 虚拟化(Virtualization)技术最早出现在 20 世纪 60 年代的 IBM 大型机系统。 在70年代的 System 370 系列中逐渐流行起来,这些机器通过一种叫虚拟机监控器(Virtual Machine Monitor,V…

网络仿真(一)

网络仿真的意义 在网络规划和设计、网络设备研发、网络协议开发中,需要一种手段来反映和预测网络的性能 网络仿真可以提高网络规划设计的可靠性和准确性,明显降低网络投资风险,减少不必要的浪费 Ns-2 is a discrete event simulator Sched…

Page Object模式:为什么它是Web自动化测试的必备工具

为 UI 页面写测试用例时(比如 web 页面,移动端页面),测试用例会存在大量元素和操作细节。当 UI 变化时,测试用例也要跟着变化, PageObject 很好的解决了这个问题。 使用 UI 自动化测试工具时(包…

LabVIEW石油钻机提升系统数字孪生技术

LabVIEW石油钻机提升系统数字孪生技术 随着数字化、信息化、智能化的发展,石油钻采过程中的石油钻机数字化技术提升成为了提高钻井效率、降低生产成本的重要途径。基于中石油云平台提供的数据,采用数字孪生技术,对石油钻机提升系统进行数字化…

配置之道:深入研究Netty中的Option选项

欢迎来到我的博客,代码的世界里,每一行都是一个故事 配置之道:深入研究Netty中的Option选项 前言Option的基础概念ChannelOption与Bootstrap Option常见的ChannelOption类型ChannelConfig的使用Option的生命周期不同传输协议的Option 前言 在…

云时代【7】—— 存储卷

云时代【7】—— 存储卷 四、Docker(四)存储卷1. 存储卷(1)定义(2)分类 2. 相关指令(1)管理卷 VolumeA. 创建方式方式一:docker volume方式二:docker run -v …

美国教授查理曼说中国为何强大?中国人都不知道的民族特性

Title: 中国强大的秘密:查理曼教授的视角 在世界历史的长河中,中华民族以其辉煌灿烂的文化和举世瞩目的成就,书写了一篇篇传奇篇章。然而,对于中国人为什么能够取得如此卓越的成就,许多人却并不清楚。近日&#xff0c…

Linux搭建SFTP服务器

案例:搭建SFTP服务器 SFTP(SSH文件传输协议) SFTP(SSH文件传输协议)是一种安全的文件传输协议,用于在计算机之间传输文件。它基于SSH(安全外壳协议)的子系统,提供了加密的…

sqlserver保存微信Emoji表情

首先将数据库字段,设置类型为 nvarchar(200)一个emoji表情,占4字节就可以了,web前端展示不用改任何东西,直接提交数据保存;回显也会没有问题,C#代码不用做任何处理; 不哭不闹要睡觉&#x1f31…

若依框架使用mars3d的环境配置,地球构建

因项目需要,原本使用过的cesium依赖,现在想使用火星科技mars3d的一些功能,所以需要引入mars3d依赖,整个过程非常的坎坷,以至于我都不知道到底是哪些部分是标准的。。。先把我认为对的记录一下: 1.vue.conf…

【Java】SpringAOP —— AOP是什么? 代码实现了SpringAOP

文章目录 一、AOP是什么二、AOP的组成三、SpringAOP四、实现SpringAOP1.添加AOP框架支持2.定义切面切点3.定义相关通知 总结 一、AOP是什么 AOP(Aspect Oriented Programming):面向切面编程,它是⼀种思想,它是对某一类…

JVM 第四部分—垃圾回收相关概念 2

System.gc() 在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存 然而System.gc()调用附带一个免责声明,无法保证对垃…

基于Camunda实现bpmn 2.0各种类型的任务

基于Camunda实现bpmn中各种类型任务 ​ Camunda Modeler -为流程设置器(建模工具),用来构建我们的流程模型。Camunda Modeler流程绘图工具,支持三种协议类型流程文件分别为:BPMN、DMN、Form。 ​ Camunda Modeler下载…

【Python】进阶学习:pandas--isin()用法详解

【Python】进阶学习:pandas–isin()用法详解 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅…

【java】20:枚举

枚举的二种实现方式 1) 自定义类实现枚举 2) 使用 enum 关键字实现枚举 自定义实现枚举: 1.不需要提供setXxx方法,因为枚举对象值通常为只读. 2.对枚举对象/属性使用final static共同修饰,实现底层优化. 3.枚举对象名通常使用全部大写&…

电子电气架构——汽车以太网诊断路由汇总

电子电气架构——汽车以太网诊断路由汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将…

江科大stm32学习笔记——【4-1】OLED

一.原理 1.调试方式 串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息。 显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上。 Keil调试模式:借助Keil软件的调…

深入sizeof与strlen

一、sizeof与strlen的对比 sizeofstrlensizeof是单目操作符strlen是库函数,使用需要包含头文件string.hsizeof计算操作数所占用的内存,单位是字节strlen是求字符串长度,统计的是\0之前字符的个数不关注内存中存放什么数据 关注内存总是否有\0…