Versão chinesa 中文版
O Pytorch-Lightning é uma biblioteca muito conveniente. Pode ser visto como uma abstração e embalagem de pytorch. Suas vantagens são uma forte reutilização, manutenção fácil, lógica clara etc. A desvantagem é que ela é muito pesada e requer bastante tempo para aprender e entender. Além disso, como vincula diretamente o modelo e o código de treinamento, ele não é adequado para projetos reais com vários arquivos de modelo e conjunto de dados. O mesmo vale para o design do módulo de dados. O forte acoplamento de coisas como Dataloader e conjuntos de dados personalizados também causa um problema semelhante: o mesmo código é copiado e colado de maneira elegantemente aqui e ali.
Após muita exploração e prática, resumi os seguintes modelos, o que também pode ser uma abstração adicional do pytorch-lightning. Na primeira versão, todo o conteúdo do modelo está sob a pasta raiz. No entanto, depois de usá -lo por mais de um mês, descobri que modelos mais especificados para diferentes tipos de projetos podem aumentar a eficiência da codificação. Por exemplo, as tarefas de classificação e super resolução têm alguns pontos de demanda fixa. O código do projeto pode ser implementado mais rapidamente modificando diretamente os modelos especializados, e alguns bugs evitáveis também foram reduzidos.
** Atualmente, como esta ainda é uma nova biblioteca, existem apenas esses dois modelos. No entanto, mais tarde, como aplico a outros projetos, novos modelos especializados também serão adicionados. Se você usou esse modelo para suas tarefas (como PNL, GaN, reconhecimento de fala etc.), você pode enviar um PR para que você possa integrar seu modelo à biblioteca para mais pessoas usarem. Se sua tarefa ainda não estiver na lista, a partir do modelo classification é uma boa escolha. Como a maioria da lógica e código subjacentes dos modelos são os mesmos, isso pode ser feito muito rapidamente. **
Todos são convidados a experimentar este conjunto de estilos de código. É bastante conveniente reutilizar se você estiver acostumado, e não é fácil voltar ao buraco. Uma explicação mais detalhada e um guia completo para o pytorch-Lightning podem ser encontrados no blog deste artigo 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
Nenhuma instalação é necessária. Execute diretamente git clone https://github.com/miracleyoo/pytorch-lightning-template.git para cloná-lo na sua posição local. Escolha o seu tipo de problema, como classification , e copie o modelo correspondente para o diretório do seu projeto.
Três são apenas main.py e utils.py no diretório raiz. O primeiro é a entrada do código, e o último é um arquivo de suporte.
Existe um arquivo __init__.py na pasta data e modle para transformá -los em pacotes. Dessa forma, a importação se torna mais fácil.
Crie uma class DInterface(pl.LightningDataModule): em data_interface para funcionar como a interface de todos os diferentes arquivos de dados customeizados. A classe de dados correspondente é importada na função __init__() . As instanciais são feitas nas funções setup() e train_dataloader , val_dataloader , test_dataloader são criadas.
Da mesma forma, a classe class MInterface(pl.LightningModule): são criadas no model_interface para funcionar como a interface de todos os seus arquivos de modelo. A classe de modelo correspondente é importada na função __init__() . As únicas coisas que você precisa modificar na interface são as funções como configure_optimizers , training_step , validation_step que controlam seu próprio processo de treinamento. Uma interface para todos os modelos e a diferença são tratados no ARGS.
main.py é responsável apenas pelas seguintes tarefas:
main.py Por exemplo, existe um argumento de Interface chamado random_arg , você pode adicionar parser.add_argument('--random_arg', default='test', type=str) para o arquivo main.pycallback necessárias, como salvamento automático, parada antecipada e agendador LR。MInterface instanciada, DInterface , Trainer 。Fin.
Uma coisa em que você precisa prestar atenção é que, para permitir que o MInterface e DInterface possam analisar seus modelos e conjuntos de dados recém -adicionados automaticamente, basta especificar o argumento --model_name e --dataset , usamos o mesmo caso de capa (como standard_net.py ) para modelo/arquivo de dados e o arquivo de dados e o mesmo conteúdo de case de camelo para o camel para o nome de classe, como o nome de classe, como o nome de classe, como o nome do camel para o camel (como StandardNet ).
O mesmo vale para a pasta data .
Embora isso pareça restringir sua nomeação de modelos e conjuntos de dados, mas também pode facilitar a leitura e a compreensão do seu código. Por favor, preste atenção a este ponto para evitar problemas de análise.
Se você usou este modelo e achar útil para sua pesquisa, considere citar nosso artigo:
@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}
}