基于Alexnet网络实现猫狗数据集分类(Keras框架)

目录

  • 1、作者介绍
  • 2、Alexnet网络
    • 2.1 网络介绍
    • 2.2 AlexNet网络的主要特点
  • 3、基于Alexnet网络实现猫狗数据集分类
    • 3.1 猫狗大战数据集
    • 3.2 数据集处理
    • 3.3 准备工作
    • 3.4 训练过程
    • 3.5 对比实验
      • 3.5.1 HALCON平台下的Alexnet对比实验
      • 3.5.2 HALCON平台下的Resnet-50对比实验
      • 3.5.3 HALCON平台下的Mobilenet对比实验
    • 3.6 几种模型的总结
    • 3.7 问题与分析
  • 参考连接

1、作者介绍

程敬,女,西安工程大学电子信息学院,2022级研究生
研究方向:电子信息
电子邮件:1105719037@qq.com

陈梦丹,女,西安工程大学电子信息学院,2022级硕士研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:1169738496@qq.com

2、Alexnet网络

2.1 网络介绍

LeNet于1998年提出的,是最早的神经网络之一,用于解决手写识别的问题。

传承了LeNet ,AlexNet是于2012年提出的一个深度学习卷积神经网络模型。它在ImageNet图像识别挑战赛中取得了巨大的成功,引领了深度学习在计算机视觉领域的应用潮流。

在这里插入图片描述
AlexNet采用了一种前所未有的深度架构,具有8个卷积层和3个全连接层。它的架构相对较深,参数也相对Lenet较大。

2.2 AlexNet网络的主要特点

(1) 架构:是更大更深的LeNet:10倍的参数个数,260倍的计算复杂度。
(2) Relu:相对于传统的sigmoid函数,ReLU能够更好地解决梯度消失的问题,并且计算速度更快。
(3) MaxPooling:使输出的值更大,梯度更大,训练会相对容易。
(4) 丢弃法:引入了Dropout层,用于减少过拟合。Dropout随机地将一部分神经元的输出置零,可以有效地提高模型的泛化能力。
(5) 数据增强:为了增加训练数据的多样性,AlexNet在训练过程中进行了数据增强操作,如随机裁剪、水平翻转和改变亮度等。

3、基于Alexnet网络实现猫狗数据集分类

这里给出用Keras框架编写好的完整程序的百度网盘链接:
链接:https://pan.baidu.com/s/1U-xVSI4qrlO67DhpY3UaHA
提取码:eu9u

3.1 猫狗大战数据集

这个数据集是Kaggle大数据竞赛的一道赛题,利用给定的数据集,用算法实现猫和狗的识别。 其中包含了猫和狗的图片数量都是12500张且按顺序排序。

在这里插入图片描述

3.2 数据集处理

(1)、resize(227*227),代码如下:

import cv2
import os
# 数据预处理,把图片数据集的所有图片修剪成固定大小形状
def image_tailor(input_dir, out_dir):for root, dirs, files in os.walk(input_dir):for file in files:# file为root目录中的文件filepath = os.path.join(root, file)     # 连接两个或更多的路径名组件,filepath路径为/root/filetry:image = cv2.imread(filepath)        # 根据输入路径读取照片dim = (227, 227)                    # 裁剪的尺寸resized = cv2.resize(image, dim)    # 按比例将原图缩放成227*227path = os.path.join(out_dir, file)  # 保存的路径和相应的文件名cv2.imwrite(path, resized)          # 进行保存except:print(filepath)os.remove(filepath)cv2.waitKey()input_patch = 'F:\\data\\kaggle\\test1'  # 数据集的地址
out_patch = 'F:\\data\\fixdata\\tailor'  # 图片裁剪后保存的地址
image_tailor(input_patch, out_patch)
print('reshape finished')

(2)、重命名:把图片命名为后续代码加载需要的格式,代码如下:

