第二讲:LORA模型训练-认识lora模型,精美案例展示

一、Lora模型的诠释和应用(完美邂逅,一眼动情——初识小Lora)

本节课程我们通过简介和图片示例,先来简单的认识了解一下Lora模型。

1、为什么要训练Lora模型

1.1 当前的设备性能无法支持大模型的训练

大模型的训练需要更多的素材、处理和准备工作(几百张至几十万张都有),大模型的内存也更大(一般常见的可以达到2G-7G)。训练时,对于机器的设备性能要求更高,比如使用Dreambooth去训练大模型,那么你的显卡显存至少要12G以上,这对于设备性能一般的同学,有些过于奢侈了。

而Lora模型,只需要少量的素材集和一般的设备性能即可完成训练,而且模型体积相比大模型非常小(一般常见的8M-144M)。而一个好的Lora模型效果并不会输给某些大模型。

1.2 当前存有的大模型无法满足需求

现在市面上有很多已经训练好的大模型,涉及到很广的范围,比如人物、动物、植物,游戏场景、建筑、空间、二次元、画风等等。但是,根据自身实际需求,这些可能依然不能满足你对某个或者某些需求的定制。那么这时候,你就可以通过定制训练Lora模型来满足自己的需求。

2、Lora模型是什么?

Lora模型全称:Low-Rank Adaptation of Large Language Models(不用管,不用记),它可以作为Stable Diffusion软件的一个插件模型进行调用使用,其他常用的模型有CheckPoint、VAE、Embeddings、Hypernetwork等。

常用五大模型特征图:

模型名称模型特点模型擅长模型后缀模型大小
CheckPoint主模型、素材丰富、体积大、占用内存大人物、画风等safetensors、ckpt等2G、4G、7G(均可修剪为2G,效果无差别)
Lora微调模型、人/物/画风定制、体积小、效率高推荐人物,其次画风,概念safetensors、ckpt、pt等8M-144M
VAE美化模型、色彩美化、体积小色彩调节ckpt、pt等几十kb
Embedding嵌入模型、调试文本理解、反向嵌入、正向嵌入(同Lora)、体积小推荐人物,其次画风pt等几十kb
Hypernetwork超网络模型、细致画风处理及定制、难度高推荐画风,其次人物,相比以上模型很少用pt等小至kb,大至GB

从以上特征图中可以看到,Lora模型包括训练、定制人物(包括真人、二次元)、物品、画风,体积小(占用内存小,一般100M左右)、训练效率高等优点,仅需要少量的数据集即可训练出属于自己的模型。那么,学会了Lora模型的训练,你就可以依葫芦画瓢,调整其他模型对应的参数设置,应用到其他几个模型的训练上面。

Lora模型不仅可以影响整体的绘画效果,还可以对绘画效果及细节进一步的微调。在出图调用过程中,Lora模型需要配合主模型的使用,实现对图片结果的调整优化输出。

我们都知道,在SD中作图时,出图结果是没有下限的,最终的图片可能是杂乱的,崩坏的,不符合我们预期的。那么我们一般是通过调整提示词、提示词的权重、甚至运用ControlNet等插件进行结合使用,优化出图,但是最终的图片效果可能依然达不到我们的预期。那么这时候,我们就可以运用Lora模型的调用,来进一步优化我们的图片。这也是为什么它可以作为一种微调模型使用。即在主模型固定的基础上,对人(包括五官、服饰、姿态等)、物品(特征细节、角度等)、画风(艺术风格、技法等)等细节进一步的微调,来达到自己理想中的出图状态和效果。

2、调用Lora模型的应用案例

我们可以通过下面一些图片的示例,看下在同样提示词和参数设置下,没有调用和调用Lora模型后的效果区别。

2.1、人物Lora模型示例:

(调用JC的Lora模型前)

(调用JC的Lora模型后)

(调用Fantasygirls的Lora模型前)

(调用Fantasygirls的Lora模型后)

2.2、画风Lora模型示例:

(调用画风Lora模型前)

(调用画风Lora模型后)

(调用画风Lora模型前)

(调用画风Lora模型后)

通过以上图例我们可以看到,在相同的提示词和参数下,由SD主模型出图的真人效果,无法实现我们对于某个真实存在的人物图像的直接呈现,但是调用了经过训练这个人物的Lora模型之后,就可以完成人物相貌的还原以及特效、场景的二次构造

