中国語版中文版
Pytorch-Lightningは非常に便利なライブラリです。 Pytorchの抽象化とパッケージングと見なすことができます。その利点は、強力な再利用性、簡単なメンテナンス、明確な論理などです。不利な点は、それが重すぎて学習して理解するのにかなりの時間が必要であることです。さらに、モデルとトレーニングコードを直接バインドするため、複数のモデルとデータセットファイルを使用した実際のプロジェクトには適していません。データモジュールの設計にも同じことが言えます。 Dataloaderやカスタムデータセットのようなものの強力な結合も同様の問題を引き起こします。同じコードがコピーされ、あちこちで誤って貼り付けられます。
多くの調査と実践の後、私は次のテンプレートを要約しました。これはまた、Pytorch-lightningのさらなる抽象化になる可能性があります。最初のバージョンでは、すべてのテンプレートコンテンツがルートフォルダーの下にあります。ただし、1か月以上使用した後、さまざまな種類のプロジェクトでより指定されたテンプレートがコーディング効率を高めることができることがわかりました。たとえば、分類および超解像度のタスクにはすべて、いくつかの固定需要ポイントがあります。プロジェクトコードは、特殊なテンプレートを直接変更することでより速く実装でき、回避可能なバグも削減されています。
**現在、これはまだ新しいライブラリであるため、これら2つのテンプレートのみがあります。ただし、後で他のプロジェクトに適用すると、新しい専門テンプレートも追加されます。このテンプレートをタスクに使用している場合(NLP、GAN、音声認識など)、PRを提出して、テンプレートをライブラリに統合して使用できるようにしてください。タスクがまだリストに載っていない場合は、 classificationテンプレートから始めることが良い選択です。テンプレートの基礎となるロジックとコードのほとんどは同じであるため、これは非常に迅速に実行できます。 **
誰もがこのコードスタイルのセットを試すことを歓迎します。慣れていれば再利用するのは非常に便利であり、穴に戻るのは簡単ではありません。より詳細な説明とPytorch-Lightningの完全なガイドは、この記事Zhihuブログに記載されています。
root-
|-data
|-__init__.py
|-data_interface.py
|-xxxdataset1.py
|-xxxdataset2.py
|-...
|-model
|-__init__.py
|-model_interface.py
|-xxxmodel1.py
|-xxxmodel2.py
|-...
|-main.py
|-utils.py
インストールは必要ありません。 git clone https://github.com/miracleyoo/pytorch-lightning-template.gitを直接実行して、地元の位置にクローンします。 classificationなどの問題タイプを選択し、対応するテンプレートをプロジェクトディレクトリにコピーします。
threは、ルートディレクトリのmain.pyとutils.pyのみです。前者はコードの入り口であり、後者はサポートファイルです。
両方のdataとmodleフォルダーに__init__.pyファイルがパッケージになります。このようにして、インポートが容易になります。
class DInterface(pl.LightningDataModule): data_interfaceで、すべての異なる顧客化されたデータセットファイルのインターフェイスとして機能します。対応するデータセットクラスは__init__()関数にインポートされます。インスタンス化は、 setup() 、およびtrain_dataloader 、 val_dataloaderで行われ、 test_dataloader関数が作成されます。
同様に、クラスclass MInterface(pl.LightningModule): model_interfaceで作成され、すべてのモデルファイルのインターフェイスとして機能します。対応するモデルクラスは__init__()関数にインポートされます。インターフェイスで変更する必要があるのは、 configure_optimizers 、 training_step 、 validation_stepなどの機能が独自のトレーニングプロセスを制御するような関数です。すべてのモデルの1つのインターフェイスがあり、違いはARGSで処理されます。
main.pyは、次のタスクのみを担当します。
main.pyファイルにパース項目を直接追加できます。たとえば、 main.py ( ' random_arg '、default = 'test' Interface parser.add_argument('--random_arg', default='test', type=str)を追加することができます。callback関数を選択します。MInterface 、 DInterface 、 Trainer 。フィン。
注意する必要があることの1つは、 MInterfaceとDInterface 、 --model_nameや--datasetを単に指定するだけで、新しく追加されたモデルとデータセットを自動的に解析できるようにするために、モデル/データセットファイルにSnakeケース( standard_net.pyなど)を使用し、Camel Case for StandardNetなどのCamelケースを使用することです。
dataフォルダーにも同じことが言えます。
これはモデルとデータセットの命名を制限するようですが、コードを読みやすくしやすくすることもできます。解析の問題を避けるために、この点に注意してください。
このテンプレートを使用して、研究に役立つと思う場合は、私たちの論文を引用することを検討してください。
@article{ZHANG2023126388,
title = {Neuromorphic high-frequency 3D dancing pose estimation in dynamic environment},
journal = {Neurocomputing},
volume = {547},
pages = {126388},
year = {2023},
issn = {0925-2312},
doi = {https://doi.org/10.1016/j.neucom.2023.126388},
url = {https://www.sciencedirect.com/science/article/pii/S0925231223005118},
author = {Zhongyang Zhang and Kaidong Chai and Haowen Yu and Ramzi Majaj and Francesca Walsh and Edward Wang and Upal Mahbub and Hava Siegelmann and Donghyun Kim and Tauhidur Rahman},
keywords = {Event Camera, Dynamic Vision Sensor, Neuromorphic Camera, Simulator, Dataset, Deep Learning, Human Pose Estimation, 3D Human Pose Estimation, Technology-Mediated Dancing},
}
@InProceedings{Zhang_2022_WACV,
author = {Zhang, Zhongyang and Xu, Zhiyang and Ahmed, Zia and Salekin, Asif and Rahman, Tauhidur},
title = {Hyperspectral Image Super-Resolution in Arbitrary Input-Output Band Settings},
booktitle = {Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision (WACV) Workshops},
month = {January},
year = {2022},
pages = {749-759}
}