曾经被认为是未来科技的深度学习和计算机视觉技术,如今已成为主流,广泛应用于自动化机器人装配、自动车辆引导、遥感图像分析和自动化视觉检测等领域。计算机视觉和深度学习是当今最热门的话题之一,每个科技公司甚至初创企业都在争相领先。本文将探讨深度学习在计算机视觉中的关键概念。
计算机视觉(CV)是一门科学学科,它描述了机器如何理解图像和视频的含义。计算机视觉算法检查照片和视频中的特定标准,然后对需要预测或决策的任务应用解释。深度学习算法目前在计算机视觉中得到了最广泛的应用。本文将探讨深度学习在计算机视觉中的各种应用。将了解到使用卷积神经网络(CNN)的好处,它们具有多层设计,使神经网络能够专注于图像的最重要方面。
在计算机视觉、自然语言处理和视频/语音识别中,深度学习已经证明非常有效。计算机视觉模型可以用来执行面部识别、狗品种识别,甚至从CT扫描中检测肿瘤等任务:可能性是无限的。
计算机视觉是人工智能(AI)的一个子集,它允许计算机和系统从数字图像、视频和其他视觉输入中提取有用信息。就像人工智能允许计算机思考一样,计算机视觉让它们能够看到、观察和理解。
人类视觉和计算机视觉是相同的,只是人类有优势。上下文教会了人类视觉如何清晰地区分对象、它们有多远、它们是否在移动,以及在它们的一生中图片是否有问题。计算机视觉通过使用相机、数据和算法而不是人类视网膜、视神经和视觉大脑,训练计算机执行等效任务,速度只是人类的一小部分。因为一个系统训练检查项目或监控制造资产可以每分钟检查数百个产品或流程,它可以快速超越人类在检测否则会被忽视的故障或问题。
图像处理和计算机视觉不是同一回事,尽管它们都处理视觉数据。图像处理涉及修改或更改图像以产生新的结果。它可以包括增亮或变暗图像、提高分辨率、隐藏敏感数据或裁剪。图像处理和计算机视觉的区别在于前者并不总是需要内容识别。
卷积神经网络(CNN)是现代计算机视觉技术中使用的,它们比传统的图像处理算法提供了显著的性能提升。CNN是多层神经网络,用于随着时间的推移减少输入和计算到最相关的集合。输入的数据随后与已知数据进行比较,以识别或分类它。CNN通常用于计算机视觉应用,但它们也可以用于文本和音频分析。
当图像被CNN处理时,每个基础颜色(例如红色、绿色、蓝色)被表示为值的矩阵。在彩色图像的情况下,这些值被评估并压缩成3D张量,这是与图像区域相关的特征图堆栈的集合。图像通过一系列卷积和池化层进行处理,这些层从每个图像段中取出最重要的数据,并将其压缩成更小的代表性矩阵。这个过程多次执行。卷积过程的最终特征被传递到一个全连接层,该层生成预测。
CNN的架构决定了其性能和效率。这包括层的结构、元素的设计以及每个层中存在的元素。已经开发了许多CNN,但下面列出的是最有效之一。
AlexNet(2012)基于LeNet设计。它有三个全连接层和五个卷积层。为了在训练期间使用两个GPU,AlexNet具有双管道布局。AlexNet使用修正线性单元(ReLU)而不是典型神经网络中使用的sigmoid或Tanh激活函数。由于ReLU更简单、计算速度更快,AlexNet可以更快地训练模型。
GoogleNet(2014)也基于LeNet设计,被称为Inception V1。它由22层组成,由inception模块组成,这些是卷积的小分组。为了减少GoogleNet必须处理的参数数量,这些inception模块使用批量归一化和RMSprop。RMSprop是一种学习率优化方法,它使用自适应学习率方法。
VGGNet(2014)VGG 16架构有16层(一些变体有19层)。VGGNet有卷积层、池化层、更多卷积层、池化层、更多卷积层、池化层等。VGG基于一个更深层次网络和更小的过滤器的理念,它在整个过程中使用3个卷积,这是最小的卷积过滤器大小,只查看一些邻近像素。由于参数较少,它使用适度的过滤器,允许增加更多层。它与具有七个层的单个卷积层具有相同的有效感受野。
Xception(2016)Xception是基于Inception的架构,它使用深度可分离卷积来替换Inception模块(深度卷积后跟逐点卷积)。Xception首先捕获跨特征图的相关性,然后是空间相关性。这使得更好地利用模型参数成为可能。
对于计算机视觉,深度学习方法之所以受欢迎,是因为它们兑现了它们的承诺。深度学习对CV的三个关键承诺如下:特征学习、持续改进和端到端模型。深度学习需要达到计算机视觉领域许多难题的最新水平,这些难题尚未得到解决。
深度学习方法已经使得创建更准确、更复杂的计算机视觉模型成为可能。随着这些技术的进步,计算机视觉应用的使用变得越来越有价值。以下是深度学习如何被用来改善计算机视觉的一些例子。
图像定位和目标检测:图像定位是指确定图像中项目位置的过程。一旦识别出对象,就会用边界框指示它们。目标检测更进一步,对已识别的对象进行分类。CNN在此技术中使用。
from keras.datasets import fashion_mnist
from keras.utils import to_categorical
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Dense
from keras.layers import Flatten
# 加载数据集
(trainX, trainY), (testX, testY) = fashion_mnist.load_data()
trainX = trainX.reshape((trainX.shape[0], 28, 28, 1))
testX = testX.reshape((testX.shape[0], 28, 28, 1))
# 将整数转换为浮点数
trainX, testX = trainX.astype('float32'), testX.astype('float32')
# 归一化到范围0-1
trainX, testX = trainX / 255, testX / 255
# 目标值的独热编码
trainY, testY = to_categorical(trainY), to_categorical(testY)
# 定义模型
model = Sequential()
model.add(Conv2D(32.0, (3.0, 3.0), activation='relu', kernel_initializer='he_uniform', input_shape=(28.0, 28.0, 1.0)))
model.add(MaxPooling2D())
model.add(Flatten())
model.add(Dense(100, activation='relu', kernel_initializer='he_uniform'))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 拟合模型
model.fit(trainX, trainY, epochs=10, batch_size=32, verbose=2)
# 评估模型
loss, acc = model.evaluate(testX, testY, verbose=0)
print(loss, acc)