
flux-lora-portrait-trainerで、推しに任意の制服を着せる方法【サンプルコードあり】
はじめに
AIで作った推しが、もしも母校にやってきたら、あるいはあのアイドルの一員だったら…?
そんなifを叶えたい、と思ったことはありませんか?
これはFaceswap系の技術でも、ある程度は実現可能ですが、その限界は、基本的に既存素材しか使えず、自由に増やすのが難しいことや、そもそも元素材の顔立ちに引っ張られやすいことなどにあります。
そこで、今回はAI美女などの“推し”に、好きな制服を着せるための手順を紹介します。
使用するサービスはFal.aiのPortrait Trainerで、正式名称は「flux-lora-portrait-trainer」です。
ここでは、具体的にどのように画像を集め、学習用のデータセットを整え、Fal.ai上でモデルを混成していくかを解説します。
技術的な部分と注意点についても触れますので、ぜひ最後まで読んでみてください。
この記事で紹介すること
この記事では、fal.aiのPortrait Trainerを利用して、約10枚のAI美女(推し)画像と約10枚の制服画像を組み合わせる具体的な方法について説明します。
さらに、サンプルとして乃木坂46公式サイトから画像をスクレイピングして、研究用データセットとして活用するためのPythonコードも用意しました。
学習データ集めで迷っている方は、ぜひ参考にしてください。
flux-lora-portrait-trainerとは
flux-lora-portrait-trainerは、Fal.aiが提供しているLoRA(学習済みモデルの一部をカスタムデータに合わせて調整する技術)ベースのポートレイト特化型トレーナーです。
ここで作成されたLoRAは、主に特定の一人の人物画像を生成することに特化したものとなります。
LoRAを使うことで、特定の特徴(たとえば髪型や衣装、顔など)を学習済みモデルに追加・上書きし、比較的短時間でモデルをチューニングすることができます。
fal.aiの魅力
fal.aiでは、事前に多種多様なベースモデルが用意されています。
そのため、ユーザーは自分で複雑な環境構築をしなくても、Web上で画像アップロードや、LoRA用の呼び出しタグを設定するだけで学習を行うことができます。

また、モデルの合成や生成テストまでもブラウザ上で完結するため、機械学習の専門知識がない方でも比較的取り組みやすいのが特徴です。
準備するもの
推しに制服を着せるためには、推しの画像(AI美女など)と、制服画像の両方を用意します。
目安としてはそれぞれ10枚程度です。
推しと制服を混ぜて学習することで、最終的に「推しの顔立ち+制服の姿」という合成がうまく表現されるようになります。
推しとして、AI美女を想定している理由
特定の実在人物のデータを狙って生成させる目的で学習に用いる場合、肖像権や著作権などの問題が生じる可能性があります。
実際にTwitterでも「実在人物のモデル学習」に懸念する声が上がっています。
FalのFluxで実在人物のLoRAをつくるのはマジで危険
— Dr.(Shirai)Hakase - しらいはかせ (@o_ob) November 24, 2024
やった自分が言うんだから間違いないです
数枚の写真からなんでも作れる。
お亡くなりになったおばあちゃんの遺影とかの仕事ならともかくですが(学生時代はPhotoshop3.0でそういう仕事してた…)
悪用されたら困るのでプロテクトをかけてみた pic.twitter.com/4cFXckF2RC
が、今回は以下の2点からリスクを抑えています。
そもそも推しがAI美女であり、実在の人物ではない
制服用データもアイドル画像などを利用しているが、あくまで研究用途の範囲であり、かつ混成されることで特定個人には寄りにくくなること
以前、こちらの記事でも混成について扱いましたが、混成とは、結局のところ平均化になります。
2~3人程度の少人数ならともかく、10人規模のデータが混ぜ合わされば、そちら側はほぼ平均化されます。
しかも、残りとなっている「推し」の成分がデータの中で重めになるため、現実的に、顔は「推し」に近付いていく、という算段になっているわけです。
このように、個人情報や肖像権を侵害せずに済むよう配慮して活用していただければと考え、一次的に推しとして「AI美女」を想定しました。
制服画像の収集例
今回は、制服イメージを得るために乃木坂46の公式サイトから画像をダウンロードするサンプルコードを紹介します。
あくまでも研究用データセットとして使用する想定です。
乃木坂46は公式サイト上でメンバーの写真を公表しており、かつ制服もよく映りこんでいるため、比較的データをまとめて取得しやすいことから例として挙げています。
画像スクレイピングのサンプルコード
以下のPythonコードではSeleniumとwebdriver_managerを使い、乃木坂46公式サイトをヘッドレスモードで取得して、背景画像として指定されている画像URLをリストアップしダウンロードします。
実行する際には、Python環境にseleniumとwebdriver_managerがインストールされている必要があります。
import os
import time
import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
def download_image(url, folder='46_test'):
if not os.path.exists(folder):
os.makedirs(folder)
image_name = os.path.basename(url)
image_path = os.path.join(folder, image_name)
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
with open(image_path, 'wb') as file:
file.write(response.content)
print(f"Downloaded {image_name} to {folder}")
except requests.exceptions.RequestException as e:
print(f"Failed to download {image_name}: {e}")
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
url = 'https://www.nogizaka46.com/s/n46/search/artist'
driver.get(url)
time.sleep(3)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
image_urls = []
divs = soup.find_all('div', class_='m--bg js-bg is-l')
for div in divs:
style = div.get('style', '')
start_index = style.find('url("') + len('url("')
end_index = style.find('")', start_index)
if start_index != -1 and end_index != -1:
image_url = style[start_index:end_index]
image_urls.append(image_url)
print(f"Found {len(image_urls)} image URLs.")
for image_url in image_urls:
print(f"Downloading: {image_url}")
download_image(image_url)
driver.quit()
適当なPythonファイルを作成して上記コードを貼り付ければ、乃木坂46公式サイト上にある背景画像がまとめてダウンロードされます。

