diff --git a/README.md b/README.md index d84c4fe..17ea1f8 100644 --- a/README.md +++ b/README.md @@ -21,10 +21,9 @@ ![demo](https://github.com/LBJ-code/Imgs_for_readme/raw/master/demo.gif) ↑gifの容量の関係で画質は粗いですが実際はもっと高精度なdepth推定が期待されます. -

このコードは色々なコードの複合で成り立っているので非商用利用の用途での利用のみ許可します. -
+ 環境構築 =============== ## 1. Anacondaによる仮想環境の構築 @@ -34,7 +33,7 @@ というソフトウェアが追加されているので起動します. 起動が完了したらコマンドプロンプト上で以下のように仮想環境を構築します. (当コードはpythonのバージョンが3.6以上を想定している.ここでは3.8を指定) -
+ ``` conda create -n SfMLearnerForNLab python=3.8 @@ -46,12 +45,12 @@ conda activate SfMLearnerForNLab ``` -
+ ## 2. 必要なパッケージのインストール まずディープラーニング用のモジュールである[pytorch](https://pytorch.org/)をインストールします. -pytorchをインストールするためのコマンドはバージョンの変更に伴って適宜変更されるため,公式ホームページでコマンドを確認してください.自分の環境にあったボタンをクリックするだけでpytorchをインストールするためのコマンドが表示されますのでコマンドプロンプトで実行しましょう.
pytrochのインストールが完了したら,ダウンロードした「SC-SfMLearner_for_NLab-master」にディレクトリを移動する. +pytorchをインストールするためのコマンドはバージョンの変更に伴って適宜変更されるため,公式ホームページでコマンドを確認してください.自分の環境にあったボタンをクリックするだけでpytorchをインストールするためのコマンドが表示されますのでコマンドプロンプトで実行しましょう.pytrochのインストールが完了したら,ダウンロードした「SC-SfMLearner_for_NLab-master」にディレクトリを移動する. ``` cd PATH_TO_DIR/SC-SfMLearner_for_NLab-master @@ -67,7 +66,7 @@ もし手動でバージョンを変えたい場合は適宜requirements.txtを参照しながらモジュールをインストールしてください. -

+ データセットの作成 =============== まずはデータセットを作成します.「datasets」ディレクトリに必要な処理が一通りそろってますのでそれを利用します. @@ -81,47 +80,47 @@ __* 学習で利用する動画は全て同じカメラで撮影されていることを確認してください__ -
+ 動画を配置し終わったら,以下のコマンドを実行することで「datasets」内に「data_for_SC_SfMLearner」が生成される. その際に以下のオプションがあるので利用したいデータセットによって適宜変更してください. -

+ __・--save_frequency__ 動画を何フレーム間隔でデータセットとして利用するか指定するオプション. フレーム間隔が大きいと省メモリ,Depht推定において遠方の物体の深度推定の高精度化を期待できるが,間隔が大きすぎるとフレーム間の類似性が下がって学習が安定しない. フレーム間隔が小さいとカメラに近い物体の深度推定の高精度化に寄与し,学習が安定するが,小さすぎるとデータセットの容量増加や遠方の物体の深度推定がされないことがある. -

+ __・--save_height, --save_width__ データセットとして使う動画のリサイズに関するオプション. __必ず,リサイズ後の高さと幅が32の倍数となるように指定してください.__ これはSfM LearnerがDepthを推定する際に画像サイズを半分にするConv処理をした5回した後にDeConv処理を5回するので2の5乗である32の倍数を高さと幅が持つ必要があります. -
+ 以下に示すのは実行するコマンド例です. ``` python make_datasets.py --save_frequency=10 --save_height=512 --save_width=288 ``` -
-プログラムが実行されると以下のようなGUIが起動します.

+ +プログラムが実行されると以下のような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) などを参照してください 通常,画像のリサイズ前後で内部パラメータは変化しますが,リサイズ前の内部パラメータを入力し,「finish」ボタンを押してください. -もし先ほどオプションで指定したリサイズ後の内部パラメータが既知の場合はその内部パラメータを入力し,GUI上の「Is resized image's intrinsic」にチェックを入れて「finish」ボタンを押してください.

+もし先ほどオプションで指定したリサイズ後の内部パラメータが既知の場合はその内部パラメータを入力し,GUI上の「Is resized image's intrinsic」にチェックを入れて「finish」ボタンを押してください. 一定時間後にデータセット作成が完了し,デフォルトのオプションであれば「datasets」ディレクトリに「data_for_SC_SfMLearner」が作成されます. -

+ モデルのトレーニング =============== @@ -134,20 +133,20 @@ ``` トレーニングのためにもいくつかオプションがあり,各自の環境にあった設定ができます以下に示すのは代表的なオプションです.GPUの指定などはpytorchのモジュールによって自動的に行われます. -

+ __・--epochs(デフォルトは200)__ エポック数の指定 -

+ __・--batch_size(デフォルトは4)__ バッチサイズの指定 -

+ __・--print_freq(デフォルトは1000)__ 1バッチサイズの処理を1イテレーションとしたときに,何イテレーション毎にフィードバックするかを指定できます. 具体的にはコマンドプロンプト上へのloss値の表示,「checkpoints」ディレクトリにtensorboard用のeventファイルの保存,モデルの重みファイル(pthファイル)の保存を行います. -

+ これらのオプションを利用して,コマンドプロンプトで「train.py」を実行します.以下に示すのは実行の例です. @@ -156,7 +155,7 @@ ``` 他にも様々なオプションがありますが利用したい場合は「train.py」のコードを見てください. -

+ ## 2. トレーニングの経過を見る ディープラーニングの学習経過を見るためには @@ -171,16 +170,16 @@ ``` 「--logdir」にはeventファイルや重みファイルが入っているディレクトリを指定します.「--port」には使用するポート番号を指定します. -
+ 実行に成功するとコマンドプロンプト上にtensorboardを実行するためのURLが表示されますのでブラウザ上で実行してください. すると以下のような画面が表示され,トレーニングの経過が観察できます. -
+ ![tensorboard](https://github.com/LBJ-code/Imgs_for_readme/raw/master/tb.jpg) -

+ 学習済みデータを用いた深度・ポーズ推定 =============== @@ -192,18 +191,18 @@ cd --logdir=PATH_TO_YOUR_DIR/SC-SfMLearner_for_NLab-master/prediction ``` -その後,推定したい要素によって実行するpythonファイルは異なりますが,実行時のオプションは共通なのでここで示します.

+その後,推定したい要素によって実行するpythonファイルは異なりますが,実行時のオプションは共通なのでここで示します. __・--weight_pth__ -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」を実行します.以下に実行例を示します. @@ -213,7 +212,7 @@ ``` 推定された結果は「output」ディレクトリに自動的に保存されます. -

+ もしusbカメラをPCに接続して使用したい場合は「--use_camera」オプションにカメラポート番号を指定します. @@ -223,7 +222,7 @@ この場合推定結果は保存されず,リアルタイムで表示されます. -

+ ## 2. ポーズ推定 「input」ディレクトリに動画を入れた後に「pred_disp.py」を実行します.以下に実行例を示します.(画像を推定対象として指定することは出来ません) @@ -233,7 +232,7 @@ ``` 推定された結果は「output」ディレクトリにcsvファイルとして自動的に保存されます. -

+ もしusbカメラをPCに接続して使用したい場合は「--use_camera」オプションにカメラポート番号を指定します.