首页 > 其他分享 >用DCNN进行图像分类

用DCNN进行图像分类

时间:2023-02-04 14:31:44浏览次数:51  
标签:DCNN 卷积 模型 分类 神经网络 图像 images

本文将分解图像分类背后的目的,给出卷积神经网络的定义,讨论这两者如何作用,并简要说明如何在Python中创建一个卷积神经网络架构。

使用深度卷积神经网络进行图像分类

用深度卷积神经网络(DCNN)进行图像分类是一个口口相传的说法,但由于使用这种方法可以完成很多项目和任务,所以值得研究和理解。图像分类是一个强大的工具,可以将静态图像和推断出可能被错过的重要数据。

在这篇文章中,我们将分解图像分类背后的目的,给出CNN的定义,讨论这两者如何一起使用,并简要说明如何创建一个DCNN架构

图像分类的目的是什么?

如前所述,图像分类的目的是为了能够从图像中产生更多的数据。这些数据可以简单到识别颜色模式,也可以复杂到根据其他图像的数据生成新的图像。这正是为什么图像分类,尤其是卷积神经网络,是如此强大的原因。

通过机器学习,有两种方式可以训练这些图像分类模型:监督式学习或无监督式学习。

根据你所创建的图像分类模型的类型,你可能会发现你想监督模型的学习,并控制哪些数据被送入其中。然而,你也可能想导入尽可能多的原始数据,让你的模型自己产生结论。这两种方法都是可以接受的,取决于你的目标。

图像分类是简单地从图像中生成数据,并能够组织这些数据用于其他用途的过程。当连接到一个DCNN时,一个图像分类模型的真正力量就可以被释放出来。

什么是卷积神经网络?

用DCNN进行图像分类_图像分类

卷积神经网络是一种特定类型的神经网络架构,旨在从大量的数据中学习,特别是针对图像、音频、时间序列和信号数据。

不过,是什么让卷积神经网络与深度学习算法有什么不同?当涉及到分析和解释数据集时,关键词 "卷积 "是世界上所有差异的原因。卷积神经网络是由几十层,甚至几百层神经网络组成的,都是为了同一个目标而工作。

这意味着卷积神经网络可以有层层叠加,可以从每个图像中提取不同的数据。这允许每个卷积神经网络层快速 "研究 "一个图像输入,以获得特定的数据集,然后转到下一个图像。

从本质上讲,这使得深度学习模型在能够解析大量数据而不放慢速度方面具有令人难以置信的效率,因为每个层只看每张图像的一个紧密集中的数据。同样的过程也可以用于音频处理、信号数据和时间序列数据集。

CNN可以用于图像分类吗?

已经证实卷积神经网络(CNN或ConvNet)可以用于图像分类。然而,用深度卷积神经网络进行图像分类还没有得到确切的解决。

作为一个例子,专注于用卷积神经网络进行图像分类,可以让用户输入有车辆的图像实例,而不会让神经网络不堪重负。在一个标准的神经网络中,图像越大,处理我们希望从数据中推断出来的东西就需要更多的时间。使用卷积神经网络的图像分类使其更快,因为每一层只寻找一组特定的数据,然后将数据传递给下一层。

虽然标准的神经网络仍然能够处理图像数据集,但它需要更长的时间,而且可能无法及时创造出理想的结果。不过,使用深度卷积神经网络的图像分类将能够在更短的时间内处理更多的图像,从而能够快速识别图像中显示的车辆类型并对其进行适当的分类。

一旦模型得到适当的训练,用深度卷积神经网络进行图像分类的应用是无止境的,所以让我们来谈谈什么是图像分类的最佳学习过程。

哪种学习方式更适合于图像分类?

在这篇文章的前面,我们谈到了监督学习与无监督学习。这里我们将进一步讨论卷积神经网络模型的最佳学习方法。

到目前为止还没有明确说明的事情是,卷积神经网络是否应该在机器学习模型或深度学习模型上进行训练。简短的回答是,几乎可以肯定的是,用深度卷积神经网络进行图像分类会更有意义。

由于许多机器学习模型是围绕单输入测试建立的,这意味着这个过程要比使用基于深度学习神经网络的CNN图像分类选项慢得多,而且准确度也低得多。

如何创建你自己的卷积神经网络架构

用DCNN进行图像分类_卷积神经网络_02

现在,为了更好地理解用深度卷积神经网络进行图像分类,最后一步是深入了解其背后的架构。卷积神经网络架构并不像人们想象的那样复杂。

一个CNN基本上是由三层组成的:输入、卷积和输出。不同的卷积神经网络架构有不同的术语,但这些是理解这些模型如何创建的最基本方法。

输入层是这个过程的第一步,所有的图像首先被引入模型中

卷积层由神经网络的多个层组成,这些层将对图像的各种分类进行工作,一个接一个地建立起来。

输出层是神经网络的最后一步,图像在这里根据设定的参数进行实际分类。

