【深度学习】海洋生物数据集,图片分类

文章目录

  • 任务描述
  • 数据收集
  • 数据处理
  • 模型训练
  • 指标评测
  • web app
  • 代码和帮助

任务描述

收集9种以上的海洋生物图片,然后基于深度学习做一个分类模型,训练完成后,分类模型就可以对未知图片进行分类。

在之后随便传一张图片,分类模型就可以推理出这张图片上面的是什么海洋生物。

数据收集

初步搜索,整理清洗,得到了一些图片,一共11370张,是这类类别+每个类别的图片数量:

比目鱼 376
水母 590
海星 512
海牛 542
海狮 759
海蛇 116
海螺 430
海豚 487
海象 1190
海豹 482
海里的螃蟹 501
海鳗 506
海龟 611
澳洲龙虾 545
金枪鱼 178
马林鱼 321
鲑鱼 527
鲨鱼 605
鲸鱼 552
鲸鲨 556
鳐鱼 769
鳗鱼 215

数据处理

所执行的数据处理过程主要包括以下几个步骤:

  1. 数据预处理

    • 随机大小裁剪:使用transforms.RandomResizedCrop(224),这个转换对图像进行随机大小和宽高比裁剪,裁剪后的图像大小为224x224像素。这样做可以提供缩放和剪裁的数据增强,并适应预期的神经网络输入尺寸。
    • 随机水平翻转:通过transforms.RandomHorizontalFlip()对图像执行随机的水平翻转,作为一种数据增强技术,使模型能够学习到水平翻转下的图像特征,增强泛化能力。
    • 类型转换transforms.ToTensor()转换将PIL图像或NumPy ndarray转换为FloatTensor,并将图像的像素值从[0,255]范围缩放到[0.0,1.0]范围。
    • 标准化transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])使用指定的均值和标准差对图像进行标准化。这些数值通常是ImageNet数据集上预训练模型使用的数值,使得输入分布与训练过程中的分布相匹配。
  2. 数据加载和采样

    • 使用ImageFolder从指定的数据集路径dataset_path加载数据。这要求数据集是以文件夹方式组织的,每个类别一个文件夹。
    • ImbalancedDatasetSampler处理数据采样,旨在从不平衡的数据集中为每个批次采样,以确保在训练期间各类被公平地表示。
    • DataLoader创建一个数据加载器,用于迭代提供数据,设置批量大小为64,使用了8个工作线程(num_workers)来并行加载数据。
  3. 数据集类别信息

    • 打印出image_datasets.classes,这显示了所有类别的列表,即每个标签对应的类名。

模型训练

模型训练过程遵循以下几个关键步骤:

  1. 模型初始化

    • 使用预训练的EfficientNet B0作为基础模型,并在此基础上,通过自定义MyEfficientNet类来适应特定的类别数(本例中为22类)。在该类中,原始EfficientNet B0的分类器被替换为一个新的线性层,以匹配目标任务的类别数。
    • 模型使用预训练权重初始化,除了新的分类器层。这有助于加速训练并提高最终模型的性能,因为预训练模型已经学习了从大规模数据集(如ImageNet)提取有用特征的能力。
  2. 设置设备

    • 根据系统是否支持CUDA,自动选择使用GPU (cuda:0) 还是CPU进行训练。
  3. 损失函数和优化器

    • 采用交叉熵损失(CrossEntropyLoss)作为损失函数,这是多分类问题常用的损失函数。
    • 使用带有学习率0.001的Adam优化器来更新模型的权重。
  4. 迭代训练

    • 模型在给定的迭代次数(num_epochs)内进行训练。每个epoch都包括一次对整个训练集的遍历。
    • 在每次迭代中,将模型设置为训练模式。然后,通过DataLoader加载小批量数据(inputs, labels),并执行以下步骤:
      a. 将数据迁移到相应的设备(GPU或CPU)。
      b. 在前向传递开始之前,清除之前迭代计算的梯度。
      c. 执行前向传播,计算模型的输出。
      d. 根据模型输出和真实标签计算损失。
      e. 执行反向传播,计算损失对模型参数的梯度。
      f. 更新模型参数。
    • 每个epoch结束时,计算并打印该epoch的平均损失。
  5. 模型保存

    • 在每个epoch的训练后,将模型的当前状态保存到磁盘上。这使得可以在之后加载训练好的模型进行推理或继续训练。
  6. 性能评估

    • 经过训练阶段后,模型切换到评估模式,以进行性能评估。
    • 评估过程中不更新模型参数,并使用与训练相同的数据进行验证。
    • 计算并打印模型在验证集上的准确率,这有助于监测模型在未见过的数据上的泛化能力。
  7. 记录和分析

    • 记录每个epoch训练的损失和验证准确率,方便后续分析模型训练过程中的性能变化。

