【深度学习】基于tensorflow的小型物体识别训练(数据集:CIFAR-10)

简介: 【深度学习】基于tensorflow的小型物体识别训练(数据集:CIFAR-10)

前言

关于环境这里不再赘述,与【深度学习】从LeNet-5识别手写数字入门深度学习一文的环境一致。

了解CIFAR-10数据集

CIFAR-10 是由 Hinton 的学生 Alex Krizhevsky 和 Ilya Sutskever 整理的一个用于识别普适物体的小型数据集。一共包含 10 个类别的 RGB 彩色图 片:飞机( aircraft )、汽车( automobile )、鸟类( bird )、猫( cat )、鹿( deer )、狗( dog )、蛙类( frog )、马( horse )、船( ship )和卡车( truck )。图片的尺寸为 32×32 ,数据集中一共有 50000 张训练图片和 10000 张测试图片。 CIFAR-10 的图片样例如图所示。


CIFAR-10数据集与 MNIST 数据集的区别

• CIFAR-10 是 3 通道的彩色 RGB 图像,而 MNIST 是灰度图像。

• CIFAR-10 的图片尺寸为 32×32, MNIST 的图片尺寸为 28×28,比 MNIST 大一些。

• 由于CIFAR-10中的图片都是现实世界中拍摄的,所以噪声会很大,而且各类物体的比例、特征、色彩等均不同,这大大增加了识别的难度。


下载数据集

官方下载地址(较慢)

https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz

使用tensorflow下载(推荐)

默认下载在C:\Users\用户\.keras\datasets路径下。

from tensorflow.keras import datasets
# 下载数据集
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()


使用迅雷(推荐)

如果你和我一样使用代码下载还是一样的慢,就使用迅雷吧。


下载完成后将文件移动至C:\Users\用户\.keras\datasets路径下,并将压缩包名修改为下面图中同名,并解压。


采用CPU训练还是GPU训练

一般来说有好的显卡(GPU)就使用GPU训练因为,那么对应的你就要下载tensorflow-gpu包。如果你的显卡较差或者没有足够资金入手一款好的显卡就可以使用CUP训练。

区别

(1)CPU主要用于串行运算;而GPU则是大规模并行运算。由于深度学习中样本量巨大,参数量也很大,所以GPU的作用就是加速网络运算。


(2)CPU计算神经网络也是可以的,算出来的神经网络放到实际应用中效果也很好,只不过速度会很慢罢了。而目前GPU运算主要集中在矩阵乘法和卷积上,其他的逻辑运算速度并没有CPU快。

使用CPU训练

# 使用cpu训练
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"

使用CPU训练时不会显示CPU型号。

使用GPU训练

gpus = tf.config.list_physical_devices("GPU")
if gpus:
    gpu0 = gpus[0]  # 如果有多个GPU,仅使用第0个GPU
    tf.config.experimental.set_memory_growth(gpu0, True)  # 设置GPU显存用量按需使用
    tf.config.set_visible_devices([gpu0], "GPU")


使用GPU训练时会显示对应的GPU型号。

显示部分图片

首先需要建立一个标签数组,然后绘制前20张,每行5个共四行

from matplotlib import pyplot as plt
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
plt.figure(figsize=(20, 10))
for i in range(20):
    plt.subplot(4, 5, i + 1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    plt.xlabel(class_names[train_labels[i][0]])
plt.show()


绘制结果:

建立CNN模型

from tensorflow_core.python.keras import Input, Sequential
from tensorflow_core.python.keras.layers import Conv2D, Activation, MaxPooling2D, Flatten, Dense
def simple_CNN(input_shape=(32, 32, 3), num_classes=10):
    # 构建一个空的网络模型,它是一个线性堆叠模型,各神经网络层会被顺序添加,专业名称为序贯模型或线性堆叠模型
    model = Sequential()
    # 卷积层1 
    model.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
    # 最大池化层1
    model.add(MaxPooling2D((2, 2), strides=(2, 2), padding='same'))
    # 卷积层2
    model.add(Conv2D(filters=64, kernel_size=(3, 3), padding='same', activation='relu'))
    # 最大池化层2
    model.add(MaxPooling2D((2, 2), strides=(2, 2), padding='same'))
    # 卷积层3
    model.add(Conv2D(filters=64, kernel_size=(3, 3), padding='same', activation='relu'))
    # flatten层常用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。
    model.add(Flatten())
    # 全连接层 对特征进行提取
    model.add(Dense(units=64, activation='relu'))
    # 输出层
    model.add(Dense(10))
    return model

网络结构

包含输入层的话总共9层。其中有三个卷积层,俩个最大池化层,一个flatten层,俩个全连接层。


参数量

总共参数为319k,训练时间比LeNet-5较长。建议采用GPU训练。

Total params: 319,178
Trainable params: 319,178
Non-trainable params: 0


训练模型

训练模型,进行10轮,将模型保存到1.h5文件中。后期可以直接加载模型继续训练。

from tensorflow_core.python.keras.models import load_model
from Cnn import simple_CNN
import tensorflow as tf
def train(train_images, train_labels, test_images, test_labels):
    model = simple_CNN(train_images, train_labels) 
    model.summary()  # 打印网络结构
    model.compile(optimizer='adam',
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                  metrics=['accuracy'])
    model.save("1.h5")
    history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))


