图像识别完整项目之Swin-Transformer,从获取关键词数据集到训练的完整过程

0. 前言

图像分类的大部分经典神经网络已经全部介绍完,并且已经作了测试

代码已经全部上传到资源,根据文章名或者关键词搜索即可

LeNet :pytorch 搭建 LeNet 网络对 CIFAR-10 图片分类

AlexNet : pytorch 搭建AlexNet 对花进行分类

Vgg : pytorch 搭建 VGG 网络

GoogLeNet : pytorch 搭建GoogLeNet

ResNet : ResNet 训练CIFAR10数据集,并做图片分类


关于轻量级网络

MobileNet 系列:

  • V1 :MobileNet V1 图像分类
  • V2 :MobileNet V2 图像分类
  • V3 :MobileNet V3 图像分类

ShuffleNet 系列:

  • V1 : ShuffleNet V1 对花数据集训练
  • V2 : ShuffleNet V2 迁移学习对花数据集训练

EfficientNet 系列:

  • V1 :EfficientNet 分类花数据集
  • V2 :EfficientNet V2 

Swin-Transformer :Swin-Transformer 在图像识别中的应用


本章将根据 Swin-Transformer 网络对图像分类ending,包括如何获取数据集,训练网络、预测图像等等。

本文从头实现对Marvel superhero 进行分类记录,项目下载在后面

代码尽量简单,小白均可运行,不需要定义复杂的变量

网络精度高,采用迁移学习

1. 项目目录

文件目录如下所示:

注:项目的文件夹和代码不可更改,要不然会报错,至于超参数的更改下面会介绍!!

inference 是预测的文件夹,将预测的图像放在该文件夹下,可以实现批预测

my_dataset_from_net 爬虫脚本,可以自动从网络上下载图片

run_results  网络训练之后生成的信息,包括类别json文件、loss和accuracy精度曲线、学习率衰减曲线、训练过程日志、已经训练集和测试集的混淆矩阵

weights 下面存放的是Swin-Transformer 的预训练权重

py 文件:

  • model Swin-Transformer 网络
  • predict 预测脚本
  • process_data 根据爬虫下载的图片,自动划分训练集和测试,并且提出损坏图像
  • train 训练部分
  • utils 工具函数

详细的可以参考README 文件

2. 获取数据集

当然最开始要配置好环境和requirements.txt 文件

获取数据集在 my_dataset_from_net 文件下,运行文件下的main.py 可以得到:

脚本会自动在该文件下生成download_images文件目录,然后会根据关键词生成子文件夹

批下载的话,可以新建txt文件,按照这样操作就行:

按照下面操作:

选中baidu API ,load file就是刚刚新建的txt文件

Max number per keywords 就是每个关键词下载的图像个数,Threads 最好设定小一点,否则可能会漏下载

下载过程如下:

下载完成如下:

3. 对下载的图像处理、划分训练集和测试集

代码是 process_data.py 文件,因为代码用中文可能报错,这里要将文件夹改成英文

该脚本会自动删除那些 PIL 打不开的文件

代码会自动将每个子文件夹下按照 0.2比例划分测试集 

运行 process_data.py 结果如下:

代码会在主目录下生成数据

4. 开始训练

训练代码是 train.py 文件

4.1 超参数设定

超参数如下:

关于--freeze-layers,设定为True,只会训练MLP权重。False会训练全部网络

    parser = argparse.ArgumentParser()
    parser.add_argument('--epochs', type=int, default=100)
    parser.add_argument('--batch-size', type=int, default=32)
    parser.add_argument('--lr', type=float, default=0.0001)
    parser.add_argument('--lrf', type=float, default=0.1)
    parser.add_argument('--freeze-layers', type=bool, default=False)     # 是否冻结权重

至于分类的个数啊、对应标签json文件等等,这里使用 datasets.ImageFolder,代码会自动生成,不需要设定!!

只需要更改上面超参数就行!!

4.2 训练过程

将train这部分代码放开,可以查看网络训练图像信息

如下:

训练过程:

代码会自动计算分类的类别个数

训练结果:

4.3 生成的训练日志

生成的结果全部保存在run_results目录下:

json 文件:

loss-accuracy-curve:

学习率衰减曲线:

训练集和测试集的混淆矩阵:

训练日志:

5. 预测脚本