通过上述步骤,模型逐渐学习从图像数据中提取有用的特征,并准确分类图像。每个epoch的训练和验证过程都旨在评估模型的性能和泛化能力,同时通过反复迭代优化,不断提高模型的准确率。

指标评测

训练30轮,损失数值一直减少:
在这里插入图片描述
训练30轮,准确度一直提升:

在这里插入图片描述

最终结果:

Epoch 30/30, Loss: 0.2644
Validation Acc: 0.9302

web app

请注意,我们只是用了22个类别,没有其他类别,所以测试需要用22个类别以内的图片,不能传无关的图,因为模型没见过无关的图:

比目鱼 376
水母 590
海星 512
海牛 542
海狮 759
海蛇 116
海螺 430
海豚 487
海象 1190
海豹 482
海里的螃蟹 501
海鳗 506
海龟 611
澳洲龙虾 545
金枪鱼 178
马林鱼 321
鲑鱼 527
鲨鱼 605
鲸鱼 552
鲸鲨 556
鳐鱼 769
鳗鱼 215

打开网页后,可以点击这里上传图片,然后点击提交,等待片刻,即可看到模型的推理结果。在最下方,也有示例图片,也可以点击某张示例图片后,就点击提交。
在这里插入图片描述

代码和帮助

完整代码:
在这里插入图片描述
完整数据集:
在这里插入图片描述

下载:

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

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

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

相关文章

【静态分析】静态分析笔记01 - Introduction

参考: BV1zE411s77Z [南京大学]-[软件分析]课程学习笔记(一)-introduction_南京大学软件分析笔记-CSDN博客 ------------------------------------------------------------------------------------------------------ 1. program language and static analysis…

ORB-SLAM3整体流程详解

0. 简介 在之前,作者曾经转过一篇《一文详解ORB-SLAM3》的文章。那篇文章中提到了ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM系统,可以在单目,双目和RGB-D相机上利用针孔或者鱼眼模型运行。与ORB-SLAM2相比,ORB-SLAM3…

接口自动化框架设计必备利器之参数传递

在我们设计自动化测试框架的时候,我们会经常将测试数据保存在外部的文件(如Excel、YAML)中,实现测试脚本与测试数据解耦,方便后期维护。 当涉及到业务场景接口用例时,由于接口与接口存在关联关系&#xff…

STL容器之unordered_map类

文章目录 STL容器之unordered_map类1、unordered_map1.1、unordered_map介绍1.2、unordered_map的使用1.2.1、unordered_map的常见构造1.2.2、unordered_map的迭代器1.2.3、unordered_map的容量1.2.4、unordered_map的增删查1.2.5、unordered_map的桶操作 2、unordered_multima…

【快速上手ESP32(基于ESP-IDFVSCode)】04-PWM

PWM PWM,即脉冲宽度调制(Pulse Width Modulation),是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而达到控制开关稳压电源输出…

物联网系统设计 8

1 规划中小型LoRa 中小型分时复用,大型项目需要学习LoRaWAN 1.1 通信记录 1.2 节点能耗 1278芯片 满功率20DMB,增加PA,发送功率 30 DBM 内置天线柔性 棒状 3db 203 休眠、发生、接收 计算链路预算,工作电流,工…

Blocs v5.2.3 mac版 可视化网页设计工具 兼容 M1/M2/M3

