Формати даних і семантика тензорів.
На цій сторінці описано загальнодоступний словник форматів, який використовується InputOptions::format, OutputTensorOptions::format, метаданими тензорних зображень і тегами зразків даних.
Для використання на рівні завдання почніть з Тензор і зразок.. Зверніться сюди, коли межі графа потребують чіткої угоди щодо формату.
Теги форматування
FormatTag / FormatSpec визначає формат корисного навантаження. У Python використовуйте значення pyneat.Format або pyneat.FormatTag для полів формату. Не призначайте необроблені рядки полям формату Python.
Python надає доступ до загальновживаних тегів формату, з якими взаємодіє користувач. Деякі теги нижчого рівня C++, такі як BBOX, MLA, ARGMAX і DETESSDEQUANT, зазвичай з’являються через семантичні метадані тензора, теги корисного навантаження або діагностичні дані, а не як призначувані значення pyneat.Format.
Загальні теги:
| Мітка | Типове корисне навантаження. | Значення |
|---|---|---|
RGB | зображення | Упакований RGB, 8 біт на канал. |
BGR | зображення | Зображення у форматі BGR, 8 біт на канал. OpenCV використовує цей формат за зам овчуванням. |
GRAY8 | зображення | 8-бітна градація сірого. |
NV12 | зображення/відео | Площина Y плюс переплетені площини UV. Ширина та висота мають бути парними числами. |
I420 | зображення/відео | Площини Y, U та V. Ширина та висота мають бути парними числами. |
H264 | закодовано | Одиниця доступу H.264 / потік NAL. AVC – це альтернативна назва. |
H265 | закодовано | H.265 / HEVC – одиниця доступу / потік NAL. HEVC – це альтернативна назва. |
ENCODED | закодовано | Універсальний зашифрований вміст. Рядок «caps» ідентифікує кодеки, для яких не передбачено окремого тегу формату. |
FP32 | тензор | Корисне навантаження у вигляді тензора Float32. |
INT8 | тензор | Корисне навантаження 8-бітного тензора INT8 зі знаком. |
UINT8 | тензор | Непідписаний тензор UINT8, що містить корисне навантаження. |
BF16 | тензор | Корисне навантаження тензора у форматі BF16. |
BBOX | виявлення | Згорнутий пакет даних, що містить обмежені координати. |
ByteStream | семантика тензорів | Непрозорий потік байтів, який обробляється наступним компонентом у ланцюжку. |
Типи корисного навантаження
PayloadType визначає широку групу, яка перетинає межу графа.
| Сімейство корисних навантажень. | Внутрішній/медійний зміст. | Загальні метадані |
|---|---|---|
Image | розшифровані пікселі | формат пікселів, ширина, висота, розмітка, семантичні метадані зображення |
Tensor | модель або тензор застосунку | тип даних, розмірність, структура, семантичні метадані тензора. |
Encoded | медіафайли, закодовані за допомогою таких форматів, як H.264, H.265 або JPEG. | заголовки, формат кодека, мітки часу |
Auto | за можливості, робіть висновки | використовуйте лише тоді, коли метаданих тензора/зразка достатньо. |
Текстові, ауді о-, байтові та непрозорі байтові дані використовують семантику тензорів або спеціалізовані специфікації. Вони не є окремими значеннями переліку PayloadType у загальнодоступному API, який перевіряється для цієї версії.
Відображення необробленого зображення
| Формат | Тип корисного навантаження | Розміщення/форма тензора. | Примітки |
|---|---|---|---|
RGB | Image | HWC, [H, W, 3] | Щільно розташовані пікселі. |
BGR | Image | HWC, [H, W, 3] | Використовуйте для cv2.imread або для обробки BGR-кадрів OpenCV. |
GRAY8 | Image | HW, [H, W] | Одноканальний градієнт сірого кольору. |
NV12 | Image | HW, [H, W] плюс метадані про літак. | Комбіновані площини Y + UV. |
I420 | Image | HW, [H, W] плюс метадані про літак. | Комбіновані площини Y + U + V. |
Для стиснутих форматів глибина відповідає кількості каналів. Для тензорних даних глибина визначається на основі обраного розташування та форми.
Розгляньте формат, структуру та семантику осей у комплексі.
Не слід розглядати кожне поле окремо:
| Поле | Що це вам говорить. |
|---|---|
PixelFormat / метадані щодо формату зображення. | Як інтерпретувати піксельні канали, такі як RGB, BGR, GRAY8, NV12 або I420. |
TensorLayout | Яким чином організовано розміри тензора, наприклад, у форматі HWC, CHW або HW. |
TensorAxisSemantic | Яке значення має вісь, коли тензор містить більш розгорнуті семантичні метадані? |
TensorDType | Яким чином зберігається кожен елемент, наприклад, UInt8, INT8, FP32 або BF16. |
ByteFormat / метадані потоку байтів. | Як слід інтерпретувати непрозорі байти на наступному етапі. |
Байти не несуть жодного змісту. Використовуйте поля метаданих разом, перш ніж повторно інтерпретувати буфер.
Приклад формату для вхідних параметрів
simaai::neat::InputOptions input;
input.payload_type = simaai::neat::PayloadType::Image;
input.format = simaai::neat::FormatTag::BGR;
input.width = 640;
input.height = 480;
Вказуйте лише ті поля, які необхідні для межі. Якщо тензор або зразок вже містить достатньо метаданих, уникайте повторних обчислень.
Для H.264 і H.265 передбачені спеціальні теги H264 і H265. Встановіть відповідний тег на вхідній межі; тип медіа визначається на його основі. Використовуйте ENCODED з явно вказаним рядком параметрів лише для кодеків, які не мають спеціального тегу.
Сучасний адаптер для виведення зображення/відео.
Для отримання звичайного виводу моделі використовуйте nodes.output(...) і витягуйте тензори за допомогою pull_tensors(...). Використовуйте OutputTensorOptions лише тоді, коли вивід зображення або відео потрібно конвертувати, змінити розмір або відкоригувати частоту кадрів, щоб отримати тензор UInt8, сумісний з ЦП, перш ніж застосунок отримає його.
simaai::neat::OutputTensorOptions output;
output.format = simaai::neat::FormatTag::BGR;
output.target_width = 640;
output.target_height = 480;
graph.add_output_tensor(output);
add_output_tensor(...) приймає TensorDType::UInt8, який є типом даних за замовчуванням для вихідних даних. Залиште стандартний шлях nodes.output(...) для тензорів моделі та для вихідних даних, де вам потрібна повна оболонка Sample. Додайте явне перетворення графа або на стороні застосунку, коли вам потрібен інший тип даних.
Приклади тегів корисного навантаження
Sample::payload_tag є рекомендованою міткою для кінцевих споживачів. Вона замінює застаріле поле Sample::format.
Використовуйте payload_tag, payload_type, media_type та caps_string разом під час налагодження кодованих медіафайлів або узгодження меж графа.
Виконайте попередню обробку метаданих і шляхів до областей інтересу.
Для обробки даних, візуалізації та реалізації робочих процесів, пов’язаних із зоною інтересу, необхідна попередня обробка метаданих, щоб зіставити координати моделі з координатами вихідного кадру.
Ці метадані можуть містити:
- цільова ширина та висота;
- змінено масштаб вмісту за шириною та висотою;
- режим зміни розміру або кадрування;
- значення відступу та геометрія;
- формати кольорів для вхідних і вихідних даних;
- перестановка осей;
- прапорці для нормалізації, квантування та теселяції;
- Розміри вікон ROI, розмір вихідного зображення, розмір пакету ROI та афінні перетворення для кожної області ROI.
Якщо рамки або маски розташовані не в тому місці, перевірте, чи метадані попередньої обробки досягли етапу декодування або рендерингу, перш ніж змінювати порогові значення. Детальнішу інформацію про попередню обробку списків ROI див. у розділі Попереднє оброблення списків областей інтересу..