Chinesische Version 中文版
Pytorch-Lightning ist eine sehr bequeme Bibliothek. Es kann als Abstraktion und Verpackung von Pytorch gesehen werden. Die Vorteile sind starke Wiederverwendbarkeit, einfache Wartung, klare Logik usw. Der Nachteil ist, dass es zu schwer ist und einiges an Zeit zum Lernen und Verständnis erfordert. Da es das Modell und den Trainingscode direkt bindet, ist es außerdem für reale Projekte mit mehreren Modell- und Datensatzdateien nicht geeignet. Gleiches gilt für das Datenmoduldesign. Die starke Kopplung von Dingen wie Dataloader und benutzerdefinierte Datensätze verursacht ebenfalls ein ähnliches Problem: Der gleiche Code wird hier und da nicht kopiert und unelegant eingefügt.
Nach langem Erkundung und Übung habe ich die folgenden Vorlagen zusammengefasst, die auch eine weitere Abstraktion von Pytorch-Lightning sein können. In der ersten Version befinden sich der gesamte Vorlageninhalt im Stammordner. Nachdem ich es jedoch länger als einen Monat lang verwendet hatte, stellte ich fest, dass bestimmte Vorlagen für verschiedene Arten von Projekten die Codierungseffizienz steigern können. Beispielsweise haben Klassifizierungs- und Superauflösungsaufgaben einige feste Nachfragepunkte. Der Projektcode kann schneller implementiert werden, indem spezielle Vorlagen direkt geändert werden, und einige vermeidbare Fehler wurden ebenfalls reduziert.
** Da dies immer noch eine neue Bibliothek ist, gibt es nur diese beiden Vorlagen. Später, wenn ich es auf andere Projekte anwende, werden auch neue spezialisierte Vorlagen hinzugefügt. Wenn Sie diese Vorlage für Ihre Aufgaben verwendet haben (z. B. NLP, GAN, Spracherkennung usw.), können Sie gerne eine PR einreichen, damit Sie Ihre Vorlage in die Bibliothek integrieren können, damit mehr Personen verwendet werden können. Wenn Ihre Aufgabe noch nicht auf der Liste steht, ist die Klassifizierungsvorlage aus der classification eine gute Wahl. Da die meisten der zugrunde liegenden Logik und Code der Vorlagen gleich sind, kann dies sehr schnell erfolgen. **
Jeder ist herzlich eingeladen, diese Codestile auszuprobieren. Es ist ziemlich bequem wiederzuverwenden, wenn Sie daran gewöhnt sind, und es ist nicht einfach, wieder in das Loch zurückzukehren. Eine detailliertere Erklärung und eine vollständige Anleitung zum Pytorch-Licht finden Sie in diesem Artikel Zhihu-Blog.
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
Es ist keine Installation erforderlich. Führen Sie git clone https://github.com/miracleyoo/pytorch-lightning-template.git aus, um es an Ihre lokale Position zu klonen. Wählen Sie Ihren Problemtyp wie classification und kopieren Sie die entsprechende Vorlage in Ihr Projektverzeichnis.
Thre sind nur main.py und utils.py im Root -Verzeichnis. Ersteres ist der Eingang des Codes, und letzteres ist eine Support -Datei.
Es gibt eine __init__.py -Datei sowohl in data als auch in modle -Ordner, um sie zu Paketen zu machen. Auf diese Weise wird der Import einfacher.
Erstellen Sie eine class DInterface(pl.LightningDataModule): In data_interface arbeiten als Schnittstelle aller verschiedenen aufbewahrten Datensatzdateien. Die entsprechende Datensatzklasse wird in der Funktion __init__() importiert. Die Instanziierung erfolgt im setup() und im train_dataloader , val_dataloader , test_dataloader -Funktionen.
In ähnlicher Weise werden class MInterface(pl.LightningModule): In model_interface erstellt, um als Schnittstelle aller Ihrer Modelldateien zu arbeiten. Die entsprechende Modellklasse wird in der Funktion __init__() importiert. Die einzigen Dinge, die Sie in der Schnittstelle ändern müssen, sind die Funktionen wie configure_optimizers , training_step , validation_step , die Ihren eigenen Trainingsprozess steuern. Eine Schnittstelle für alle Modelle und der Unterschied werden in den Argumenten behandelt.
main.py ist nur für die folgenden Aufgaben verantwortlich:
main.py Datei direkt einen Analyseelement hinzufügen. Zum Beispiel gibt es ein String-Argument namens random_arg , Sie können main.py parser.add_argument('--random_arg', default='test', type=str) Interfacecallback wie automatische Save, frühen Stopp und LR Scheduler。MInterface , DInterface , Trainer 。Flosse.
Eine Sache, auf die Sie achten müssen, ist, dass das MInterface und DInterface Ihre neu hinzugefügten Modelle und Datensätze automatisch analysieren können, indem Sie einfach das Argument angeben --model_name und --dataset , verwenden wir Schlangenfall (wie standard_net.py ) für Modell/Datensatz und verwenden den gleichen Camel -Fall für den StandardNet .
Gleiches gilt für data .
Dies scheint zwar die Benennung von Modellen und Datensätzen zu beschränken, aber es kann auch Ihr Code erleichtert, zu lesen und zu verstehen. Bitte achten Sie auf diesen Punkt, um an Parsenproblemen zu vermeiden.
Wenn Sie diese Vorlage verwendet haben und sie für Ihre Recherche hilfreich finden, sollten Sie in unserem Papier zitieren:
@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}
}