基于pytorch实现的 MobileViT 的图像识别(迁移学习)

1、介绍

MobileViT 轻量级的分类识别网络,结合了CNN卷积和Transformer 混合的网络架构

关于更多介绍可以自行百度,本文通过pytorch+python进行实现 

更多基础的图像分类网络,参考:图像分类_听风吹等浪起的博客-CSDN博客

2、相关代码及展示

目录如下:代码下载:基于MobileViT的xxs、xs、s版本实现的30种球类运动迁移学习分类实战【包含数据集+完整代码+训练结果】资源-CSDN文库

mobileViT 官方好像有三种大小:xxs、xs、s,对应不同大小,这里一并实现

2.1 数据集

数据集的放置仍然采用目录的形式,需要自行划分训练集+验证集+测试集

训练集用于网络训练、验证集用于微调训练参数、测试集用于评估网络性能

数据集如下:

这里把路径名称写好了,可以改代码,或者觉得麻烦,直接按照参考命名数据集即可

这里的图像增强就是简单的翻转,如下:

def data_trans(train_mean=[0.485, 0.456, 0.406], train_std=[0.229, 0.224, 0.225]):# 预处理train_transform = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.RandomHorizontalFlip(p=0.5),       # 水平翻转transforms.RandomVerticalFlip(p=0.5),         # 垂直翻转transforms.ToTensor(),transforms.Normalize(train_mean, train_std)])val_transform = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(train_mean, train_std)])return train_transform,val_transform

2.2 训练脚本

训练的超参数如下:脚本为train.py 

冻结权重,是指只训练分类器的部分,否则全部重头训练。

这里选择xxs、xs、s版本后,会自动导入官方的预训练权重,因此冻结参数也可以

不需要指定网络分类的个数,代码会根据数据集自动生成!

    parser = argparse.ArgumentParser(description="image classification")parser.add_argument("--model", default='s', type=str,help='xxs,xs,s')    # 选择版本parser.add_argument("--batch-size", default=8, type=int)parser.add_argument("--epochs", default=5, type=int)parser.add_argument('--lr', default=0.0002, type=float)parser.add_argument('--freeze-layers', type=bool, default=True)          # 是否冻结权重

优化器采用AdamW,损失为多元交叉熵损失

训练过程如下:

这里可视化进度条的描述,是每个batch的正确率和损失,下面打印的是整个数据集的准确率和损失

结果曲线为:

生成结果:

2.3 验证脚本

验证脚本为:val.py 函数

    parser.add_argument("--model", default='s', type=str,help='xxs,xs,s')    # 选择版本parser.add_argument("--pth", default='runs/train/weights/best.pth', type=str,help='best,last')parser.add_argument("--data", default='data/val', type=str,help='data path')

这里自动载入最好的结果进行评估网络,结果如下

2.4 推理脚本

脚本为 infer.py

    parser.add_argument("--model", default='s', type=str,help='xxs,xs,s')    # 选择版本parser.add_argument("--pth", default='runs/train/weights/best.pth', type=str,help='best,last')parser.add_argument("--data", default='test.jpg', type=str,help='image path')

传入单张图片即可进行推理:

 

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

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

相关文章

npm简介与安装方法/管理与依赖管理/脚本命令与自定义

npm简介与安装方法 什么是npm? npm(Node Package Manager)是Node.js的包管理工具和包管理系统,广泛用于JavaScript生态系统中。npm主要有以下几个功能: 包管理器:安装、更新、卸载Node.js包。项目管理工…

DB-GPT 文档切分报错

感谢阅读 配置完知识库,进行切分报错切分完成后,进行问答时后台日志报错 配置完知识库,进行切分报错 报的错如下 document sync error cryptography>3.1 is required for AES algorithm pip install -U cryptography 之后重新运行程序 …

SimpleService 一个简单的Windows Service定时服务

SimpleService 介绍 一个简单的Windows Service定时服务 SimpleService: 一个简单的Windows Service定时服务 使用说明

kimi AI,文生流程图,一句话kimi当场出图

kimi AI善于读长文、搜网页,主打功能包括整理资料、解读文件、辅助编程、文案写作等。 今天我们就让kimi帮我们一键生成流程图,再也不用自己画了: 不看广告看疗效: 告诉kimi使用Mermaid直接生成流程图,kimi直接生成…

AI是如何与快充技术结合的?

针对AI技术在快充领域的运用,我们可以进一步深入探讨AI如何与快充技术结合,提升充电效率和用户体验。以下是一些具体的AI技术在快充领域的应用场景: 一、智能充电算法 学习充电模式:AI算法可以学习用户的充电习惯,比…

容器技术-docker4

