首页 > 分享 > 基于卷积神经网络(CNN)的猫狗图像分类系统实现

基于卷积神经网络(CNN)的猫狗图像分类系统实现

CNN模型(来自慕课网):

训练数据集

 链接:https://pan.baidu.com/s/1Y0Uszlh8bo5iC0OV1MRiow?pwd=data 
提取码:data

数据集自己做分割,可以4000张图片为一个测试集和训练集,我这里演示的是4000张为训练集和测试集。你们可以根据自己的要求来进行修改以达到更好的目的。(测试了一下还是建议全部都为训练集,测试集自己找一下)

1.目的

基于data数据,根据提供的结构,建立CNN模型,识别图片中的猫/狗,计算预测准确率:  

1.识别图片中的猫/狗、计算data测试数据预测准确率  

2.从网站下载猫/狗图片,对其进行预测  

2.训练模型

1.准备数据

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale=1./255)

training_set = train_datagen.flow_from_directory('./data_小',target_size=(50,50),batch_size=32,class_mode='binary')

结果/解释

2.确认输入数据标签

training_set.class_indices

结果/解释

3.准备CNN model

from keras.models import Sequential

from keras.layers import Conv2D, MaxPool2D, Flatten, Dense

model = Sequential()

model.add(Conv2D(32,(3,3),input_shape=(50,50,3),activation='relu'))

model.add(MaxPool2D(pool_size=(2,2)))

model.add(Conv2D(32,(3,3),activation='relu'))

model.add(MaxPool2D(pool_size=(2,2)))

model.add(Flatten())

model.add(Dense(units=128,activation='relu'))

model.add(Dense(units=1,activation='sigmoid'))

4.使用优化器

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

model.summary()

结果/解释

5.训练模型

model.fit(training_set,epochs=25)

结果/解释:这里因为数据量较小所以就训练25轮,可以看到丢失率一直在降低,可以调高训练轮数以提高准确率。

至此,模型已经训练完毕了。

3.查看模型准确率

1.查看训练集准确率

accuracy_train = model.evaluate(training_set)

print(accuracy_train)

结果/解释:可以看到准确率还是挺高的

2.查看测试数据就准确率

test_set = train_datagen.flow_from_directory('./test_小',target_size=(50,50),batch_size=32,class_mode='binary')

accuracy_test = model.evaluate(test_set)

print(accuracy_test)

结果/解释:因为我这个测试集也是从那里面拿的,你们可以自己重新分割一下,或者找其他数据集来测试。

4.实际测试

1.网上下载图片实测一下:

import numpy as np

from keras.preprocessing.image import load_img, img_to_array

pic_dog = 'dog.jpg'

pic_dog = load_img(pic_dog,target_size=(50,50))

pic_dog = img_to_array(pic_dog)

pic_dog = pic_dog/255

pic_dog = pic_dog.reshape(1,50,50,3)

result_11 = model.predict(pic_dog)

result_12 = (result_11 > 0.5).astype(int)

print(result_12)

pic_cat = 'cat.jpg'

pic_cat = load_img(pic_cat,target_size=(50,50))

pic_cat = img_to_array(pic_cat)

pic_cat = pic_cat/255

pic_cat = pic_cat.reshape(1,50,50,3)

result_21 = model.predict(pic_cat)

result_22 = (result_21 > 0.5).astype(int)

print(result_22)

training_set.class_indices

结果/解释:这个结果还是挺不错的

2.进行图片批量检索识别

import matplotlib as mlp

font2 = {'family' : 'SimHei',

'weight' : 'normal',

'size' : 20,

}

mlp.rcParams['font.family'] = 'SimHei'

mlp.rcParams['axes.unicode_minus'] = False

from matplotlib import pyplot as plt

from matplotlib.image import imread

from keras.preprocessing.image import load_img

from keras.preprocessing.image import img_to_array

from keras.models import load_model

import numpy as np

a = [i for i in range(1,10)]

fig = plt.figure(figsize=(10,10))

for i in a:

img_name = str(i)+'.jpg'

img_ori = load_img(img_name, target_size=(50, 50))

img = img_to_array(img_ori)

img = img.astype('float32')/255

img = img.reshape(1,50,50,3)

result1 = model.predict(img)

result = (result1 > 0.5).astype(int)

img_ori = load_img(img_name, target_size=(250, 250))

plt.subplot(3,3,i)

plt.imshow(img_ori)

plt.title('预测为:狗狗' if result[0] == 1 else '预测为:猫咪')

plt.show()

结果/解释:这个结果也还是挺准确的,毕竟没有进行旋转和平移等操作,是直接在原图上进行操作的。

5.总结:

        在本文中,我们深入探讨了如何使用卷积神经网络(CNN)来构建一个猫狗图像分类系统。这个系统能够自动地从输入图像中识别出是猫还是狗,展示了深度学习在图像处理领域的强大能力。

        本文通过构建基于卷积神经网络的猫狗图像分类系统,展示了深度学习在图像处理领域的强大潜力和应用前景。从数据准备、模型设计与选择、模型训练与优化到模型评估与测试,我们详细介绍了整个实现过程,并探讨了系统的实际应用和未来发展方向。通过这次实践,我们不仅加深了对深度学习技术的理解,还积累了宝贵的项目经验。

相关知识

毕设:基于CNN卷积神经网络的猫狗识别、狗品种识别(Tensorflow、Keras、Kaggle竞赛)
基于卷积神经网络通过声音识别动物情绪的方法及系统
基于卷积神经网络的动物识别研究现状
猫狗分类#1猫狗图片准备【keras深度学习】CNN卷积神经网络 cats
深度学习之基于Vgg16卷积神经网络的宠物皮肤疾病识别系统
Python实现对12500张猫狗图像的精准分类
基于Python深度学习的【猫狗宠物识别】系统设计实现
【毕业设计】基于卷积神经网络的宠物狗目标检测与分类实现 Python 计算机视觉 机器学习
【卷积神经网络】CNN详解以及猫狗识别实例
100基于卷积神经网络之鸟鸣识别鸟的种类

网址: 基于卷积神经网络(CNN)的猫狗图像分类系统实现 https://m.mcbbbk.com/newsview927179.html

所属分类:萌宠日常
上一篇: 基于SSD网络的宠物狗检测与分类
下一篇: 犬类学概述宠物狗狗品种分类与特性