训练结果:测试集acc为66.53%。后期可以增加轮数或者优化模型。

相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
目录
相关文章
|
4天前
|
机器学习/深度学习 人工智能 TensorFlow
TensorFlow 是一个由 Google 开发的开源深度学习框架
TensorFlow 是一个由 Google 开发的开源深度学习框架
18 3
|
1天前
|
机器学习/深度学习 人工智能 算法
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物('蛤蜊', '珊瑚', '螃蟹', '海豚', '鳗鱼', '水母', '龙虾', '海蛞蝓', '章鱼', '水獭', '企鹅', '河豚', '魔鬼鱼', '海胆', '海马', '海豹', '鲨鱼', '虾', '鱿鱼', '海星', '海龟', '鲸鱼')数据集进行训练,得到一个识别精度较高的模型文件,然后使用Django开发一个Web网页平台操作界面,实现用户上传一张海洋生物图片识别其名称。
21 7
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
|
1天前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
28 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
2天前
|
机器学习/深度学习 人工智能 算法
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
球类识别系统,本系统使用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集 '美式足球', '棒球', '篮球', '台球', '保龄球', '板球', '足球', '高尔夫球', '曲棍球', '冰球', '橄榄球', '羽毛球', '乒乓球', '网球', '排球'等15种常见的球类图像作为数据集,然后进行训练,最终得到一个识别精度较高的模型文件。再使用Django开发Web网页端可视化界面平台,实现用户上传一张球类图片识别其名称。
18 7
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
|
10天前
|
机器学习/深度学习 存储 计算机视觉
基于YOLOv8深度学习的PCB板缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测
基于YOLOv8深度学习的PCB板缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测
|
10天前
|
机器学习/深度学习 存储 算法
基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、运动物体追踪
基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、运动物体追踪
|
1天前
|
机器学习/深度学习 人工智能 数据可视化
深度学习在图像识别中的应用与挑战
【6月更文挑战第22天】本文将深入探讨深度学习技术在图像识别领域的应用及其面临的挑战。首先,我们将介绍深度学习的基本概念和关键技术,然后详细解析其在图像识别中的具体应用,包括卷积神经网络(CNN)的工作原理和实例。最后,我们将讨论深度学习在图像识别领域面临的主要挑战,如过拟合、数据需求大和模型解释性差等问题,并提出可能的解决方案。
|
1天前
|
机器学习/深度学习 算法 安全
深度学习在图像识别中的应用及其挑战
【6月更文挑战第22天】随着人工智能技术的飞速发展,深度学习已经成为图像识别领域的核心技术之一。本文将介绍深度学习技术如何革新了图像处理领域,包括其在特征提取、对象检测和分类方面的应用。同时,我们也将探讨当前面临的主要挑战,例如数据偏差、模型泛化能力以及对抗性攻击等,并讨论未来可能的研究方向。
|
2天前
|
机器学习/深度学习 算法 数据安全/隐私保护
深度学习在医疗影像分析中的应用与挑战
【6月更文挑战第21天】随着人工智能技术的飞速发展,深度学习已成为推动医学影像分析进步的关键力量。本文将探讨深度学习技术如何革新医疗影像的诊断流程,包括自动化病变检测、图像分割以及疾病预测等方面。同时,我们将讨论实施这些技术时遇到的伦理和法律问题。
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习在自然语言处理中的应用与挑战
【6月更文挑战第22天】本文旨在探讨深度学习技术在自然语言处理(NLP)领域的应用及其面临的主要挑战。通过分析深度学习模型如循环神经网络(RNN)、长短时记忆网络(LSTM)和Transformer架构,本文揭示了这些模型如何革新了语言理解、机器翻译、情感分析和文本生成等任务。同时,本文也指出了深度学习在处理语言的复杂性、数据偏差、资源需求以及可解释性方面遇到的挑战,并讨论了未来研究的潜在方向。
9 3

热门文章

最新文章