Stable Diffusion AI模特服装搭配探索

图片

概述

这篇文章主要尝试实验stable diffusion在电商行业的落地应用场景, 在服装相关的电商业务运营过程中往往需要聘请模特拍大量服装产品图案,模特成本、场地成本、拍摄时间成本等问题在传统的无法避免,随着stable diffusion 的快速崛起,本文主要实验服装换装的低成本方案,为控制成本本方案使用Stable Diffusion WebUI 及相关的扩展组件应用进行AI模特换装的实验。

场景

下面将围绕以下三种实验场景分别尝试用stable diffusion 进行AI模特服装搭配的探索实验,相关实验场景和说明情况如下。

实验场景 说明
服装训练成lora 将服装训练成lora模型,不指定模特,脸部数据来自大模型
服装lora+模特lora 将服装和模特分别训练成两个lora模型,模特和服装可以指定
局部重绘inpaint upload换装 利用局部蒙版重绘和提词方式生成模特服装图,也可以加载指定模特lora模型

SD环境搭建(此处省略)

安装完成后启动我们的stable diffusion web ui,接下来就准备我们的实验训练部分。

图片

实验部分

1.服装训练成lora

这里网上找了16张训练集素材,服装素材的原始图片如下

图片
原始素材

训练集处理,这边避免减少后面服装lora和模特lora两个lora一起使用时,原始服装素材模特脸部对后面的模特脸部的影响,此处将原始服装模特的脸部做了截取后进行训练,tag提词使用的是deepbooru提词方法,加入了触发词jk_school。

图片
处理后素材

lora的训练使用的是kohya的gui环境,一个epochs图片训练次数为30次,8个epochs,训练的参数配置参考如下。

{
  "ss_batch_size_per_device": "2",
  "ss_bucket_info": "{\"buckets\": {\"0\": {\"resolution\": [768, 1024], \"count\": 1500}}, \"mean_img_ar_error\": 0.0}",
  "ss_bucket_no_upscale": "True",
  "ss_cache_latents": "True",
  "ss_caption_dropout_every_n_epochs": "0",
  "ss_caption_dropout_rate": "0.0",
  "ss_caption_tag_dropout_rate": "0.0",
  "ss_clip_skip": "None",
  "ss_color_aug": "False",
  "ss_enable_bucket": "True",
  "ss_epoch": "7",
  "ss_face_crop_aug_range": "None",
  "ss_flip_aug": "False",
  "ss_full_fp16": "False",
  "ss_gradient_accumulation_steps": "1",
  "ss_gradient_checkpointing": "False",
  "ss_keep_tokens": "0",
  "ss_learning_rate": "3e-06",
  "ss_lowram": "False",
  "ss_lr_scheduler": "cosine_with_restarts",
  "ss_lr_warmup_steps": "600",
  "ss_max_bucket_reso": "1024",
  "ss_max_grad_norm": "1.0",
  "ss_max_token_length": "None",
  "ss_max_train_steps": "6000",
  "ss_min_bucket_reso": "256",
  "ss_min_snr_gamma": "None",
  "ss_mixed_precision": "bf16",
  "ss_network_alpha": "64.0",
  "ss_network_dim": "128",
  "ss_network_module": "networks.lora",
  "ss_new_sd_model_hash": "bbf07e3a1c3482c138d096f7dcdb4581a2aa573b74a68ba0906c7b657942f1c2",
  "ss_noise_offset": "None",
  "ss_num_batches_per_epoch": "750",
  "ss_num_epochs": "8",
  "ss_num_reg_images": "0",
  "ss_num_train_images": "1500",
  "ss_optimizer": "bitsandbytes.optim.adamw.AdamW8bit",
  "ss_output_name": "jk_v1",
  "ss_prior_loss_weight": "1.0",
  "ss_random_crop": "False",
  "ss_reg_dataset_dirs": "{}",
  "ss_resolution": "(768, 1024)",
  "ss_sd_model_hash": "4de704d8",
  "ss_sd_model_name": "basil mix.ckpt",
  "ss_sd_scripts_commit_hash": "829b9230b4a6b3ff127ae76ec6395bbfc2df59ed",
  "ss_seed": "1234",
  "ss_session_id": "3060022516",
  "ss_shuffle_caption": "False",
  "ss_text_encoder_lr": "1e-05",
  "ss_total_batch_size": "2",
  "ss_training_comment": "None",
  "ss_training_finished_at": "1682023152.8199518",
  "ss_training_started_at": "1682007419.8255863",
  "ss_unet_lr": "5e-05",
  "ss_v2": "False"
}

训练完成我们的服装lora后,我们将lora文件放到stable diffusion lora目录下,选择加载我们的lora模型,提词只加载服装lora的触发词看看生成的服装的照片是否能满足。

