研究を行うにあたってサーベイから実装,実験,論文執筆までの効率的なワークフローを確立することは非常に重要です. このポストは自身の研究ワークフローを紹介し,誰かのためになればいいですという大義名分とともに,もっといい方法があれば教えてほしいという下心もあります.
一番下に2018年4月に名古屋CV・PRML勉強会で発表したときの資料もあります.
私のワークフローはDustin Tran氏のワークフローを参考にしています.1

論文管理

論文管理にはPapersを使っています.(PapersはReadCubeに統合される予定らしい) 自分の好きな粒度で分野ごとにディレクトリを作成して,論文を管理しています(Field/Paper). ただし,自分の研究に関連する分野はResearch/Field/Paperとしています. 基本的にiPad+Apple pencilで論文に手書きメモを加えながら読んでいます. 一応,論文管理アプリの代表であるMendeleyと比較したPapersの利点と欠点を下に書いておきます.2

プロジェクト管理

研究プロジェクトの管理にはGitHubを使っています. 1つのプロジェクトは1つのリポジトリで管理します. リポジトリ内のディレクトリ構成は以下の通りです.

-- doc/
 -- YYYY-conferencename/
  -- fig/
  -- main.pdf
  -- main.tex
-- etc/
 -- YYYY-MM-DD-whiteboard.jpg
 -- YYYY-MM-DD-enomoto-comments.md
-- src/
 -- checkpoints/
  -- YYYYMMDD_%H%M%S_hyperparameters/model
 -- codebase/
 -- log/
  -- YYYYMMDD_%H%M%S_hyperparameters/log
 -- out/
  -- YYYYMMDD_%H%M%S_hyperparameters/output
 -- script1.py
 -- script2.py
-- .editerConfig
-- .gitignore
-- README.md

README.mdにはプロジェクトに関するTODOリストを書いておきます.

doc/には論文執筆に必要なファイルを全て入れておきます.

etc/にはdoc/src/には入らないファイルを全て入れておきます. Dustin Tran氏はディスカッション時のホワイトボードの写真や,日々出てきたアイデアを書いてあるファイルをおいておくそうです.

src/には全てのコードを入れておきます. src/直下には直接実行可能なコードのみをおいておき,その他のコードはcodebase/以下に入れておきます. checkpoints/には学習済みモデル,log/には学習のログ,out/にはローカル環境で確認したい結果を全て入れておきます. checkpoints/out/はサイズが大きくなることが予想されるので.gitignoreに記述しておきます. .editerConfigを設定しておくと編集環境による差異を吸収できます.

大規模データはサーバ上の特定のディレクトリにまとめておきます.

実験

以下では,遠隔のサーバ上でプログラムを走らせることを前提としています.

まず,コードはローカル環境で編集します. サーバで実行する段階になったら,rsyncコマンドでGit管理していないファイルも含めて全てサーバに送ります(サーバとローカルで.git/を共有しないとGit管理がめちゃくちゃになります). サーバ・ローカル間のファイル共有でターミナルを頻繁に使うので,エディタは統合ターミナルがあるものがおすすめです(私はVisual Studio Codeを使っています). コードをサーバに送ったら,サーバに接続しtmux上でプログラムを走らせます.3

ハイパーパラメータが存在する場合は極力プログラム実行時にオプションで指定できるようにしておきます. Pythonのargparseモジュールが便利です. ハイパーパラメータとしてバッチサイズと学習率が存在し,

python script1.py --batch_size=256 --lr=1e-4

というコマンドを実行した場合,checkpoints/, log/, out/のサブディレクトリはYYYYMMDD_%H%M%S_batch_size_256_lr_1e-4/とします.

出力データ,特に画像などの直接サーバ上で確認できないデータは全てout/に出力し,rsyncコマンドでローカルと共有します.

実験の観察・考察にはComet.mlを使います.4 GitHubのリポジトリごとにComet.mlでもプロジェクトを作成します. 複数の実験を同一ウィンドウで比較できたりするので非常に便利です. オプション指定した値を自動で記録してくれるため,ハイパーパラメータの管理も簡単です.

論文執筆

To be added

まとめ

  1. Papersで論文管理&サーベイ
  2. ローカルでコード編集(Visual Studio Code)
  3. rsyncでコードをサーバと共有(Visual Studio Codeの統合ターミナル)
  4. サーバのtmux上でプログラムを走らせる
  5. rsyncで出力データをローカルと共有(Visual Studio Codeの統合ターミナル)
  6. Comet.mlで考察

脚注

1 A Research to Engineering Workflow

2 Mendeleyと比較したPapersの利点と欠点

利点

欠点

3 おすすめtmux設定

4 Comet.mlの導入コストは非常に少ないです.まだローンチされたばかりのサービスらしくバグも多いですが,個人的に期待しているサービスの1つです.

研究ワークフロー@名古屋CV・PRML勉強会 2018-04-21 from enoken