# Процессоры

Процессоры представляют собой слой преобразования данных между роботом, набором данных и политикой. Конвейер — это цепочка `ProcessorStep`; каждый шаг описывает, как он преобразует как данные, так и контракт признаков.

См. [Введение в процессоры роботов](../introduction_processors) для знакомства с концепциями, [Реализация собственного процессора](../implement_your_own_processor) для написания шага и [Отладка конвейера процессора](../debug_processor_pipeline), если конвейер работает некорректно.

## ProcessorStep[[lerobot.processor.ProcessorStep]]

#### lerobot.processor.ProcessorStep[[lerobot.processor.ProcessorStep]]

```python
lerobot.processor.ProcessorStep()
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L150)

Абстрактный базовый класс для одного шага в конвейере обработки данных.

Каждый шаг должен реализовывать метод `__call__` для выполнения преобразования при переходе данных и метод `transform_features` для описания того, как он изменяет форму или тип признаков данных.

Подклассы могут быть с состоянием, если они реализуют `state_dict` и `load_state_dict`.

#### get_config[[lerobot.processor.ProcessorStep.get_config]]

```python
get_config()
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L193)

**Возвращает:**

Словарь параметров конфигурации, сериализуемый в JSON.

Возвращает конфигурацию шага для сериализации.

#### load_state_dict[[lerobot.processor.ProcessorStep.load_state_dict]]

```python
load_state_dict(state: dict[str, torch.Tensor])
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L209)

**Параметры:**

state : словарь тензоров состояния.

Загружает состояние шага из словаря состояний.

#### сброс[[lerobot.processor.ProcessorStep.reset]]

```python
reset()
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L221)

Сбрасывает внутреннее состояние шага процессора, если оно есть.

#### save_artifacts[[lerobot.processor.ProcessorStep.save_artifacts]]

```python
save_artifacts(save_directory: Path)
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L217)

Сохраняйте нетензорные активы и отображайте аргументы конструктора на относительные пути.

#### state_dict[[lerobot.processor.ProcessorStep.state_dict]]

```python
state_dict()
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L201)

**Возвращает:**

Словарь, сопоставляющий имена состояний с тензорами.

Возвращает состояние шага (например, обученные параметры, скользящие средние).

#### transform_features[[lerobot.processor.ProcessorStep.transform_features]]

```python
transform_features(features: dict[PipelineFeatureType, dict[str, PolicyFeature]])
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L225)

**Параметры:**

features : словарь, описывающий входные признаки для наблюдений, действий и т. д.

**Возвращает:**

Словарь, описывающий выходные признаки после преобразования на этом шаге.

Определяет, как этот шаг изменяет описание функций конвейера.

Этот метод используется для отслеживания изменений форм данных, dtypes или модальностей по мере прохождения данных через конвейер, без необходимости обработки фактических данных.

## DataProcessorPipeline[[lerobot.processor.DataProcessorPipeline]]

#### lerobot.processor.DataProcessorPipeline[[lerobot.processor.DataProcessorPipeline]]

```python
lerobot.processor.DataProcessorPipeline(steps: Sequence[ProcessorStep] = <factory>, name: str = 'DataProcessorPipeline', to_transition: Callable[[TInput], EnvTransition] = <factory>, to_output: Callable[[EnvTransition], TOutput] = <factory>, before_step_hooks: list[Callable[[int, EnvTransition], None]] = <factory>, after_step_hooks: list[Callable[[int, EnvTransition], None]] = <factory>)
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L273)

**Параметры:**

steps : последовательность объектов `ProcessorStep`, из которых состоит конвейер.

name : Описательное имя для конвейера.

to_transition : функция для преобразования исходных входных данных в стандартизированный формат `EnvTransition`.

to_output : функция для преобразования итогового `EnvTransition` в требуемый формат вывода.

before_step_hooks : список функций, вызываемых перед выполнением каждого шага.

after_step_hooks : список функций, вызываемых после выполнения каждого шага.

Последовательный конвейер для обработки данных, интегрированный с Hugging Face Hub.

Этот класс объединяет несколько экземпляров `ProcessorStep` в единый рабочий процесс обработки данных. Он является универсальным и поддерживает настраиваемые типы входных и выходных данных, которые обрабатываются конвертерами `to_transition` и `to_output`.

#### from_config[[lerobot.processor.DataProcessorPipeline.from_config]]

