生成AIグラビアをグラビアカメラマンが作るとどうなる?第16回:指問題解決!?Hand Refiner (西川和久)

テクノロジー AI
西川和久

1962年生まれ。プログラマー、IT系ライター、カメラマン(主にグラビア)と、三足の草鞋になってもう四半世紀。

特集

Hand Refinerとは?

Hand Refinerは2023年12月1日に論文、その後、2024年1月初旬にAUTOMATIC1111のADetailerComfyUIで使用可能になった手(指)に関する新手法だ。

Stable DiffusionではSD 1.5、SDXL共に手(指)が苦手なのはご存知の通り。badhandなどのTextual InversionやLoRA、OpenPose Handなどを使い、何とか抑え込む事が出来ても完璧では無く、他が良いのに手や指がおかしく泣く泣くボツにした人も多いのではないだろうか。

上記のパターンだと「出来るだけ手(指)の形が正常な画像を学習し、それをTextual InversionやLoRAにして当てる」、「指の部分に骨を当てる(OpenPose Hand)」と言った感じでどちらかと言えば場当たり的なものだった。

対して今回ご紹介するHand Refinerはかなりロジカル。具体的には

  1. 画像から手を認識

  2. 認識した位置での形や5本指などリファレンスになる手を深度情報で取得

  3. その深度情報を使って手をInpaintする

と、ざっくりこの3段構えとなる。肝は2。正常な手や指の形を深度情報として得るところだ。

では実際、どのような動きになるのか、AUTOMATIC1111 / img2imgのControlNetで確認してみたい。

img2imgのControlNet。DepthでPreprocessor: depth_hand_refiner、Model: control_sd15_inpaint_depth_hand_fp16にセット
1
2
  1. オリジナル画像。手の大きさ的にはOKなのだが指が3本

  2. Hand Refinerで作られた深度情報。少し分かりにくいが指が5本。全体のバランスも良い

いかがだろうか。得られた深度情報はしっかりした指及び手の形状をしているのが分かる。これを使ってInpaintで書けばOKと言う仕掛けとなる。

生成AIグラビアをグラビアカメラマンが作るとどうなる?連載記事一覧

AUTOMATIC1111のADetailerの設定方法

上記のimg2imgのControlNet→Inpaintだといろいろ手順が面倒なのだが、ADetailerがHand Refinerに対応したので、これを使う方が簡単だ。

(抜粋1/2)
(抜粋2/2)
  1. Enable ADetailer

  2. hand_yolov8s.pt

  3. Inpainting / Inpaint denoising strength: 0.4~0.8

  4. ControlNet model / control_sd15_inpaint_depth_hand_fp16

  5. ControlNet module / depth_hand_refiner

4でcontrol_sd15_inpaint_depth_hand_fp16を設定する関係上、SD 1.5でしか作動せず、残念ながらSDXLは未対応となる。

以下、実際の使用例を3パターン。各左がBefore、右がAfter。うまく作動しているのが分かる。若干顔が違うのは、ADetailer時、face_yolov8n.ptで顔も修正しているためで、Hand Refinerの影響では無い。

1
2
3
4
5
6

Hand Refinerの弱点!?

さて、これならSD 1.5に関して手(指)問題は解決!と思いがちだが、残念ながらHand Refinerも完璧では無い。Important Q&Aによると

  • 人間が見て酷過ぎるのは修正できない

  • サイズ感がおかしいものは修正できない(手が異様に大きい/小さい、指が異様に長い/短い

つまり「惜しい!」手や指は直せるものの、そもそもめちゃくちゃなのは、そこから正常な状態を推測出来ないので無理と言う話なのだろう。扉の写真は手袋ありなので、手として認識せずこの方法は使えない。

また実際使用した感じだと

  • 深度情報なので2つの手が重なるようなポーズはNG

  • MaskしてInpaintしている関係上、頬杖など、何かに指や手がかかってる場合、境界線辺りがおかしくなる。例えば作例2の手の右側(セーターの柄)、作例4の手の背景

  • 512x512、512x768などSD 1.5系の画像サイズで処理しないと効きが鈍く?なる

特に痛いのは最後。例えばSD 1.5で512x768画像を作り、OKならHires. Fixで2.5x(1,280x1,920)とし、同時にADetailerで顔と手(指)を修正したいが、これが出来ない。

手順としては、512x768画像を作り、OKならADetailerでまずHand Refiner、その画像をimg2imgへ送り、Hires. Fixで2.5x(1,280x1,920)とし、同時にADetailerで顔修正…と二段構えにする必要がある。

この点、Important Q&Aにも少し載っており、SDXL(の解像度)は内部で512x512(つまりSD 1.5)の解像度へ変換しているとのこと。この辺りが影響しているのだろう。

control_sd15_inpaint_depth_hand_fp16のSDXL版なども含め、今後に期待…っと言ったところか。

今回締めのグラビア

今回、Hand RefinerがSD 1.5縛りだったので、扉もこのグラビアも久々にSD 1.5で作ってみた。ModelはyayoiMix_v25。512x768からHires. fixで2.5x(SwinIR_4x)しているが、LoRAなどは一切使っていない。

久々にSD 1.5(yayoiMix_v25)を使ったグラビア!

ボードのサイズ感などは相変わらずメチャクチャだが(笑)、SDXLとはテイストが違い、特にSDXLでは扉の写真のような、広角で寄り+ローアングル言う構図が出にくいこともあり、これはこれでハマると面白い。SD 1.5の新しいModelもいろいろ試してみたいところ。


生成AIグラビアをグラビアカメラマンが作るとどうなる?連載記事一覧
《西川和久》
西川和久

1962年生まれ。プログラマー、IT系ライター、カメラマン(主にグラビア)と、三足の草鞋になってもう四半世紀。

特集

BECOME A MEMBER

『テクノエッジ アルファ』会員募集中

最新テック・ガジェット情報コミュニティ『テクノエッジ アルファ』を開設しました。会員専用Discrodサーバ参加権やイベント招待、会員限定コンテンツなど特典多数です。