Anima×ADetailerで自動検出&描き直し!カスタムADetailerで「自然言語インペイント」 (Pixiv Fanbox)
Videos
-
kitune.mp4 -
「爪を立てるポーズで怒りを表現」.mp4 -
毒リンゴ.mp4
Downloads
Content
<記事内容の要約>
・今回公開するカスタム版ADetailerを使って、手や顔などの位置を自動検出+Animaで自然に描き直す方法の特集
・「手を振る」「狐のハンドサイン」「毒リンゴを持つ」など、自然言語指示が効くAnimaならではの細かな演技指示ができる
・フォルダにまとめた画像の一括処理や、逆にAnimaで変わってしまった顔立ちをSDXL画風に戻す方法も紹介。大量画像の修正・加筆処理を効率化できる
こんばんは、スタジオ真榊です。今回は、最新ローカル画像生成モデル「Anima」とADetailerを使って、破綻した手や画風が変わってしまった顔を自動で描き直したり、自然言語指示で「演技」を付けたりする手法についての検証記事です。
例えば、破綻した指の画像を入力して「彼女はこちらに手を振っている(She's waving at me)」と指示すると自動でこうなり、
「彼女は人差し指と小指を立てた狐のハンドサインをしている(She's making the fox hand sign at me. She's holding up her index finger and little finger.)」と指示するとこうなる仕組みです。
これは機械的な処理なので、数百枚の画像に同じ処理を一気に掛けることもできます。(フォルダ内の画像のすべての目の色を青にする、といったことが可能)
ForgeNeo上では通常のADetailerがそのままでは動かせなかったので、Animaを便利に活用できるようさまざまな新機能を備えた「カスタム版ADetailer」を作りました。ForgeNeo、reForgeどちらでも使えます。Githubから適用できるようにしてあるので、ぜひご利用ください。【約13,000字】
(※今回の内容は、ForgeNeo上でAnimaによる生成や、Controlnet「anima-lllite-inpainting-v2」を使ったインペイントが既にできるようになったユーザー向けです。ForgeNeoやAnimaの利用が初めての方は、先にこちらの記事をご参照ください)
目次
1.はじめに 破綻修正の現在地
①ユーザーによるインペイント
②画像編集モデルに丸投げ
③ADetailerで「上書きimg2img」
<簡単まとめ>
2.機能追加版「ADetailer Custom」
①Controlnet欄でAnima向けモデルやSDXL用Anytestなどのモデルを選択可能に
②Controlnet併用機能を充実
③Prompt Append欄を実装
④マスク範囲の扱いを選択可能に
<"マスクされたコンテンツ"の意味>
⑤マスク範囲を検出範囲よりも広げる機能を追加
3.インストール方法
4.カスタムADetailerの使い方
<img2imgの設定>
<ADetailerの設定>
5.実践
<Animaインペイントにしかできないことは?>
<実はGPT Image2でもできてしまう>
6.一括処理のメリット・デメリット
<巻き込まれ事故は避けられない>
7.「Anima画像のSDXL画風戻し」も可能
8.終わりに
1.はじめに 破綻修正の現在地
検証の前提として、記事執筆時点の一般的な破綻修正のやり方を確認させてください。AIイラストのおかしなところを直す方法といえば、おおむね以下の三つに大別できるかと思います。
①おかしなところを自分でマスクして、再生成(i2i、インペイント)する
②ChatGPTやNanoBananaProなどの画像編集モデルにお任せして直してもらう
③ADetailerなどを使い、生成時に手を自動検出して高精細にアップスケールする
主な違いは、「修正箇所を決めるのは誰か?」ということですね。①はマスク範囲を塗るユーザー自身。②はお任せした画像編集モデルが画像解析して判定します。③はADetailerに適用する検出モデルが学習内容に従って自動検出します。この違いがそれぞれメリット・デメリットを生むので、簡単にまとめます。
①ユーザーによるインペイント
一番思った通りの結果が得られるのは、やはりインペイントによる手動修正です。SDXLでNoobaiインペイントするのでもよいですし、NovelAIのインペイントでももちろんOK。NovelAI v3は既に前回のアップデートから1年が経過していますが、直したい画像を放り込んで適当にマスクして再生成すれば、こんな感じでそれなりに再生成してくれます。
手動インペイントは、書き換えたい場所、書き換えたくない場所をユーザーが細かく指示できるのが最大のメリット。ユーザーが塗りつぶした範囲の外は基本的にそのままになります。
ただし、自然な仕上がりにするにはある程度の「慣れ」が必要で、画風が周囲と違ってしまったり、境目のぼかしが適切でないとうまく繋がらなかったりすることもあります。また、一つ一つ手動でマスクするやり方なので、数百枚の画像をいっぺんに処理するのには向いていません。
②画像編集モデルに丸投げ
GPT Image2やNanoBananaPro、QwenImageEditといった画像編集モデルに修正を「丸投げ」する方法もすっかり浸透した印象です。たまに失敗することもありますが、プロンプトや範囲指定など細かな設定をしなくてもいいですし、仕上がりも自然。例えばChatGPT上でこんな感じで指示すると、ちゃんと手の周辺をきれいに再生成してくれます。(Thinkingモードを選んでn=10と書き加えれば、10パターン同時に生成してくれます)
一方で、こうした画像編集モデルは局所修正を指示しても画像全体を再解釈することが多く、SDXLやNovelAIによるインペイントと違ってほかの場所も微妙に変化しがちなのがネック。こちらの例では、修正したい手はきちんと直っているものの、手以外の線画や塗りがわずかに変容してしまっているのが分かります。
修正前の画像とCLIP STUDIO PAINTなどで重ね合わせて馴染ませたいところですが、元画像と微妙に線画がずれる「ピクセルズレ」も起きているので、正直①のインペイントより扱いづらく感じることがあります。わずかな変容を許せる作業であれば、一番お手軽なんですけどね。
③ADetailerで「上書きimg2img」
最後の一つがADetailerです。SDXLを使っている方にはもはやおなじみですが、生成した画像のうち顔や手といった局部を自動で検出して切り出し、img2imgをかけたあと、再びもとの場所に「縫い合わせる」動きをする拡張機能です。完全自動処理なので、修正したい画像がたとえ何百枚あっても機械的に同じ処理を行えるのがメリット。
ただし、ADetailerがやっているのはただの「部分的な薄めimg2img」に過ぎません。修正前の手の形に強く引っ張られてしまうので、修正前の手が4本指や6本指だった場合、相当強くimg2imgしないと5本指に描き直すことはできませんし、img2imgの強度を強め過ぎるとマスク内外の矛盾がはっきりしてしまいます。
ADetailerはその名の通り「ぼやけた部分を詳細化する」ための技術なので、強めの破綻修正に使うには一定の限界があります。
<簡単まとめ>
まとめると、「指が100%破綻しないように生成する」のはAnimaでもまだ不可能ですが、「破綻してしまった部分をあとからAI修正する」のであれば既存技術で簡単にできるようになっており、SDXLでもNovelAIでもGPTでもやり方もさまざまある、というのが破綻修正の現状です。
手動インペイントは高品質にできますが大量処理には向いておらず、ADetailerは手や顔といった位置を自動検出して機械的にimg2imgすることができる代わりに、指の本数を描き直すほど強く掛けると破綻してしまいます。ここをうまく解決して、①~③の「いいとこどり」ができないでしょうか。
2.機能追加版「ADetailer Custom」
こうした前提を踏まえて、ForgeNeo&AnimaでADetailerをまず使えるようにし、薄めのimg2imgではなく、マスク範囲内をゼロから「描き直し」できるようにすれば、これまでできなかった修正法が可能になるのではないか?と考えました。それには、マスク内外を矛盾なく繋げられるよう、Controlnetを併用できるようにする必要があります。
色々と試行錯誤してできたのが、こちらの「カスタムADetailer」です。
純正のADetailerは記事執筆時点でForgeNeoでは適用できない状態でしたので、このカスタムADetailerはまずそこを修正し、reForgeとForgeNeo両方で動かせるようにしました。また、使いやすいように日本語化も施し、各パラメータにマウスを重ねると説明文が表示されるようにしました。
新規に追加した機能は以下の通りです。
①Controlnet欄でAnima向けモデルやSDXL用Anytestなどのモデルを選択可能に
純正ADetailerはモデル名をもとに機械的に検出しているので、一部読み込みリストに出てこないモデルがありました。このカスタム版では、もう少し検出条件を緩和して、必要なCNモデルが表示されるよう改善しています。これで、SDXL用AnytestやNoobaiInpaint、Anima用のlllite-inpaintingやany-test-likeがADetailer上で使えるようになりました。
②Controlnet併用機能を充実
純正ADetailerは入力画像のキャンバス全体をそのままControlnetに送る仕組みなので、例えばLineartを手だけに掛けようとしても、そのままだと検出部分に「入れ子」のようにキャンバス全体が描かれてしまいます。(下図参照)
そこで、ADetailerによって切り出された右手・左手部分の画像をControlnetに送信できるよう、ADetailer画面の最下部に「ADetailerの切り出しをControlnet入力に使う」という欄を実装。ここにチェックを入れることで、キャンバス全体ではなくADetailerが切り抜いた部分だけをControlnetに送れるようにしました。
また、さまざまなControlnetモデルをADetailerと併用できるように、プリプロセッサ欄も搭載しています。例えばSDXLのNoobaiインペイントを選ぶと、対応するプリプロセッサ「inpaint noobai」が自動選択されます。これによって、普段Controlnetを使うときの感覚で、LineartやInpaint、Anytestなどさまざまな効果を持つADetailerを掛けられるようになりました。
③Prompt Append欄を実装
ご存じのように、ADetailerは切り抜いた範囲にだけ掛けられるプロンプト・ネガティブプロンプトを指定でき、空欄にしておくとメインのプロンプトがそのまま流用される仕様です。ただ、「全部は変えなくていいからちょっとだけプロンプトをいじりたい」「一つだけタグを加えたい」ということがたまにあります。
そこで、ADetailer用のプロンプト・ネガティブプロンプト欄の下に、「追加プロンプト」「追加ネガティブプロンプト」欄を実装しました。ここに記入したタグは、メイン生成のプロンプトの末尾に足される動作になります。ADetailerのときだけ別のLoRAを発動させたい場合は、追加プロンプト欄に<lora:charalora:0.8>のように入力すればOKです。
④マスク範囲の扱いを選択可能に
純正ADetailerは、切り出した範囲をインペイント画面でいう「元の画像」として常に扱う仕組みです。完全なノイズ画像や「無」から生成をやり直すことができないため、下図のようになんとなく加工前と同じ形が継承されてしまいます。(img2img強度:0.5)
では強度をさらに高めるとどうなるかというと、こんな感じでマスク内外がなじまず、おかしくなってしまいますよね。
そこで、インペイント前の画像に縛られない「描き直し」ができるようにするため、Inpainting欄に「マスクされたコンテンツ」欄を実装しました。img2img画面と同様に「元の画像」「埋める」「潜在空間でのノイズ」「潜在空間における無」の4つからマスク内の処理を選べます。
<"マスクされたコンテンツ"の意味>
「埋める」:マスク部分を、周囲の色や画像情報からテキトーにそれっぽく埋めた状態からimg2imgを開始する。
「元の画像」:普段のADetailerはこれ。元の画像にノイズを足した状態からimg2imgを開始する。強度1ならほぼノイズ、0.5なら半分くらいの濃度のノイズを載せる。元の画像に引っ張られる。
「潜在空間でのノイズ」:マスク部分を、AI内の不思議空間でランダムなノイズにするので、「完全にランダムな下書きから描き直して」という指定をしたいときに使う。元の破綻した形を捨てやすく、別物を描かせやすい反面、結果が少し暴れやすくなります。内部構造がSDXLと異なるAnimaでは誤作動を起こす模様。
「潜在空間における無」:マスク部分を空っぽに近い状態にして生成を開始するので、「ここには何もないものとして、周囲とプロンプトから描き直して」という感じ。Animaなどで破綻した手や顔を消して、ゼロから再構成したい時はこれ。
例えば「潜在空間における無」を選んでAnimaインペイントすると、ADetailerの検出範囲(例:破綻した手の画像)がいったん捨てられ、ゼロからAnimaにお絵描きを任せることができるというわけ。これが今回の検証の核になる機能です。
⑤マスク範囲を検出範囲よりも広げる機能を追加
ADetailerでインペイントする範囲に余裕を持たせるための機能。Mask Preprocessing(マスクの事前処理)欄に、「検出枠の拡張」パラメータを追加し、ここで指定したピクセル分、検出されたマスク範囲よりインペイント範囲を上下左右に広げられるようにしました。
すぐ上にある「マスクの縮小/拡大」と混同しがちですが、「検出枠の拡張」は、ADetailerが抽出してインペイントする四角いキャンバスの大きさを調整するもの。マスクの縮小/拡大は、四角形ではなく物体の輪郭に沿ったマスクのサイズを拡縮するものです。
例えば、ハンドモデルでこのように両手が範囲検出された場合、インペイントができる範囲は拳がぴったりおさまる小さな四角形(下図)の内側だけです。すると、指を大きく広げたポーズに変更したくても、スペースが足りません。そんなときに「検出枠の拡張」を使えば、インペイント範囲を必要な分だけ広げて余裕を持たせられるので、思った通りの手のかたちに変更することができるというわけです。
カスタムADetailerの追加機能は以上です。それぞれの機能だけ説明されてもピンとこないかもしれませんが、これらの機能をうまく組み合わせると、こちらの動画のようなことができます。
まずADetailerのハンドモデル(hand_yolov8n.pt)が画面内の手を自動検出します。範囲内を四角く切り取ったあと、それをいったん「潜在空間における無」に戻し、ゼロから周囲となじむ手を再描画する…という流れです。生成にはAnimaとanima-lllite-inpainting-v2を使っているので、「彼女は人差し指と小指を立てる狐のハンドサインをしている(She's making the fox hand sign at me. She's holding up her index finger and little finger.)」という指示通りに演技をさせられました。
3.インストール方法
カスタム版ADetailerをreForge/ForgeNeoにインストールする方法は以下の通り。
・インストールしたいSDwebUI(ForgeNeo / ReForge)を完全に終了します。
・そのSDwebUIのextensionsフォルダを開きます。
・既に本家ADetailerが入っている場合は、削除するかextensionsフォルダの外へ移動します。(バックアップしたい場合は、リネームするのではなく必ずextensionsフォルダの外へ移動してください)
・Forge / ReForgeのExtensions画面から、次のURLを指定してインストールします。
https://github.com/IOSakaki/adetailer
4.カスタムADetailerの使い方
さきほどの「キツネの手」を例に、AnimaによるADetailerインペイントのやり方を説明します。まず、修正したい画像をForgeNeoのimg2img画面で読み込みます。Inpaintタブではなく、ただのimg2img画面です。
プロンプトは「クォリティタグ+1girl+手の演技についての自然文」という構成がよいかなと思います。Anima用のプロンプトなので「_」は使わず(score_7などのスコアタグのみ使用可)、カンマのあとは半角空けるルール。今回はこちらのプロンプトにしました。
PP:masterpiece, best quality, score_7, 1girl, She's making the fox hand sign at me. She's holding up her index finger and little finger. <lora:anima-turbo-lora-v0.2:1>
英語部分はDeepLで翻訳したものをそのままコピペしただけ。高速化LoRAを使って10ステップでインペイントします。
<img2imgの設定>
ADetailerしか行わないので大半は関係ありませんが、アスペクト比(キャンバスサイズ)が変更されると困るので「Resize by:スケール1」(入力画像と同じサイズ)とします。Animaが扱えないほど大きな画像を入力した場合は、短辺が1024px前後のサイズになるよう調整してください(例:入力画像が2400x1600pxならResize byで0.5-0.6倍程度にする)。
高速化LoRAを使うのでステップ数は「10~15」程度、CFGスケールは「2」とします。これは、最低のスケール1にするとネガティブプロンプト欄が使えなくなるため。ほかは普段のAnima生成と同じでOKです。ADetailerしか行わないので、今回ノイズ除去強度は関係ありません。
<ADetailerの設定>
手以外の部分はそのままにしたいので、ADetailer設定欄の「img2img本体をスキップ」にチェック。こうすると、img2img画面で読み込んだ画像に対し、ADetailerだけをかける動作ができます。(生成画像のメタデータにはSteps: 1, Size: 128x128で生成したと記録されますが、これはimg2imgをスキップするためのダミー値ですので気にしないでOKです)
今回は手を自動検出したいので「Enable this tab(1st)」欄で「hand_yolov8n.pt」を選択。プロンプト欄を空にしておけば、さきほど設定したメインのPPとNPが流用されます。(逆に、メインのプロンプトをカラにしてこっちに記入してもOKです)
重要なのは、検出範囲をどうインペイントするか決める「Inpainting」タブ。
今回はただのimg2imgではなく、Controlnet「anima-lllite-inpainting-v2」を使った高品質なインペイントをしたいので、下図のように「Inpaint denoising strength(ノイズ除去強度)1」とします。i2iではなくゼロから描き直してほしいので「Inpaint masked content(マスクされたコンテンツ)」欄で「潜在空間における無(Latent nothing)」を選択。
AnimaでCNインペイントする場合、「マスク周辺だけをインペイント」は必ず外しておいてください。これは、Animaにキャンバス全体を見せないと、どういう文脈の絵にインペイントすればいいか判断できなくなるためです。
最後に、ADetailer欄最下部のControlnet設定です。Controlnet modelで「anima-lllite-inpainting-v2」を選び、空気を読んだインペイントを可能にします。今回はマスク範囲内だけをインペイントするのではなく、キャンバス全体をインペイントした上ではめ込む形式をとるので、「ADetailerの切り出しをControlnet入力に使う」は外します。
5.実践
さきほどのイラストを上記の設定で生成すると、下図のようになりました。キツネのハンドサインをする指示がちゃんと反映されていますが、よく見ると赤いリボンの上にインペイント前の髪の毛や手の残滓が残っています。
こういうときは、マスク範囲を少し広げます。マスク調整タブの「検出枠の拡張」を使って32pxぶんインペイントする範囲を広げ、髪の毛の取り残しを防げるか試します。また、手の後ろの髪型も変化してしまっているので、「single braid」を足しました。
こちらが生成結果。範囲が少し広がったことで、自然につながりました。braid部分はどうしても変容が避けられませんので、必要ならキャラLoRAを作りましょう。
こちらのインペイントも、検出範囲を「検出枠の拡張」で広げた例です。もとの握りこぶしの範囲に「怒りを表現した爪を立てるようなポーズ」を描こうとしても、ほとんど指を伸ばすスペースがないので、48pxぶん検出枠を拡張して「描き直し」をしています。
(※プロンプトは1girl, hand, She is striking a pose as if to express her anger, with her nails extended.+LoRA)
生成過程を3倍速のスクショ動画で見るとこのような感じ。ADetailerの範囲検出力、細かい演技指示ができるAnimaのプロンプト応答力、そしてマスク内外を自然につなげることができる「anima-lllite-inpainting-v2」のコントロールが、それぞれうまく連携できていますね。
パラメータ設定が一見面倒なようですが、1回入力してしまえばあとはプロンプトの自然言語部分を差し替えるだけなので、そんなに難しくはないかと思います。同じ設定で、プロンプトだけ「彼女は両手の人差し指を立てている(She is holding up the index fingers of both hands.)」と変更すればこんな感じにできます。
<Animaインペイントにしかできないことは?>
ただ、さきほどのような指示なら、SDXLでもNoobai Inpaintingで「1girl,claw pose」とか「1girl, index finger raised」で手動インペイントすれば似たようなことはできてしまいます。自然言語で指示できるAnimaならではのアドバンテージを確認するために、このように「一口かじった毒リンゴ」を持たせるという指示をしてみました。
プロンプトは「<lora:anima-turbo-lora-v0.2:1> masterpiece, best quality, score_7, 1girl, hand, She is holding a purple poisoned apple with a bite mark on it.」です。こういう複合した指示は、danbooruタグだと誤解が多発して打率が大幅に下がるんですよね。
こちらが生成結果。地面に置いた左手にもリンゴを持たせてはいけないので、検出範囲の最大値を「1」にし、マスク範囲も広げています。
単純な「描き直し」だけなら、正直わざわざAnimaを引っ張り出さなくても旧来のモデルで可能ですが、こうした難しい条件のあるインペイントや、大量画像の一括処理をしたいときはAnimaが活躍してくれそうです。
6.一括処理のメリット・デメリット
ADetailer+Animaインペイントを使った複数画像の一括処理のやり方を見ていきます。例えば適当なフォルダに手の一括修正を掛けたい画像をまとめて放り込んでおいて、順次同じ修正処理を掛けるにはどうしたらいいでしょうか。
まずはimg2img画面の「バッチ▶From directory」欄で、画像を放り込んだフォルダを呼び出します。処理済み画像の出力先は同じフォルダにすると画像が混じるか上書きされてしまうので、末尾に「2」などと入れておけば、同じ場所に新しいフォルダが生成されてそこに保存されます。
プロンプトは少し悩みどころ。どの画像もすべてポーズが異なるので、「こちらに手を差し伸べている」とか「握りしめている」などと書くと全て同じポーズに統一されて不自然です。ここでは演技指導より指の数が合っていて、自然なポーズであればいいので、「masterpiece, best quality, score_7, 1girl, hand, five fingers, entire hand visible, full fingers visible, <lora:anima-turbo-lora-v0.2:1> 」としました。
使用する検出モデルの精度にもよりますが、大量処理すると誤検出が混じってしまうのが避けられません。手ではない部分が頻繁に手と誤認されて検出される場合は、「上位k個だけマスク」を最大「2」にしておき、検出信頼度を0.5以上に高めるとましになります。
生成開始すると、フォルダ内の画像がかたっぱしから処理されていきます。大量一括処理だとどうしてもうまく修正できなかったり、間違った部分を検出したりが避けられませんが、一枚ずつ手で処理するよりもずっと楽に修正作業を進めることができます。
このように、フォルダ内の手を一括描き直しすることができました。もちろん、ある演技に統一したい場合(ピースさせる、自然に手を開くなど)はそのようにプロンプトで指示できます。
今回は手の修正を例にしましたが、例えば顔が変容してしまった大量のGPT画像を一括で顔だけインペイントして普段の画風に戻すとか、目の色を統一する、目じりにほくろを入れるといったさまざまな使い道があろうかと思います。1枚1生成だとミスすることもあるので、複数batchで生成するとよいかもしれません。
<巻き込まれ事故は避けられない>
検出モデルは種類によって、検出した物体を四角く範囲選択するタイプと、検出した物体の輪郭を詳細にマスクするタイプに分かれます。例えば、hand_yolov8n.ptのように四角く範囲選択するタイプの場合、手の周辺の衣装や背景などがインペイントに巻き込まれて変容してしまうのが避けられないことは覚えておきましょう。例えば、すぐ上の画像では、右側の民家が巻き込まれてデザイン変更されてしまっています。
▲四角く検出するタイプ
一方、こちらのように顔部分だけを抽出するタイプは、表情の変更などに向いていますが、破綻した手の修正などは苦手。1本足りない4本指の画像を検出した場合、4本指の輪郭の中に5本指を描くのは難しいからです。
▲輪郭をマスクして検出するsegタイプ
7.「Anima画像のSDXL画風戻し」も可能
ここまでAnimaを使って既存画像にADetailerを掛けるやり方を検証しましたが、このカスタムADetailerは逆に、いつものSDXLでADetailerする「顔立ち戻し」にも使うことができます。例えば、AnimaやChatGPTで編集した画像の顔立ちが普段使っているSDXL画風と違ってしまうときに、一括で再描画することが可能です。
こちらの画像をご覧ください。左の画像はAnima用のキャラLoRAを作って再現した「Anima版鬼怒川さん」です。Animaで生成しているので「バナナとバットを持って片足立ちして頭の上にバスケットボール…」のような複雑な演技指示ができるわけですが、SDXLで作ったオリジナル鬼怒川さん(右)とは微妙に顔立ちが違っているのが分かると思います。ちょっと幼い感じですね。
顔だけをSDXLで「自動描き直し」してみます。ForgeNeoを左上の選択欄で「Anima」モードから「xl」モードにし、ふだんSDXLで鬼怒川さんを生成するプロンプトや設定を記入。カスタムADetailerでfaceを検出し、アペンドプロンプト欄に「sweat,closed mouth,looking up,v-shaped eyebrows, wavy_mouth,sanpaku」と記入して再生成してみます。
今度はAnimaではなくSDXLによるNoobaiインペイントなので、設定は下図のようになります。Animaと違って「マスク周辺だけをインペイント」が使えるので、潜在空間における無+強度1にしてゼロからの描き直しを指示。noobai inpaintingモデルを選択すると、自動で「inpaint noobai」プリプロセッサが選択されます。ControlnetにはADetailerが切り抜いた画像を渡す必要があるので、「ADetailerの切り出しをControlnet入力に使う」にチェックします。
すると、さきほどまでの実験(手だけAnima)とは逆の「全身がAnimaで顔だけSDXL」という状態にできます。
しかし、プロンプトにバナナに関する指示がなかったため、SDXLモデルは検出範囲に映り込んだこれが何なのか理解できず、バナナの先が変容してしまっています。これは失敗例としてわざと検出範囲を広げたために起きた現象ですが、「face_yolov8n.pt」モデルで顔の周辺が四角くマスクされると、このように周囲を巻き込んで変容事故を起こしてしまいます。
<表情だけ変えたいときはSeg.モデルが有効>
表情だけ変更したい場合は、こちらのような顔の輪郭に合わせて切り抜けるセグメンテーションモデルを選べば、ほかの部位を変容させずに「描き直し」することができます。
こちらが、上のセグメンテーションモデルで顔を自動マスクしたところ。マスク部分の大きさ調整は、「検出枠の拡張」ではなく「マスクの縮小 / 拡大」で行えるので、輪郭より少し大きくマスクすることも可能です。
こうすれば、四角形でインペイントしたときよりもより狙った形に近いサイズでインペイントすることができます。
今回はマスク範囲を少し拡大したためやや小顔に変化していますが、輪郭を維持したい場合はマスク範囲を±0にするか、少し縮めるとよいでしょう。
するとこのように、輪郭よりも内側だけがインペイントされるので、元画像の輪郭を維持することができます。
8.終わりに
というわけで、カスタムADetailerとAnimaを使った一括画像編集についての検証回でした。
インペイントは手動で範囲選択して一つずつプロンプトを組んだほうが当然高品質になるわけですが、Animaはかなり自然なインペイントができるようになっているので、ADetailerによる自動インペイントでもかなり実用的に使えることが分かりました。特に、最後の例で説明したように、検出モデルを用途別で使い分けると、より思った通りの一括編集を行うことができます。
検出モデルは目だけや性器だけを検出するものなど、さまざまな種類があります。例えばこのような両目だけ検出するモデルを使えば…
すべての立ち絵の目つきだけを一括でインペイントするといったことが可能になります。1枚の絵を作り込むときよりも、大量の画像を一気に処理するときに役立つ技術かなと思います。
ちょっとした気づきを普段より短いボリュームでお届けする「TIPS記事」のつもりで始めた企画だったのですが、ふたを開けてみればいつもと同じ量の特集になってしまいました。Anima用のコピー機LoRAアプリはほぼ完成しているので、バグフィックスが済み次第公開したいと思います。
それでは今回はこのへんで。スタジオ真榊でした。