```python
from_config(config: dict[str, Any], state_dict: dict[str, dict[str, torch.Tensor]] | None = None, overrides: dict[str, Any] | None = None, to_transition: Callable[[TInput], EnvTransition] | None = None, to_output: Callable[[EnvTransition], TOutput] | None = None)
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L792)

**Параметры:**

config : словарь конфигурации с той же структурой, что и сохранённый JSON-файл процессора.

state_dict : Необязательное состояние конвейера в оперативной памяти, сгруппированное по ключу состояния без суффикса.

overrides : Необязательные переопределения конструктора, ключи которых — имя реестра или имя класса.

to_transition : Необязательный конвертер из входных данных в `EnvTransition`.

to_output : Необязательный конвертер из `EnvTransition` в выходные данные.

**Возвращает:**

Конвейер процессора, построенный на основе конфигурации и необязательного состояния.

Создайте конвейер из конфигурации в памяти и необязательных тензоров состояния.

#### from_pretrained[[lerobot.processor.DataProcessorPipeline.from_pretrained]]

```python
from_pretrained(pretrained_model_name_or_path: str | Path, config_filename: str, force_download: bool = False, resume_download: bool | None = None, proxies: dict[str, str] | None = None, token: str | bool | None = None, cache_dir: str | Path | None = None, local_files_only: bool = False, revision: str | None = None, overrides: dict[str, Any] | None = None, to_transition: Callable[[TInput], EnvTransition] | None = None, to_output: Callable[[EnvTransition], TOutput] | None = None, **kwargs)
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L647)

**Параметры:**

pretrained_model_name_or_path : Идентификатор репозитория на Hugging Face Hub, путь к локальному каталогу или путь к одному файлу конфигурации.

config_filename : имя файла конфигурации JSON конвейера. Всегда требуется для устранения неоднозначности при наличии нескольких конфигураций (например, preprocessor и postprocessor).

force_download : Принудительно (пере)скачивать файлы.

resume_download : Оставлено для обратной совместимости и игнорируется. Загрузка возобновляется автоматически.

proxies : Оставлено для обратной совместимости и игнорируется. Вместо этого используйте HTTP_PROXY и HTTPS_PROXY.

token : Токен, используемый в качестве HTTP bearer-авторизации для частных репозиториев Hub.

cache_dir : Путь к конкретной папке кэша для хранения загруженных файлов.

local_files_only : Если True, не скачивать файлы с Hub.

revision : Конкретная версия модели для использования (например, имя ветки, имя тега или идентификатор коммита).

overrides : Словарь для переопределения конфигурации конкретных шагов. Ключи должны совпадать с именем класса или именем в реестре шага.

to_transition : Пользовательская функция для преобразования входных данных в `EnvTransition`.

to_output : Пользовательская функция для преобразования итогового `EnvTransition` в формат вывода.

- ****kwargs** : Дополнительные аргументы (не используются).

**Возвращает:**

Экземпляр `DataProcessorPipeline`, загруженный с указанными конфигурацией и состоянием.

**Исключения:** ``FileNotFoundError`` или ``ValueError`` или ``ImportError`` или ``KeyError`` или ``ProcessorMigrationError``

- ``FileNotFoundError`` -- если файл конфигурации не найден.
- ``ValueError`` -- Если конфигурация неоднозначна или инициализация не удалась.
- ``ImportError`` -- если класс шага не может быть импортирован.
- ``KeyError`` -- если ключ переопределения не соответствует ни одному шагу конвейера.
- ``ProcessorMigrationError`` -- если для модели требуется миграция в формат процессора.

Загружает конвейер из локального каталога, отдельного файла или репозитория Hugging Face Hub.

Этот метод реализует упрощённый конвейер загрузки с интеллектуальным определением миграции:

**Упрощённая стратегия загрузки**:
1. **Загрузка конфигурации** (_load_config):
   - **Каталог**: загрузить указанный config_filename из каталога
   - **Один файл**: загрузить файл напрямую (config_filename игнорируется)
   - **Репозиторий Hub**: загрузить указанный config_filename из Hub

2. **Проверка конфигурации** (_validate_loaded_config):
   - Проверка формата: убедитесь, что config имеет корректный формат процессора
   - Обнаружение миграции: руководство по миграции старых моделей LeRobot
   - Устранение ошибок: предоставление полезных сообщений об ошибках

3. **Построение шагов** (_build_steps_with_overrides):
   - Разрешение классов: поиск в реестре или динамический импорт
   - Переопределение слияния: параметры пользователя переопределяют сохранённую конфигурацию
   - Загрузка состояния: загрузка файлов .safetensors для шагов с состоянием

4. **Переопределение проверки** (_validate_overrides_used):
   - Убедитесь, что все переопределения пользователя были применены (обнаружение опечаток)
   - Предоставляйте полезные сообщения об ошибках с доступными ключами