一、docker资源限制 在使用 docker 运行容器时,一台主机上可能会运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说…

获取键盘事件的keyCode属性

获取键盘事件的keyCode属性 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在本文中,我们将深入探讨在Java中如何获取键盘事件的keyCode属性。键盘事…

gin 服务端无法使用sse流式nginx配置

我在本地使用 gin 可以流式的将大模型数据传递给前端。但是当我部署到服务器中时,会阻塞一段时间,然后显示一大段文本。 起初我怀疑是gin 没有及时将数据刷到管道中,但是经过测试,还是会阻塞。 c.Writer.(http.Flusher).Flush()最…

(超详细)数据结构——“栈”的深度解析

前言: 在前几章我们介绍了线性表的基本概念,也讲解了包括顺序表,单链表,双向链表等线性表,相信大家已经对线性表比较熟悉了,今天我们要实现线性表的另一种结构——栈。 1.栈的概念 栈:一种特殊…

【Docker】存储数据卷

目录 1、挂载数据卷到容器里 2、查询挂载文件 3、容器与主机之间映射共享卷 4、三个容器之间使用共享卷 5、卷数据的备份与恢复 5.1 备份 5.2 恢复 1、挂载数据卷到容器里 docker run -itd --name test02 -v /data nginx docker exec -it test02 bashls / docker inspe…

如何对C++代码进行性能调优

对C代码进行性能调优是一个涉及多个方面的过程,包括代码优化、数据结构设计、算法选择、内存管理、并行化等多个方面。以下是一些常用的C性能调优技巧: 代码优化: 避免不必要的复制:使用引用或指针传递大型对象或数据结构。常量优…

解决IDEA的Web项目右键无法创建Servlet问题

右键新建没有servlet? 在pom.xml文件中需要导入servlet依赖,很简单的,别担心,就20秒解决 看我操作!!! 1. 找到自动生成的pom.xml文件 只要你创建了maven项目,就会自动生成pom.xml文件&#xf…

ESP32-C3模组上跑通MQTT(7)—— tcp例程(2)

接前一篇文章:ESP32-C3模组上跑通MQTT(6)—— tcp例程(1) 《ESP32-C3 物联网工程开发实战》 一分钟了解MQTT协议 ESP32 MQTT API指南-CSDN博客 ESP-IDF MQTT 示例入门_mqtt outbox-CSDN博客 ESP32用自签CA进行MQTT的TLS双向认证通信_esp32 mqtt ssl-CSDN博客 特此致谢…

qiankun微前端:qiankun+vite+vue3+ts(未完待续..)

目录 什么是微前端 目前现有的微前端 好处 使用 子应用的页面在主应用里显示 什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。 我的理解就是将一个大型的前端应用拆分成多个模块,每个微前端模块可以由…

目标检测的常用算法和框架

一、常见算法 下面介绍几种常见的目标检测算法: Haar特征+级联分类器:该算法使用Haar特征作为特征提取器,并通过级联分类器来检测目标。这种算法运行速度快,在处理实时视频时表现良好,但对于复杂场景的目标检测效果可能不理想。 HOG特征+SVM:该算法使用方向梯度直方图(…

C++ 设计模式之中介者模式

C 设计模式之中介者模式 简介 1、中介者模式(Mediator)是一种行为型设计模式,它用于减少对象之间的直接耦合,使得这些对象可以松散地耦合在一起,并且可以通过一个中介者对象来间接地交互。中介者模式通常用于一组对象…

Linux基础篇——目录结构

基本介绍 Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"/",然后在根目录下再创建其他的目录 在Linux中,有一句经典的话:在Linux世界里,一切皆文件 Linux中根目录下的目录 具体的…

木各力“GERRI”被“GREE”格力无效宣告成功

近日“GERRI”被“GREE”格力无效宣告成功,“GERRI”和“GREE”近似不,如果很近似当初就不会通过初审和下商标注册证,但是如果涉及知名商标和驰名商标,人家就可以异议和无效。 “GERRI”在被无效宣告时,引用了6个相关的…

(笔记)M1使用hombrew安装qemu

homebrew formulae的网址: qemu — Homebrew Formulae​​​​​​ brew install qemu 如果要支持OpenGL,执行下面的命令 brew tap knazarov/qemu-virglbrew install qemu-virgl 报错Error: qemu-virgl: Failed to download resource "qemu-virgl…

232. 用栈实现队列 (Implement Queue using Stacks)

用栈实现队列 (Implement Queue using Stacks) 题目描述 使用两个栈实现一个队列。队列的操作包括 push(x)、pop()、peek() 和 empty()。 示例: MyQueue queue new MyQueue();queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); // 返回…