ViT图像分类-中文-日常物品AIGC辅助生成数据增强与模型微调指南想训练一个能准确识别日常物品的AI模型却发现手头的图片数据要么太少要么太单一比如你想让模型认识“水杯”但你的数据集里只有三五个不同角度的马克杯照片。模型学到的“水杯”概念可能非常狭隘换个保温杯或者玻璃杯它就认不出来了。这就是传统图像分类项目常遇到的“数据荒”难题。收集和标注海量、多样化的图片成本高、周期长。但现在有了AIGC人工智能生成内容技术我们可以用生成式AI来创造“不存在”的训练图片极大地丰富数据集。本文将手把手带你利用“ViT图像分类-中文-日常物品”这个强大的预训练模型作为基础结合AIGC工具进行数据增强并完成模型的微调打造一个更强大、更鲁棒的日常物品分类器。整个过程就像给一位经验丰富的专家预训练模型进行专项强化培训让他对新任务你的特定物品分类更加得心应手。1. 环境准备与模型初体验在开始我们的数据增强和微调之旅前首先需要把基础环境搭建好并体验一下原始模型的能力这样才能知道我们后续要改进什么。1.1 一键部署与快速验证我们使用的是基于阿里开源视觉识别技术构建的“ViT图像分类-中文-日常物品”镜像。部署过程非常简单即便是没有深厚深度学习背景的朋友也能轻松上手。部署步骤部署镜像在你的云服务器或本地支持的环境如配备了NVIDIA 4090D等显卡的机器上拉取并运行该镜像。进入工作环境镜像启动后通过浏览器访问其提供的Jupyter Lab或Jupyter Notebook服务入口。准备目录在Jupyter中打开一个终端或者直接新建一个Notebook首先切换到工作目录cd /root首次推理运行提供的示例推理脚本看看模型原本的效果python /root/推理.py这个脚本默认会对/root目录下的brid.jpg一张鸟的图片进行预测。你会看到终端输出类似下面的结果预测结果鸟 (置信度0.95)这表明模型已经成功运行并且能对常见物品进行识别。测试自己的图片想试试其他图片很简单。把你自己的图片比如my_cup.jpg上传到/root目录然后只需要将推理.py脚本中对应的图片路径从brid.jpg改为my_cup.jpg并再次运行即可。或者更直接一点把你的图片重命名为brid.jpg覆盖原文件再运行脚本。这一步的目的确保基础模型工作正常并让你直观感受模型在“原始状态”下的识别能力。你可能会发现对于一些不常见角度、特殊背景或训练集中没有的变体模型的置信度不高或干脆识别错误——这正是我们需要用AIGC和数据微调来解决的问题。1.2 理解我们的基础模型Vision Transformer (ViT)简单了解一下我们手中的“利器”是什么能让你后续的操作更有方向性。传统的图像分类模型如CNN是逐层、局部地理解图片。而Vision Transformer (ViT) 则采用了完全不同的思路。它把一张图片分割成一个个固定大小的图像块比如16x16像素然后将这些图像块线性展平就像处理句子中的单词一样。接着为这些“视觉单词”加上位置信息一并送入标准的Transformer编码器中进行处理。这种架构让ViT能够更好地捕捉图像中不同区域之间的全局依赖关系。我们使用的这个“中文-日常物品”版本已经在海量的中文互联网图像数据上进行了预训练学会了识别成百上千种日常物品的通用特征是一个非常好的起点。2. AIGC赋能创造“不存在”的训练数据现在进入核心环节。假设我们想提升模型对“水杯”这个类别的识别鲁棒性。我们已有的真实水杯图片可能只有几十张样式单一。这时AIGC图像生成工具例如Stable Diffusion、DALL-E 3等就能大显身手。2.1 设计数据增强策略我们不能胡乱生成图片必须有策略地针对模型可能脆弱的环节进行加强。主要从以下几个维度思考视角与姿态生成同一类物品的俯视图、仰视图、侧视图、特写视图。外观多样性生成不同材质玻璃、陶瓷、不锈钢、塑料、不同颜色、不同形状马克杯、高脚杯、保温杯、带把手的、不带把手的的物品。背景与环境将物品置于复杂多样的背景中如办公桌、厨房、户外、书架甚至抽象背景让模型学会聚焦物体本身而非背景。遮挡与光照生成部分被遮挡如被书本挡住一半的图片以及不同光照条件强光、背光、昏暗下的图片。风格化生成卡通渲染、素描风格、水彩风格等非真实感图片增强模型对物体本质结构的理解。2.2 使用提示词工程生成图片以使用Stable Diffusion为例我们需要编写精准的提示词。这里有一些针对“水杯”的示例基础描述一个干净的白色陶瓷马克杯放在木纹桌面上自然光摄影风格高清8k增加多样性与难度一个装满咖啡的玻璃杯背景是模糊的咖啡馆环境杯壁有冷凝水珠俯视角度写实摄影 一个红色的塑料运动水杯带有吸管放在健身房的地板上侧视图 一个设计简约的不锈钢保温杯部分被一张报纸遮挡放在公园长椅上午后阳光 一个卡通风格的蓝色水杯带着笑脸图案孤立在白色背景上3D渲染 一个古老的、有缺口的陶土杯放在户外的石头上阴天环境历史感关键技巧正向提示词明确主体、材质、颜色、场景、视角、光照、风格、画质。反向提示词使用ugly, blurry, distorted, deformed, extra limbs, bad anatomy等来避免生成低质量或畸变的图像。批量生成利用脚本或工具批量运行不同提示词一次性生成数十上百张图片。质量控制生成后必须进行人工或半自动的筛选剔除明显不符合要求或质量差的图片。2.3 数据整理与标注生成的图片需要被整理成模型训练所需的格式。通常我们采用如下目录结构数据集根目录/ ├── train/ │ ├── 水杯/ │ │ ├── gen_cup_001.jpg │ │ ├── gen_cup_002.jpg │ │ └── ... │ ├── 键盘/ │ └── ... └── val/ ├── 水杯/ ├── 键盘/ └── ...train/和val/分别代表训练集和验证集。每个子文件夹的名字就是类别标签例如“水杯”。这种结构被大多数深度学习框架如PyTorch的ImageFolder直接支持。重要提示验证集最好仍然使用一部分真实拍摄的、高质量的图片以确保评估的是模型在真实场景下的泛化能力而不是对生成图片的“过拟合”。3. 模型微调实战指南有了增强后的数据集我们就可以对预训练的ViT模型进行微调了。微调的本质是让模型已有的强大视觉知识适应我们新的、更具体的分类任务。3.1 准备微调脚本在/root目录下我们可以创建一个新的Python脚本例如finetune.py。下面是一个基于PyTorch和timm库的简化示例框架import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms, models import timm import os # 1. 设置参数 data_dir /path/to/your/数据集根目录 # 替换为你的数据集路径 num_classes 10 # 替换为你的类别数例如水杯键盘手机... batch_size 32 num_epochs 20 learning_rate 1e-4 # 微调时学习率通常设置较小 # 2. 数据预处理与加载 # 定义训练和验证的数据增强/转换 train_transform transforms.Compose([ transforms.RandomResizedCrop(224), # 随机裁剪并缩放到224x224 transforms.RandomHorizontalFlip(), # 随机水平翻转 transforms.ColorJitter(brightness0.2, contrast0.2), # 颜色抖动 transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) # ImageNet标准归一化 ]) val_transform transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) # 加载数据集 train_dataset datasets.ImageFolder(os.path.join(data_dir, train), transformtrain_transform) val_dataset datasets.ImageFolder(os.path.join(data_dir, val), transformval_transform) train_loader DataLoader(train_dataset, batch_sizebatch_size, shuffleTrue, num_workers4) val_loader DataLoader(val_dataset, batch_sizebatch_size, shuffleFalse, num_workers4) # 3. 加载预训练模型 # 这里假设使用 timm 库中的 ViT 模型你需要根据实际镜像中的模型名称调整 model_name vit_base_patch16_224 # 示例模型名请确认 model timm.create_model(model_name, pretrainedTrue, num_classesnum_classes) # 将模型移动到GPU如果可用 device torch.device(cuda if torch.cuda.is_available() else cpu) model model.to(device) # 4. 定义损失函数和优化器 criterion nn.CrossEntropyLoss() # 通常只微调最后的分类头层前面的特征提取层用较小的学习率 optimizer optim.AdamW([ {params: model.head.parameters(), lr: learning_rate}, # 分类头用较高学习率 {params: model.blocks.parameters(), lr: learning_rate * 0.1} # 主干网络用较低学习率 ], weight_decay1e-4) # 5. 训练与验证循环 for epoch in range(num_epochs): model.train() running_loss 0.0 for images, labels in train_loader: images, labels images.to(device), labels.to(device) optimizer.zero_grad() outputs model(images) loss criterion(outputs, labels) loss.backward() optimizer.step() running_loss loss.item() * images.size(0) epoch_loss running_loss / len(train_dataset) # 验证阶段 model.eval() correct 0 total 0 with torch.no_grad(): for images, labels in val_loader: images, labels images.to(device), labels.to(device) outputs model(images) _, predicted torch.max(outputs.data, 1) total labels.size(0) correct (predicted labels).sum().item() val_acc 100 * correct / total print(fEpoch [{epoch1}/{num_epochs}], Loss: {epoch_loss:.4f}, Val Acc: {val_acc:.2f}%) # 6. 保存微调后的模型 torch.save(model.state_dict(), /root/finetuned_vit_model.pth) print(模型已保存至 /root/finetuned_vit_model.pth)注意你需要根据实际镜像中模型的准确名称来修改model_name并调整数据集的路径和类别数。3.2 执行微调与监控修改脚本将上述脚本中的data_dir、num_classes、model_name等参数替换为你的实际值。运行微调在终端中执行cd /root python finetune.py观察输出控制台会打印每个训练周期的损失和验证集准确率。理想情况下损失应逐渐下降准确率应逐渐上升并趋于稳定。应对过拟合如果验证集准确率很早就停止上升甚至下降而训练集准确率继续升高可能是过拟合。可以尝试增加数据增强的强度。在优化器中增加权重衰减 (weight_decay)。使用更小的学习率。减少训练周期 (num_epochs)。在模型中添加Dropout层如果原模型没有。3.3 测试微调后的模型训练完成后我们可以修改最初的推理脚本加载我们微调好的模型权重进行测试。创建一个新的测试脚本test_finetuned.pyimport torch from torchvision import transforms from PIL import Image import timm import sys # 1. 加载微调后的模型 model_name vit_base_patch16_224 # 与训练时一致 num_classes 10 # 与训练时一致 model timm.create_model(model_name, pretrainedFalse, num_classesnum_classes) # 加载我们保存的权重 model.load_state_dict(torch.load(/root/finetuned_vit_model.pth)) model.eval() # 2. 定义与验证集相同的预处理 transform transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) # 3. 加载并预测单张图片 def predict_image(image_path): img Image.open(image_path).convert(RGB) img_tensor transform(img).unsqueeze(0) # 增加批次维度 with torch.no_grad(): outputs model(img_tensor) probabilities torch.nn.functional.softmax(outputs[0], dim0) # 这里需要你的类别索引到名称的映射假设我们有一个列表 class_names [水杯, 键盘, 手机, 书本, 椅子, 台灯, 鼠标, 耳机, 植物, 时钟] # 示例 top_prob, top_class torch.max(probabilities, 0) print(f预测结果{class_names[top_class]} (置信度{top_prob.item():.2f})) # 你也可以打印Top-3的结果 top3_probs, top3_indices torch.topk(probabilities, 3) for i in range(3): print(f {i1}. {class_names[top3_indices[i]]}: {top3_probs[i]:.2f}) # 4. 运行预测 if __name__ __main__: image_path sys.argv[1] if len(sys.argv) 1 else /root/brid.jpg # 默认图片或传入参数 predict_image(image_path)运行这个脚本测试你的新图片观察相比微调前模型对“水杯”及其他类别的识别是否更准确、更鲁棒了。python test_finetuned.py /path/to/your/test_cup.jpg4. 总结与进阶思考通过以上步骤我们完成了一个完整的AIGC辅助数据增强与模型微调的闭环。我们来回顾一下关键点并看看未来还能做些什么。4.1 核心流程回顾启动与验证利用预置镜像快速部署并验证基础ViT模型的能力明确改进起点。数据创造针对目标类别的薄弱环节多样性不足使用AIGC工具如Stable Diffusion生成大量、多样化的训练图片有效突破了真实数据收集的瓶颈。数据整理将生成的图片与原有真实数据按标准格式如ImageFolder组织划分训练集和验证集。模型微调在预训练模型的基础上使用新的混合数据集进行训练。通过冻结部分层、调整学习率等技巧高效地将模型的通用知识迁移到新任务上。评估与应用测试微调后的模型验证其在真实场景和复杂变体上的识别能力是否得到提升。4.2 效果提升与注意事项效果提升你通常会观察到模型对经过AIGC增强的类别其识别准确率、鲁棒性应对不同角度、光照、背景和置信度都有显著提升。特别是对于那些原本数据稀少的类别效果改善尤为明显。注意事项生成质量AIGC生成图片的质量至关重要。低质量或错误的图片会引入噪声误导模型学习。真实性偏差生成图片可能存在某种“风格化”偏差。务必用足够多的真实图片作为验证集确保模型最终服务于真实世界。计算成本生成大量高分辨率图片和微调大型ViT模型都需要可观的算力GPU。伦理与版权确保生成的内容符合伦理规范并注意用于微调的基础模型和生成模型的使用许可。4.3 下一步探索方向掌握了这个基本流程后你可以尝试更多进阶玩法混合增强策略结合AIGC生成数据与传统数据增强旋转、裁剪、色彩抖动等效果更佳。难点样本挖掘用初始模型对一批真实图片进行预测找出那些置信度低或预测错误的“难点样本”针对性地用AIGC生成类似难度的图片进行强化训练。提示词自动化编写程序根据类别名称自动组合生成多种视角、背景、材质的提示词实现数据增强的半自动化流水线。尝试其他模型除了ViT还可以用同样的方法微调Swin Transformer、ConvNeXt等其它先进的视觉模型。部署优化将微调后的模型转化为ONNX、TensorRT等格式优化推理速度并部署到Web服务或移动端应用中。AIGC不仅是一个内容创作工具更是一个强大的“数据引擎”。它让中小型团队甚至个人开发者也能以较低成本构建出高质量、专业级的计算机视觉模型。希望这份指南能为你打开一扇新的大门让你在AI应用开发的道路上走得更远。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
ViT图像分类-中文-日常物品AIGC辅助:生成数据增强与模型微调指南
ViT图像分类-中文-日常物品AIGC辅助生成数据增强与模型微调指南想训练一个能准确识别日常物品的AI模型却发现手头的图片数据要么太少要么太单一比如你想让模型认识“水杯”但你的数据集里只有三五个不同角度的马克杯照片。模型学到的“水杯”概念可能非常狭隘换个保温杯或者玻璃杯它就认不出来了。这就是传统图像分类项目常遇到的“数据荒”难题。收集和标注海量、多样化的图片成本高、周期长。但现在有了AIGC人工智能生成内容技术我们可以用生成式AI来创造“不存在”的训练图片极大地丰富数据集。本文将手把手带你利用“ViT图像分类-中文-日常物品”这个强大的预训练模型作为基础结合AIGC工具进行数据增强并完成模型的微调打造一个更强大、更鲁棒的日常物品分类器。整个过程就像给一位经验丰富的专家预训练模型进行专项强化培训让他对新任务你的特定物品分类更加得心应手。1. 环境准备与模型初体验在开始我们的数据增强和微调之旅前首先需要把基础环境搭建好并体验一下原始模型的能力这样才能知道我们后续要改进什么。1.1 一键部署与快速验证我们使用的是基于阿里开源视觉识别技术构建的“ViT图像分类-中文-日常物品”镜像。部署过程非常简单即便是没有深厚深度学习背景的朋友也能轻松上手。部署步骤部署镜像在你的云服务器或本地支持的环境如配备了NVIDIA 4090D等显卡的机器上拉取并运行该镜像。进入工作环境镜像启动后通过浏览器访问其提供的Jupyter Lab或Jupyter Notebook服务入口。准备目录在Jupyter中打开一个终端或者直接新建一个Notebook首先切换到工作目录cd /root首次推理运行提供的示例推理脚本看看模型原本的效果python /root/推理.py这个脚本默认会对/root目录下的brid.jpg一张鸟的图片进行预测。你会看到终端输出类似下面的结果预测结果鸟 (置信度0.95)这表明模型已经成功运行并且能对常见物品进行识别。测试自己的图片想试试其他图片很简单。把你自己的图片比如my_cup.jpg上传到/root目录然后只需要将推理.py脚本中对应的图片路径从brid.jpg改为my_cup.jpg并再次运行即可。或者更直接一点把你的图片重命名为brid.jpg覆盖原文件再运行脚本。这一步的目的确保基础模型工作正常并让你直观感受模型在“原始状态”下的识别能力。你可能会发现对于一些不常见角度、特殊背景或训练集中没有的变体模型的置信度不高或干脆识别错误——这正是我们需要用AIGC和数据微调来解决的问题。1.2 理解我们的基础模型Vision Transformer (ViT)简单了解一下我们手中的“利器”是什么能让你后续的操作更有方向性。传统的图像分类模型如CNN是逐层、局部地理解图片。而Vision Transformer (ViT) 则采用了完全不同的思路。它把一张图片分割成一个个固定大小的图像块比如16x16像素然后将这些图像块线性展平就像处理句子中的单词一样。接着为这些“视觉单词”加上位置信息一并送入标准的Transformer编码器中进行处理。这种架构让ViT能够更好地捕捉图像中不同区域之间的全局依赖关系。我们使用的这个“中文-日常物品”版本已经在海量的中文互联网图像数据上进行了预训练学会了识别成百上千种日常物品的通用特征是一个非常好的起点。2. AIGC赋能创造“不存在”的训练数据现在进入核心环节。假设我们想提升模型对“水杯”这个类别的识别鲁棒性。我们已有的真实水杯图片可能只有几十张样式单一。这时AIGC图像生成工具例如Stable Diffusion、DALL-E 3等就能大显身手。2.1 设计数据增强策略我们不能胡乱生成图片必须有策略地针对模型可能脆弱的环节进行加强。主要从以下几个维度思考视角与姿态生成同一类物品的俯视图、仰视图、侧视图、特写视图。外观多样性生成不同材质玻璃、陶瓷、不锈钢、塑料、不同颜色、不同形状马克杯、高脚杯、保温杯、带把手的、不带把手的的物品。背景与环境将物品置于复杂多样的背景中如办公桌、厨房、户外、书架甚至抽象背景让模型学会聚焦物体本身而非背景。遮挡与光照生成部分被遮挡如被书本挡住一半的图片以及不同光照条件强光、背光、昏暗下的图片。风格化生成卡通渲染、素描风格、水彩风格等非真实感图片增强模型对物体本质结构的理解。2.2 使用提示词工程生成图片以使用Stable Diffusion为例我们需要编写精准的提示词。这里有一些针对“水杯”的示例基础描述一个干净的白色陶瓷马克杯放在木纹桌面上自然光摄影风格高清8k增加多样性与难度一个装满咖啡的玻璃杯背景是模糊的咖啡馆环境杯壁有冷凝水珠俯视角度写实摄影 一个红色的塑料运动水杯带有吸管放在健身房的地板上侧视图 一个设计简约的不锈钢保温杯部分被一张报纸遮挡放在公园长椅上午后阳光 一个卡通风格的蓝色水杯带着笑脸图案孤立在白色背景上3D渲染 一个古老的、有缺口的陶土杯放在户外的石头上阴天环境历史感关键技巧正向提示词明确主体、材质、颜色、场景、视角、光照、风格、画质。反向提示词使用ugly, blurry, distorted, deformed, extra limbs, bad anatomy等来避免生成低质量或畸变的图像。批量生成利用脚本或工具批量运行不同提示词一次性生成数十上百张图片。质量控制生成后必须进行人工或半自动的筛选剔除明显不符合要求或质量差的图片。2.3 数据整理与标注生成的图片需要被整理成模型训练所需的格式。通常我们采用如下目录结构数据集根目录/ ├── train/ │ ├── 水杯/ │ │ ├── gen_cup_001.jpg │ │ ├── gen_cup_002.jpg │ │ └── ... │ ├── 键盘/ │ └── ... └── val/ ├── 水杯/ ├── 键盘/ └── ...train/和val/分别代表训练集和验证集。每个子文件夹的名字就是类别标签例如“水杯”。这种结构被大多数深度学习框架如PyTorch的ImageFolder直接支持。重要提示验证集最好仍然使用一部分真实拍摄的、高质量的图片以确保评估的是模型在真实场景下的泛化能力而不是对生成图片的“过拟合”。3. 模型微调实战指南有了增强后的数据集我们就可以对预训练的ViT模型进行微调了。微调的本质是让模型已有的强大视觉知识适应我们新的、更具体的分类任务。3.1 准备微调脚本在/root目录下我们可以创建一个新的Python脚本例如finetune.py。下面是一个基于PyTorch和timm库的简化示例框架import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms, models import timm import os # 1. 设置参数 data_dir /path/to/your/数据集根目录 # 替换为你的数据集路径 num_classes 10 # 替换为你的类别数例如水杯键盘手机... batch_size 32 num_epochs 20 learning_rate 1e-4 # 微调时学习率通常设置较小 # 2. 数据预处理与加载 # 定义训练和验证的数据增强/转换 train_transform transforms.Compose([ transforms.RandomResizedCrop(224), # 随机裁剪并缩放到224x224 transforms.RandomHorizontalFlip(), # 随机水平翻转 transforms.ColorJitter(brightness0.2, contrast0.2), # 颜色抖动 transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) # ImageNet标准归一化 ]) val_transform transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) # 加载数据集 train_dataset datasets.ImageFolder(os.path.join(data_dir, train), transformtrain_transform) val_dataset datasets.ImageFolder(os.path.join(data_dir, val), transformval_transform) train_loader DataLoader(train_dataset, batch_sizebatch_size, shuffleTrue, num_workers4) val_loader DataLoader(val_dataset, batch_sizebatch_size, shuffleFalse, num_workers4) # 3. 加载预训练模型 # 这里假设使用 timm 库中的 ViT 模型你需要根据实际镜像中的模型名称调整 model_name vit_base_patch16_224 # 示例模型名请确认 model timm.create_model(model_name, pretrainedTrue, num_classesnum_classes) # 将模型移动到GPU如果可用 device torch.device(cuda if torch.cuda.is_available() else cpu) model model.to(device) # 4. 定义损失函数和优化器 criterion nn.CrossEntropyLoss() # 通常只微调最后的分类头层前面的特征提取层用较小的学习率 optimizer optim.AdamW([ {params: model.head.parameters(), lr: learning_rate}, # 分类头用较高学习率 {params: model.blocks.parameters(), lr: learning_rate * 0.1} # 主干网络用较低学习率 ], weight_decay1e-4) # 5. 训练与验证循环 for epoch in range(num_epochs): model.train() running_loss 0.0 for images, labels in train_loader: images, labels images.to(device), labels.to(device) optimizer.zero_grad() outputs model(images) loss criterion(outputs, labels) loss.backward() optimizer.step() running_loss loss.item() * images.size(0) epoch_loss running_loss / len(train_dataset) # 验证阶段 model.eval() correct 0 total 0 with torch.no_grad(): for images, labels in val_loader: images, labels images.to(device), labels.to(device) outputs model(images) _, predicted torch.max(outputs.data, 1) total labels.size(0) correct (predicted labels).sum().item() val_acc 100 * correct / total print(fEpoch [{epoch1}/{num_epochs}], Loss: {epoch_loss:.4f}, Val Acc: {val_acc:.2f}%) # 6. 保存微调后的模型 torch.save(model.state_dict(), /root/finetuned_vit_model.pth) print(模型已保存至 /root/finetuned_vit_model.pth)注意你需要根据实际镜像中模型的准确名称来修改model_name并调整数据集的路径和类别数。3.2 执行微调与监控修改脚本将上述脚本中的data_dir、num_classes、model_name等参数替换为你的实际值。运行微调在终端中执行cd /root python finetune.py观察输出控制台会打印每个训练周期的损失和验证集准确率。理想情况下损失应逐渐下降准确率应逐渐上升并趋于稳定。应对过拟合如果验证集准确率很早就停止上升甚至下降而训练集准确率继续升高可能是过拟合。可以尝试增加数据增强的强度。在优化器中增加权重衰减 (weight_decay)。使用更小的学习率。减少训练周期 (num_epochs)。在模型中添加Dropout层如果原模型没有。3.3 测试微调后的模型训练完成后我们可以修改最初的推理脚本加载我们微调好的模型权重进行测试。创建一个新的测试脚本test_finetuned.pyimport torch from torchvision import transforms from PIL import Image import timm import sys # 1. 加载微调后的模型 model_name vit_base_patch16_224 # 与训练时一致 num_classes 10 # 与训练时一致 model timm.create_model(model_name, pretrainedFalse, num_classesnum_classes) # 加载我们保存的权重 model.load_state_dict(torch.load(/root/finetuned_vit_model.pth)) model.eval() # 2. 定义与验证集相同的预处理 transform transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) # 3. 加载并预测单张图片 def predict_image(image_path): img Image.open(image_path).convert(RGB) img_tensor transform(img).unsqueeze(0) # 增加批次维度 with torch.no_grad(): outputs model(img_tensor) probabilities torch.nn.functional.softmax(outputs[0], dim0) # 这里需要你的类别索引到名称的映射假设我们有一个列表 class_names [水杯, 键盘, 手机, 书本, 椅子, 台灯, 鼠标, 耳机, 植物, 时钟] # 示例 top_prob, top_class torch.max(probabilities, 0) print(f预测结果{class_names[top_class]} (置信度{top_prob.item():.2f})) # 你也可以打印Top-3的结果 top3_probs, top3_indices torch.topk(probabilities, 3) for i in range(3): print(f {i1}. {class_names[top3_indices[i]]}: {top3_probs[i]:.2f}) # 4. 运行预测 if __name__ __main__: image_path sys.argv[1] if len(sys.argv) 1 else /root/brid.jpg # 默认图片或传入参数 predict_image(image_path)运行这个脚本测试你的新图片观察相比微调前模型对“水杯”及其他类别的识别是否更准确、更鲁棒了。python test_finetuned.py /path/to/your/test_cup.jpg4. 总结与进阶思考通过以上步骤我们完成了一个完整的AIGC辅助数据增强与模型微调的闭环。我们来回顾一下关键点并看看未来还能做些什么。4.1 核心流程回顾启动与验证利用预置镜像快速部署并验证基础ViT模型的能力明确改进起点。数据创造针对目标类别的薄弱环节多样性不足使用AIGC工具如Stable Diffusion生成大量、多样化的训练图片有效突破了真实数据收集的瓶颈。数据整理将生成的图片与原有真实数据按标准格式如ImageFolder组织划分训练集和验证集。模型微调在预训练模型的基础上使用新的混合数据集进行训练。通过冻结部分层、调整学习率等技巧高效地将模型的通用知识迁移到新任务上。评估与应用测试微调后的模型验证其在真实场景和复杂变体上的识别能力是否得到提升。4.2 效果提升与注意事项效果提升你通常会观察到模型对经过AIGC增强的类别其识别准确率、鲁棒性应对不同角度、光照、背景和置信度都有显著提升。特别是对于那些原本数据稀少的类别效果改善尤为明显。注意事项生成质量AIGC生成图片的质量至关重要。低质量或错误的图片会引入噪声误导模型学习。真实性偏差生成图片可能存在某种“风格化”偏差。务必用足够多的真实图片作为验证集确保模型最终服务于真实世界。计算成本生成大量高分辨率图片和微调大型ViT模型都需要可观的算力GPU。伦理与版权确保生成的内容符合伦理规范并注意用于微调的基础模型和生成模型的使用许可。4.3 下一步探索方向掌握了这个基本流程后你可以尝试更多进阶玩法混合增强策略结合AIGC生成数据与传统数据增强旋转、裁剪、色彩抖动等效果更佳。难点样本挖掘用初始模型对一批真实图片进行预测找出那些置信度低或预测错误的“难点样本”针对性地用AIGC生成类似难度的图片进行强化训练。提示词自动化编写程序根据类别名称自动组合生成多种视角、背景、材质的提示词实现数据增强的半自动化流水线。尝试其他模型除了ViT还可以用同样的方法微调Swin Transformer、ConvNeXt等其它先进的视觉模型。部署优化将微调后的模型转化为ONNX、TensorRT等格式优化推理速度并部署到Web服务或移动端应用中。AIGC不仅是一个内容创作工具更是一个强大的“数据引擎”。它让中小型团队甚至个人开发者也能以较低成本构建出高质量、专业级的计算机视觉模型。希望这份指南能为你打开一扇新的大门让你在AI应用开发的道路上走得更远。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。