← Back to スタジオ真榊

Pixiv Fanbox

【追加研究】「自分の手」を理想の手に変換(CoppyLoRA使用)

Published 03/15/2025, 11:56:58 AM · Edited 04/01/2026, 11:36:21 AM

【追加研究】「自分の手」を理想の手に変換(CoppyLoRA使用)

こんばんは、スタジオ真榊です。今回は、「手の演技」の記事で今後の課題としていた「女の子の手を再現する方法」について、追加検証結果を報告します。


前回の検証を簡単に振り返ると、

・t2iで"手だけ"の画像を生成しようとすると破綻しがちで、思った通りのポーズにならないことが多い

・そこで、理想の画角・形状を自分の手で再現して写真に撮り、それをローカル環境のControlnetでAIイラストに「変換」する

…ということをやってみたわけです。


この手法は思った通りの角度・表情の手をミリ単位で即座につけられるのがメリットですが、操作者が男性だった場合、女の子の手のAIイラストにしようとしても、腕や指の太さ、形状が継承されてしまって、いまいち再現度が足りないーというのが課題になっていました。操作者が女性だった場合も、やはりアニメ・漫画の手はすらっと誇張されて描かれるものですから、実写画像をそのまま変換しても、なんとなく違和感があるのではないかと思います。


今回は主にCoppyLoRAを使って、そうした違和感を解消する方法の検証報告となります。


目次

1.まずは「好みの手」を決める

  ・「画風のズレ」に注意

2.同じポーズで手を撮影

3.CoppyLoRAwebUIで学習

4.完成したLoRAを検証

5.ADetailerで手だけに適用

  ・「手だけ画風が違う」問題

6.白黒画像同士で差分を取る

7.自分の手で検証

  ・Openposeではダメなのか?

終わりに - 押し寄せる進化

  ・ADDifT

  ・Gemini 2.0 flash experimental



1.まずは「好みの手」を決める

最初に今回検証するフローを紹介しておくと、

「まずt2iなどで理想の手の画像を入手」▶「できるだけ同じポーズ・大きさにした自分の手を撮影」▶「2枚の差分をCoppyLoRAとして抽出」▶「普段使いのローカルモデルに適用・マージするか、ADetailerで適用」

…というものです。前回のやり方では無骨な手になってしまうのを、コピー機法で作った「理想の手LoRA」の修正力でなんとかしようという発想ですね。


何はともあれ、まずは「お手本」となる理想の手をt2iで入手するところから始めたいと思います。手一つにも非常にさまざまな描き方があるわけで、爪やしわを描くかどうか、どれくらい女性らしさを誇張するかといったところに個性が現れます。


普段遣いのローカルモデルで生成してもよいのですが、今回はデビューしたてのNovelAI V4を使って好みの手を生成してみることにしました。こちらのレビュー記事でも試しましたが、「手だけ」の生成がかなりきれいにできるようになっていますし、自然言語も効くので、「理想の手」を再現しやすそうなのが理由です。


どんなポーズでも構いませんが、ポイントはあまりリアルすぎないことと、女の子らしい手になること。あまり突飛なポーズではなく、手のデザインがよく出ているものにすること。ですので、グーやチョキではなく、パーで生成したほうがよいかなと思いました。また、イラストや漫画生成の実用面を考えると、手の甲側より掌側が見える絵を生成することの方が多そうなので、こちらに掌を向けている画像をお手本とすることにしました。


「PP:hand focus, 1girl,out of frame,handnails,white background,simple background,open hand」で生成したのがこちら。画風やクォリティタグをさまざま試して多数ガチャしましたが、この一枚が最も理想に近いと感じました。


・「画風のズレ」に注意

今回のテーマは、女の子らしい爪や指のラインを描きつつ、イラストレーティブなアウトラインを維持することでした。あとから分かったことですが、ここで注意すべきなのは、普段のモデルで使う場合にあまり画風が違いすぎると、手だけが他の部分と違って見えてしまう点。ADetailerで適用すると、手だけがNovelAIの画風、そのほかは普段のローカルモデルの画風、というのがあからさまになってしまいます。


理想の手のデザインができたら、普段使いのモデルでi2iするなどして、塗りや線画部分の太さくらいは揃えた方がよいと思います。Anytestで線画だけを揃えてもよいかもしれません。


2.同じポーズで手を撮影

今度は同じポーズを自分の手で撮影します。「お手本」の手とは指の長さ・細さが違いすぎますが、できるだけ頑張って同じポーズにしました(笑)

