顔入替ソフト使用例 - DFL FAQ

DFL FAQ

顔抽出関連

  • Q:srcの顔の未抽出が多いのだが
  • A:もっといいsrc探しの旅に出ればいい

  • Q:srcの高品質化対応
  • A:aligned画像の取捨選択
    • 陰影が濃いもの、前髪が多すぎるものは高画質でも削除
  • A:debug画像でlandmarkの様子を見て、おかしければ手動設定
    • landmarkが暴れてるのは削除

  • Q:dstのextract時の注意点
  • A:debugフォルダを見て、landmarkがついてないもの、おかしいものは削除し手動再設定
  • A:重複してlandmarkがついてるものは余計なaligned画像のみ消せばよい

  • Q:顔画像抽出の精度を上げるにはどうすればいいですか? 取りこぼしが多くて(10%以上)手動で修正するのが大変なんです
  • A:対象動画を変えるしかない。ソース動画の顔の角度が厳しかったりブレたりしてることが原因と思われる。その動画で作っても出来はイマイチだから、別動画または別シーンで作ることをお勧めする。

  • Q:srcとdstのalignedの画像なんですが、顔半分だったりブレたり障害物ありの画像は削除するのでしょうか? それとも別フォルダに入れてtrainしてconvert時に戻すのでしょうか?
  • A:srcのそういう画像は削除する。dstのそういう画像は別フォルダに入れてtrainしてconvert時に戻す

  • Q:カメラ目線の多いsrc
  • A:カメラ目線の多いsrcは寄り目になりやすい感じがあるので、カメラ目線を除外したfacesetも用意しておいて、model育成中は画角重視、仕上げの段階で場合によって切り替え、初めからカメラ目線の無いfacesetでやるのは良い結果にならなかった

  • Q:src画像の厳選
  • A:
    • 動画切り出しでできたpngを高画質化
    • extract.pyのjpg出力品質を100に
    • 各種sortでsrc対象外やあまりにボケすぎてるものを一括削除
    • 各種ツールでほぼ同一な画像は間引き
    • debugでlandmarkを確認、場合によっては手動で再設定(横顔の目の位置がずれてることがわりとある)
    • 個別の高画質写真を追加
    • 閉じ目や半目の追加
    • 口開け、歯が見える画像の追加
    • 極端な表情の取捨選択
    • 足りない画角を他人ので補う?
    • 触覚ありや前髪ぱっつんの取捨選択
    • 違う光源の追加や取捨選択

  • Q:src画像
  • A:同じ角度でも目を閉じてる、目が半開き、目線が違う。言い出したらキリないけどPCスペックが許す限り画像は多い方がいいけど、その分trainも遅くなる。

  • Q:斜視
  • A:斜視は、あらゆる目線の画像が少なすぎるかtrain不足なことが多い

  • Q:横顔、上向き、うつむき
  • A:横顔は頑張って集めたり高画質化したりで手間かけたほうがいいけど、上向きや俯きはもう他人のでもありだと思うよ。笛画像にこだわりがあるなら別だが

  • Q:srcの高品質化対応
  • A:Gigapiexl AIや1229版以降のenhance機能で高画質化