def rename(dir_path):global jdir_files=os.listdir(dir_path) #得到该文件夹下所有的文件for file in  dir_files:  #这里的file已经是图片的名字了num = str(j).zfill(5)j = j + 1filename = "dog." + num  # 修改文件名的格式file_path=os.path.join(dir_path,file)  #路径拼接成绝对路径new_name=os.path.join(dir_path,filename+".jpg")os.rename(file_path, new_name)
if __name__ == '__main__':dir_path = 'E:\\Desktop\\PetImages\\cat_dog_resized\\Dog'global jj = 0rename(dir_path)

(3)、划分数据集:训练集:验证集:测试集=70% : 15% : 15%,结果如下:

在这里插入图片描述

3.3 准备工作

在进行训练之前,首先将数据集的内容保存到一个TXT文件中,便于读取,代码如下:

import os
photos = os.listdir("./data/image/train/")
with open("data/dataset.txt","w") as f:for photo in photos:name = photo.split(".")[0]if name=="cat":f.write(photo + ";0\n")elif name=="dog":f.write(photo + ";1\n")
f.close()

在这段代码中,我们给不同的类别打上了标签方便训练,如果是猫,便签为0;如果是狗,标签为1。在运行代码之后,我们就可以看到生成的txt文件如下图所示。

在这里插入图片描述

3.4 训练过程

训练50轮的结果:在验证集上达到86%的准确度。

在这里插入图片描述

3.5 对比实验

3.5.1 HALCON平台下的Alexnet对比实验

在这里插入图片描述
这个平台很完善,操作简单,界面友好。在训练猫狗数据集分类任务时,只需要将处理后的数据传入平台,平台会自动分配训练集、验证集和测试集。接着选择所需要的网络,设置训练轮数和学习率灯参数,就可以直接开始训练,训练完成后经过测试会得到准确度等数据,如下图,我们可以看到使用Alexnet训练的模型准确率为93.69%。

在这里插入图片描述
并且该系统还会生成模型对于不同类别检测的准确度及其他的一些参考指标。

在这里插入图片描述

还有一些预测错误的图片展示,以方便我们了解到哪些图片是容易识别错误的。

在这里插入图片描述

3.5.2 HALCON平台下的Resnet-50对比实验

使用Resnet-50进行猫狗数据集分类,可以看到检测的准确率是97.91%,每个图像的平均推理时间是6.86ms。

在这里插入图片描述

3.5.3 HALCON平台下的Mobilenet对比实验

使用Mobilenet进行猫狗数据集分类,可以看到检测的准确率是97.25%,每个图像的平均推理时间是1.78ms。

在这里插入图片描述

3.6 几种模型的总结

(1)、AlexNet(2012)采用了ReLU激活函数和Dropout正则化技术,它深度学习图像分类任务中的突破性成果引领了后续模型的发展。
(2)、ResNet(2015)通过引入残差连接(residual connection)来构建深层网络,解决了深度神经网络训练中的梯度消失问题。
(3)、MobileNet(2017)使用了深度可分离卷积(depthwise separable convolution)来减少模型参数量和计算量,是比较轻量化的模型,适合于实时应用和资源受限的环境。

3.7 问题与分析

问题1:ImportError: cannot import name ‘Adam’ from ‘keras.optimizers’.

在这里插入图片描述
问题分析:keras 库更新后无法按照原方式导入包,Adam 导入已更改。
解决办法:使用下面两行的代码代替掉第一行的代码。

在这里插入图片描述
问题2:AttributeError: module ‘keras.backend’ has no attribute ‘set_image_dim_ordering’.

在这里插入图片描述
问题分析:还是keras版本的原因,新版本中image_dim_drdering更改为了image_data_format.
解决办法:使用最后一行的代码代替掉第二行的代码。

在这里插入图片描述

参考连接

[1] Alexnet代码参考:http://t.csdn.cn/o0Bmo
[2] 数据集处理:https://blog.csdn.net/choose_lzn/article/details/89391102

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/9780.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3怎么把路由的 # 去掉 ? 为什么用mode: ‘history‘没有生效?