右の画像は以前紹介したiphoneを使う手法で背景を消しています。ここであまり画角や大きさが違いすぎると、手の位置や大きさを変更するLoRAになってしまいますので、画像編集ソフトで調整します。


このように透明度をいったん下げて、お手本画像と重ねてみるとわかりやすいです。キャンバス上で2つの手がおおむね同じ位置に来るように画像編集ソフトで調整しましょう。2枚の画像の間で「違う要素」があるとすべて抽出されてしまうので、「この女の子の手に変更する」という概念以外はできるだけ差が出ないようにします。

かなりポーズが違いすぎて不安になりますね…。イラストの手には"ウソ=誇張"があるので、全く同じにするのは難しかったです。いずれの画像も、1024x1408pxで保存しました。何はともあれ、これでキャンバスサイズと見た目が(おおむね)同じ「理想の手」と「現実の自分の手」が揃ったわけです。


3.CoppyLoRAwebUIで学習

2枚の画像ペアから差分を抽出できる「CoppyLoRAwebUI v2」を使って、このペアの差分を取ってCoppyLoRAを作ります。(CoppyLoRAの使い方については過去重点的に検証していますので、まだ使ったことがない方はこの記事などをご参照ください)


上の段に「現実」、下の段に「理想」を入れます。上下の差分をきれいに抽出するにはできるだけキャプションを同じにしたいので、上の手は女の子の手であることにして(笑)、どちらも「1girl, close-up, hand focus, solo, simple background, white background, fingernails」と入力しました。


Q.なぜphotoとかrealisticとか1boyとかを入れないの?

差分を抽出することだけが目的だからです。ここではそれぞれの画像の正確なキャプションを求められているわけではなく、むしろ「ウソ」をついたほうが差分がきれいに抽出されるはずです。「上の手は男の手の写真で、下の手は女の子の手のAI画像です、差分を取ってください」と言われるより、「上も下も女の子の手です。どんなときもこのプロンプトで指示されたら下段のような画像が出るように覚えてください」と言われたほうが分かりやすいんじゃないか?ということを期待しています。



これまでの検証結果を踏まえると、上の画像の画風は下の理想図とかけ離れているほど良いようなので、特にimage2imageなどせず実写のままでOKです。こうすることで、強く「理想の手」の画風に修正するバイアスが働くLoRAになるはずです。


ベースモデルは普段のモデルを指定しましたが、illustriousやAnimagineなどのベースモデルを指定してもよいと思います。LoRA名を決めて学習開始。うちのRTX4080環境では、おおむね40分ほどでLoRAができました。


4.完成したLoRAを検証

手とその画風以外には大きな変更がないLoRAになっていれば成功です。コピー機LoRA法の原理からすれば、「手だけの画風をピンポイントで修正するLoRA」ではなく、画面全体の画風をこの差分のように変更する効果が出るはずです。


こちらのイラストを生成する際、LoRAを適用したかどうかでどんな影響があるか実験してみます。


全く同じ画像生成設定で、さきほどできた「理想の手CoppyLoRA」を強度1で掛けました。前後の変化が分かりやすいよう、GIF動画にしてみます。


予想通り、画風変更の効果が画面全体に及んでいることがわかります。さきほどの2枚の差分は「下の理想の手の画風を覚える」結果をもたらすので、普通に適用すると画面全体が「理想の手の画風」に変化してしまうわけですね。線画がところどころ途切れて光を表現する手法や、少し褪せた色合い、影の使い方などが特徴的です。


目などのキャラデザインはそこまで大きく変化していませんが、ポーズや背景などもわずかに変更されていることが分かります。これは画風変化の影響もありますが、さきほど私の手とお手本イラストのポーズに差があったことも影響しているのかなと思います。適用前後で全然違う画像になっていたら問題ですが、それなりに同じものが描かれているのでギリギリ許容範囲でしょうか。


5.ADetailerで手だけに適用

では、理想の手CoppyLoRAをこの絵の「手だけ」に適用するとどうなるでしょうか。このやり方は、以前「ADetailer専用LoRA」の記事で検証した方法です。このときは目LoRAと顔LoRAでしたが、今度は「手LoRA」というわけですね。


ADetailerをONにし、デフォルトで入っているhandモデルを指定します。ADetailer上のプロンプトには手に関する簡素なプロンプトと、「理想の手CoppyLoRA」を強度1で掛けるよう指示します。


こちらが生成結果。ADetailerを掛けたものと掛けないものをGIF動画にしています(手のところにご注目ください)