用户究竟如何设置每一层,主要取决于所创建的内容,但在实践中,所有这些都相当简单易懂。卷积层会有很多相同的代码,只是针对每层内要提取的每块数据进行调整,一直到输出层

虽然卷积神经网络的总架构可能看起来很吓人,因为有几十或几百个层组成卷积层,但该模型的结构实际上相当简单。

卷积神经网络代码示例

在这个Deep Learning With Python GitHub repo中,可以找到许多构建和训练卷积神经网络的实践代码示例(重点是图像分类的应用)。

一个简单的流程是这样的。

import tensorflow as tf


# Loading build-in MNIST dataset

mnist = tf.keras.datasets.fashion_mnist

(training_images, training_labels), (test_images, test_labels) = mnist.load_data()


# Showing example images

fig, axes = plt.subplots(nrows=2, ncols=6,figsize=(15,5))

ax = axes.ravel()

for i in range(12):

ax[i].imshow(training_images[i].reshape(28,28))



plt.show()

示例图像可能看起来像下面这样。

用DCNN进行图像分类_数据_03

# Reshaping the images for feeding into the neural network

training_images=training_images / 255.0

test_images=test_images / 255.0


#Keras model definition

model = tf.keras.models.Sequential([

tf.keras.layers.Flatten(),

tf.keras.layers.Dense(256, activation=tf.nn.relu),

tf.keras.layers.Dense(10, activation=tf.nn.softmax)])


# Compiling the model, Optimizer chosen is ‘adam’

# Loss function chosen is ‘sparse_categorical_crossentropy`

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])


# Training/fitting the model for 10 epochs

model.fit(training_images, training_labels, epochs=10)

训练可能会产生逐个epoch的结果(损失,准确度,等等),如下所示。

用DCNN进行图像分类_图像分类_04

计算训练好的模型在测试集预测上的准确性。

test_loss = model.evaluate(test_images, test_labels)

print("\nTest accuracy: ",test_loss[1])

输出

10000/10000 [==============================] - 1s 67us/sample - loss: 0.3636 - acc: 0.8763

标签:DCNN,卷积,模型,分类,神经网络,图像,images
From: https://blog.51cto.com/u_14279308/6037169

相关文章

  • OpenMMLab AI实战营 第二课笔记 计算机视觉之图像分类算法基础
    OpenMMLabAI实战营第二课笔记计算机视觉之图像分类算法基础1.什么是图像分类?1.1问题的数学表示1.2视觉任务的难点1.2.1超越规则:让机器从数据中学习1.2.2机......
  • DALSA工业相机SDK二次开发(图像采集及保存)C#
    一,首先先配置生成项目,根据官方文档步骤来:这个没啥好说的,一步步照做就是了,就最后一步,开始我没重视,最后代码写完测试的时候还真的遇到问题了,一直出这样的错: 查了官方文......
  • 中考物理题中图像问题的妙手
    初中物理,经常会出现图像题,小题、中题、大题中都有。大部分的公式都是三个物理量组成的,如ρ=m/V,v=s/t等等。这些在其中一个固定之后,另外两个物理量的关系则为正比抑或是反......
  • 如何更好地应对下游小样本图像数据?
    前言 常规迁移学习中,源域和目标域间的分布偏移问题可以通过fine-tuning缓解。但在小样本问题中,可供fine-tuning的有标签数据不足(也就是常说的每个小样本任务中的support......
  • 开发板只读随机存储器分类RAM、ROM、EMMC、Nandflash、Norflash
    RAM:(随机存储器,俗称“内存条”)SRAM:静态RAM,上电后只要不断电,里面数据就不会丢失。DRAM:动态RAM,上电后不能断电,还要在一个固定时间内,给内存单元充电,里面数据才不会......
  • 服务器的分类
    1.按体系架构非x86服务器包括大型机、小型机和UNIX服务器,它们是使用RISC(精简指令集)或EPIC(并行指令代码)处理器,并且主要采用UNIX和其它专用操作系统的服务器,精简指令集处理......
  • 视频基础概念-RGB表示图像-迅为i.MX8MM开发板
    一张图像是由每个像素点绘成的,那么一像素点的RGB又该如何表示呢?浮点表示归一化表示,取值范围0.0~1.0,如openGL对每个子像素点的表示方式。整数表示取值范围0~255或者00......
  • 02figure图像
    importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(-1,1,50)y1=2*x+1y2=x**2plt.figure(num=1,figsize=(10,10))plt.plot(x,y1)plt.figure......
  • 获取版本的分类属性
    1、获取版本的分类属性publicstaticMultiKeyMapgetClassificationObjectProperties(AppXSessionsession,ItemRevisionitemRev){MultiKeyMapkeyMap=new......
  • 分辨率/图像解析度(Resolution)
    分辨率/图像解析度(Resolution)QSIF/QQVGA160*120192002万像素QCIF176*144253442.5万像素SIF/QVGA320*240768008万像素CIF352*288101376......