代码完成后 请重启项目 一定要重启! 重启!重启! (没重启项目不生效) 1.找到项目中的路由文件 2.引用vueRouter // vue3 import { createRouter, createWebHistory } from "vue-router";var router crea…

蓝桥杯专题-试题版含答案-【荷兰国旗问题】【正三角形的外接圆面积】【比较字母大小】【车牌号】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

第三步:STM32F4时钟介绍

1.0 时钟系统框图 1.1 时钟系统知识 1. STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速内部时钟,RC振荡器,频率为16MHz,精度不高。可以直接作为系统 时钟或者用作PLL时钟输入。    ②、HSE是高速外部时钟,可接石英…

Learning C++ No.31 【线程库实战】

引言: 北京时间:2023/6/11/14:40,实训课中,实训场地有空调,除了凳子坐着不舒服之外,其它条件都挺好,主要是我带上了我自己的小键盘,并且教室可以充电,哈哈哈&#xff0c…

用Python实现自动化交易:从趋势到收益

在现代金融市场中,自动化交易已经成为越来越流行的一种方式。相比于传统的手工交易方式,自动化交易更加高效、精准、快速且免除了人为因素的影响。而Python作为一种高级编程语言,凭借其简单易学、灵活性强的优势逐渐成为自动化交易中最受欢迎…

Python代码覆盖率分析工具Coverage

目录 简介 安装 命令行中使用 调用API使用 简介 Coverage是一个Python代码覆盖率分析工具,它可以用于衡量Python测试代码的质量。通过给代码执行带来的覆盖率数据,Coverage可以帮助开发人员找出被回归测试代码中的漏洞,并且指明哪些代码…

vue门户系统实现顶部菜单下拉效果

门户系统实现顶部菜单下拉效果 组件封装 直接上代码&#xff0c;已经封装成组件&#xff0c;只要传输正确的数据格式即可使用。 <template> <div class"head-v3" id"index"><div class"navigation-up"><div class"…

【Linux】15. 文件系统与软硬链接

1. 文件系统的引出 在之前的学习过程当中&#xff0c;我们知道当文件被打开后需要加载进内存&#xff0c;第一步为其创建struct file结构体描述其结构(操作系统需要管理被打开的文件&#xff1a;先描述再组织)&#xff0c;在通过进程当中的文件描述符指针指向文件描述符表&…

江苏某农商行稳健发展,软件安全推动金融服务新气象

​江苏某农商银行是全国最早成立的农商行之一。面对复杂严峻的内外部形势&#xff0c;该农商行在坚守服务“三农”与小微市场的同时&#xff0c;紧跟改革脚步&#xff0c;不断探索业务创新与数字化转型&#xff0c;实现经营稳健发展。 打造多维度数字化体系 驱动农商行创新发展…

2024浙大GMSCM提面第一场:全英文项目的生死选择题

本周末是今年浙大MBA非全英文项目GMSCM的第一场提前批面试&#xff0c;作为诸多方向中相对比较稳定的项目之一&#xff0c;GMSCM项目每年的提前批面试申请也都表现的比较稳健&#xff0c;而其目前主要的招生也是依托于提前批面试&#xff0c;根据这几年的情况&#xff0c;每年浙…

【数据可视化】SVG(一)

一、邂逅SVG和初体验 什么是SVG  SVG全称为&#xff08;Scalable Vector Graphics&#xff09;&#xff0c;即可缩放矢量图形。&#xff08;矢量定义&#xff1a;既有大小又有方向的量。在物理学中称作矢量&#xff0c;如一个带箭头线段&#xff1a;长度表示大小&#xff0…

利用Visual Studio 2022 导出目标dll API接口

利用Visual Studio 2022 导出目标dll API接口 操作路径: 指令如下: dumpbin /exports /out:C:\\Users\\Administrator\\Desktop\\PlantSimCore.txt C:\\Users\\Administrator\\Desktop\\PlantSimCore.dll dumpbin /exports /out:C:\\Users\\Administrator\\Desktop\\