手のポーズはそのままに、入り抜きのある感じや爪の描写がちゃんと入れ替わっていますね。ただ、強度が強すぎたためか、正方形にインペイント痕が残って、特に黒板の色が周囲と変わってしまっているのが目立ちます。加筆でなじませてもよいですし、ADetailer強度やぼかし度を調整してもよいでしょう。


・「手だけ画風が違う」問題

ただ、問題は手の画風とその他の画風が違いすぎて、手首部分からあからさまに線画の太さや色が変わってしまっていることですね。「理想の手」をt2iする際にも少し触れましたが、お手本画像を作る際にもっと画風の統一感を図る必要がありました。


いくつか考え方はあると思いますが、さきほどのようにこのお手本の手の画風をキャンバス全体に掛けてしまって、「アップデートしたそういう画風」として今後やっていくか、最初に差分を取った「お手本イラスト」をもっとベースモデル寄りの画風にするか、の二択でしょうか。「あくまで手の形状だけを変えたい」という場合は、AnytestやLineartなどでお手本イラストの線画を守りながらベースモデルの塗り・画風に寄せるとよいでしょう。


また、CoppyLoRAの仕組みから考えると、白黒画像同士で差分を取ることによって線画の形状だけが変更されるLoRAになりますので、カラーの変更を気にしなくて済むのではないかと思います。さっそく試してみましょう。


6.白黒画像同士で差分を取る

さきほどはカラー写真とカラーのお手本の差分を抽出しましたが、それによって色・塗りの変更が伴うLoRAになりました。「理想の手」の塗りは別に再現しなくてよく、指の細さや形状だけでいいという場合は、「現実」と「理想」の画像ペアをどちらも白黒にしてしまう手があります。


影に影響が出ないようにしたいので、漫画のようなグレイスケールではなく、完全に線画にしてしまったほうがいいでしょう。カラー画像を線画化する手法はCopainterなどいくつかありますが、個人的にきれいにできると思うのはAnytestを使う手法です。

線画化したい画像をAnytestV4にデフォルト値で読み込ませて、月須和さんの線画化LoRAとFLAT LoRAを適用するだけです。

PP:hand focus, 1girl,out of frame,handnails,white background,simple background,open hand, masterpiece, best quality, newest, absurdres, highres, white pupils,, (white background, simple background:1.3), <lora:test-sdxl-lineart-11:1>lineart,monochrome,, <lora:sdxl-flat:1>


するとこのようなものが得られます。どちらも全く同じ設定で作った線画です(それぞれAnytestに読み込ませたのが左側の画像なだけ)


下段の線画はちょっと指の根本のしわが強調されているので、おばあちゃんの手みたいに見えて気になります。さっと消しゴムしたいところですが、とりあえずこのままだとどうなるのかいったん試してみましょう。


さて、この2枚の線画をペアにして、同じようにCoppyLoRAを作ります。キャプションは「hand focus,1girl,solo, simple background, white background, monochrome, lineart,greyscale, fingernails, reaching, outstretched hand, palms」です。太字部分を加えないと、色味を失わせるLoRAになってしまう恐れがあるので注意。



できたものがこちら。さきほどに比べて、塗りへの影響が抑えられたのが分かるかと思います。手・指のしわがちょっと過剰で、おばあちゃんっぽく見える嫌いもあるかもしれません。やっぱりさきほどのしわはほどよく消したほうがよさそうですね。


GIF動画にするとこう。カラー画同士で作るか、線画同士で作るかは、「理想の手」として用意したお手本の塗りを再現したいかどうかで分けるとよいかなと思います。



見比べるためにもう一度掲載すると、こちらがカラー画同士で学習させたものです。塗りや全体の線画に影響してしまっているのが分かるかと思います。


7.自分の手で検証

さて、ここからが本番。通常生成ではうまく「理想」に近づけられるLoRAができたので、自分の手の写真をイラストに変換する際に適用してみます。


いろいろ試してみたのですが、輪郭を継承するanytest系やLineart系で使っても、この寸詰まりな手の輪郭そのままになってしまって意味がないので、「おおまかに形状を再現する」Scribbleを使ってみます。今回使ったのはこちらの「Xdog sketch」。


このような感じで設定します。Xdog sketchの特徴は、control stepを前半2~3割しか掛けないこと。詳しくはこちらをご参照ください。


上のControlnet設定で、「PP:hand focus, white background,simple background,open hand,palm,<lora:myhand_v2:0.5>+クォリティタグ」で生成したのがこちらです。適用したのは白黒画像差分で抽出したLoRAなので、塗り部分は使用したモデル由来のものになっています。

