使用Pytorch实现图像花朵分类

news/2024/12/2 19:43:56/

基于pytorch-classifier这个源码进行实现的图像分类

代码的介绍在这个链接里面,这篇博客主要是为了带着大家通过实践的方式熟悉一下代码的使用,并且了解相关功能。

1. 下载相关资料

这里我提供了一个花朵数据集,里面总共有十个类别的花朵作为本次实验的数据集。
我们下载代码和数据集到本地,然后我们在下图创建一个名字为dataset的文件夹,然后把花朵数据集放到里面并重命名为train,具体如下:
在这里插入图片描述
至此,完成第一步。

2. 配置环境

  1. 首先推荐使用anaconda作为你的python环境,代码工具可以使用vscode或者pycharm,这个根据使用者爱好,这边我使用的是pycharm,那么这里默认各位已经准备好anaconda和(vscode或者pycharm),不会安装的话可以百度一下,这方面的教程都非常丰富。
  2. 安装torch和torchvision
    你可以在这个pytorch官网中找到对应的安装命令,这里版本要求torch==1.12.0+,下面贴出torch==1.12.0的各项安装命令,各位看官可以根据自己的电脑情况进行选择
    CUDA 11.6
    pip install torch==1.12.0+cu116 torchvision==0.13.0+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
    CUDA 11.3
    pip install torch==1.12.0+cu113 torchvision==0.13.0+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
    CUDA 10.2
    pip install torch==1.12.0+cu102 torchvision==0.13.0+cu102 --extra-index-url https://download.pytorch.org/whl/cu102
    CPU only
    pip install torch==1.12.0+cpu torchvision==0.13.0+cpu --extra-index-url https://download.pytorch.org/whl/cpu
  3. 安装成功后,进入到代码路径进行pip install -r requirements.txt

至此,完成第二步。

3.分割数据集

在第一步中我们已经放好数据集,但是还没有划分验证集和测试集,这个代码中的processing.py提供了分割数据集的功能,其主要参数如下
在这里插入图片描述
其中–val_size --test_size就是验证集和测试集的比例,这里的分割思想是,先在全部数据集上分出–test_size比例的数据,然后再从剩下的分出-val_size比例的数据。具体参数解释可以看Readme.md文件。
在这里插入图片描述
那么我们默认参数即可,如果各位看官需要修改,可以自行修改即可,那么我们的运行命令就是:

python processing.py

如果需要更改参数,可以直接在命令后面指定,比如我想验证集比例是0.1:

python processing.py --val_size 0.1

运行成功后你可以看到下图所示:
在这里插入图片描述
至此,完成第三步。

4. 训练模型

在本次实验中我们训练ghostnet,其中训练的代码在main.py中,具体参数解释请看Readme.md,都已经解释得比较详细了。那么这里我们直接上命令并附带一些解释:

python main.py --model_name ghostnet --pretrained --config config/config.py --save_path runs/ghostnet_flower --lr 1e-4 --warmup --amp --imagenet_meanstd  --Augment AutoAugment 

运行后,你可以看到以下信息:
在这里插入图片描述
其中会输出所有参数的设置信息,可以通过这个表格观看你的参数设置是否有误。我们也可以看到其在下载预训练权重到本地路径,有些看官的网络不好的话,其可能会卡在这里不动,那我们可以手动复制这个链接:

https://github.com/z1069614715/pretrained-weights/releases/download/ghostnet_1x_v1.0/ghostnet_1x-f97d70db.pth

到迅雷或者浏览器上进行下载到:

C:\Users\Admin/.cache\torch\hub\checkpoints\ghostnet_1x-f97d70db.pth

上述的下载链接和路径在各位看官的输出信息中都可以找到。
然后就会开始训练:
在这里插入图片描述
我们可以看到显示了你选择的模型是ghostnet,也显示了这个模型的flops和参数量,然后就开始训练,并显示训练的进度条和每个epoch的log信息。然后我们就可以等待训练结束。
在这里插入图片描述
我们从图中可以看到其训练到83个epoch就停止,是因为代码中有一个–patience参数,默认值为30,也就是经过30个epoch没有提升,模型就会认为已经收敛,就停止训练。训练完成后我们可以打开刚设定好的–save_path路径:
在这里插入图片描述
其中我们可以看到以下的可视化:

  1. 曲线迭代图
    在这里插入图片描述
  2. 学习率曲线变化图
    在这里插入图片描述
  3. 训练过程中的图像可视化
    在这里插入图片描述
    在这里插入图片描述

这里就只展示两张图,默认是生成五张。
当然你对上述曲线可视化不满意,可以自行读取–save_path中的train.log文件进行自定义可视化。这个文件相当于记录了曲线上的值,方便后期各位美工图像等等…
在这里插入图片描述

我们还看到有一个best.pt和last.pt,后续的测试和预测的步骤,都会读取best.pt作为我们的模型进行测试和预测,其余文件有兴趣可以看看Readme.md中的Some explanation的第八点。
至此,完成第四步

5. 测试

我们在第四步中使用了训练集进行训练,验证集测试,那么剩下测试集就是用训练好的模型进行检测,那么这里我演示如何使用我们的metrice.py进行检测。

python metrice.py --task test --save_path runs/ghostnet_flower

–task 就是任务的意思 其支持train、val、test、fps。这里我们演示的是test,就是使用测试集进行测试计算指标。运行后的截图如下:
在这里插入图片描述
我们可以看到其会显示你当前的模型类型,显示你这个模型训练过程最好精度的指标,然后下面就是显示精度,类别平均精度,以及每个类别的preciesion、recall、f1-score、Kappa、accuracy.
你还可以在–save_path中的test文件夹中找到混淆矩阵,其中csv文件就是数据的存储,如果有作图、美工的需求,可以自行读取。
在这里插入图片描述
在这里插入图片描述
当然我们的测试过程是支持tta(详情可看Readme.md文件中的第10点)的,只需要额外加一个参数即可