train関連

  • Q:trainが始まらない
  • A:バッチ数を1にしてみる。最初は軽いモデル(H64、Quick96、DF)で試してみる

  • Q:randam flip設定は?
  • A:外斜視はrandam flipが犯人のケースが多い。顔を貼り合わせるから。onなら最初からoffにしてみる
  • A:random flipはオフの方がいい。左右完全対称の人間なんてこの世にいないし、別人になりやすい。
  • A:srcがよっぽど足りない状況じゃないかぎりオフが推奨ですな。

  • Q:学習速度の改善、似せる方法
  • A:dstの解像度も高ければ高いほどいい。学習早くて似る。コンバート後に解像度を下げて馴染ませて完成

  • Q:横顔学習
  • A:横顔とか重点的にトレインしたい時はその画像だけalignedに置いてやってる。プレビューで分かるが横顔の学習はその方が早い。全体的な成果に対しての影響は分からない。 ただ単純に画像増やすのもいいと思うけどalignedの画像増えると全体的なトレイン時間は増える。

  • Q:学習時にdstを絞る
  • A:縦笛でマスクするときは間引いてる

  • Q:Feed faces to network sorted by yaw?
  • A:Feed faces to network sorted by yaw?をオンにしてると学習前にsrcとdstのyawでsortしてdstに無いyawのsrcは学習しない様になる。
    • 現在のsrc/dstで速く動画を完成させたい場合はオン
    • 汎用のsrcモデルを作成したい場合はオフ

  • Q:train中のコンソールの表示
  • A:[現在時刻][train回数][1回のtrainにかかる時間][srcのloss値][dstのloss値]

  • Q:train中のプレビュー画面の表示
  • A:[srcの顔画像][srcの顔画像を学習した顔画像][dstの顔画像][dstの顔画像を学習した顔画像][顔入替え後の完成見込み]
  • A:プレビューの5列目はハメ込まない絵
  • A:上のグラフはloss値の低下具合の時系列

  • Q:train不足の見極め方
  • A:全体的に画像がボケている
    • がんばってもっとtrainする
  • 正面は綺麗だが横向きや俯きがおかしい
    • src画像のバリエーションが足りない
  • previewだと綺麗だがconvertすると別人
    • srcとdstの相性が悪いので諦めよう
  • loss値(黄色のグラフ)が下がらない
    • dstに変なaligned画像が混じっているかも

  • Q:2回目以降?のtrain始めると、設定が飛ばされるんだけど、これは正常なのでしょうか
  • A:
Loading model...
Press enter in 2 seconds to override model settings
と表示されたはず
2秒以内にEnterを押せば、設定変更可能なパラメーターは変更可能
バッチ数とかは変更可能
最初に設定したら、途中から設定変更不可能なパラメーターあり
どうしても変更したい場合は、モデルデータをバックアップコピー後、削除
0からTrainし直し
2秒以内にEnterを押さなければ、前回設定のパラメーターで継続trainされる



SAEHD train関連

  • Q:face_typeは?
  • A:f、Full Faceの方が似せやすい

  • Q:models_opt_on_gpuは?
  • A:yes、Trueの方が高速に実施できる。Noの場合は、どうしてもバッチ数を大きくしたい場合のみ。大差はなかったりする

  • Q:archiは?
  • A:dfhdまたはdfが基本。liaehdやliaeは横顔、俯き顔とか角度が厳しい時に使用。ただし素材不足だとうまくいかない

  • Q:learn_maskは?
  • A:短時間(5-6k回の反復)のみマスクを有効にすればいい

  • Q:random_warpは?
  • A:最初yes。顔が十分訓練されたらNoに変更してtrain

  • Q:power類は?
  • A:最初は0。顔が十分訓練されたら最後の味付け

  • Q:ct_modeは?
  • A:基本train時はnone。mergeの時に頑張る



merge関連

  • Q:overlay rctでやっても完成動画の顔色が合わない
  • A:overray idt-mかseamless idt-m

  • Q:srcの前髪がでてくる問題
  • A:True Faceやめるかsrc mask
  • A:長さによるがerode100とか数値上げれば消える


H128でおでこの境界線を消す方法
コンバート時に
  1. blur mask modifierを上げて
  2. erodeも上げる
  3. rctあるいはlctを選ぶ
  4. おでこのあるsrc画像を増やす
  5. vram11GBあればFAN-learned/dstを選ぶ

  • Q:H128境界線問題
  • A:境界線問題解決した。MODEL.py見ると前までのやつはデフォルトでerodeとblurが+100になってたみたい

  • Q:指定したフレーム番号からコンバートする方法は?
  • A:dstフォルダ直下の画像、dstのaligned_debugフォルダ内の画像、dstのalignedフォルダ内の画像をconvertしたいものだけにすればいい

  • Q:H128でdstの眉が使われてしまう問題
  • A:H128でdstの眉が使われてしまう問題はDFでtrainしてerode=-200でconvertすることで解決する。

  • Q:erode設定
  • A:erodeは思い切ってマイナスした方がいいな。あるdstでは、erode-350 blur250くらいで本人さんになった
  • A:erodeをどこまでマイナスにできるかはdstによる。思い切ってマイナスにしない方がいいdstもあるし、 マイナスにしたところで本人に近づかないdstもある。
  • A:erodeマイナスで違和感の人、bg_style_power上げてる?

  • Q:コンバートの設定は毎回同じなのに、手動で打ち込むの面倒なんだけど、これ先に指示できないのかな?py書き換えるしかないの?バッチファイル上で書けない?
  • A:バッチファイルの中のコンバートの最後の行の後ろに
