图像分类算法_深度学习图像分类初学者项目:编写一个狗类识别的算法

本文介绍了一个图像分类项目,专注于狗品种识别。通过对比Resnet、InceptionV3和Xception网络,评估它们在133种狗品种分类任务上的性能。项目涉及数据集分析、人脸检测、狗检测、以及使用预训练模型进行预测。最终目标是创建一个准确的狗品种分类算法。
摘要由CSDN通过智能技术生成

项目:编写一个狗类识别的算法

项目描述

图像分类是计算机视觉中最简单的任务。自从卷积网络开始在计算机视觉研究人员和从业者中引起关注以来,开发了许多用于克服分类任务的卷积体系结构。现在,在许多情况下,最先进的架构可能达到90%的准确率。但是,在实际应用中,许多开发人员/从业者构建适合其任务的模型,而不是依赖于预先训练的体系结构。因此,理解使体系结构优于其他体系结构的思想和关键结构更改是至关重要的。在这个项目中,我们回顾一下3种广泛使用的卷积体系结构,即Resnet,InceptionV3 network和Xception network。

具体来说,我将根据实际应用来衡量这3个模型的性能:对狗品种进行分类。数据集中有133种狗的品种, 是从ImageNet数据库中收集的。挑战来自于分类任务的复杂性(即分类的数量),许多品种的狗看起来非常相似。因此,我们不仅需要一个足够深入的模型来了解每个品种的细节差异,还需要一个帮助模型克服训练困难的技术,如训练时间、爆炸/消失梯度、过拟合等。

最后,模型的评估基于测试精度,即在所有测试图像中正确标记的图像的百分比。

步骤目录

步骤0:导入数据集和进行数据分析

步骤1:检测人类

步骤2:检测狗

步骤3:创建一个CNN来分类狗的品种(从零开始)

步骤4:使用CNN对狗的种类进行分类(使用迁移学习)

步骤5:创建一个CNN来分类狗的品种(使用迁移学习)

步骤6:编写算法

步骤7:测试算法

步骤0:导入数据集并进行数据分析

导入狗的数据集

在下面的代码中我们导入了一个狗的图像数据集。通过使用scikit-learn库中的load_files函数,我们填充了几个变量:

  • train_files、valid_files、test_files—包含到图像的文件路径的numpy数组
  • train_targets、valid_targets、test_targets—包含独热编码分类标签的numpy数组
  • dog_names—用于翻译标签的字符串值犬种名称列表
import PILPIL.__version__# !pip install 'Pillow==5.4.1' --force-reinstall
92d5aa29c2a78a08f8707bbe5729338a.png

定义配置

TRAIN_DIR = '../../../data/dog_images/train'VALID_DIR = '../../../data/dog_images/valid'TEST_DIR = '../../../data/dog_images/test'EPOCH = 5BATCH_SIZE = 32
2aadf2c9b3f91efd179581dda89329a0.png
import numpy as npimport matplotlib.pyplot as pltimport matplotlib.image as mpimg # for visualize imagesfrom sklearn.datasets import load_files from keras.utils import np_utilsfrom keras.callbacks import ModelCheckpointfrom glob import globfrom PIL import ImageFile, ImageImageFile.LOAD_TRUNCATED_IMAGES = True# define function to load train, test, and validation datasetsdef load_dataset(path): data = load_files(path) dog_files = np.array(data['filenames']) dog_targets = np_utils.to_categorical(np.array(data['target']), 133) return dog_files, dog_targets# load train, test, and validation datasetstrain_files, train_targets = load_dataset(TRAIN_DIR)valid_files, valid_targets = load_dataset(VALID_DIR)test_files, test_targets = load_dataset(TEST_DIR)# load list of dog namesdog_names = [item[20:-1] for item in sorted(glob(TRAIN_DIR+"/*/"))]# print statistics about the datasetprint('There are %d total dog categories.' % len(dog_names))print('There are %s total dog images.' % len(np.hstack([train_files, valid_files, test_files])))print('There are %d training dog images.' % len(train_files))print('There are %d validation dog images.' % len(valid_files))print('There are %d test dog images.'% len(test_files))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值