2023.05.12
SHOOT! WORLD PROJECT
AaaS Tech Labは、NFTプロジェクト「SHOOT! WORLD」[1]に、一部技術提供させていただきました。
記事画像
2022年12月より、サッカー漫画「シュート!」(大島司先生著[2])を題材としたNFTプロジェクト「SHOOT! WORLD」がスタートしました。
本プロジェクトは、漫画「シュート!」連載開始から約30年の時を経て、2022年Wカップイヤーを契機に、コミュニティ共創型の新たなサッカー関連IP創出を目指すものです。
また、サッカー元日本代表「松井大輔」選手[3]と「岡崎慎司」選手[4]にもアンバサダーとしてご協力いただいております。
「SHOOT! WORLD」でAaaS Tech Labは「NFTホルダー限定、自身の写真が『シュート!』登場人物風になるNFTのFREE MINT」に技術提供をさせていただきました。
具体的には、2022年夏頃より大きく話題になった画像生成系AIの1つStable Diffusionを活用し、NFTホルダーの顔写真を変換しました。
下記が変換結果の例です。全て上段が入力画像、下段が変換結果となります。
記事画像
(おそらく) 公開されている学習済みモデルなどを単純に使用しても、「シュート!」風の画像は生成できないかと思います。少なくとも小山田が開発過程で試した際には、Promptを工夫した程度での生成は不可能でした。
その為、本プロジェクトでは、Stable Diffusionの公開モデルを「シュート!」の漫画データでfine-tuning(既存モデルのパラメータを微調整)する必要がありました。
以下、今回の開発で行った処理内容について簡単にご紹介いたします。
※本モデルの実験・実装は、2022年9月(Stable Diffusionが公開され2週間ほど)というタイミングでスタートしました。そのため以下の紹介の中には、今では定石となったものだけでなく、既にあまり使われなくなった手法が登場する可能性もあります。あくまで今ほど技術発展しておらず、情報も多くはなかったなかでの取り組みとして、参考にしていただけますと幸いです。
「シュート!」登場人物変換について
Stable Diffusionのfine-tuningおよび顔写真の変換にあたって、大まかに4つのステップを踏みました。
1. 漫画データからキャラクター顔部分のみを切り取り
2. 切り取った顔画像に、説明文を付与
3. 学習済みモデルをfine-tuning
4. NFTホルダーの顔写真を変換
(1, 2は、fine-tuningに使用するデータ準備に該当します。)
1. 漫画データからキャラクター顔部分のみを切り取り
まずキャラクターの顔画像データの準備について考えます。
「シュート!」は、スピンオフ作品を含めない本作だけでも現在4部構成となっており、総巻数は60を超える大作です。今回は本作に関して、高解像度な漫画画像データを使用させていただきました。
なかなか取り扱うことのできない貴重かつ大規模なデータである一方、皆さんもよく目にするコマ割りされた漫画状態のデータであったため、キャラクターの顔部分のみを抽出しデータセットとして整備する必要がありました。
しかし、この作業を全て手作業で行うには、時間・作業コストが非常に大きくなります。
そこで今回は顔検出技術を使用しました。
ただし、漫画キャラクターの顔検出にリアルな人間の顔写真で学習されたモデルを使用すると検出精度が非常に悪かった為、アニメ画像で学習されたモデルを使用しています。
具体的にはAnime Face Detector[5]というオープンソースを使用しています。
検出結果は下記のようなイメージです。緑枠が検出された顔領域です。
記事画像
また上記のような緑枠部分のみを切り取ってしまうと、頭髪などが一部含まれないデータセットとなるため、パラメータを調整し切り取る領域を拡大しました。
ただし領域を拡大したことで含まれてしまうキャラクターの背景部分が学習にとってノイズとなり、生成結果の品質低下を招くことが実験結果から判明した為、背景は人力でトリミングしました。
(この背景除去も機械処理する技術は存在しますが、白黒の漫画データではあまり良い精度が出ませんでした。)
2. 切り取った顔画像に、説明文を付与
次に、ステップ1で制作した顔画像データに説明文を付与します。
一般的にStable Diffusionは、画像とそれを説明するテキストのペアデータを学習に使用します。つまり、顔画像データだけでは不十分です。
ここも顔画像1枚1枚に手動でテキストを付与すると、コストが非常に高くなります。
そこで今回は「clip-interrogator」[6]を使い、自動化しました。
「clip-interrogator」を使用すると、キャラクター顔画像に対して、下記のようなテキストを自動で付与できます。
記事画像
付与されたテキスト : A black and white image of a group of people
ただし上記結果からも分かるように、キャラクター名や作品名(シュート!) 、作者名(大島先生)などはテキストに含まれていません。一方今回は「シュート!」に登場する複数キャラクターの画像を学習させる為、各キャラクターに対応した文言(キャラクター名) 、および全キャラクター統一の文言(作品名、作家名) を与えないと、特定のキャラクターらしさと「シュート!」全体の画風が、正確に学習されないと考えました。
よって、キャラクター名は手動で、作品名/作者名は自動で、全てのテキストに追記しました。
3. 学習済みモデルをfine-tuning
ここまでで学習に使用するデータセットは作成できたので、Stable Diffusionの学習済みモデルをfine-tuningします。
基本的には全ての実験で、Waifu Diffusion[7]というStable Diffusionをアニメ画像向けにfine-tuningされたモデルを、さらに「シュート!」データセットでfine-tuningしました。
fine-tuningのために、まず検討した手法は、Textual Inversion[8]とDreamBooth[9]でした。
どちらも2023年4月現在ほど画風や生成されるオブジェクトの指定が容易ではなかった中、非常に注目された手法だと思います。(もちろん、今でも使用されている手法かと思います。)
しかし結論として、これらの手法では求める品質に足る画像生成はできませんでした。
考察に過ぎませんが、要因としてWaifu Diffusion(Stable Diffusion含め)は、モノクロかつ線画表現で描かれた漫画画像をあまり学習していない、特に「シュート!」の画像データは(おそらく)皆無であるためと考えています。
(DreamBoothについては、ハイパーパラメータの調整など次第で、生成できるようになる可能性はあったかもしれません。)
よって今回はTextual InversionやDreamBoothなど、固有の識別子と画像の対応を学習するような意味でのfine-tuningではなく、Stable DiffusionからWaifu Diffusionが作られたような意味でのfine-tuningを行いました。
これにより、例えば下記のような画像がテキストから生成できるようになりました。
記事画像
一番左 : 主人公である「田中俊彦」のようなキャラクターを生成した結果
中央 : 「田中俊彦」「久保嘉晴」「神谷篤司」の特徴をもったキャラクター生成を試した結果
右端 : 「白石健二」(作中ではメガネをかけていない人物)がメガネをかけたようなキャラクターを生成した結果
特に右二つの結果は、作中で一度も描かれていないような設定を狙い生成したものであり、単純に学習データをそのまま出力しているわけではないと考えています。
(あくまで学習の尤もらしさを確認する為の実験であること、ご理解いただけますと幸いです。)
4. NFTホルダーの顔写真を変換
最後に、人間の顔写真を「シュート!」キャラクター風に変換するステップについて考えます。
基本的には、ステップ3で制作したモデルでImg2Imgを行いました。
しかし顔写真をそのまま入力とすると、下記のように漫画表現とは異なる色味になってしまいました。
記事画像
比較的良いサンプルを掲載していることもあり、変換結果を単純にモノクロ化すれば良いように見えるかもしれませんが、それでも漫画のような白黒ではなくグレースケール(彩度が0)画像にしかなりません。
これは「Denoising Strength」と呼ばれるパラメータを1に近づけていくと改善されますが、それと同時に入力画像からかけ離れた画像が生成されてしまいます。
そこで今回は変換の前処理として、入力画像のモノクロ変換および白飛びしてしまう程度まで輝度を上げることで、冒頭に掲載したような比較的漫画に近いモノクロ表現を目指しました。
また本プロジェクトの後半、前処理を施してもうまく変換できなかった顔写真は、ControlNet[10]を組み合わせ、Canny Edgeにより検出されたエッジ情報(線画のようなイメージ)を活用して、変換しました。
最後に
冒頭にも記載しましたが、Stable Diffusionが公開されてからあまり時間が経っていない中で開発はスタートしました。
昨今AI技術の発展が非常にめざましく、本モデルの開発段階でも新しい技術が多く登場し続け、今でもその流れは続いています。
オープンソースも莫大に増えている為、「試してみる」といった行動は取りやすいですが、時間的な制約もある中、目の前のタスクに本当に適したアプローチがどれなのか判断することはどんどん難しくなっている印象も同時に受けました。
しかし、計60巻以上、累計発行部数5000万部突破、講談社漫画賞少年部門受賞といった経歴もある「シュート!」という漫画のデータを用いて、様々な実験/開発に携わらせていただけた点は非常に貴重かつ面白い経験でした。
末筆ながらこの場を借りて、大島司先生、NFTホルダーの皆さまおよび関係者の方々に感謝申し上げます。
こういった形で、AaaS Tech Labでは、ビジネスの最適化などを目的としたデータサイエンス活用はもちろん、メディア・コンテンツ領域へのAI技術応用も進めております。
もしご興味を持っていただけた方がいらっしゃいましたら、worksをご覧いただいたり、contactからご連絡いただけたりしますと幸いです。