枚数はやや多めなので、実際の学習では、推しの雰囲気に合いそうなものを10枚程度ピックアップしておくとよいでしょう。
fal.aiでの学習手順
fal.aiのPortrait Trainerを使って学習させる流れは、以下のステップを想定しています。
まずはfal.aiにアクセス・ログインして、新規でPortrait Trainer(flux-lora-portrait-trainer)を立ち上げます。
次に、学習に使う画像をアップロードします。
AI美女の顔立ちの特徴がよくわかる画像を約10枚、そして今回スクレイピングした制服画像から厳選した約10枚を同時にアップロードして、1つのデータセットにまとめます。

データセットの作成画面では、LoRA呼び出し用のタグ付けを設定し、そもまま学習をスタートさせます。
この際、必要であれば、学習の設定を行っても構いません。
ただ、デフォルト値は、ある程度経験的にわかっている最適値です。
確かに学習率やステップ数などは調整できるようになっていますが、初めはデフォルト値のまま試してみるとよいでしょう。
LoRAの場合、比較的少ないステップ数でも特徴が入りやすいため、何度か繰り返し学習するうちに必要な枚数やステップが分かってきます。
学習が完了すると、新たにLoRAモデルが生成されます。この時点でテスト生成を行い、タグ指定による変化を確認します。
AI美女を生成したい場合は設定したタグを使い、そこに「wearing a uniform」といった衣装タグを組み合わせます。
生成結果に制服がうまく反映されていれば成功です。
うまくいかない場合は、プロンプトやscaleを微修正したりすることで、まずは精度を上げられます。
それでも足りない場合は、画像の質や制服用:「推し」データ用の構成比を調整したり、学習回数を増やすなどして再挑戦しましょう。
ちなみに学習料金は、基本設定の場合は、1回6ドルですが、ステップ数を増やせば増える仕組みなので、ご注意ください。
生成結果を確認する
学習が終わったら、お楽しみの生成タイムです。fal.aiのインターフェースから、先ほど生成したLoRAを読み込みます。
その際、プロンプトに設定したLoRA呼び出し用の固有タグを指定しつつ、「wearing a uniform」や「in a school uniform」といった説明的なタグを追加します。

モデルが上書きするベースには、Portrait Trainerの標準モデルがオススメですが、ローカルなど別環境で、好きなベースモデル(例えばanimepro-fluxのようなAnime風モデルなど)を試すのも否定はしません。
うまく学習できている場合、実際に生成してみると、驚くほどに「推しの顔立ち+制服姿」のイメージが出てきます。
ただし、ルールベースで生成しているわけではないため、まれに制服が奇妙な形に歪んだり、身体の構造が崩れることもあります。
そんなときはプロンプトを工夫してみたり、生成を繰り返したりすると、より自然な制服姿を描写させやすくなります。
注意点とおすすめの使い方
顔立ちは、完全に推しそのものにはならない可能性があります。
それでも、かなり似通ったイメージを生成できますし、雰囲気重視なら十分に楽しめるはずです。

今回の記事で紹介したように、「推しを好きな制服姿にできる」というのは、一種のファンアートや妄想企画にも似た楽しみ方です。
たとえば「もしも某アイドルっぽく大変身してみたら」や「某学校の制服を着たらどんな雰囲気になるか」など、さまざまなアイディアが浮かぶかもしれません。
ただし、「推し」枠、つまりメインの顔のベースとなる存在を実在人物にしてデータセットを作る場合には、権利的な問題が少なからず発生するため、本人許諾を得られているかなどには、十分注意が必要です。
また、こと学校の制服など素材画像については、子どもの権利などのより複雑な問題も絡んできますので、必ず合法的にアクセス・入手できる範囲のデータを使用しましょう。
まとめ
flux-lora-portrait-trainerを使うことで、推し(AI美女)と任意の制服画像を混ぜあわせた新しいビジュアルイメージを生み出すことができます。
学習に必要な画像は各10枚ほどで十分なので、データ収集のハードルもそこまで高くありません。
ファンアートの一環として楽しむ場合や、クリエイティブな企画のアイデア出しに活用する場合には、とても便利な手法だと思います。
乃木坂46の画像スクレイピングコードは、あくまで学習用のデータセットを作成する例として紹介しました。
研究目的であっても、大量ダウンロードや再配布は公式ガイドラインに抵触する可能性があるため、取り扱いには十分なご注意をお願いします。
必要に応じて、より権利関係が明確な画像素材を利用するのが理想的です。
以上が、flux-lora-portrait-trainerで推しに任意の制服を着せる方法の概要です。
少し工夫するだけで思い通りのビジュアルイメージを実現できるので、興味のある方はぜひ試してみてください。
生成された画像をSNSなどにアップするときは、公開範囲や権利関連にも配慮して、ルールを守りながら楽しむようにしましょう。
最後まで読んでいただき、ありがとうございました。