【动手学计算机视觉】第十讲:传统目标检测之卷积神经网络概述

简介: 入门计算机视觉领域的绝大多数同学应该都学过或听说过斯坦福大学的公开课(CS231n: Convolutional Neural Networks for Visual Recognition),主要就围绕CNN进行展开,甚至很多近几年入门计算机视觉的同学就斩钉截铁的认为,计算机视觉就是卷积神经网络,我认为这有一些"一叶障目,不见泰山的"感觉。CNN是计算机视觉的一个子集,而且是一个很小的子集,更确切的说,计算机视觉是一种应用性技术,CNN是一种工具。本文就来介绍概述一下卷积神经网络,后续会挑选比较经典的模型详细展开并编程实现。入门计算机视觉领域的绝大多数同学应该都学过或听说过斯坦福大学的公开课

前言

40.png


提起卷积神经网络(CNN),应该很多人都有所耳闻。自从2012年AlexNet在ImageNet挑战赛一举夺魁,它再一次的回到的人们的视野。

为什么称之为"再一次",因为CNN并不是近几年的产物,早在20世纪90年代Yann LeCun就提出了最基础的卷积神经网络模型(LeNet),但是由于算力和数据的限制,它一直处于一种被冷遇的地位,传统目标识别方法,例如之前所讲到的SIFT、HOG、DPM占据着不可撼动的统治地位。

但是随着算力的提升和数据集的积累,这一切都变了,在AlexNet成功之后,CNN如同雨后春笋一样,每年各种各样的Net数不胜数,近其中知名的就有AlexNet、VGG、GoogleNet、UNet、R-CNN、FCN、SSD、YOLO等。

入门计算机视觉领域的绝大多数同学应该都学过或听说过斯坦福大学的公开课(CS231n: Convolutional Neural Networks for Visual Recognition),主要就围绕CNN进行展开,甚至很多近几年入门计算机视觉的同学就斩钉截铁的认为,计算机视觉就是卷积神经网络,我认为这有一些"一叶障目,不见泰山的"感觉。

CNN只是计算机视觉的一个子集,而且是一个很小的子集,更确切的说,计算机视觉是一种应用性技术,CNN是一种工具。

但是,不可否认,CNN是目前阶段我们能力所达到的、在大多数CV方向应用最为成功的一项技术,尤其是R-CNN系列和YOLO系列,在商业中,例如交通监测、车站安检、人脸识别应用非常多,效果对比于传统目标识别算法也要好很多,所以,它是学习计算机视觉中非常重要的一环,本文就概述一下近年来比较成功的CNN模型。本文只是用简略的语言进行概述,后续会挑选一些比较经典的模型进行详解和编程实现

卷积神经网络概述

41.png按功能对卷积神经网络进行分类主要可以分为两类,

  • 检测(detection)
  • 分割(segmentation)

检测的目的是要判断一副图像中是否有特定的目标,以及它所在的位置,通过一些手段识别出它所在的包围合区域。

分割的目的要更加严格一些,它不仅要识别出目标的所在区域,还要分割出目标的边缘,尤其在CNN图像分割领域,和传统的图像分割不同,它不能简单的依靠梯度变化幅度把目标分割出来,还需要进行语义上的分割,识别到像素级的类别。

目前比较知名的用于识别的CNN模型有,

  • AlexNet
  • VGG
  • R-CNN系列
  • Resnet
  • MobileNet
  • YOLO系列

在分割方面比较知名的CNN模型有,

  • Mask R-CNN
  • FCN
  • U-Net
  • SegNet

CNN中主要用到的技术

42.jpg

系统学习以上上述所提到的知名CNN模型会发现,其中所使用到的技术手段大同小异,而那些知名度较小的CNN模型更是如此,创新点更是微乎其微,其中所使用到的技术主要有,

  • 卷积
  • 池化
  • 基础块
  • Dropout
  • 跳跃连接
  • 锚点
  • 优化算法
  • 激活函数
  • 批量正则化
  • 回归

43.jpg

卷积池化是非常基础的,在特征提取过程中至关重要。

基础块的思想最初出自于VGG,它在AlexNet的基础上进行了很大的改进,基础块思想的引入增加了网络的重用性,后续很多模型都死在这一举出上进行改进的,因此,在很多后续的网络模型都是以VGG为基础模型。

Dropout这个几乎成了CNN模型中必不可少的一个组件,它在应对过拟合问题中具有非常重要的价值。

跳跃连接最初出现在ResNet,在网络的不断改进中发现,其中的思想都是使网络越来越深,网络适当的加深的确能够带来识别精度的提到,但是真的越深越好吗?当然不是。随着网络的加深,很容易出现梯度消失和梯度爆炸现象,ResNet中提出的跳跃连接在后来的网络模型中扮演者非常重要的角色。

锚点这一概念最初是在2008年的DPM模型中看到,后来Faster R-CNN中主要的使用了这项技术,使得它名声大噪,后来的经典模型几乎都用到了锚点这个思想。

