diff --git a/README.md b/README.md index d582f3a..7a2e183 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ 使用者のオリジナルデータセットでもトレーニングや推定をコマンドライン上の操作だけですべて済むように調整しました. -参考にした論文は +元論文は > _Unsupervised Scale-consistent Depth and Ego-motion Learning from Monocular Video_ @@ -19,7 +19,6 @@ >Kutsev Bengisu Ozyoruk and Guliz Irem Gokceler and Gulfize Coskun and Kagan Incetan and Yasin Almalioglu and Faisal Mahmood and Eva Curto and Luis Perdigoto and Marina Oliveira and Hasan Sahin and Helder Araujo and Henrique Alexandrino and Nicholas J. Durr and Hunter B. Gilbert and Mehmet Turan > [EndoSLAMとEndo-SfMLearner公式GitHub](https://github.com/CapsuleEndoscope/EndoSLAM) - ![demo](https://github.com/LBJ-code/Imgs_for_readme/raw/master/demo.gif) ↑gifの容量の関係で画質は粗いですが実際はもっと高精度なdepth推定が期待されます. @@ -35,7 +34,7 @@ __Anaconda Prompt__ というソフトウェアが追加されているので起動します. 起動が完了したらコマンドプロンプト上で以下のように仮想環境を構築します. -(当コードはpythonのバージョンが3.6以上を想定している.ここでは3.8を指定) +(当コードはpythonのバージョンが3.6以上を想定しています.ここでは3.8を指定) ``` @@ -48,7 +47,7 @@ conda activate SfMLearnerForNLab ``` - + ## 2. 必要なパッケージのインストール まずディープラーニング用のモジュールである[pytorch](https://pytorch.org/)をインストールします. @@ -68,11 +67,12 @@ ``` もし手動でバージョンを変えたい場合は適宜requirements.txtを参照しながらモジュールをインストールしてください. - + データセットの作成 =============== まずはデータセットを作成します.「datasets」ディレクトリに必要な処理が一通りそろってますのでそれを利用します. + 「datasets」ディレクトリに移動します. ``` @@ -83,22 +83,22 @@ __* 学習で利用する動画は全て同じカメラで撮影されていることを確認してください__ -動画を配置し終わったら,以下のコマンドを実行することで「datasets」内に「data_for_SC_SfMLearner」が生成される. +動画を配置し終わったら,以下のコマンドを実行することで「datasets」内に「data_for_SC_SfMLearner」が生成されます. + その際に以下のオプションがあるので利用したいデータセットによって適宜変更してください. - - + __・--save_frequency__ 動画を何フレーム間隔でデータセットとして利用するか指定するオプション. フレーム間隔が大きいと省メモリ,Depht推定において遠方の物体の深度推定の高精度化を期待できるが,間隔が大きすぎるとフレーム間の類似性が下がって学習が安定しない. フレーム間隔が小さいとカメラに近い物体の深度推定の高精度化に寄与し,学習が安定するが,小さすぎるとデータセットの容量増加や遠方の物体の深度推定がされないことがある. - + __・--save_height, --save_width__ データセットとして使う動画のリサイズに関するオプション. __必ず,リサイズ後の高さと幅が32の倍数となるように指定してください.__ これはSfM LearnerがDepthを推定する際に画像サイズを半分にするConv処理をした5回した後にDeConv処理を5回するので2の5乗である32の倍数を高さと幅が持つ必要があります. - + 以下に示すのは実行するコマンド例です. @@ -108,24 +108,23 @@ プログラムが実行されると以下のようなGUIが起動します. - - + ![make_dataset's gui](https://github.com/LBJ-code/Imgs_for_readme/raw/master/cammat_gui.JPG) -ここにデータセットとして使うカメラの内部パラメータを入力します.(カメラの内部パラメータ,外部パラメータに関しては - -[https://jp.mathworks.com/help/vision/ug/camera-calibration.html](https://jp.mathworks.com/help/vision/ug/camera-calibration.html) -などを参照してください +ここにデータセットとして使うカメラの内部パラメータを入力します.(カメラの内部パラメータ,外部パラメータに関しては[https://jp.mathworks.com/help/vision/ug/camera-calibration.html](https://jp.mathworks.com/help/vision/ug/camera-calibration.html)などを参照してください . + 通常,画像のリサイズ前後で内部パラメータは変化しますが,リサイズ前の内部パラメータを入力し,「finish」ボタンを押してください. もし先ほどオプションで指定したリサイズ後の内部パラメータが既知の場合はその内部パラメータを入力し,GUI上の「Is resized image's intrinsic」にチェックを入れて「finish」ボタンを押してください. + 一定時間後にデータセット作成が完了し,デフォルトのオプションであれば「datasets」ディレクトリに「data_for_SC_SfMLearner」が作成されます. + + モデルのトレーニング =============== - ## 1. トレーニングのクイックスタート トレーニングのために,「SC-SfMLearner_for_NLab-master」ディレクトリに戻ります.「datasets」ディレクトリにいる場合は以下のコマンドによって親ディレクトリに戻ります. @@ -135,21 +134,21 @@ ``` トレーニングのためにもいくつかオプションがあり,各自の環境にあった設定ができます以下に示すのは代表的なオプションです.GPUの指定などはpytorchのモジュールによって自動的に行われます. - - + + __・--epochs(デフォルトは200)__ エポック数の指定 - - + + __・--batch_size(デフォルトは4)__ バッチサイズの指定 - - + + __・--print_freq(デフォルトは1000)__ 1バッチサイズの処理を1イテレーションとしたときに,何イテレーション毎にフィードバックするかを指定できます. 具体的にはコマンドプロンプト上へのloss値の表示,「checkpoints」ディレクトリにtensorboard用のeventファイルの保存,モデルの重みファイル(pthファイル)の保存を行います. - - + + これらのオプションを利用して,コマンドプロンプトで「train.py」を実行します.以下に示すのは実行の例です. ``` @@ -157,12 +156,14 @@ ``` 他にも様々なオプションがありますが利用したい場合は「train.py」のコードを見てください. - + + ## 2. トレーニングの経過を見る ディープラーニングの学習経過を見るためには __「tensorboard」__ -を利用すると学習途中のdepthマップやloss値の推移をビジュアル的にブラウザ(Microsft EdgeやGoogle Chroomなど)上で観察できます. +を利用すると学習途中のdepthマップやloss値の推移をビジュアル的にブラウザ(Microsft EdgeやGoogle Chroomなど)上で観察できます. + 以下にtensorboardの使い方を示します.   「train.py」を実行すると「checkpoints」ディレクトリが作成され,その中に実行した日付のディレクトリが子ディレクトリとしてあり,その中にeventファイルと重みファイル(pthファイル)があります.それらのファイルが作成されていることを確認した後に以下の例ようなコマンドを仮想環境で実行してください. @@ -181,13 +182,15 @@ ![tensorboard](https://github.com/LBJ-code/Imgs_for_readme/raw/master/tb.jpg) + - + 学習済みデータを用いた深度・ポーズ推定 =============== 学習が終了したら,そのモデルの重みを使って深度推定やポーズ推定を行うことが出来ます. + 一通りの機能は「prediction」ディレクトリ内に揃っています.以下に利用する例を示します. まずコマンドプロンプト上で「prediction」ディレクトリに移動します. @@ -196,18 +199,20 @@ ``` その後,推定したい要素によって実行するpythonファイルは異なりますが,実行時のオプションは共通なのでここで示します. + __・--weight_pth__ pthファイルの指定. + __・--path_to_yaml(デフォルトは"../datasets/data_for_SC_SfMLearner/environment.yaml")__ 学習環境を記録したyamlファイルへのパスを指定.学習に利用したデータセットをデフォルトのディレクトリに保存している場合はこのオプションを変更する必要が無い. - + __・--use_camera(デフォルトは-9999)__ usbカメラをPCに接続し,そのusbカメラから深度・ポーズを推定したい場合はこのオプションにカメラポート番号を指定する.このオプションを指定した場合は「input」ディレクトリに入っている動画,画像ファイルに対する深度・ポーズ推定は行われない. - - + + ## 1. 深度推定 「input」ディレクトリに画像・動画を入れた後に「pred_disp.py」を実行します.以下に実行例を示します. @@ -225,9 +230,9 @@ ``` この場合推定結果は保存されず,リアルタイムで表示されます. + - - + ## 2. ポーズ推定 「input」ディレクトリに動画を入れた後に「pred_disp.py」を実行します.以下に実行例を示します.(画像を推定対象として指定することは出来ません)