< convert_op.txt
みたいな感じで追加して、そのテキストファイルに設定を書いとけばできる。
例えば、
"%PYTHON_EXECUTABLE%" "%DFL_ROOT%\main.py" convert ^
    --input-dir "%WORKSPACE%\data_dst" ^
    --output-dir "%WORKSPACE%\data_dst\merged" ^
    --aligned-dir "%WORKSPACE%\data_dst\aligned" ^
    --model-dir "%WORKSPACE%\model" ^
    --model SAEHD < convert_op.txt
みたいに書いて・・・

後はconvert_op.txtに
n
1
1
-200
200
0
0
rct
以下省略・・・
って感じで書いて保存。
設定ごとにバッチファイルとテキストファイルを作れば、使い分けもできる。

  • Q:erode
  • A:convert時に erode_mask_modifier: をマイナスにすればするほど src寄りの顔に仕上がる。erode:-200 mask blur:+400 辺りでかなり本人さんになるな
  • A:erodeは変換範囲のパラメータであって、srcに寄せるためのオプションではない。
  • A:実際やってみて"scrに似た"って書いてるだけだ。
  • A:実際変換範囲が広がれば似るだろうし。ただ、このスレで言うsrcに似てるかどうかというのは、パーツの配置やそれぞれの再現度などを指して議論されているわけで。erodeを下げると似ましたーってのは単純に文章の書き方がおかしい。
  • A:まぁ言わんとするところは分かるがsrc寄りになるもんはなる。
  • A:似るのは間違い無いんだから「よく分からんなら書き込まなくてよい」は言い過ぎ。
  • A:まぁ確かにここでは「似る」ってのは言うとおり、srcの再現性が重要課題だから。只、キミの設定では画角変化で異常が出るし上げるほど馴染みに問題が発生する。更にBlur上げ過ぎるとDst側の影響を受けるから「似なく」なる。

  • Q:顔色だけが合わないので顔がういてしまう
  • A:ソースの顔色がバラバラならSeamless、clor transfer を idt

  • Q:顔が揺れる
  • A:顔が揺れるバグ?がでたらブラー関係の値を下げてみる



Mask関連

  • Q:眉毛ごん太問題
  • A:眉毛ごん太問題遭遇したことないが、想像するに
  • srcとdstの前髪・眉毛をマスクしていない
  • convert時にerodeをマイナスにしていない
  • srcとdstの両方またはどちらかのランドマークがずれている
あたりかね。
でこだしsrcを収集するのがもっとも手がかからない。
  1. 本質的には前髪ぱっつんのsrc画像は使わない
  2. 前髪を避けてmaskを手動再設定
  3. elode値を上げる(が輪郭再現とトレードオフ)
  4. FANdstにするとうまくいくこともある

1.以外は結局srcの眉毛ではないのでどう考えるかは人それぞれ
  • A:というより前髪があるsrcは原則不可ということを最初に説明すべき。

  • Q:srcにmaskすれば、前髪生えないって本当?src全部に手動でmaskって、かなりの手間だと思うんだけど。
  • A:本当。もちろんlearn maskでtrainして convert時もlearnまたはlearned * fan-prd * fan-dstにする必要はある。
  • A:全部にする必要はない。普段はlearn mask offにしてmask無しのalignedを十分学習する。convert前にlearn mask onにして適当に間引いてmaskしたalignedのみを学習。previewで5列目のmaskを確認してからconvert


FANSEG関連

  • Q:FANSEGモデルの学習
  • A:srcに学習用にmask編集済みaligned。dstには確認用のaligned。どっちも障害物有り無し両方あったほうがいい。

  • Q:fanseg学習用のバッチのサンプル
A: 6) train FANSeg.bat
@echo off
call _internal\setenv.bat