另外,在没有改善画质等特别提示词和相同的参数下,由SD主模型出图的效果,整体色调会有些偏暗,构图简单、特效简单,但是调用了训练的Lora模型后,图片的整体风格、色彩色调、构图特效、细节优化等有了很大的加强、改善和提升。如果,你会使用PhotoShop等软件,还可以对图片进行二次美化和合成处理,来达到你所需求的最终效果。

下期第三讲预告:LORA模型训练-10分钟掌握模型训练素材图片的要求

视频讲解课程地址:

SD-LORA模型训练及SDXL-lora模型训练基础加进阶教程​huke88.com/course/161695.html?pageType=8&key=lora%E6%A8%A1%E5%9E%8B%E8%AE%AD%E7%BB%83&identify=1704508682&ab=1​编辑icon-default.png?t=N7T8https://huke88.com/course/161695.html

### LORA 微调 VIT 模型 实战教程 #### 准备工作 为了成功地在LORA项目中微调Vision Transformer (ViT) 模型,需先完成一系列准备工作。这包括但不限于获取必要的软件库和支持工具。 确保已安装PyTorch和其他依赖项之后,还需下载并准备好特定于任务的数据集。对于图像分类任务而言,常用数据集如CIFAR-10或ImageNet可作为训练素材[^2]。 ```bash pip install torch torchvision transformers accelerate loralib ``` #### 加载预训练模型 加载预先训练好的ViT模型是实现高效迁移学习的关键一步。这里采用Hugging Face Transformers库来简化这一过程: ```python from transformers import ViTForImageClassification, ViTFeatureExtractor model_name_or_path = "google/vit-base-patch16-224" feature_extractor = ViTFeatureExtractor.from_pretrained(model_name_or_path) model = ViTForImageClassification.from_pretrained(model_name_or_path) ``` #### 应用LoRA适配器 引入Low-Rank Adaptation (LoRA) 技术能够显著减少参数量的同时保持良好的泛化性能。具体做法是在原有网络结构基础上附加小型矩阵以调整部分层的行为而不改变整体架构设计[^4]。 ```python import loralib as lora lora_config = { 'r': 8, 'alpha': 16, } for name, module in model.named_modules(): if isinstance(module, nn.Linear): setattr(model, name, lora.MergedLinear( module.in_features, module.out_features, r=lora_config['r'], lora_alpha=lora_config['alpha'] )) ``` #### 数据处理与增强 准备适合输入给定神经网络形式的数据流线至关重要。利用`torchvision.transforms`模块可以轻松定义一组转换规则应用于原始图片样本上,从而提高最终预测效果的质量。 ```python from torchvision import transforms transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize(mean=[0.5], std=[0.5]) ]) train_dataset = datasets.ImageFolder(root="./data/train", transform=transform) val_dataset = datasets.ImageFolder(root="./data/val", transform=transform) train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False) ``` #### 训练流程设定 构建优化算法实例并与损失函数相结合形成完整的迭代更新机制;同时安排周期性的评估环节以便及时跟踪进展状况。 ```python optimizer = AdamW(model.parameters(), lr=5e-5) criterion = CrossEntropyLoss() device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model.to(device) num_epochs = 3 best_accuracy = 0.0 for epoch in range(num_epochs): train_loss = 0.0 for images, labels in tqdm(train_loader): optimizer.zero_grad() inputs = feature_extractor(images, return_tensors="pt").to(device) outputs = model(**inputs).logits loss = criterion(outputs, labels.to(device)) loss.backward() optimizer.step() train_loss += loss.item() avg_train_loss = train_loss / len(train_loader.dataset) with torch.no_grad(): correct_predictions = 0 total_samples = 0 for val_images, val_labels in val_loader: val_inputs = feature_extractor(val_images, return_tensors="pt").to(device) predictions = model(**val_inputs).logits.argmax(dim=-1) correct_predictions += sum(predictions.cpu().numpy() == np.array(val_labels)).item() total_samples += len(val_labels) accuracy = correct_predictions / total_samples * 100. print(f"Epoch {epoch+1}/{num_epochs}, Loss={avg_train_loss:.4f}, Accuracy={accuracy:.2f}%") if accuracy > best_accuracy: best_accuracy = accuracy torch.save({ 'epoch': epoch + 1, 'state_dict': model.state_dict(), 'optimizer_state_dict': optimizer.state_dict(), 'loss': avg_train_loss, }, './checkpoint.pth.tar') print("Training completed.") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值