中文版中文版
Pytorch-Lightning是一个非常方便的库。它可以看作是Pytorch的抽象和包装。它的优势是强大的可重复使用,易于维护,清晰的逻辑等。缺点是它太重了,需要大量时间学习和理解。此外,由于它直接绑定了模型和培训代码,因此它不适用于具有多个模型和数据集文件的真实项目。数据模块设计也是如此。诸如DataLoader和自定义数据集之类的强大耦合也会引起类似的问题:在此处和那里都将相同的代码复制和粘贴。
经过大量的探索和实践,我总结了以下模板,这也可能是pytorch光线的进一步抽象。在第一个版本中,所有模板内容都在根文件夹下。但是,使用了一个多月后,我发现更多类型的项目的指定模板可以提高编码效率。例如,分类和超分辨率任务都具有一些固定的需求点。可以通过直接修改专用模板来更快地实现项目代码,并且一些可避免的错误也减少了。
**目前,由于这仍然是一个新库,因此只有这两个模板。但是,后来我将其应用于其他项目时,还将添加新的专业模板。如果您已将此模板用于任务(例如NLP,GAN,语音识别等),欢迎您提交PR,以便您可以将模板集成到库中以供更多人使用。如果您的任务尚未在列表中,则从classification模板开始是一个不错的选择。由于模板的大多数基础逻辑和代码都是相同的,因此可以很快完成。 **
欢迎每个人尝试这套代码样式。如果您习惯了,重复使用非常方便,并且倒入孔中并不容易。可以在本文Zhihu博客中找到一个更详细的解释和完整的pytorch灯指南。
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 ,然后将相应的模板复制到项目目录。
这仅在根目录中仅是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之类的功能,可以控制您自己的培训过程。所有模型的一个接口,并且差异在ARGS中处理。
main.py仅负责以下任务:
main.py file. For example, there is a string argument called random_arg , you can add parser.add_argument('--random_arg', default='test', type=str) to the main.py file.) Two Interface class will automatically select and pass those arguments to the corresponding model/data class.callback函数,例如自动保存,早期停止和LR调度程序。MInterface , DInterface , Trainer 。鳍。
您需要注意的一件事是,为了让MInterface和DInterface能够通过简单地指定参数--model_name和--dataset自动解析您的新添加的型号和数据集,我们将Snake Case(例如standart_net.py)(例如standard_net.py )用于模型/DataSet文件,并将其用于类似于Cameel Case for Casmel Case instand StandardNet型号。
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}
}