# Vision Transformer从零重构-基于Pytorch-水稻病虫害数据集预训练
作者: 范昊
author: Hao Fan
本仓库仅供学习交流使用,实现参考 [Vision Transformer](https://arxiv.org/abs/2010.11929) 和 [Pytorch](https://github.com/pytorch/vision) 。
## 简介
- `模型`: 本仓库从MultiHeadAttention开始一步步重构了Vit,相比官方实现更加通俗易懂,并且补充了大量注释;
- `数据集`: 自定义的水稻病虫害多分类数据集,也可以很轻松地替换为自己的多分类数据集,仅需将每个类别的图片放入同一个文件夹,
然后将所有类别的文件夹放入rice_data(可根据自己的数据集名称进行修改)即可;
- `模型训练和模型保存逻辑`: 本仓库实现了基础的模型训练、日志和模型权重保存逻辑;
---
<u> 项目结构介绍 </u>
- `utils.py`: 一些工具函数等,当前包含一个设置日志器的函数;
- `callbacks.py`: 用于记录训练日志的类定义;
- `dataset.py`: 数据集加载定义,内部定义了DataSet类,只需传入多分类数据集文件路径和数据划分即可使用(具体类名可按自己需求进行更改);
- `train.py`: 训练脚本,仅需修改配置文件路径即可运行并开始训练模型;
- `test.py`: 测试脚本,测试模型在测试集上性能;
- `predict.py`: 预测脚本,可以选择单张图像进行预测;
- `📁 nets`: 存放模型网络结构:
- `vit.py`: 本仓库实现的Vision Transformer,从ScaledProduct到MultiHeadAttention再到Encoder一步步重构;
- `📁 model`: 模型配置定义、训练日志以及保存权重等(如有需要可以自己新建新模型的配置文件):
- `📁 vit_base_16`: 重构vit-base-16模型的配置文件:
- `📁 logs`: 训练日志文件:
- `📁 loss_and_acc_{time}`: {time}时刻开始训练的日志,包含accuracy和loss等的记录;
- `📁 weights`: 存放权重文件pth,由于github仓库上传限制,已将在水稻病虫害多分类数据集上预训练的权重上传至 [百度网盘](https://pan.baidu.com/s/1YFkDIgh4RWJphUvqyvBn0g?pwd=1296), 请下载后放入本文件夹;
- `config.yaml`: 模型配置文件,包括模型定义超参和训练超参以及数据集路径等;
- `📁 vit_base_16_pytorch`: pytorch官方实现vit-base-16模型的配置文件
- `📁 logs`: 训练日志文件:
- `📁 loss_and_acc_{time}`: {time}时刻开始训练的日志,包含accuracy和loss等的记录;
- `📁 weights`: 存放权重文件pth,由于github仓库上传限制,已将在水稻病虫害多分类数据集上预训练的权重上传至 [百度网盘](https://pan.baidu.com/s/1YFkDIgh4RWJphUvqyvBn0g?pwd=1296), 请下载后放入本文件夹;
- `config.yaml`: 模型配置文件,包括模型定义超参和训练超参以及数据集路径等;
- `📁 rice_data`: 水稻病虫害数据集,包含各个类别的文件夹以及映射json(之后可以替换为自己的多分类数据集):
- `label2name.json`: 类别索引标签和类别名的对应json字典;
- `...📁 类别名`: 每个类别的图片,由于数据集版权问题,这里只能上传少部分图片以供模型测试;
## Usage
### 模型
主要用法是使用`VisionTransformer`模块([vit.py](nets/vit.py)),实例化完成后,仅需传入shape为`[B, C, H, W]`的图像数据即可,可用以下代码进行测试:
```python
import torch
from nets.vit import VisionTransformer
data = torch.randn(8, 3, 224, 224)
model = VisionTransformer(
image_size=224,
patch_size=16,
embedding_dim=768,
num_classes=10,
num_heads=8,
num_layers=6)
print(model(data).shape)
```
对于模型配置部分,如需自定义模型超参进行训练,可以通过在`📁 model`中新建模型文件夹,并按照 <u>项目结构介绍</u> 中的文件结构新建`📁 logs`和`📁 weights`文件夹
(`📁 loss_and_acc_{time}`不用新建,会自动生成),然后再按照`config.yaml`文件中定义的进行配置即可([config.yaml](model/vit_base_16_mlp768_head8/config.yaml))。
### 数据集加载
另外多分类数据集部分主要是使用`MultiClassDataSet`模块([dataset.py](dataset.py)),仅需在实例化的时候传入数据集路径以及数据集切分要求即可,可用以下代码进行测试:
```python
from dataset import MultiClassDataSet
from torch.utils.data import DataLoader
# 数据集加载路径
file_path_test = r'你的数据集加载路径'
batch_size = 8
train_dataset = MultiClassDataSet(file_path=file_path_test,
resize=224,
mode='train')
train_dataloader = DataLoader(dataset=train_dataset,
batch_size=batch_size,
shuffle=True)
# 用DataLoader进行一轮批加载测试
for images, labels in train_dataloader:
print(images.shape)
break
```
### 训练脚本运行
无需多言,修改完`train.py`([train.py](train.py))中的
```python
# 配置文件路径
config_yaml_file_path = r'你的配置文件路径'
```
直接运行即可:
```shell
python train.py
```
### 测试脚本运行
和训练脚本类似,修改完`test.py`([test.py](test.py))中的
```python
# 配置文件路径
config_yaml_file_path = r'你的配置文件路径'
```
直接运行:
```shell
python test.py
```
### 预测脚本运行
修改完`predict.py`([predict.py](predict.py))中的
```python
# 配置文件路径
config_yaml_file_path = r'你的配置文件路径'
```
直接运行:
```shell
python predict.py
```
之后终端输入要测试的图片路径即可(可以直接拿rice_data中的采样数据测试)。
没有合适的资源?快使用搜索试试~ 我知道了~
基于pytorch实现的vision transformer模型,针对水稻病虫害数据集进行训练,也可以用于其他多分类数据集

共47个文件
jpg:13个
txt:12个
py:7个

1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉

温馨提示
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
资源推荐
资源详情
资源评论



























收起资源包目录










































































共 47 条
- 1
资源评论

- bassloser2025-01-07非常有用的资源,有一定的参考价值,受益匪浅,值得下载。

生瓜蛋子
- 粉丝: 3984
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 计算机在现代测绘技术的应用.docx
- 互联网科技IT产品宣传介绍PPT模板ppt模板.pptx
- 分解因式与互联网搜索教案设计方案.doc
- 项目管理培训及应用感受分析.docx
- office计算机二级办公软件考试-office高级应用技术元文档.doc
- 人大金仓KingbaseES企业数据库中的两种垂直分区技术详解.doc
- GIS实用技术的洪水淹没模拟及灾害评估.doc
- 新型网络技术对教师继续教育培训行业的影响.docx
- 滨海新区智慧城市建设与发展研究.doc
- 机械设计制造及其自动化专业人才培养研究与实践.docx
- 学生宿舍管理系统数据库课程研究设计doc.doc
- 论计算机网络安全与防火墙技术.docx
- 基于网络的土工虚拟仿真试验室开发.docx
- 深度学习下小学语文习作单元活动设计与思考.docx
- 运用信息化手段进行科学课导入的方法例谈.docx
- hplc体内药物分析实用技术.ppt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
