当前位置: 首页 > 科技观察

掌握视觉卷积神经网络模型,带你进入图像识别技术领域

时间:2023-03-19 19:11:00 科技观察

在进入深度学习的过程中,最吸引笔者的模型就是一些用来对物体进行分类的模型。最新的科学结果表明,此类模型已经可以检测实时视频中的多个对象。而这要归功于计算机视觉领域的最新技术创新。众所周知,卷积神经网络(CNN或ConvNet)在过去几年中在深度学习领域取得了许多重大突破,但这种描述对大多数人来说并不直观。因此,要了解该模型取得了多大的突破,首先要了解卷积神经网络的工作原理。卷积神经网络能做什么?卷积神经网络用于查找图像中的特征。在CNN的前几层,神经网络可以进行简单的“线”和“角”识别。我们还可以通过神经网络向下传递来识别更复杂的特征。此属性使CNN擅长识别图像中的对象。卷积神经网络CNN是由各种层组成的神经网络,其中一些是卷积层、池化层、激活函数。卷积层如何工作?要了解CNN的工作原理,您需要了解卷积。卷积涉及特定的事情,比如浏览图像和应用过滤器。上图是一个5x5矩阵。现在,您另外获取一个3x3矩阵,并在图像上移动,将3x3矩阵与图像被覆盖的部分相乘以生成单个值。紧接着,3x3的矩阵右移下移,“覆盖”了整个图像。***,我们会得到类似上面的东西。卷积层的目标是过滤。过滤器由向量的权重堆栈乘以卷积输出的值表示。当图像被训练时,这些权重会发生变化,即当图像被评估时,它会使用它捕获的一些特征来预测图像的内容。卷积层之后的层主要是CNN架构中的池化层。它将输入图像分割成一组不重叠的矩形,并为每个子区域输出一个值。两个主要的池化层是***池化和平均池化。***Pool——输出子区域的***值。AveragePooling-输出子区域的平均值。池化层用于减少空间维度而不是深度。减少空间维度的主要优点是:可以通过减少空间信息来优化计算性能。通过减少空间信息意味着您可以使用更少的参数训练模型,从而减少过度拟合的机会。得到一些固定值。激活函数激活函数的工作原理与其他神经网络完全一样,这个函数的主要作用是将值压缩到特定范围内。一些常用的激活函数有:最常用的激活函数是ReLu激活函数。它接受输入'x'并判断'x'是否为正,如果不是则返回0。使用ReLu函数的原因是执行起来很便宜。上图是卷积层的一般表示。我们通过池化层执行卷积和ReLu函数。这些层彼此堆叠。虽然定义和训练深度神经网络(DNN)比以往任何时候都容易,但大多数人仍然掉入陷阱。为此,我们使用可视化来理解CNN模型中的各个层。使用Keras进行可视化在这一部分中,我们将尝试使用Keras实现可视化。我们将使用Keras可视化输入,最大化VGG16架构不同层中过滤器的激活,并在ImageNet上进行训练。首先,让我们从在Keras中定义VGG16模型开始:请注意,我们只进入最后一个卷积层。原因是添加完全连接的层会强制您对模型使用固定的输入大小(224x224,原始ImageNet格式)。通过保留卷积模块,我们的模型可以适应任意输入大小。该模型加载了一组在ImageNet上预训练的权重。现在让我们定义一个损失函数,它将有助于激活特定层(layer_name)中的特定过滤器(filter_index)。我们通过Keras后端函数来实现这一点,该函数使我们的代码能够在TensorFlow和Theano之上运行。一切都很简单。这里唯一的技巧是对输入图像的像素梯度进行归一化,以确保梯度上升足够平滑。现在我们可以使用我们定义的Keras函数在输入空间上进行梯度上升:使用TensorFlow在CPU上执行此操作需要几秒钟。然后我们可以提取并显示结果输入:结果:第一层基本上只编码方向和颜色。然后将这些方向和过滤器组合到基础网格和散斑纹理中。这些纹理逐渐组合成越来越复杂的图案。您可以将每一层中的过滤器视为向量的基础,该向量通常是完整的,可用于以紧凑的方式对输入层进行编码。当过滤器开始整合来自越来越大的空间范围的信息时,它们变得更加复杂。以下是不同层生成的特征图的图片:第1层主要生成水平线、垂直线和对角线。主要用于检测图像中的边缘。Layer2将尝试提供更多信息。它主要检测角点。在第三层,我们可以开始检测一些复杂的模式,比如眼睛、人脸等。我们可以假设这个特征图是从一个训练好的人脸检测模型中获得的。在第4层,它可以在面部更复杂的部位(例如眼睛)。在第5层,您可以使用特征图来生成特定的人脸、汽车轮胎、动物的脸等。此特征图包含有关图像的大部分信息。结论总的来说,CNN和其他图像识别模型没有太大区别。我们可以通过阅读相关书籍加深对这方面的理解。