画風は再現できているのですが、指がまだ私の手の印象から離れきれず、寸詰まりな感じがしますね。ただ、「指を細く・長くする方向」を強めすぎると、自分の手の「理想のポーズ」から離れてしまうので、複雑なポーズほどそれがなかなか難しくなります。


ほどよく変化させつつ、ポーズはそのままにしたいので、今度はimg2imgとControlnetを併用して再現してみます。読み込ませたのはこちらの手。プロンプト指示ではいわく言い難い手の形ですので、これを再現しつつ、女の子らしい手に変えられるか試します。


Controlnet設定はこちら。今度はanytestv3を使いますが、Ending control stepが0.25と短いのがポイント。全ステップに掛けるとおっさんの手の輪郭が継承されてしまうので、前半25%まではしっかり手の形状を印象付けつつ、後半75%は自由に生成してもらう設定にしています。


生成設定はこちら。しっかり女の子の手に変えてもらいたいので、ノイズ除去強度は最強にしています。ノイズ除去強度とEnding control stepは手の形状の継承度とバランスを考えて微調整するとよいでしょう。


こちらが生成結果です。学習させた理想の手のタッチが出つつ、ポーズも継承し、ほどよく手のごつさが修正されているのではないかと思います。


・Openposeではダメなのか?

本来の用途からすれば、この作業は輪郭は無視して骨格(ボーン)だけ継承できるOpenposeがもっとも向いているはずなのですが、現状このような複雑な手の形状をきちんとボーン化し、プロンプト指示通りに変更するモデルはまだ出てきていないように思います。例えばこのように、DW openposeでは曲げている指とそうでない指の区別がつきません。

今回の手法でもどうしても手の太さなどがイメージ通りにならない場合、ある程度クリスタの歪みツールなど画像編集に頼らないといけないかもしれません。来年あたりになればもう解決しているような気もしますが、とりあえず現状の検証はこういった結論となりました。



終わりに - 押し寄せる進化

そんなわけで、「自分の手を理想の手に変換する」でした。

今回のテーマとは直接関係ないのですが、この記事を書いている途中に、「ADDifT」と「Gemini 2.0 flash experimental」という二つの新AI技術が登場し、このところ検証に追われる日々を送っています。


・ADDifT

supermergerやregional-prompterで知られるhakomikanさんが開発したADDifTは、ざっくり言うと「進化版・コピー機法」とでもいうべき追加学習法。この記事でも使ったCoppyLoRAは、2枚の画像をもとにそれぞれLoRAを作ってから差分を取るので、二つLoRAを作るための時間が掛かるわけですが、ADDifTは2枚の画像をもとに一発で差分LoRAを抽出することができるわけです。

hakomikanさんの提供されているSD系拡張「traintrain」で利用することができるのですが、私の使っているreForgeに導入すると環境ごと壊れてしまうので、A1111版かForgeで導入するか、拡張ではなく単独で動作する「traintrain-standalone」を使うのが良いと思います。

現在検証中ですが、CoppyLoRAに比べて学習速度が段違いに速いので、例えば今回の「理想の手LoRA」を作る場合でも、グー・チョキ・パーの3パターンで作ることが苦も無くできるわけですね。それらをマージすることで、プロンプト応用力の高いLoRAが作れるのではないか?と期待しています。ただ、時間がかかるCoppyLoRAの方が精度の高いLoRAが作れるようにも感じており、良い活用法を模索している段階です。


・Gemini 2.0 flash experimental

こちらはもう、数日前からTLをにぎわせているので皆さんもよくご存じのものと思います。Googleが提供するGoogle AI Studioで、プレビュー版としてリリースされたマルチモーダルモデルで、画像編集をこれまでと段違いのレベルで実行できると話題になっています。

これまでこのFANBOXで行ってきたさまざまな画像加工を、日本語指示するだけでかなり空気を読んで再現できることを確認しています。例えば「画像を線画化する」「線画を着色する」「線画を守りながら他の色に塗り替える」「キャラクターや風景の別角度を推論する」「画像の一部分だけを指示通りに直して他はいじらない」「衣装の写真を入力してそれを着た人物を生成する」「背景だけを変更する」「複数の画像を入力して組み合わせる」「存在しない続きを描く」ーといったことが日本語指示で可能です。