**Обнаружение миграции**:
- **Умное обнаружение**: анализирует файлы JSON, чтобы обнаружить устаревшие модели LeRobot
- **Точное нацеливание**: Избегает ложных срабатываний на других моделях HuggingFace
- **Чёткие инструкции**: предоставляет точную команду миграции для выполнения
- **Режим ошибки**: всегда вызывает ProcessorMigrationError для ясного указания действий пользователю

**Загрузка примеров**:
```python
# Directory loading
pipeline = DataProcessorPipeline.from_pretrained("/models/my_model", config_filename="processor.json")

# Single file loading
pipeline = DataProcessorPipeline.from_pretrained(
    "/models/my_model/processor.json", config_filename="processor.json"
)

# Hub loading
pipeline = DataProcessorPipeline.from_pretrained("user/repo", config_filename="processor.json")

# Multiple configs (preprocessor/postprocessor)
preprocessor = DataProcessorPipeline.from_pretrained(
    "model", config_filename="policy_preprocessor.json"
)
postprocessor = DataProcessorPipeline.from_pretrained(
    "model", config_filename="policy_postprocessor.json"
)
```

**Система переопределения**:
- **Сопоставление ключей**: используйте имена реестра или имена классов в качестве ключей переопределения
- **Слияние конфигураций**: пользовательские переопределения имеют приоритет над сохранённой конфигурацией
- **Валидация**: убедитесь, что все ключи переопределения соответствуют фактическим шагам (обнаружение опечаток)
- **Пример**: overrides={"NormalizeStep": {"device": "cuda"}}

#### get_config[[lerobot.processor.DataProcessorPipeline.get_config]]

```python
get_config()
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L451)

**Возвращает:**

Словарь с тем же содержимым, которое `save_pretrained()` записывает в формате JSON.

Возвращает конфигурацию конвейера, сериализуемую в JSON.

#### load_state_dict[[lerobot.processor.DataProcessorPipeline.load_state_dict]]

```python
load_state_dict(state_dict: dict[str, dict[str, torch.Tensor]])
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L515)

**Параметры:**

state_dict : словарь, сопоставляющий ключи состояния без суффиксов со словарями состояния шага.

**Исключения:** ``KeyError``

- ``KeyError`` -- если при загрузке обнаружено отсутствие ожидаемого состояния или наличие неожиданных дополнительных данных.

Загрузите тензоры состояния конвейера в существующие шаги.

#### process_action[[lerobot.processor.DataProcessorPipeline.process_action]]

```python
process_action(action: PolicyAction | RobotAction | EnvAction)
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1786)

**Параметры:**

action : Данные действия.

**Возвращает:**

Обработанное действие.

Обрабатывает только часть действия в переходе через конвейер.

#### process_complementary_data[[lerobot.processor.DataProcessorPipeline.process_complementary_data]]

```python
process_complementary_data(complementary_data: dict[str, Any])
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1853)

**Параметры:**

complementary_data : Сопутствующий словарь данных.

**Возвращает:**

Словарь обработанных дополнительных данных.

Обрабатывает только дополнительную часть данных перехода через конвейер.

#### process_done[[lerobot.processor.DataProcessorPipeline.process_done]]

```python
process_done(done: bool | torch.Tensor)
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1814)

**Параметры:**

done : Флаг done.

**Возвращает:**

Флаг обработанного done.

Обрабатывает только флаг done перехода через конвейер.

#### process_info[[lerobot.processor.DataProcessorPipeline.process_info]]

```python
process_info(info: dict[str, Any])
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1840)

**Параметры:**

info : словарь с информацией.

**Возвращает:**

Словарь с обработанной информацией.

Обрабатывает только словарь info перехода через конвейер.

#### process_observation[[lerobot.processor.DataProcessorPipeline.process_observation]]

```python
process_observation(observation: RobotObservation)
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1773)

**Параметры:**

observation : словарь наблюдений.

**Возвращает:**

Словарь обработанных наблюдений.

Обрабатывает только наблюдательную часть перехода через конвейер.

#### process_reward[[lerobot.processor.DataProcessorPipeline.process_reward]]

```python
process_reward(reward: float | torch.Tensor)
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1801)

**Параметры:**

reward : значение награды.

**Возвращает:**

Обработанное вознаграждение.

Обрабатывает только часть вознаграждения перехода через конвейер.

#### process_truncated[[lerobot.processor.DataProcessorPipeline.process_truncated]]

```python
process_truncated(truncated: bool | torch.Tensor)
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1827)

**Параметры:**

truncated : Флаг усечения.

**Возвращает:**

Обработанный флаг усечения.

Обрабатывает только усечённый флаг перехода через конвейер.

#### register_after_step_hook[[lerobot.processor.DataProcessorPipeline.register_after_step_hook]]

```python
register_after_step_hook(fn: Callable[[int, EnvTransition], None])
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1697)