python metrice.py --task test --save_path runs/ghostnet_flower --test_tta

在这里插入图片描述
我们可以看到使用tta可以增加精度,但是会增加一点时间。
我们的metrice.py中还支持可视化数据集的识别情况和tsne可视化,也是只需要添加两个参数即可。

python metrice.py --task test --save_path runs/ghostnet_flower --visual --tsne

当然这个过程也支持test_tta,但是为了节省时间就不加了。运行结束后,我们可以在–save_path路径中找到对应的数据文件:
在这里插入图片描述
在这里插入图片描述
其中tsne的坐标信息也保存到tsne.csv中,方便后期美工。
还有生成了correct.csv,incorrect.csv这两个csv文件,其中里面记录了文件路径,预测的类别,正确的类别,预测的类别对应的概率,以方便后期进行错误预测的分析。
至此,完成第五步。

6. 预测

预测的代码文件是predict.py,其支持输入单张图片或者一个文件夹,那么这里我们就展示一个文件夹的预测。
假如我们把测试集中其中一类的文件进行预测,我们可以运行以下命令:

python predict.py --source dataset/test/00 --save_path runs/ghostnet_flower

当然此过程也是支持test_tta,也是只需要在后面添加参数即可。
这是运行成功的截图:
在这里插入图片描述
我们可以打开–save_path的predict文件夹:
在这里插入图片描述
我们随便打开一张图像:
在这里插入图片描述
我们可以看到图像的预测类别和对应预测类别的概率。
你以为结束了吗?并没有,我们的predict.py文件结合pytorch_grad_cam库实现了热力图可视化,并支持多种热力图计算方法详情请看–cam_type参数和Some explanation第十二点,也是只需要加一个参数:

python predict.py --source dataset/test/00 --save_path runs/ghostnet_flower --cam_visual --cam_type GradCAMPlusPlus

运行成功后依然在–save_path的predict文件夹中可以找到对应保存的图像,这里我们也是随便打开一张图像:
在这里插入图片描述
我们可以看到在图像中添加了这个热力图可视化。
你们在文件夹中还可以找到一个result.csv文件,其记录了文件的路径,预测的类别,预测的类别对应的概率信息。
至此,完成第六步。

总结

整个程序的功能演示就到此结束,当然程序的功能不仅仅于此,具体可以看Readme.md中的具体解释,其还支持知识蒸馏,有兴趣的可以看一下代码中的Knowledge_Distillation.md,使用起来也是比较简单的,但是知识蒸馏的参数设置比较吃经验,需要使用者自行尝试。
如果遇到bug等等问题可以留言或者私信作者。
本次实验的代码数据模型全部文件:百度云链接

最后致敬bubbliiing的开源精神!

如果内容对你有帮助,麻烦点个赞,谢谢!

有计算机视觉合作项目可以私信作者!


http://www.ppmy.cn/news/563072.html

相关文章

花朵分类(一)

本次教程的目的是带领大家学会基本的花朵图像分类 首先我们来介绍下数据集,该数据集有5种花,一共有3670张图片,分别是daisy、dandelion、roses、sunflowers、tulips,数据存放结构如下所示 我们可以展示下roses的几张图片 接下来我…

vue中js实现点击复制文本到剪贴板-三种方案

vue中js实现点击复制文本到剪贴板-三种方案 因为在网上找了一些很杂乱 不适用 所以自己写一篇记录分享一下 vue中js实现点击复制文本到剪贴板-三种方案 效果: 方案一:使用原生API(clipboard) 首先,我们需要安装clip…

深入浅出WPF之剖析最简单的XAML代码

<Window x:Class="WpfApp3.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml

【无标题】基于c++的五子棋游戏

链接&#xff1a;https://pan.baidu.com/s/1rpfcUtbL2e0JtZZNnWNPUQ 提取码&#xff1a;kizo --来自百度网盘超级会员V1的分享 在vs上写的简陋的五子棋小游戏&#xff0c;欢迎大家玩玩

【C语言】 五子棋 棋盘的绘制

目录 源码分享 效果展示 源码分享 #include<stdio.h>void test3() //打印棋盘 {int i,j;int row9,col9;for(i1;i<row;i) //循环9次 行{if(i1) //第一行{printf("┌ "); //第一列//第一行顶部 ┬for(j1;j<col-2;j){printf("┬ "…

C++项目1——五子棋游戏

参考视频 【C/C】大一学年设计&#xff1a;五子棋(含GUI/网络/算法)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1V54y1D7pD?spm_id_from333.1007.top_right_bar_window_custom_collection.content.click 目录 一、控制台版本 1.1 代码 1.2 实现效果 二、存储功…

【软考网络管理员】2023年软考网管初级常见知识考点(4)-局域网基本概念

涉及知识点 局域网特点&#xff0c;局域网体系结构&#xff0c;局域网拓扑结构&#xff0c;局域网传输介质&#xff0c;软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 文章目录 涉及知识点前言一、局域网的特点二、局域网体系…

javafx逻辑实现五子棋基本功能(悔棋,重新开始,保存棋谱,复盘,人人对战,单机模式

javafx逻辑实现五子棋基本功能&#xff08;悔棋&#xff0c;重新开始&#xff0c;保存棋谱&#xff0c;复盘&#xff0c;人人对战&#xff0c;单机模式&#xff09; 做这个项目&#xff0c;本身目的仅仅是想应用学过的知识做个小项目&#xff0c;想知道它们在实际开发中应该如…