1.图像分类的发展历程

图像分类的发展历程可以追溯到计算机视觉领域的早期。最早的图像分类方法是基于手工设计的特征提取算法,例如SIFT和HOG等。这些方法通过提取图像的局部特征,然后使用传统的机器学习算法(如SVM和KNN)进行分类。然而,这些方法对于复杂的图像场景和大规模数据集来说,效果有限。
随着深度学习的兴起,卷积神经网络(CNN)在图像分类任务上取得了巨大的成功。CNN通过多层卷积和池化操作,自动学习图像的特征表示,并且能够从大规模数据中进行端到端的训练。著名的CNN模型,如LeNet、AlexNet、VGGNet、GoogLeNet和ResNet等,不断推动图像分类的性能和效果的提升。
除了CNN之外,近年来还出现了一些基于注意力机制的图像分类方法。这些方法通过学习图像中的关键区域,提高对重要信息的关注程度,从而提升分类性能。
此外,迁移学习也在图像分类中得到了广泛应用。迁移学习利用已经训练好的模型,在新的任务上进行微调,从而加速训练过程并提升模型的泛化能力。
1.1背景与意义
图像信息的丰富性:图像作为人类感知世界的重要方式之一,包含丰富的视觉信息。通过研究图像分类,可以帮助计算机理解和解释图像中的对象、场景和特征,从而实现更智能和高效的图像处理和分析。
应用广泛性:图像分类在许多领域中都有广泛的应用。例如,在医学领域,图像分类可以用于疾病诊断和治疗方案选择;在安防领域,图像分类可以用于图像监控和异常检测;在自动驾驶领域,图像分类可以用于识别交通标志和行人等。图像分类的研究和应用可以提高各个领域的效率和安全性。
数据驱动决策:在大数据时代,图像数据以惊人的速度增长,对这些海量的图像数据进行分类和分析,可以帮助人们从中挖掘出有价值的信息。通过图像分类,可以为决策提供更全面和准确的数据支持,从而推动各个领域的发展和进步。
1.2应用
视觉搜索:图像分类可以用于视觉搜索引擎,通过输入图像来搜索相似或相关的图像。这在电子商务、社交媒体等领域有广泛的应用,方便人们寻找感兴趣的内容和商品。
图像检索:图像分类可以用于图像库的管理和索引,通过给图像打上标签或分类,方便用户对大规模图像进行检索和管理。这在图书馆、博物馆等场景中具有重要意义。
计算机辅助诊断:医学影像如X射线、CT、MRI等包含了丰富的信息,图像分类可以帮助医生自动识别和定位疾病病灶,提高疾病的早期诊断和治疗效果。
2.图像分类的概念
图像分类是计算机视觉领域中的一个基本任务,它的目标是从给定的图像中识别出所属的类别。它涉及到从图像中提取特征,然后使用分类算法将这些特征映射到预定义的类别。
1.1什么是图像分类
图像分类问题指的是,对于一张输入图像,从已有的标签集合中找出一个标签,并分配给这张图像。以下图为例:我们的图像分类模型会读取这张图片,然后输出这张图片对应每个标签的概率。对于计算机来说,图像是由一个一个的像素信息组成的。在这个例子中,这张猫的图片大小像素是248*400,因为图片是彩色的,所以还包含了RGB三个颜色通道。所以我们的输入是240*800*3=297600,每个数字代表着某一通道的亮度值。范围在0-255之间,0代表白色,255代表黑色。而我们要做的就是让计算机理解这些数字信息,然后做出分类。

1.2 图像分类的难度
图像分类的难度在于以下几个方面:
视角变化(Viewpoint variation):同一个物体,摄像机可以从多个角度来展现。
大小变化(Scale variation):物体可视的大小通常是会变化的(不仅是在图片中,在真实世界中大小也是变化的)。
形变(Deformation):很多东西的形状并非一成不变,会有很大变化。
遮挡(Occlusion):目标物体可能被挡住。有时候只有物体的一小部分(可以小到几个像素)是可见的。
光照条件(Illumination conditions):在像素层面上,光照的影响非常大。
背景干扰(Background clutter):物体可能混入背景之中,使之难以被辨认。
类内差异(Intra-class variation):一类物体的个体之间的外形差异很大,比如椅子。这一类物体有许多不同的对象,每个都有自己的外形。
以上的所有情况,同一个类别的像素信息都会有巨大的差异(计算机是通过像素信息去看图像的)。面对以上所有变化及其组合,好的图像分类模型能够在维持分类结论稳定的同时,保持对类间差异足够敏感。