图片
lora服装出图
图片
服装lora效果对比图

生成的效果图如上,整体上衣服的质感跟原图存在一定差距,也容易出现服饰细节跟原图上的差异,变换了底模为braBeautifulRealistic_v40会真实些,但也存在一定的差距,这种服装的lora需要多次抽卡,出现跟原图差不多的效果图像后再进行放大或者利用dynamic Thresholding插件丰富更多细节。

2.服装lora和特定模特lora

现在我们在上面的基础上,添加我们的模特lora到提词中,让我们特定的模特穿上我们训练的这套lora服装,lora的训练技巧可以参考maxx:(训练篇)lora人物训练这篇文章,这里直接从civitai随便下载了一个人物Gal Gadot的lora模型,当然你也可以自己训练模特的lora,下面我们用上面训练的服装lora和人物lora一起生成看看。

图片
服装lora+模特lora

这里设置了衣服lora的权重为0.7,人物lora的权重为0.3,在无数次的试验后发现两个权重一叠加总会出现顾此失彼的情况,要不模特人物像了,衣服就不像了,衣服像了,人物就不像了,做不到泛化性,这边猜想可能人物的训练集上的衣服影响到了服装的lora模型,好吧,只能曲线救国了,在确保服装的lora出的效果跟原图相识度较高的权重下,将生成的图像发送到了图生图中,删除了服装的lora相关提词,只保留了人物lora提词重新生成。

图片
变更提词

同时调整重绘幅度为0.3~0.35的范围,利用Tiled Diffusion局部放大生成高清效果图

图片
调整重绘幅度
图片
服装lora+模特lora

其实这边也可以利用局部重绘的方式或Face Edit插件重绘我们文生图中的照片,原理都是在保证服装lora相识度较高的基础上去让我们的模特lora能够作用在生成的图像中,单纯的特定服装跟特定模特文生图模式中由于两个lora的相互影响无法确保生成图像的可控性。

3.局部重绘inpaint upload换装

  1. 服装图片处理,这里因为没有相关假人模特,所以在网上找了一张服装照片,有条件的话推荐使用与样例图片相仿的素材,还可以通过假人模特去拍摄一些服装素材图片用来换装。
图片
服装素材

2.以相同的图像尺寸制作上面服装的蒙版图像,这里使用了stable diffusion的rembg插件生成上面服装的蒙版图像,当然熟悉PS的话可以用PS制作。

图片
服装蒙版

3.利用3d openpose插件调整生成服装对应的骨架图和手势的深度图发送到对应的controlnet插件tab上

图片
调整pose和手部
图片
pose图和depth图

4.在局部重绘inpaint upload中上传服装照片和蒙版照片

图片
inpaint upload参数

5.cantorlnet部分利用服装的cany和openpose还有手势depth一起启用实现非蒙版区域的重绘换装,注意调整三个controlnet选项卡图片的尺寸和上面的服装图片尺寸一样,controlnet选项的参数如下

图片
cany参数
图片
openpose
图片
depth

6.加载模型和相关提词,底模这里选择的是braBeautifulRealistic_v40模型,正向提词如下

正向提词:raw photo,best quality,photorealistic (grey background:1.2),1girl, solo, thin female, (half body:1.2), medium shot, high detail face, smile, white light, create a polished look

图片

图片
inpaint upload换装效果图

局部重绘inpaint upload模特换装,服装部分是基于我们拍摄出来的产品图片,在此基础上利用重绘和controlnet等相关工具去重绘出模特和背景,服装能100%是我们的产品图,对于蒙版的衔接处可能会存在界限的模糊和模特手部出图的不可控,这就需要我们前期服装的原图蒙版处理抠图时尽可能的保留手指头部等部分的白色蒙版以减少后期controlnet的依赖,或者后期叠加openpose、candy、手势的depth等相关参数控制出图效果,该场景相对于前面的lora服装训练、模特lora训练,时间成本上有一定的优势,服装还原度可以满足产品需求。

结论

三种方案,服装训练成lora的场景,首先服装的还原度,简单的服装还原度能够到达90%,复杂的服装服装纹理和相关的服饰物件无法百分百还原,相识度只有80%,出图不可控需要抽卡机率,另外一种特定模特lora+特定服装lora的场景,两个lora同时作用的文生图模式会相互影响,无法确保结果的可控性,需要在保证服装还原的前提上通过局部重绘/图生图方式提高另一个lora的权重还原模特脸部使其能够生成特定模特穿制定的服装,最后一种场景是用服装的inpaint配合蒙版,这种方案服装可以100%还原,需要自行用木偶模特等拍摄服装的照片,生成服装的图片和蒙版后利用提词和controlnet控制出图,在所有场景中,第三种场景方案时间成本上和效果现阶段显然优于前面两种方式。

THE END