预测脚本在 inference 中,predict.py 会预测该目录下所有图片

不需要任何更改!!

运行 predict.py结果如下:

结果展示:

6. 项目的一些问题和下载

完整项目下载:图像识别完整项目之Swin-Transformer,从获取关键词数据集到训练的完整过程

爬虫下载图片的时候,下载的数目往往和设定的不一致,这个只需要将数目调大就行。事实上,本项目每个类别仅有200多张图片仍能有不错的表现

爬虫下载的图片有时候会出现不能打开的错误,但是在process_data脚本处理的时候,是没有报错的。

训练过程也没有出现错误,可能是process_data脚本的问题

如果不放心,可以手动删除,

预测的时候,因为预处理train mean和train std的原因,会计算的很慢,如果将项目部署的话,可以手动设定

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

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

相关文章

SpringBoot上传图片文件到七牛云

准备工作 maven pom.xml添加七牛云的sdk依赖 <dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.2.27</version></dependency>配置项 七牛云上传必要的配置有&#xff1a;acces…

四舍五入浮点数

1.题目如下&#xff1a; 2.方法一&#xff1a; 直接取出小数部分第一位来判断。 1. 先乘以10。 2. 强制类型转换为整型&#xff0c;去掉小数部分。 3. 再模10&#xff0c;相当于取出原数的小数第一位。 代码实现&#xff1a; int way1(double n) {int a (int)(n * 10);int b…

C++初学者使用Dev-C++5.11必备的小技巧

一、安装的软件是英文怎么办?陈老师来帮你解决! 步骤1:打开软件,不用我交了吧,看见一个单词长的像 Tools,看见了吧 步骤2:对,找到那个红色框子框起来的单词,最长的那个 步骤3:对,继续选择红色框子里的简体中文/Chinese,不是下面那个,注意,不要选错哟 步骤4:点击…

【️Java和C++主要的区别有哪些?各有哪些优缺点?】

✅Java和C主要的区别有哪些&#xff1f;各有哪些优缺点&#xff1f; ✅Java和C分别代表两种类型的语言✅ C是编译型语言✅ Java是解释型语言✅ 两者更多的主要区别如下&#xff1a; ✅知识拓展✅Java与C的参数方法有什么区别&#xff1f; ✅Java和C分别代表两种类型的语言 Java…

LeetCode day24

LeetCode day24 今天主打一个快乐happy(▽ʃ♡ƪ)&#xff0c;主要是今天写哈夫曼树被经典文件读取坑麻了&#xff08;为啥绝对路径能读取&#xff0c;相对不行。罢了&#xff09; 一个中等题&#xff0c;但是咋感觉很小学捏。。。 2177. 找到和为给定整数的三个连续整数 相…

消息队列有哪些应用场景?

分布式系统不同模块之间的通信&#xff0c;除了远程服务调用以外&#xff0c;消息中间件是另外一个重要的手段&#xff0c;在各种互联网系统设计中&#xff0c;消息队列有着广泛的应用。从本文开始&#xff0c;专栏进入分布式消息的模块&#xff0c;将讨论消息队列使用中的高频…

C++入门篇

呀哈喽&#xff0c;我是结衣。 了解完C的发展历程&#xff0c;我们当然也要会用C啊。今天这篇博客就是来帮助我们来入门C的&#xff0c;当然要入门C当然也要先学会C语言啦。在我学习C的过程中我会一直把C博客更新下去的。 C关键字 我们都知道C语言是有32个关键字的&#xff0…

Linux之进程(四)(进程地址空间)

目录 一、程序地址空间 二、进程地址空间 1、概念 2、写时拷贝 3、为什么要有进程地址空间 四、总结 一、程序地址空间 我们先来看看下面这张图。这张图是我们在学习语言时就见到过的内存区域划分图。 下面我们在Linux下看一看内存区域是不是也是这么划分的。 可见在Li…

EIS(防抖):meshflow算法

视频防抖的应用 对视频防抖的需求在许多领域都有。 这在消费者和专业摄像中是极其重要的。因此&#xff0c;存在许多不同的机械、光学和算法解决方案。即使在静态图像拍摄中&#xff0c;防抖技术也可以帮助拍摄长时间曝光的手持照片。 在内窥镜和结肠镜等医疗诊断应用中&…

