ControlLoRA形式のデータセットとControlNet LLLite形式のデータセットの相互変換スクリプト
自分用メモなので簡素。
ControlLoRA→ControlNet LLLite
LoRAtoLLLite.py
from datasets import load_dataset
import os
from PIL import Image
# 出力ディレクトリを指定
output_dir = "D:/Documents/AI/fill50k" # ここにデータを保存します
# 画像、ガイド、テキストディレクトリを作成
image_dir = os.path.join(output_dir, "image")
guide_dir = os.path.join(output_dir, "guide")
text_dir = os.path.join(output_dir, "text")
os.makedirs(image_dir, exist_ok=True)
os.makedirs(guide_dir, exist_ok=True)
os.makedirs(text_dir, exist_ok=True)
# データセットをダウンロード
dataset = load_dataset("HighCWu/fill50k", split="train") # trainデータセットのすべての行をダウンロード
# データをループして画像とテキストを保存
for i, data_point in enumerate(dataset):
image = data_point['image'] # 画像を取得
guide = data_point['guide'] # ガイド画像を取得
text_list = data_point['text'] # テキストリストを取得
# テキストリストから文字列を作成
cleaned_text = ''.join(text_list).replace(", ", " ")
# 画像を保存
image_path = os.path.join(image_dir, f"{i+1}.png")
image.save(image_path)
# ガイド画像を保存
guide_path = os.path.join(guide_dir, f"{i+1}.png")
guide.save(guide_path)
# テキストを保存
text_path = os.path.join(text_dir, f"{i+1}.txt")
with open(text_path, 'w') as text_file:
text_file.write(cleaned_text)
print("データの保存が完了しました。")
ControlNet LLLite→ControlLoRA
まず画像フォルダとテキストファイルからjsonを書き出す
source_dir ガイド画像
target_dir 生成したい画像
prompt_dir prompt詰め合わせフォルダ
import os
import json
source_dir = "D:\\desktop\\Face\\image"
target_dir = "D:\\desktop\\Face\\guide"
prompt_dir = "D:\\desktop\\Face\\text"
# Get all the image filenames in the source directory
file_names = [f for f in os.listdir(source_dir) if f.endswith('.png')]
# For each file, read the corresponding prompt and construct the JSON format
json_strings = []
for file_name in file_names:
# Construct file paths
source_path = os.path.join(source_dir, file_name)
target_path = os.path.join(target_dir, file_name)
prompt_file_path = os.path.join(prompt_dir, file_name.replace('.png', '.txt'))
# Read the prompt from the text file
with open(prompt_file_path, 'r', encoding="utf-8") as f:
prompt_text = f.read().strip()
# Construct the dictionary
json_dict = {
"source": f"source/{file_name}",
"target": f"target/{file_name}",
"prompt": prompt_text
}
json_strings.append(json.dumps(json_dict, ensure_ascii=False))
# Save the results to "eyes_heart.json" as newline-separated strings
with open('eyes_heart.json', 'w', encoding="utf-8") as f:
f.write('\n'.join(json_strings))
import os
import datasets
from datasets.arrow_dataset import Dataset
from datasets.dataset_dict import DatasetDict
def map_fn(example):
image_path = os.path.join("D:/desktop/Face", example['target'])
guide_path = os.path.join("D:/desktop/Face", example['source'])
return dict(image=image_path, guide=guide_path, text=example['prompt'])
eyes_heart_dataset = Dataset.from_json("D:/desktop/Face/eyes_heart.json")
eyes_heart_dataset = eyes_heart_dataset.map(map_fn)
eyes_heart_dataset = eyes_heart_dataset.remove_columns(['source', 'target', 'prompt'])
eyes_heart_dataset = eyes_heart_dataset.cast_column("image", datasets.Image(decode=True))
eyes_heart_dataset = eyes_heart_dataset.cast_column("guide", datasets.Image(decode=True))
eyes_heart_dataset = DatasetDict(train=eyes_heart_dataset)
eyes_heart_dataset.save_to_disk("D:/desktop/Face/eyes_heart")
これで同じデータセットで最強のControlNet頂上決戦ができる!!!!
この記事が気に入ったらサポートをしてみませんか?