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

news2024/11/6 17:24:32

目录

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

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/1n6HIY3Ius70c_cMa5YNWhA
提取码:lret

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/file
            try:
                image = cv2.imread(filepath)        # 根据输入路径读取照片
                dim = (227, 227)                    # 裁剪的尺寸
                resized = cv2.resize(image, dim)    # 按比例将原图缩放成227*227
                path = 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 j
    dir_files=os.listdir(dir_path) #得到该文件夹下所有的文件
    for file in  dir_files:  #这里的file已经是图片的名字了
        num = str(j).zfill(5)
        j = j + 1
        filename = "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 j
    j = 0
    rename(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.4 对比实验

3.4.1 HALCON平台下的Alexnet实验

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

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

3.4.3 HALCON平台下的Mobilenet实验

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

在这里插入图片描述

3.5 几种模型的总结

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

3.6 问题与分析

问题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.coloradmin.cn/o/625096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进程的通信——管道和共享内存

进程间的通信有很多种 管道 匿名管道pipe 命名管道 System V IPC System V 消息队列 System V 共享内存 System V 信号量 POSIX IPC 消息队列 共享内存 信号量 互斥量 条件变量 读写锁 这篇文章主要介绍管道和共享内存 管道 管道内核数据结构:在Linux2.6中 struct …

搭建自动化测试环境

目录 1、安装Python并配置环境变量。2、安装Pycharm开发工具。3、安装Selenium4、安装浏览器:Chrome和Firefox的其中之一。5、浏览器驱动:下载Chrome浏览器驱动或者是Firefox浏览器驱动。6、配置webdriver公众号粉丝福利 自动化测试环境: Pyt…

接口反应慢优化

遇到某个功能,页面转圈好久,需要优化 1.F12 查看接口时间 2.看参数 总共耗时9.6s Waiting for sercer response 时间是2秒 Content Download 7秒 慢在Content Download F12查看接口响应 显示Failed to load response data:Request content was e…

这些10款优秀的交互设计软件,你知道吗?

交互软件可以帮助设计师从“可用性”和“用户体验”的角度优化他们的作品。如果设计师想创建一个令人满意的交互设计作品,一个方便的交互设计软件是必不可少的。 根据设计师的个人喜好和方便,选择易于使用的交互设计软件来完成创建。本文盘点十款易于使…

【P55】JMeter 图形结果(Graph Results)

文章目录 一、图形结果(Graph Results)参数说明二、准备工作三、测试计划设计 一、图形结果(Graph Results)参数说明 可以以图形的方式查看和分析相关指标 使用场景:一般在调试测试计划期间用来查看相关指标&#xf…

微信小程序基础使用-请求数据并渲染

小程序基本使用-请求数据并渲染 小程序模板语法-数据绑定 在js中定义数据 Page({data: {isOpen: true,message: hello world!} })小程序的data是一个对象,不同于vue的data是一个函数 在模块中获取使用数据 小程序中使用 {{}} 实现数据与模板的绑定 内容绑定&a…

Qt Quick-QML地图引擎之v4版本(新增3D模型/抗锯齿任意多边形下载)

在上个版本Qt quick-QML地图引擎之v4版本(新增3D模型/高德/谷歌在线/离线预览/多线程离线裁剪下载/区域查询/位置搜索/路径规划)_qt 高德地图离线_诺谦的博客-CSDN博客更新了很多小功能。经过朋友们一致需求建议,所以V4继续优化。 B站视频: Qt Quick-QML…

【办公效率提升】Window10与ubuntu递归列出当前目录及其所有子目录中的文件和文件夹

在Windows操作系统中,没有内置的类似于Ubuntu的"tree"命令的功能。但是,你可以使用以下两种方法来实现相似的功能: 方法一:使用dir命令和递归 你可以使用Windows的内置命令"dir"以及递归参数"/s"来…

前后端交互二、form表单与模板引擎

零、文章目录 前后端交互二、form表单与模板引擎 1、form表单的基本使用 HTML相关知识请参考HTML入门 &#xff08;1&#xff09;表单是什么 表单在网页中主要负责数据采集功能。HTML中的<form>标签&#xff0c;就是用于采集用户输入的信息的&#xff0c;并通过<…

linux PerfCollect收集日志及perfview分析

Perfview&#xff1a;https://github.com/Microsoft/perfview/releases PerfCollect&#xff1a;https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/linux-performance-tracing.md Linux 环境中运行的 ASP.NET Core应用中收集跟踪 PerfCollect&#…

5.6.1 Ext JS之标签页的关闭和批零关闭

Tab Panel 是包含多个标签页的面板, 这是一种很常用的组件, 类似于浏览器的标签页。关于 Ext JS的Tab Panel的基本使用可以参考: [Ext JS3.9] 标签面板(TabPanel )介绍与开发, 本篇介绍如何关闭单个标签页和批量关闭标签页。 Tab 标签页的可关闭 默认状况下,标签页是无…

Bitmiracle Docotic.Pdf 9.015 Crack

Docotic.Pdf 库是正确的法语和强大的编程和界面&#xff0c;可以让用户和开发人员创建专业和高质量的 PDF 文件&#xff0c;甚至可以阅读和修改那些已经存在的。它具有干净而强大的编程接口&#xff0c;能够帮助用户创建质量非常好的 PDF 文档。在这个库的帮助下&#xff0c;用…

linux log

linux log 一:printk日志级别二:printk打印消息控制printkprintk消息等级查看与修改/etc/rsyslog.conf 一:printk日志级别 数字越小级别越高 二:printk打印消息控制 console_loglevel&#xff1a;只有当printk打印消息的log优先级高于console_loglevel时&#xff0c;才能输出…

C++编译一些常见的错误集锦

目录 1、段错误&#xff08;Segmentation Fault&#xff09; 2、强异常保证&#xff08;strong exception guarantee&#xff09; 3、有效但未定义的状态&#xff08;valid but unspecified state&#xff09; 1、段错误&#xff08;Segmentation Fault&#xff09; &#…

Material—— VAT(Houdini To UE)

目录 一&#xff0c;介绍 二&#xff0c;柔体 二&#xff0c;刚体 一&#xff0c;介绍 VAT是将动画数据存储在纹理中&#xff0c;通过GPU运算来实现动画的技术&#xff1b;VAT纹理包含每个顶点在不同帧的位置信息&#xff0c;而每个像素代表一个顶点在某个时间点的位置&…

Linux项目流程 + 用git将本地代码上传到gitee

目录 前言 一个"进度条"项目 git上传代码 首次上传代码 安装git 克隆仓库连接 将文件传入路径目录 文件上传三板斧 后续提交更新 git实用用法补充 前言 本文将介绍如何使用makefile编写项目并将其上传到git远程仓库。Makefile是一种用于自动化构建、编译…

Python爬虫:从后端分析为什么你爬虫爬取不到数据

仅仅是小编总结的三点而已&#xff0c;可能不是很全面&#xff0c;如果之后小编了解到新的知识点&#xff0c;可能还会增加的哈&#xff01; 1. 最简单的爬虫代码 也就是各位最常使用的&#xff0c;直接利用requests模块访问当前网站链接&#xff0c;利用相关解析模块从而获取…

第三届陕西省大学生网络安全技能大赛wp

文章目录 第三届陕西省大学生网络安全技能大赛wpwebezpoptestezrceunserializeEsc4pe_T0_Mong0 misc管道可是雪啊飘进双眼 第三届陕西省大学生网络安全技能大赛wp web ezpop 在源码找到base64 解码&#xff1a; /pop3ZTgMw.php&#xff0c;访问获得源码&#xff1a; <?…

通过帮助中心提高客户满意度,帮助中心的最佳实践方式

随着技术的不断发展和产品的不断更新&#xff0c;消费者对产品的需求也越来越高。在这个竞争激烈的市场中&#xff0c;企业必须建立一个完善的帮助中心&#xff0c;来提供及时、准确的技术支持和解决方案&#xff0c;以满足客户的各种需求。这样能够有效地提高客户满意度&#…