Linux下C++程序瘦身

目录 一.前言二.如何瘦身三.如何读取调试信息文件四.其他 一.前言 我们知道&#xff0c;C程序如果带着调试信息的话会比较大&#xff0c;所以一般发布版本都会去掉调试信息&#xff0c;但是我们又希望如果程序崩溃了可以使用core转储文件进行调试&#xff0c;如果不带调试信息…

[已解决】uniapp内置插件,editor富文本报错(附quill.min.js、image-resize.min.js文件)

在使用uni-app运行内置插件editor时&#xff0c;无法输入内容&#xff0c;控制台报错 原因&#xff1a;查看官网得知&#xff0c;需动态引入quill.min.js、image-resize.min.js文件 解决方法&#xff1a; 1.下载quill.min.js、image-resize.min.js到项目static/eidtor文件中 链…

有没有手机电脑同步的工作时间管理软件?

越来越多的职场人士感到每天的工作任务是比较多的&#xff0c;而工作时间又是有限的&#xff0c;所以经常时间不够用。因此&#xff0c;对于上班族来说&#xff0c;高效的时间管理是提高工作效率、按时完成任务的关键。为了满足这一需求&#xff0c;很多网友都在寻找一款既能在…

Golang. channel的关闭

使用内置函数close可以关闭channel&#xff0c;当channel关闭后&#xff0c;就不能再向channel写数据了&#xff0c;但是仍然可以从channel中读取数据。 一旦将channel关闭了&#xff0c;只能读不能写。相当于关闭管道就数据不能进入到队列里面了&#xff0c;只能进行读操作&a…

容器启动不了,折腾了一下午,docker 脚本注意点

1、事件回放 下午的的时候同事说我的项目容器启动不了&#xff0c;一直报错。 项目是一个多模块项目&#xff0c;其他的模块都可以打包成功运行&#xff0c;只有一个特殊的模块怎么都不成功。 在他本地看了一番之后也没发现问题&#xff0c;主要看了Dockerfile 和 start.sh&…

YOLOv8改进:轻量化卷积设计 | DualConv双卷积魔改v8结构

🚀🚀🚀本文改进: DualConv双卷积魔改v8结构,达到轻量化的同时并能够实现小幅涨点 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.DualConv介绍 论文:https://arxiv.org/pdf/2202.07481.pdf 摘要…

我的NPI项目之Android 安全系列 -- EMVCo

最近一直在和支付有关的内容纠缠&#xff0c;原来我负责的产品后面还要过EMVCo的认证。于是&#xff0c;就网上到处找找啥事EMVCo&#xff0c;啥是EMVCo&#xff0c;啥是EMVCo。 于是找到了一个神奇的个人网站&#xff1a;Ganeshji Marwaha 虽然时间有点久远&#xff0c;但是用…

【FPGA/verilog -入门学习11】verilogTestbench中的文本文件写入,读出,打印等操作

本文参考&#xff1a;Verilog中的系统任务&#xff08;显示/打印类&#xff09;--$display&#xff0c; $write&#xff0c;$strobe&#xff0c;$monitor-CSDN博客 Verilog&#xff1a;parameter、localparam的区别和用法-CSDN博客 Verilog的系统任务----$fopen、$fclose和$fd…

【计算机组成与体系结构Ⅱ】多处理器部分讨论题目

多处理机课堂讨论 1.并行计算体系结构有哪些? SIMD、MIMD 2.多处理机的存储结构有哪些? 对称式共享存储器结构、分布式共享存储结构 3.什么是多处理机的一致性? 如果对某个数据项的任何读操作均可得到其最新写入的值&#xff0c;则认为这个存储系统是一致的。 4.监听协议的工…

vivado 时间约束窗口

时间约束窗口 “时序约束”窗口仅适用于“合成”和“实施”设计。对于详细的设计约束&#xff0c;您必须直接使用和编辑XDC文件。欲了解更多信息&#xff0c;请参见创建合成约束。可以使用以下三个选项之一打开“计时约束”窗口&#xff0c;如图所示如下图所示&#xff1a; •…

ES-组合与聚合

ES组合查询 1 must 满足两个match才会被命中 GET /mergeindex/_search {"query": {"bool": {"must": [{"match": {"name": "liyong"}},{"match_phrase": {"desc": "liyong"}}]}}…