LeRobot documentation
Processeurs d'environnement
Processeurs d'environnement
Les processeurs d’environnement transforment les observations d’un environnement avant les processeurs propres à la politique, et les actions de la politique avant l’environnement. Chaque configuration d’environnement renvoie sa paire depuis get_env_processors(), et make_env_pre_post_processors les construit pour l’évaluation, l’évaluation pendant l’entraînement et un robot de simulation.
Les environnements simulés n’en ont pas besoin
Les environnements simulés fournissent déjà la politique sous forme canonique : les images sous observation.images.<camera> (ou observation.image), l’état sous un unique observation.state aplati, l’orientation des images et la composition de l’état de chaque simulateur étant gérées une seule fois par son intégration src/lerobot/sim/integrations/<simulator>.py, que ce soit pour l’évaluation, le déroulement ou l’enregistrement, en local ou servi (voir Simulation : local ou servi). Pour LIBERO, par exemple, son adaptateur d’observation inverse les deux caméras et construit l’état 8-D (position de l’effecteur terminal, orientation axe-angle, articulations de la pince), si bien que ses processeurs d’environnement sont identitaires.
Placez la correspondance des observations d’un nouveau simulateur dans son intégration et ses conventions de contrôle dans la méthode conventions() de cette intégration, plutôt que dans un processeur d’environnement, afin qu’un robot simulé et un environnement servi en bénéficient également (voir Ajouter un benchmark).
Lorsqu'un processeur d'environnement est toujours l'outil
- Environnements hors de
lerobot.sim. Isaac Lab Arena est exécuté via sa propre fonctionmake_envdans son dépôt, avec des observations torch par lot ;IsaaclabArenaProcessorStepsélectionne et concatène ses clés d’état et convertit ses caméras. - Adaptations d’environnement spécifiques à la politique.
make_env_pre_post_processorspermet à une politique de remplacer la paire d’environnement, comme le font XVLA et Cosmos3 pour LIBERO.
L’évaluation admet un point de contrôle sur ce que ses processeurs d’environnement produisent : l’observation après le préprocesseur et l’action après le postprocesseur, les deux étant lues depuis leur transform_features. Une étape déclare donc sa sortie là-bas en fonction de son entrée, de la même manière qu’elle se comporte à l’exécution, par exemple une étape qui construit l’état uniquement lorsque sa clé source est présente. L’inférence distante n’applique aucun processeur d’environnement, de sorte qu’un point de contrôle servi à cet endroit doit prendre l’observation du simulateur et commander lui-même son action.
L'ordre de traitement lors de l'évaluation est le suivant :
observation = env_preprocessor(observation) # environment-specific
observation = preprocessor(observation) # policy's saved preprocessing (normalization, ...)
action = postprocessor(policy.select_action(observation))
action = env_postprocessor(action) # environment-specificÉcrire un
Un processeur d'environnement est une étape de processeur ordinaire, retournée par la configuration :
from dataclasses import dataclass
from lerobot.envs.configs import EnvConfig
from lerobot.processor import ObservationProcessorStep, PolicyProcessorPipeline, ProcessorStepRegistry
@dataclass
@ProcessorStepRegistry.register(name="myenv_processor")
class MyEnvProcessorStep(ObservationProcessorStep):
def observation(self, observation):
processed = observation.copy()
processed["observation.state"] = processed.pop("observation.myenv_state")
return processed
def transform_features(self, features):
return features # update if names or shapes change
@EnvConfig.register_subclass("myenv")
@dataclass
class MyEnvConfig(EnvConfig):
...
def get_env_processors(self):
return PolicyProcessorPipeline(steps=[MyEnvProcessorStep()]), PolicyProcessorPipeline(steps=[])Gardez les spécificités de l’environnement (disposition des touches, repères de coordonnées) et laissez la normalisation et les transformations spécifiques au modèle aux processeurs de la politique.
Update on GitHub