Перейти до основного вмісту

Формати даних і семантика тензорів.

На цій сторінці описано загальнодоступний словник форматів, який використовується 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, який перевіряється для цієї версії.

Відображення необробленого зображення

ФорматТип корисного навантаженняРозміщення/форма тензора.Примітки
RGBImageHWC, [H, W, 3]Щільно розташовані пікселі.
BGRImageHWC, [H, W, 3]Використовуйте для cv2.imread або для обробки BGR-кадрів OpenCV.
GRAY8ImageHW, [H, W]Одноканальний градієнт сірого кольору.
NV12ImageHW, [H, W] плюс метадані про літак.Комбіновані площини Y + UV.
I420ImageHW, [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 див. у розділі Попереднє оброблення списків областей інтересу..

Див. також