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

文章目录

  • 任务描述
  • 数据收集
  • 数据处理
  • 模型训练
  • 指标评测
  • 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

016——DHT11驱动开发(基于I.MX6uLL)

目录 一、 模块介绍 1.1 简介 1.2 电路描述 1.3 通信协议 二、 驱动程序 三、 应用程序 四、 上机实验 一、 模块介绍 1.1 简介 DHT11 是一款可测量温度和湿度的传感器。比如市面上一些空气加湿器,会测量空气中湿度,再根据测量结果决定是否继续加…

【vite】-【vite介绍】-【vite的基础应用】-【vite的高级应用】-【

目录 vite介绍vite的基础应用vite创建项目vite创建vue3项目vite创建vue2项目vite创建react项目 vite中使用css的各种功能vite中使用tsvite中处理静态资源的方法vite集成eslint和prettiervite中的env环境变量 vite的高级应用 vite介绍 一、特点: 开发时效率极高开箱…

springcloud第4季 springcloud-gateway网关的功能作用

一 网关 1.1 gateway的作用 网关可以实现: 权限过滤拦截,请求转发;组包拆包,加密解密,报文解析,协议转换等功能。 cloud gateway本身也是一个微服务,需要注册进服务到注册中心,从…

LeetCode 378 有序矩阵中第K小的元素

题目信息 LeetoCode地址: . - 力扣(LeetCode) 题解内容大量转载于:. - 力扣(LeetCode) 题目理解 题意很直观,就是求二维矩阵中所有元素排序后第k小的数。 最小堆写法 该写法不再赘述,维护…

simulink的硬件支持下,串口发送的模型,stm32f407的串口程序调试错误

串口调试助手能接收到数据,为何是8个数据?如之奈何? 参考文章: STM32CubeMxMATLAB Simulink串口输出实验_用stm32cubemx生成的串口都是输出-CSDN博客根据 该文章发送字符串 hello,发送数量为5,接收也是he…

解读命令:icacls “E:\ShareAll“ /grant “Everyone:(OI)(CI)(F)“

命令 icacls "E:\ShareAll" /grant "Everyone:(OI)(CI)(F)" 是在Windows操作系统中用来修改文件或目录权限的命令行操作。该命令执行以下操作: 路径:"E:\ShareAll" 指定了要更改权限的目录位置,即对E盘下的“S…

Cisco Packet Tracer配置AAA认证

出口路由器R1配置: ip domain-name cisco.com;写入设备的默认域名 crypto key generate rsa;产生rsa密钥 ip ssh secret cisco;启用ssh服务 enable secret cisco;设置特权模式密码 连接TACAS的路由器做同样配置 RADIUS服务器的配置 client ip 配置成RADIUS服务器…

二分法题集2

目录 1 山脉数组的峰顶索引 分析: 代码展示: 2 寻找峰值 分析: 代码展示: 3 寻找旋转排序数组中的最小值 分析: 代码展示: 4 点名 分析: 代码展示: 1 山脉数组的峰顶…

数据结构学习——栈和队列

1.栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 …

《BERT》论文笔记

原文链接: [1810.04805] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (arxiv.org) 原文笔记: What: BETR:Pre-training of Deep Bidirectional Transformers for Language Understand…

Ruoyi-vue-pro Vue + nginx 二级目录部署到云服务器

http://www.your-server.com/ 这是一级目录,由于项目多,一般会通过二级域名http://oa.your-server.com/或二级目录http://www.your-server.com/oa来发布,本篇记录一下二级目录发布。先看效果 1、router/index.js配置base export default new …

对代理模式的理解

目录 一、前言二、案例1 代码2 自定义代理类【静态代理】2.1 一个接口多个实现,到底注入哪个依赖呢?2.1.1 Primary注解2.1.2 Resource注解(指定name属性)2.1.3 Qualifier注解 2.2 面向接口编程2.3 如果没接口咋办呢?2.…

算法基础课-搜索与图论

DFS 题目链接&#xff1a;842. 排列数字 - AcWing题库 思路&#xff1a;写的很好的题解AcWing 842. 排列数字--深度优先遍历代码注释 - AcWing #include<bits/stdc.h>using namespace std; int n; int st[10]; vector<int> a; void dfs(){if(a.size() n){for(in…

python标准数据类型--集合常用方法

在Python中&#xff0c;集合&#xff08;Set&#xff09;是一种无序且不重复的数据结构&#xff0c;它是由一个无序的、不重复的元素组成的。Python中的集合与数学中的集合概念相似&#xff0c;并且支持一系列常用的方法。本篇博客将深入介绍Python集合的常用方法&#xff0c;帮…

c# wpf XmlDataProvider 简单试验

1.概要 2.代码 <Window x:Class"WpfApp2.Window12"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend…

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加

前言&#xff1a; &#x1f3af;个人博客&#xff1a;Dream_Chaser &#x1f388;博客专栏&#xff1a;C &#x1f4da;本篇内容&#xff1a;仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加 目录 917.仅仅反转字母 题目描述&am…

C#操作MySQL从入门到精通(5)——查询数据

前言 在和MySql数据库交互的过程中,查询数据是使用最频繁的操作,本文详细介绍了查询数据的各种操作,包括查询一列数据、 查询两列数据、查询所有列数据、查询不重复的数据、查询指定行数据,绝对是C#操作MySql数据库史上最详细教程,能够帮助小白快速入门以及将这些功能迅速…

【数据结构】考研真题攻克与重点知识点剖析 - 第 3 篇:栈、队列和数组

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

阿里云2核2G和2核4G轻量应用服务器优惠价格表,2024年最新报价

阿里云轻量应用服务器2核2G和2核4G配置优惠价格表&#xff0c;轻量2核2G3M带宽61元一年&#xff0c;轻量2核4G4M带宽165元1年&#xff0c;均不限制月流量&#xff0c;阿里云活动链接 aliyunfuwuqi.com/go/aliyun 活动打开如下图&#xff1a; 阿里云轻量应用服务器价格 61元/年…

上位机图像处理和嵌入式模块部署(qmacvisual实时视频)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们测试和练习的时候&#xff0c;大部分情况下都是利用图像进行测试的&#xff0c;但是实际情况下&#xff0c;或者准确一点说&#xff0c;工…