首页 > 分享 > 狗狗图片识别分类的CNN(卷积网络)实现

狗狗图片识别分类的CNN(卷积网络)实现

项目概述:

一种可用于移动应用或网络应用的算法。 代码将能够接受任何用户提供的图像作为输入。 如果从图像中检测出小狗,该算法将大致识别出小狗品种。 如果检测出人脸,该算法将大致识别出最相似的小狗品种。

项目学习步骤:

导入以及预处理数据集 建立人脸检测模块:采用OpenVC检测人脸(https://docs.opencv.org/trunk/db/d28/tutorial_cascade_classifier.html) 建立小狗识别模块:使用预训练的 ResNet-50 模型来检测图片中的狗狗 从头开始创建预测小狗分类品种的 CNN:基于Keras添加CNN,此处使用categorical_crossentropy对于multiclassifier图片标签分类更有效(损失函数是用来估量模型中预测值y与真实值Y之间的差异,即不一致程度) 使用迁移学习分类小狗品种的 CNN:基于预训练的模型获取瓶颈特征,在此基础上叠加CNN,以降低训练时间 VGG-16(Kaggle Compitition link if you are interested) Xception(Kaggle Compitition link if you are interested) 编写算法:将图像的文件路径作为输入,并首先判断图像中是否包含人脸、小狗 测试算法:测试图片获取分类

项目实施步骤与分析:

数据导入与预处理

- 将准备完整的数据集,在本项目中为一系列狗狗图片,图片预存在服务器

- 项目数据集已分别存放在test, valid, train三个文件夹中

- 狗狗分类共133种,并以文件夹名与文件名形式预处理,例如:"train01.AffenpinscherAffenpinscher_00001.jpg"

- 导入人脸文件数据文件,并做随机排序,不做分类训练

- 处理异常数据:项目数据集并无异常数据,但仍可以考虑添加对于文件类型filter图片类型文件,以及格式错误的文件

通过以下示例代码读取对数据进行预处理,

# 函数获取test, train, valid数据,使用np array存储

def 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

# 从文件夹中获取

train_files, train_targets = load_dataset('文件地址/train')

valid_files, valid_targets = load_dataset('文件地址/data/dog_images/valid')

test_files, test_targets = load_dataset('文件地址/data/dog_images/test')

# 获取狗狗名称

dog_names = [item[20:-1] for item in sorted(glob("文件地址/train/*/"))]

random.seed(8675309)

# 获取人脸图片文件名

human_files = np.array(glob("../../../data/lfw/*/*"))

random.shuffle(human_files)

建立人脸检测模块

- 使用OpenCV 提供的预训练人脸检测器:可以将XML 文件的形式从github下载并使用。

- 本次测试代码使用Haar 特征级联分类器(Haar feature-based cascade classifiers来检测图片中的人脸

- 测试人脸检测模块的accuracy

通过以下示例代码建立人脸检测模块

# 读取xml

face_cascade = cv2.CascadeClassifier('目标文件夹/haarcascade_frontalface_alt.xml')

# 读取并将文件灰度化

img = cv2.imread(human_files[3])

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 调用探测人脸

faces = face_cascade.detectMultiScale(gray)

#如定义检测函数,此处可以return len(faces) > 0 作为检测结果

# 加个框

for (x,y,w,h) in faces:

cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

# 将BGR通道转化为RGB

cv_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 展示找到的人脸图片

plt.imshow(cv_rgb)

plt.show()

如找到人脸,示例代码输出:

通过测试预先load的人脸与狗狗文件,做一个准确性测试,示例代码如下&#

相关知识

狗狗图片识别分类的CNN(卷积网络)实现
毕设:基于CNN卷积神经网络的猫狗识别、狗品种识别(Tensorflow、Keras、Kaggle竞赛)
【卷积神经网络】CNN详解以及猫狗识别实例
猫狗分类#1猫狗图片准备【keras深度学习】CNN卷积神经网络 cats
鱼类识别Python+深度学习人工智能+TensorFlow+卷积神经网络算法
基于卷积神经网络的动物识别研究现状
使用GitCode上的Audioset Tagging CNN进行音频识别与分类
100基于卷积神经网络之鸟鸣识别鸟的种类
【毕业设计】基于卷积神经网络的观赏鱼分类识别系统 深度学习 目标检测 Python
CNN鸟类图片识别教程:从数据集到模型训练

网址: 狗狗图片识别分类的CNN(卷积网络)实现 https://m.mcbbbk.com/newsview684681.html

所属分类:萌宠日常
上一篇: pytorch搭建Resnet5
下一篇: 狗的类型?狗的主要特征