优化算法对于上述CNN模型的价值自然不言而喻,梯度下降、Adam、牛顿法等,可以说这是深度计算机视觉的核心所在,也是理论体系最完善、最能够用数学模型解释的一部分。

激活函数和Dropout一样,也是CNN模型中必不可少的一个组件,它的主要价值在于解决模型的线性不可分问题,把非线性的特性引入到网络模型中。

批量正则化也是CNN中常用的一个功能,它的主要作用是加速模型的收敛,避免深层神经网络的梯度消失和梯度爆炸。

回归中用到的较多的自然是softmax,它将经过各种网络层处理得到的特性向量进行回归,得到每一个类别对应的概率,在多分类问题中是一个必不可少的功能。

CNN模型架构

44.jpg

纵观上述所提及的经典CNN模型,它们的模型架构非常相似,主要包含如下几个部分:

  • 输入层
  • 特征提取层
  • 全连接层
  • 回归
  • 输出层

输入层主要是用于读取图像,用于后面的网络层使用。

特征提取层主要通过卷积来获取图像局部的特征,得到图像的特征图。

全连接层用于对特征层进行后处理,然后用于回归层处理。

回归主要通过一些回归函数,例如softmax函数来对前面得到的特征向量进行处理,得到每个类别对应的概率。

输出层用于输出检测和分类的结果。

当然,在这个过程中某些环节会用到上述提到的激活函数、批量正则化、优化算法以及非极大值抑制。

搭建CNN目标识别系统

有了上述强大的模型,在实际项目中该怎么搭建一个有价值的CNN目标识别系统呢?我认为主要分为如下几个步骤,

  • 数据获取
  • 数据预处理
  • 模型搭建
  • 数据后处理

在CNN,乃至整个深度学习领域都可以说数据获取是至关重要的一部分,甚至可以说占据了超过50%的地位。深度学习的发展主要就是得益于这么多年来数据的积累,很多项目和工程也是由于数据的限制和却是只能中途作废。因此,数据获取部分是搭建目标识别系统中最重要的一个环节,它直接决定着是否能够继续走下去。

目前有一些公开的数据集可以获取,例如MNIST、Pascal VOC、ImageNet、Kaggle等。如果自己所做的方向恰好巧合,这些公开数据集里有相应的数据,那么的确是幸运的,可以从这些数据中直接获取。

数据预处理对于CNN同样非常重要,各种视频、摄像头在数据采集的过程中很难保证数据是有价值的,或者干净的,这里就需要对数据进行去噪、去模糊、增强分辨率,如果数据集不充足,还需要对数据进行扩充。

模型搭建我认为是这几个环节中相对较为容易的一部分,首先目前这些经典的框架都有开源的项目,有的甚至不止一个版本,我们可以借鉴甚至直接拿来用这些模型。即便不愿意选择开源的项目,也可以使用tensorflow、pytorch进行搭建,其中需要的代码量是非常有限的。

输出检测的结果需要进行非极大值抑制、绘出包围合等后续工作,以及和一些系统进行对接,这样它才是一个可用的完整系统。


相关文章
|
18天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
81 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
1月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
299 55
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
199 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
15天前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
|
1月前
|
机器学习/深度学习 资源调度 算法
图卷积网络入门:数学基础与架构设计
本文系统地阐述了图卷积网络的架构原理。通过简化数学表述并聚焦于矩阵运算的核心概念,详细解析了GCN的工作机制。
137 3
图卷积网络入门:数学基础与架构设计
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习中的卷积神经网络(CNN)##
在当今的人工智能领域,深度学习已成为推动技术革新的核心力量之一。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,因其在图像和视频处理方面的卓越性能而备受关注。本文旨在深入探讨CNN的基本原理、结构及其在实际应用中的表现,为读者提供一个全面了解CNN的窗口。 ##
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习中的卷积神经网络(CNN)
深入理解深度学习中的卷积神经网络(CNN)
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN): 从理论到实践
本文将深入浅出地介绍卷积神经网络(CNN)的工作原理,并带领读者通过一个简单的图像分类项目,实现从理论到代码的转变。我们将探索CNN如何识别和处理图像数据,并通过实例展示如何训练一个有效的CNN模型。无论你是深度学习领域的新手还是希望扩展你的技术栈,这篇文章都将为你提供宝贵的知识和技能。
410 7
|
2月前
|
机器学习/深度学习 自然语言处理 算法
深入理解深度学习中的卷积神经网络(CNN)
深入理解深度学习中的卷积神经网络(CNN)
102 1
|
2月前
|
SQL 存储 安全
网络安全与信息安全概述####
本文探讨了网络安全(Cybersecurity)和信息安全(Information Security)的基本概念及其差异,重点介绍了网络安全漏洞、加密技术及安全意识在信息保护中的重要性。本文旨在通过深入分析这些关键技术和策略,提升对信息安全整体性的理解,帮助读者在数字化时代更好地应对信息安全挑战。 ####

热门文章

最新文章