Anpassung des Perceverio -Modells von DeepMind (https://arxiv.org/abs/2103.03206) an Pytorch. Der ursprüngliche JAX/Haiku-Code finden Sie hier: https://github.com/deepmind/deepmind-research/tree/master/perceiver
git clone https://github.com/JOBR0/PerceiverIO_Pytorch
cd PerceiverIO_Pytorchpython3 -m venv perceiverEnv
source perceiverEnv/bin/activateInstallieren Sie Pytorch nach den offiziellen Anweisungen: https://pytorch.org/get-started/locally/
Installieren Sie andere erforderliche Pakete aus den Anforderungen.txt:
pip3 install -r requirements.txtDie Implementierung deckt die folgenden Beispielaufgaben ab, für die vorbereitete Modelle verfügbar sind:
Die Haiku-Checkpoints aus dem offiziellen DeepMind-Repository wurden in Pytorch-Kontrollpunkte konvertiert und können von Google-Drive heruntergeladen werden. Die Pytorch -Kontrollpunkte sollten im Ordner 'pytorch_checkpoints' platziert werden, damit der Beispielcode sie finden kann.
Um einen neuen Voraus für eine benutzerdefinierte Aufgabe zu erstellen, wird die Wahrnehmungsklasse in Perceiver_io/Perceiver.py verwendet.
class PerceiverIO ( nn . Module ):
"""The Perceiver: a scalable, fully attentional architecture.
Args:
num_blocks (int): Number of times the block is applied with shared weights. Default: 8
num_self_attends_per_block (int): Number of self-attentions in the block. Default: 6,
num_latents: (int): Number of latent vectors. Default 512,
num_latent_channels (int): Number of channels for the latent vectors. Default: 1024,
final_project (bool): Whether to apply a linear layer to the outputs before the post-processors. Default: True,
final_project_out_channels (int): Number of output channels for the final projection layer. Default: None,
perceiver_encoder_kwargs (Dict): Additional arguments for the perceiver encoder class. Default: {},
perceiver_decoder_kwargs (Dict): Additional arguments for the perceiver decoder class. Default: {},
input_preprocessors (dict / nn.Module): Optional input preprocessors. 1 or none for each modality. Default: None,
output_postprocessors (dict / nn.Module): Optional output postprocessors. 1 or none for each modality. Default: None,
output_queries (dict / nn.Module): Modules that create the output queries. 1 for each modality. Default: None,
output_query_padding_channels (int): Number of learnable features channels that are added to the output queries. Default: 0,
input_padding_channels (int): Number of learnable features channels that are added to the preprocessed inputs. Default: 0,
input_channels (dict, int): = The number of input channels need to be specified if NO preprocessor is used. Otherwise,
the number will be inferred from the preprocessor. Default: None,
input_mask_probs (dict): Probability with which each input modality will be masked out. Default None,
"""Das Folgende ist ein Diagramm des Wahrnehmers für eine multimodale Anwendung:
Eingangspräparaturen nehmen die Roheingangsdaten ein und präprozess, damit sie durch die erste Kreuzung abgefragt werden können. Dies kann so sein, dass Patches aus einem Bild erstellt werden. Normalerweise werden Positionscodierungen vom Präprozessor eingebaut. Anstatt einen Präprozessor zu verwenden, können die Eingänge auch manuell verarbeitet werden.
Mehrere input_preprocessoren finden Sie in perceiver_io/io_processors/preprocessors.py
Ausgangspostprozessoren nehmen die endgültige Ausgabe des Wahrnehmers und verarbeiten es, um das gewünschte Ausgangsformat zu erhalten.
Mehrere Output_PostProcessors finden Sie in perceiver_io/io_processors/postprocessors.py
OUPUP -Abfragen erstellen die Funktionen, mit denen die endgültige latente Darstellung des Wahrnehmers abfragt, um die Ausgabe zu erzeugen. Sie erhalten die vorverarbeitete Eingabe als Argument, damit sie ihn bei Bedarf verwenden können. Sie enthalten in der Regel auch Positionscodierungen.
Mehrere output_queries finden Sie in perceiver_io/output_queries.py ### Mehrere Modalitäten zur Verarbeitung mehrerer Modalitäten gleichzeitig, ein Wörterbuch mit einer Zuordnung von der Modul zum Modul kann für die input_preprocessors, output_postprocessors und die output_queries verwendet werden (siehe Perceiver_io/multimodal_porcever.py). Um die verschiedenen Eingänge miteinander kompatibel zu machen, werden sie mit trainierbaren Parametern auf die gleiche Kanalgröße gepolstert. Es ist auch möglich, eine andere Anzahl von Ausgangsabfragen zu verwenden, als Eingänge angegeben werden.
@misc { jaegle2021perceiver ,
title = { Perceiver IO: A General Architecture for Structured Inputs & Outputs } ,
author = { Andrew Jaegle and Sebastian Borgeaud and Jean-Baptiste Alayrac and Carl Doersch and Catalin Ionescu and David Ding and Skanda Koppula and Andrew Brock and Evan Shelhamer and Olivier Hénaff and Matthew M. Botvinick and Andrew Zisserman and Oriol Vinyals and João Carreira } ,
year = { 2021 } ,
eprint = { 2107.14795 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.LG }
}