それぞれ、Controlnetやインペイント、img2img、レファレンス機能、動画生成モデルなどを使うことでこれまでも実現可能な技術ではありましたが、それらの個別の知識がなくても、ワンストップで「お願い」するだけでやってくれるのには驚きました。弱点としては、全身が描かれているキャラクターの画像を編集させようとするとすぐにNSFWエラーを起こす(特に制服など未成年女子を思わせるものだった場合)ので、ちょっとまだ使いにくさもあるのですが、能力的にはこれまでなかった異次元レベルに突入しています。そのほか、武器や爆発、事件を想起させるもの、著作権関連などの生成依頼も弾かれやすいようです。


このあたりはまだプレビュー版ですので、これからブラッシュアップされていくのかなと思いますが、ざっくりした「お願い」はGeminiに頼み、事細かな画像編集はSDで行うようなワークフローになっていくのかなと思います。

というわけで、順次このあたりの検証記事もまとめて書き進めていければと思っています。特にGeminiはSDやNAIがまだ苦手な背景の問題をクリアしてくれそうに見えるので、大変有望な技術ですね。「理想の手」問題も、もしかするとマルチモーダルでもっと簡単に解決できる日がそう遠からず来てしまうのかもしれません。


さらにClipstudioも4.0にアップデートされ、投げ縄の線画吸着やパペット変形などなどなど、もはやお絵描きの域を超えた画像編集ができるようになりました。AIイラストでも異様に使える機能が目白押しで、これも検証や紹介が必要だと思っています。


技術革新はなぜか突然一気にいろいろなところから押し寄せてくるもので、検証が間に合いませんが、これまでできなかったことがこれらの組み合わせでどんどんできるようになってくる気がしてわくわくしますね!


それでは今日はこのへんで。スタジオ真榊でした。



Attachments (21)

eTG5Mb0tgux42xYHWpQ8dtTJ.png

eTG5Mb0tgux42xYHWpQ8dtTJ.png

68JL9sh5eKcHRU11wW4HGjLq.jpeg

68JL9sh5eKcHRU11wW4HGjLq.jpeg

7SUrDbCjWAbOlEXCvhK2GdUF.png

7SUrDbCjWAbOlEXCvhK2GdUF.png

q2eXjGu2WCDuQ65aMN5cjQUE.png

q2eXjGu2WCDuQ65aMN5cjQUE.png

RWyDFq3foXPcEhrpO5l9yql9.png

RWyDFq3foXPcEhrpO5l9yql9.png

eERBj4Ilm20a10VZGn7dBZdS.gif

eERBj4Ilm20a10VZGn7dBZdS.gif

eeMWpFZxJGfwpPfQlwwOIzAW.png

eeMWpFZxJGfwpPfQlwwOIzAW.png

S049AOfE8RVHV6xAAACQotXX.gif

S049AOfE8RVHV6xAAACQotXX.gif

MFg7JTfn1boaNf7S7injFdZR.png

MFg7JTfn1boaNf7S7injFdZR.png

8gJcvg5VwoHOoAelTz2Oq7lc.jpeg

8gJcvg5VwoHOoAelTz2Oq7lc.jpeg

EjYo4Ar0HD0WDZFVkIQnscv0.png

EjYo4Ar0HD0WDZFVkIQnscv0.png

lYedgVmqPCsK1Adq4aHpM3OW.jpeg

lYedgVmqPCsK1Adq4aHpM3OW.jpeg

Z6yY0W6stoH7nZ49GKZQ1Aa4.gif

Z6yY0W6stoH7nZ49GKZQ1Aa4.gif

nbnZNpjS8WtHyijIVTIU2gue.gif

nbnZNpjS8WtHyijIVTIU2gue.gif

Y6Tq4jcP5NsZqyl6kCeDyt41.png

Y6Tq4jcP5NsZqyl6kCeDyt41.png

LXNE8njvOCnwZklLVdMNVu0O.png

LXNE8njvOCnwZklLVdMNVu0O.png

DWJF4saI4sjmhUjWPxp3BScX.png

DWJF4saI4sjmhUjWPxp3BScX.png

cWdFkOmcrZpKzIfox21usCfl.png

cWdFkOmcrZpKzIfox21usCfl.png

doMtDSIB3qh8qk86UaEty6e8.png

doMtDSIB3qh8qk86UaEty6e8.png

dnoayFPXUXPuMgh5GoWptqc0.png

dnoayFPXUXPuMgh5GoWptqc0.png

1lGtN662AQfhY2veYBOLSFL0.png

1lGtN662AQfhY2veYBOLSFL0.png