"%PYTHON_EXECUTABLE%" "%DFL_ROOT%\main.py" train ^
    --training-data-src-dir "%WORKSPACE%\data_src\aligned" ^
    --training-data-dst-dir "%WORKSPACE%\data_dst\aligned" ^
    --model-dir "%WORKSPACE%\model" ^
    --model DEV_FANSEG

copy "%WORKSPACE%\model\FANSeg_256_full_face.h5" "%DFL_ROOT%\nnlib\FANSeg_256_full_face.h5"

pause

後のコピーがあるから、バッチはフルサイズ、f

元のfansegモデルデータのバックアップをお忘れなく。
髪の毛も学習させてる。

  • Q:FANSegモデルはdstごとに作成するのですか?srcごとに作成するのですか?
  • A:dstごとに作成して、追加していけば、dstごとに作成しなくてもほとんど大丈夫なモデルができる。

  • A:FANseg
fansegは障害物を通常のtrainとは別に学習して、convert時のオプションで適用で、それらを取り除く。
通常のmask学習は通常のtrain時にmask範囲を学習して、convert時にその範囲だけ出力。
mask学習で口回りにmaskすると口回り全部がdstで出力されるのに対して、
fansegで棒や舌を学習させると、その部分だけdstで出力される。
ということで、舌が変な感じで出てたりということもある。

convert時のオプションが適用されるのは下記

Choose mask mode:

(4) FAN-dst
(5) FAN-prd*FAN-dst
(6) learned*FAN-prd*FAN-dst

loss値のグラフ(プレビュー画面)

  • 青と黄色のグラフはloss値
  • loss値:trainの進捗具合を示す指標、2.0くらいから始まり、小さいほど良いとされる
    • 使用するmodel(DFやSAEHD等)や学習に利用する顔画像の解像度(64/128/256等)により目安は変わるが、おおむね0.0x〜0.2あたりが実用レベル※個人的見解
  • 青:src(好きな芸能人等)のaligned画像に対するloss値、dstに関係なくtrainすればするほど下がっていく
    • これが十分に下がった状態がその一つの目標であり、他のdst動画にも(少ない学習で)適用可能※このmodelファイル(および洗練されたsrcの画像群)が各人の重要資産と言っても良い
  • 黄色:dst(AV女優等)のaligned画像に対するloss値、これが下がった状態が作りたい動画に対する目標
    • 一般的に青が下がってないと黄色も下がらない(例外あり)
  • 白:グラフの横軸。

経験則的には
srcの画像バリエーション(色んな角度や目線/口の開き方等)が多いほど青グラフは下がりにくい
画像を少なくすれば早く学習はできるが対応できるdst動画は少なくなる



初心者質問



その他

  • Q:プレビュー画面では結構似ているのですが、Convertして動画にしてみると、あまり似ていないのは、なぜなのでしょうか?モデルはDF256です。srcとdstの相性が悪いのでしょうか?輪郭、髪型、体型は気にせず、顔のパーツだけ気にしているのですが
  • A:プレビューはハメ込まない絵だから。観光地にある顔抜きフレームで写真撮ると、本人顔でも別人みたいになるのと同じ。もう一点、忘れがちなのは表情のモーションが似てるかってトコ。試しに清水ミチコとかコロッケにハメてみ。妙にマッチするから。

  • Q:Dst動画がFull HDなどで、顔のアップの場合
  • A:H128やDFで学習していて、alignedで切り出される顔サイズも、256×256ピクセルなので、Full HD動画の場合は顔が少しボケますね。動画を720pにするか、50%にして540pでやっています。

  • Q:VR動画の作成法
  • A:基本2Dと同じ作業でいけます。ただ、顔が画面端で歪んじゃうと、顔として認識されないので注意。だからdst動画の選別が限られてしまいます
  • A:本格的にVRやろうとしたらCube2DMを使って一旦2Dにするという方法がある。非常に面倒くさい

関連項目

外部リンク




寄付(任意)について

Amazon.jpギフト券での寄付は受け付けています
  1. AmazonでE-Mailタイプのギフト券を購入(金額は任意)
  2. 自分のアカウントに登録はしない
  3. 下記メールアドレスにAmazonギフト券番号を記載し、通知
  4. tomoe.magica@gmail.com


Seesaa Wiki関連リンク