Mac毒搜集到的Blocs 是一款mac上专业强大的精美网页设计软件。特点就是简介、高效、高质,可以帮助我们快速设计出精美的网页,retina视网膜特性支持,优化自适应网页的开发。 应用介绍 Blocs 是一款mac上专业强大的精美网页设计软件。专注于简…

实现WAF对CC攻击的零误封防护:关键技术解析与实践

一、引言 Web应用防火墙(WAF)作为网站安全的重要防线,其在防御CC(Challenge Collapsar,即挑战黑洞,一种分布式拒绝服务攻击)攻击中的效能至关重要。然而,精准识别并有效拦截CC攻击的…

2024阿里云2核4G服务器优惠价格表_2核4G性能测评

阿里云2核4G服务器多少钱一年?2核4G服务器1个月费用多少?2核4G服务器30元3个月、85元一年,轻量应用服务器2核4G4M带宽165元一年,企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1…

pytesseract,一个超强的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个超强的 Python 库 - pytesseract。 Github地址:https://github.com/madmaze/pytesseract 在当今数字化时代,文字识别技术扮演着越来越重要的角色。…

设计模式-装饰者模式(Decorator)

1. 概念 装饰者模式是一种结构型设计模式,它允许用户在不修改原始对象的基础上,通过将对象包装在装饰者类的对象中,动态地给原始对象添加新的行为或职责。 2. 原理结构图 图1 图2 抽象组件(Component)&#xff1a…

离散化实现低通滤波器(选用双线性变换)

学习了离散化后整理了其中的核心步骤,此处不对原理进行深究,仅仅介绍如何对一个连续系统进行离散化 此处可以得到低通滤波器的截止频率为1000rad/s. 离散化的过程为将s 2/Ts * [(z - 1) / (z 1)] (选用双线性变换) 得到离散化序列为 Y(z) [w…

Python-VBA函数之旅-bytearray函数

目录 1、bytearray函数: 1-1、Python: 1-2、VBA: 2、相关文章: 个人主页:非风V非雨-CSDN博客 bytearray函数在Python中提供了一种可变字节序列的表示方式,这在实际编程中有多种应用场景。常见的应用场…

如何用Python编写简单的网络爬虫(页面代码简单分析过程)

一、什么是网络爬虫 在当今信息爆炸的时代,网络上蕴藏着大量宝贵的信息,如何高效地从中获取所需信息成为了一个重要课题。网络爬虫(Web crawler)作为一种自动化工具,可以帮助我们实现这一目标,用于数据分析…

项目实战 | 使用python分析Excel销售数据(用groupby)

项目实战 | 使用python分析Excel销售数据 本文目录: 零、00时光宝盒 一、提出问题 二、理解数据 2.1、安装python读取excel文件的库 2.2、查看excel表的字段名和前几行记录 2.3、查看excel表结构 2.4、查看索引 2.5、查看每一列的列表头内容 2.6、查看每一…

移除元素Java实现

题意 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 额外空间 并 原地 修改数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元…

websocket实践

文章目录 背景WebSocket API使用场景优点 实例步骤 1: 设置 WebSocket 服务器步骤 2: 创建客户端 HTML 页面步骤 3: 测试 WebSocket 通信注意事项实际操作 参考资料 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它使得浏览器和服务器只需建立一个连接,…

CSS:filter属性介绍

一、filter属性简介 值描述示例blur(Npx)设置高斯模糊效果。N是模糊半径,值越大,模糊效果越明显。filter: blur(5px);brightness(%)调整图像的亮度。百分比值小于100%会使图像变暗,大于100%会使图像变亮。filter: brightness(75%);contrast(…

el-table合计行添加按钮操作

针对于el-table中合计功能中的操作栏也可以按钮,并且可以添加点击事件 ElTable源码里footer部分是,这种方式渲染的,也就是 支持传递VNode。使用h第一个参数传递 组件,可以把组件转成VNode,比如现在要在右下角加一个 详…

无货源,0基础做电商,6个选品逻辑快速出单!

首先我们要先解决货源问题,再来谈选品逻辑。初入电商行业,进货渠道建议使用1688。首先1688是国内最大的B2B批发平台,平台服务和安全性都提供了一定的保障,以及丰富的货源选择。你可以浏览不同供应商的产品,对比价格、质…