基于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')

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

相关推荐
特立独行的猫A1 小时前
用仓颉语言 cj-tauri 框架,五分钟给娃做了个鸿蒙形近字游戏
java·后端·python
AllData公司负责人3 小时前
AI大模型数据开发底座系列说明书,AllData集成Chat2DB开源项目建设AI 数据库分析底座,涵盖AI 洞察/对话SQL/智能视图!
数据库·人工智能·sql·开源·ai 洞察·对话sql
泯泷4 小时前
让 Agent 分清“马上办、等一等、顺手办”
人工智能·llm·agent
鲜于言悠9055 小时前
Claude Fable 5.2 登场,专治复杂推理与长任务
人工智能
大可不必了5 小时前
03 函数定义和调用
开发语言·python
联犀6 小时前
如何工程化降低语音交互AI设备的延迟(小智ai,芙崽这样的ai设备)
人工智能
杉岩数据6 小时前
杉岩数据董事长陈坚:从数据存储到行业智能——杉岩的AI时代战略布局
人工智能
冬奇Lab6 小时前
Loop 工程到底是高深的新技术,还是炒冷饭?用训练一个识别狗的模型讲明白
人工智能
冬奇Lab6 小时前
一天一个开源项目(第260篇):Plannotator —— 给 AI 编码 Agent 配一块「可批注的审阅台」,计划和代码改动都能在浏览器里逐条批示
人工智能·开源·claude
泯泷6 小时前
语音,正在成为 AI Agent 最自然的接口
人工智能·llm·agent