3.使用CNN进行图像分类
1.收集图像以及对应的标签,形成数据集

2.使用机器学习训练一个分类器

3.在新的图像.上测试这个分类器

4.图像分类的经典模型
4.1 AlexNet
AlexNet是一种深度神经网络结构,相对于原始的LeNet来说更深,LeNet为5层,而AlexNet为8层。AlexNet在神经网络发展过程中起到了重要的作用,让研究人员意识到网络深度对性能的巨大影响。它的出现打破了以前学者们对于学习特征的认知,首次证明了学习到的特征可以超越手工设计的特征。
网络架构

该网络的特点是:
AlexNet包含8层变换,有5层卷积和2层全连接隐藏层,以及1个全连接输出层
AlexNet第一层中的卷积核形状是11×1111×11。第二层中的卷积核形状减小到5×55×5,之后全采用3×33×3。所有的池化层窗口大小为3×33×3、步幅为2的最大池化。
AlexNet将sigmoid激活函数改成了ReLU激活函数,使计算更简单,网络更容易训练
AlexNet通过dropOut来控制全连接层的模型复杂度。
AlexNet引入了大量的图像增强,如翻转、裁剪和颜色变化,从而进一步扩大数据集来缓解过拟合。
在tf.keras中实现AlexNet模型:
# 构建AlexNet模型
net = tf.keras.models.Sequential([
# 卷积层:96个卷积核,卷积核为11*11,步幅为4,激活函数relu
tf.keras.layers.Conv2D(filters=96,kernel_size=11,strides=4,activation='relu'),
# 池化:窗口大小为3*3、步幅为2
tf.keras.layers.MaxPool2D(pool_size=3, strides=2),
# 卷积层:256个卷积核,卷积核为5*5,步幅为1,padding为same,激活函数relu
tf.keras.layers.Conv2D(filters=256,kernel_size=5,padding='same',activation='relu'),
# 池化:窗口大小为3*3、步幅为2
tf.keras.layers.MaxPool2D(pool_size=3, strides=2),
# 卷积层:384个卷积核,卷积核为3*3,步幅为1,padding为same,激活函数relu
tf.keras.layers.Conv2D(filters=384,kernel_size=3,padding='same',activation='relu'),
# 卷积层:384个卷积核,卷积核为3*3,步幅为1,padding为same,激活函数relu
tf.keras.layers.Conv2D(filters=384,kernel_size=3,padding='same',activation='relu'),
# 卷积层:256个卷积核,卷积核为3*3,步幅为1,padding为same,激活函数relu
tf.keras.layers.Conv2D(filters=256,kernel_size=3,padding='same',activation='relu'),
# 池化:窗口大小为3*3、步幅为2
tf.keras.layers.MaxPool2D(pool_size=3, strides=2),
# 伸展为1维向量
tf.keras.layers.Flatten(),
# 全连接层:4096个神经元,激活函数relu
tf.keras.layers.Dense(4096,activation='relu'),
# 随机失活
tf.keras.layers.Dropout(0.5),
# 全链接层:4096个神经元,激活函数relu
tf.keras.layers.Dense(4096,activation='relu'),
# 随机失活
tf.keras.layers.Dropout(0.5),
# 输出层:10个神经元,激活函数softmax
tf.keras.layers.Dense(10,activation='softmax')
])
我们构造一个高和宽均为227的单通道数据样本来看一下模型的架构:
# 构造输入X,并将其送入到net网络中
X = tf.random.uniform((1,227,227,1)
y = net(X)
# 通过net.summay()查看网络的形状
net.summay()
网络架构如下:
Model: "sequential"
_________________________________________________________________
Layer

本文介绍了图像分类的发展历程,早期基于手工特征提取算法,后深度学习兴起,CNN取得巨大成功。阐述了图像分类的概念和难度,还介绍了使用CNN进行图像分类的步骤,以及AlexNet、VGG、GoogLeNet、ResNet等经典模型的架构和特点。
247

被折叠的 条评论
为什么被折叠?



