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

news2024/12/23 9:52:46

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的原因,会计算的很慢,如果将项目部署的话,可以手动设定

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

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

相关文章

为什么Apache Doris适合做大数据的复杂计算,MySQL不适合?

为什么Apache Doris适合做大数据的复杂计算,MySQL不适合? 一、背景说明二、DB架构差异三、数据结构差异四、存储结构差异五、总结 一、背景说明 经常有小伙伴发出这类直击灵魂的疑问: Q:“为什么Apache Doris适合做大数据的复杂计…

相机倾斜棋盘格标定全记录 vs200+opencv安装

论文参考是这个 Geiger A, Moosmann F, Car , et al. Automatic camera and range sensor calibration using a single shot[C]//Robotics and Automation (ICRA), 2012 IEEE International Conference on. IEEE, 2012: 3936-3943. 代码是这个github 花了一上午配好了c环境。。…

Activiti工作流框架学习笔记(一)之通用数据表详细介绍

文/朱季谦 Activiti工作流引擎自带了一套数据库表,这里面有一个需要注意的地方: 低于5.6.4的MySQL版本不支持时间戳或毫秒级的日期。更糟糕的是,某些版本在尝试创建此类列时将引发异常,而其他版本则不会。执行自动创建/升级时&a…

ARM架构简析

全局与局量等知识 断电后,程序以及数据都在FLASH中。 断电后,内存中就没有变量了。 程序在烧在FLASH中的; 程序运行的时候,全局变量的初始值,必然是从FLAASH中的来的: 初始化全局变量的过程:…

HBuilder X将Vue打包APP返回上一页退出问题、清除缓存页面历史防止返回登录页(上一页)、以及状态栏颜色切换

目录 一、返回上一页退出问题 二、清除缓存页面历史防止返回上一页 三、状态栏颜色切换 一、返回上一页退出问题 1.首先重新认识一下vue的页面跳转,这里我只说常用到的两个 goSkip(){//直接跳转this.$router.push(/test);this.$router.replace(/test);//带参数跳…

一键安装下载3ds Max!别墅还是宫殿?3ds Max助你建造梦幻般的艺术建筑

不再浪费时间在网上寻找3ds Max的安装包了!因为你所需要的一切都可以在这里找到!作为一款全球领先的3D设计工具,3ds Max为创作者们带来了前所未有的便利和创作灵感。无论是建筑设计、影视特效还是游戏开发,3ds Max都能帮助你实现想…

后端开发——统一处理异常Spring MVC机制

一、Spring MVC的统一处理异常机制 在Spring MVC中,存在统一处理异常的机制, 具体表现为:无论是哪个处理请求的过程中出现异常,每种类型的异常只需要编写一段处理异常的代码即可! 统一处理异常的核心是定义处理异常的…

软件开发模型学习整理——瀑布模型

一 前言 从参加工作至今也完整的跟随过一整个项目的流程了,从中也接触到了像瀑布模型,迭代模型,快速开发模型等。介于此,基于自己浅薄的知识对瀑布模型进行整理学习以及归纳。 二 瀑布模型简介 2.1 瀑布模型的定义和特点 定义&…

Linux 动态库和静态库

文章目录 前言动态库创建和使用静态库创建和使用动态库和静态库差异生成过程的差异运行效果的差异 补充说明库的名称的注意事项库的搜索路径的方法什么是位置无关代码动态链接与静态链接/usr/lib 和 /usr/local/lib 前言 动静态库的创建和使用部分更多的是意在说明动态库和静态…

软件测试指南

软件测试指南 软件集成测试软件系统测试(功能性测试,性能测试)

dp中最短编辑距离的笔记(分析dp)

dp分析往往就是看最后一步的变化。 分析: 设a串长度为i,b串长度为j。题目要求为通过三种操作将a字符串转化为b字符串的最少次数。 删除操作: 把a[i]删除后a[1~i]和b[1~j]匹配,所以可以得到f[i - 1][j] 1,在此之前要先…

ce从初阶到大牛--grep篇

1、显示/etc/rc.d/rc.sysinit文件中以不区分大小的h开头的行; grep -i "^h" /etc/rc.d/rc.sysinit2、显示/etc/passwd中以sh结尾的行; grep "sh$" /etc/passwd3、显示/etc/fstab中以#开头,且后面跟一个或多个空白字符,…

烦躁的广告弹窗如何在 Edge 上消失?轻松招架 3 种方法

Edge问题解决教程之广告弹窗如何消失? 一、前言:广告弹窗问题二、使用Edge浏览器内置的广告拦截功能三、安装广告拦截浏览器扩展程序四、处理恶意软件和广告弹窗网站五、总结 一、前言:广告弹窗问题 Edge浏览器中出现的广告弹窗问题是由恶意…

Android 动画 Lottie 如何使用

Android 动画 Lottie 如何使用 一、简介 Lottie 是Airbnb开源的一个面向 iOS、Android、React Native 的动画库,能分析 Adobe After Effects 导出的动画,并且能让原生 App 像使用静态素材一样使用这些动画,完美实现动画效果。 二、Lottie动…

openwrt中taiscale自动安装脚本详解

openwrt中taiscale自动安装脚本详解 一、代码仓库地址 https://github.com/adyanth/openwrt-tailscale-enabler 二、代码仓库中脚本文件详解 主要包含三个脚本分别是etc/init.d/tailscale、usr/bin/tailscale、usr/bin/tailscaled ,接下来逐个分析一下脚本中的具…

数字孪生Web3D智慧机房可视化运维云平台建设方案

前言 进入信息化时代,数字经济发展如火如荼,数据中心作为全行业数智化转型的智慧基座,重要性日益凸显。与此同时,随着东数西算工程落地和新型算力网络体系构建,数据中心建设规模和业务总量不断增长,机房管理…

【深度学习目标检测】九、基于yolov5的安全帽识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型,其具有以下几个优势: 1. 高精度:YOLOv5相比于其前身YOLOv4,在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进,如更深的网络结构、更多的特征层和更高分辨率的输入图…

“四十不纵欲,五十不纵情,六十不纵……”这三样东西,影响一生

著名文豪曹植曾在诗作中写道:“清时难屡得,嘉会不可常。天地无终极,人命若朝霞。” 天地之悠悠无穷无尽,而人生之寿命短如晨霜稍纵即逝,几十年时光也不过是弹指一挥间。 纵使曾经怀有豪情万丈,总饱含凌云…

HarmonyOS给应用添加消息通知

给您的应用添加通知 通知介绍 通知旨在让用户以合适的方式及时获得有用的新消息,帮助用户高效地处理任务。应用可以通过通知接口发送通知消息,用户可以通过通知栏查看通知内容,也可以点击通知来打开应用,通知主要有以下使用场景…

MY SQL数据库系统

一、认识MY SQL: MySQL是-个真正的多线程.多用户的SQL 数据库服务.凭借其高性能、高可靠和易于使用的特性.成为服务器领域中最受欢迎的开源数据库系统。在2008年以前,MySQL项目由MySaLAB公司进行开发、发布和支持,之后…