**Параметры:**

fn : вызываемый объект, принимающий индекс шага и текущий переход.

Регистрирует функцию, которая будет вызываться после каждого шага.

#### register_before_step_hook[[lerobot.processor.DataProcessorPipeline.register_before_step_hook]]

```python
register_before_step_hook(fn: Callable[[int, EnvTransition], None])
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1673)

**Параметры:**

fn : вызываемый объект, принимающий индекс шага и текущий переход.

Регистрирует функцию, которая будет вызываться перед каждым шагом.

#### сброс[[lerobot.processor.DataProcessorPipeline.reset]]

```python
reset()
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1721)

Сбрасывает состояние всех шагов конвейера, имеющих состояние.

#### save_pretrained[[lerobot.processor.DataProcessorPipeline.save_pretrained]]

```python
save_pretrained(save_directory: str | Path | None = None, repo_id: str | None = None, push_to_hub: bool = False, card_kwargs: dict[str, Any] | None = None, config_filename: str | None = None, **push_to_hub_kwargs)
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L595)

**Параметры:**

save_directory : каталог, в котором будет сохранён конвейер. Если значение равно None, сохранение выполняется в HF_LEROBOT_HOME/processors/{sanitized_pipeline_name}.

repo_id : идентификатор вашего репозитория на Hub. Используется только при `push_to_hub=true`.

push_to_hub : Указывает, следует ли загружать объект на Hugging Face Hub после его сохранения.

card_kwargs : Дополнительные аргументы, передаваемые в шаблон карточки для её настройки.

config_filename : Имя файла конфигурации в формате JSON. Если значение равно None, имя генерируется на основе атрибута `name` конвейера.

- ****push_to_hub_kwargs** : Additional key word arguments passed along to the push_to_hub method.

Сохраняет конфигурацию и состояние конвейера в каталог.

Этот метод создаёт файл конфигурации JSON, определяющий структуру конвейера (имя и шаги). Для каждого шага с состоянием он также сохраняет файл `.safetensors`, содержащий словарь его состояния.

#### state_dict[[lerobot.processor.DataProcessorPipeline.state_dict]]

```python
state_dict()
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L488)

**Возвращает:**

Словарь, сопоставляющий ключи состояния без суффикса со словарями состояния шага, созданными как копии.

Возвращает тензоры состояния конвейера, сгруппированные по ключу состояния.

#### step_through[[lerobot.processor.DataProcessorPipeline.step_through]]

```python
step_through(data: TInput)
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L343)

**Параметры:**

data : входные данные.

**Возвращает:**

Объект `EnvTransition`, начиная с начального состояния и затем после каждого шага обработки.

Обрабатывает данные пошагово, возвращая переход на каждом этапе.

Это метод-генератор, полезный для отладки и проверки промежуточного состояния данных по мере их прохождения через конвейер.

#### transform_features[[lerobot.processor.DataProcessorPipeline.transform_features]]

```python
transform_features(initial_features: dict[PipelineFeatureType, dict[str, PolicyFeature]])
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1750)

**Параметры:**

initial_features : словарь, описывающий начальные признаки.

**Возвращает:**

Описание конечной характеристики после всех преобразований.

Последовательно применяет преобразования признаков со всех шагов.

Этот метод передаёт словарь описания признаков через метод `transform_features` каждого шага, позволяя конвейеру статически определить спецификацию выходных признаков без обработки реальных данных.

#### unregister_after_step_hook[[lerobot.processor.DataProcessorPipeline.unregister_after_step_hook]]

```python
unregister_after_step_hook(fn: Callable[[int, EnvTransition], None])
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1705)

**Параметры:**

fn : Точный объект функции, который был зарегистрирован ранее.

**Исключения:** ``ValueError``

- ``ValueError`` -- если хук не найден в списке.

Отменяет регистрацию хука 'after_step'.

#### unregister_before_step_hook[[lerobot.processor.DataProcessorPipeline.unregister_before_step_hook]]

```python
unregister_before_step_hook(fn: Callable[[int, EnvTransition], None])
```

[Источник](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/processor/pipeline.py#L1681)

**Параметры:**

fn : Точный объект функции, который был зарегистрирован ранее.

**Исключения:** ``ValueError``

- ``ValueError`` -- если хук не найден в списке.

Отменяет регистрацию хука 'before_step'.

## PolicyProcessorPipeline[[lerobot.processor.DataProcessorPipeline]]

#### lerobot.processor.DataProcessorPipeline[[lerobot.processor.DataProcessorPipeline]]

```python
lerobot.processor.DataProcessorPipeline(*args, **kwargs)
```

