Google Colab で DeepFaceLab を動かせる DFL-Colab


# 参考文献

- [[SFW] [GUIDE] - DeepFaceLab 2.0 EXPLAINED AND TUTORIALS (recommended)](https://mrdeepfakes.com/forums/thread-sfw-guide-deepfacelab-2-0-explained-and-tutorials-recommended)
    - [iperov/DeepFaceLab](https://github.com/iperov/DeepFaceLab) からリンクがある英語版ガイドです 
- [【最新版】DeebFaceLab 2.0を使ったDeepfakeの作り方](https://www.deepfake.xyz/deepfacelab/how-to-use-deepfacelab20/)
    - パラメータの説明など詳しいです、どういう項目があるのかだけでも読んでおいた方が良さそうです
- [顔入替ソフト使用例](https://seesaawiki.jp/dfl/)
    -  チューニングの Tips などがあります

# DFL-Colab

[iperov/DeepFaceLab](https://github.com/iperov/DeepFaceLab) の Releases 中にリンクがあった、DeepFaceLab を Google Colab で動かせる [chervonij/DFL-Colab](https://github.com/chervonij/DFL-Colab) を試します。[chervonij/DFL-Colab](https://github.com/chervonij/DFL-Colab) の [Works with latest DFL version](https://colab.research.google.com/github/chervonij/DFL-Colab/blob/master/DFL_Colab.ipynb) から Google Colab を開いて実行していきます。([Works with latest DFL version のソースはこちら](https://github.com/chervonij/DFL-Colab/blob/master/DFL_Colab.ipynb))

グラボが無いけど学習したい時や、あっても Google Colab より遅い時、とりあえずどんなもんか試したいだけなどの場合に有用そうです。

## 1. データの準備

DFL-Colab 用の入力動画 2 つ(顔入れ替え元・顔入れ替え先)を zip で固めて、Google Drive に置いておきます。アーカイブ名は Google Colab 上のフォームで指定することもできますが、デフォルトで入力されている以下のファイル名・ディレクトリ名で固めておいた方が面倒が無さそうです。

- `workspace.zip`
    - `workspace/`
        - `data_src.mp4` (入力動画、顔入れ替え元)
        - `data_dst.mp4` (入力動画、顔入れ替え先)

ディレクトリが1個挟まっています。
後述しますが、この Google Drive 上の `workspace.zip` は `Export to Drive` の時やバックアップの度に上書かれ、前処理後のデータが入る `data_src` `data_dst` ディレクトリや、学習中モデルが入った `model` など全部入りの zip になります。

## 2. DFL-Colab の実行

2020/09/21 時点の[最新版](https://github.com/chervonij/DFL-Colab/blob/master/DFL_Colab.ipynb)では、以下の章があります。「すべてのセルを実行」などで上から順に実行すれば OK … *という構成にはなっていない*ので注意が必要です。

- `Prevent random disconnects`
- `Check GPU`
- `Install or update DeepFaceLab`
- `Manage workspace`
- `Extract, sorting and faceset tools`
- `Train model`
- `Merge frames`

以下メモです。

### 2.1. `Prevent random disconnects`

Google Colab の接続が切れないようにするだけです。ただ実行します。

### 2.2. `Check GPU`

GPU を表示するだけです。ただ実行します。

GPU が出てこない時は、Google Colab のランタイム＞ランタイムのタイプの変更で GPU を選択します。

### 2.3. `Install or update DeepFaceLab`

環境をロードするだけです。ただ実行します。

### 2.4. `Manage workspace`

ここは必要な時に、自分で実行する形になります。

この章の `Import from Drive` や `Export to Drive` が、それぞれ Google Drive のロード・セーブになっています。自分はこの 2 つぐらいしか使いませんでした。最初はそのまま `Import from Drive` して `workspace.zip` を展開します。

### 2.5. `Extract, sorting and faceset tools`

学習の前処理です。実行中のコンソールに、パラメータのユーザ入力を求めるところが出てきます。その際はそのまま Enter することで `[]` 内にあるデフォルト値が勝手に使われますが、たまに `[]` が無いものが出てくるので適宜入力します。(チューニング等は自分も詳しくありませんので参考文献等を参照ください。)

```:例
[0] Enter FPS ( ?:help ) : 
0
[png] Output image format ( png/jpg ?:help ) : 
png
```

この章の処理はターゲットがデフォルトで `data_src` になっていますが、`data_dst` 側にも実行します。なので計 2 回実行することになります。

そこそこ時間がかかるので、適宜 `Export to Drive` でバックアップ推奨です。

### 2.6. `Train model`

この処理もユーザ入力をたくさん求められますが、だいたいデフォルト `[]` が設定されています。パラメータの入力後、`data_src` `data_dst` 両方の前処理が問題なければ、学習が開始します (前処理が足りないと `ValueError('No training data provided.')` などが出ます)。`Backup_every_hour` にチェックがついていれば、バックアップタイミングで Google Drive 上の `workspace.zip` に上書き保存されます(チェックがなくても 11 時間後にはバックアップされるようですが、不安なのでチェックをつけずに試したことはないです)。ちなみに長い時間実行していると定期的に出力される進捗表示がバッファの最大に達して出力が止まることがありますが、グルグルしてれば Google Colab の実行自体は続いています(学習は行われていて、`workspace.zip` のバックアップも問題なく行われる)。

Google Colab の起動時間の制限に達して途中で終わってしまったら、再度 `Install or update DeepFaceLab` で環境をインストール → `Import from Drive` でバックアップされた `workspace.zip` を復元して、`Train model` から実行することになります (前回の途中から継続される)。復元後 2 秒間の間に、コンソールのユーザ入力で Enter を押すと、そのタイミングからパラメータを更新して学習を進めることもできます。

`Target iteration` のデフォルト 0 では学習は無期限に実行されるため、ある程度 loss が収束してきたと思ったタイミングで、自分で学習を停止する必要があります (workspace/model の *_preview_SAEHD.jpg 出力などを参考にする)。その後、以下のマージ処理で動画を出力します。

### 2.7. `Merge frames`

こちらもユーザ入力がいろいろありますが、`Merge` → `Get result video` と進めれば `result.mp4` を Google Drive に保存できます。

マージ処理は各種パラメータを修正して確認してを繰り返す作業なので、Google Colab 上がキツければ [iperov/DeepFaceLab](https://github.com/iperov/DeepFaceLab) からネイティブクライアントを落として `workspace.zip` を展開し、`7) merge SAEHD.bat` を実行すると、インタラクティブにパラメータ反映後のフレームが確認できて便利です。