Neat Library Примітки до випуску
Примітки до випуску для SiMa.ai Neat Library.
0.6.1 (ще не випущено)
Несумісні зміни
- C++ ABI Neat Library тепер має версію 7 (
libsima_neat.so.7). ДоResizeSpec,PreprocessOptions,PreprocOptionsіNormalizationOptionsдодано поля. Перебудуйте C++ застосунки, плагіни та прив’язки Python з відповідними заголовками й пакетами виконання; не використовуйте повторно двійкові файли ABI 6 і не створюйте символічні посилання сумісності.
Попередня обробка
-
Попередня обробка Model і окремий Resize спільно використовують
ResizeInterpolation. У новому коді використовуйтеpreprocess.resize.interpolation = ResizeInterpolation.BilinearAntialiasedзамість рядка інтерполяції. Наявні рядкиscaling_typeзалишаються сумісними; суперечливі нетипові рядки відхиляються. -
Наявні параметри попередньої обробки тепер підтримують білінійну зміну розміру зі згладжуванням, явний вихідний коефіцієнт масштабування, позицію перетворення кольору та політику перетворення чисел із рухомою комою. У фіксованому шляху вихідної арифметики поля середнього й стандартного відхилення зберігають початкові середнє та дільник, а не згорнуте афінне перетворення. BF16 типово зберігає попереднє відсікання; округлення до найближчого парного вмикається явно. FP16 використовує округлення до найближчого парного. Для точної квантизації INT8 потрібен початковий крок, узгоджений із множником моделі; множник не дає змоги відновити цей крок. Без нових параметрів зберігається наявний шлях. Див. Preproc.
0.6.0
Зміни, що порушують сумісність
-
У тензорному режимі
Model::input_specs()тепер зберігає ранг із MPK, включно з одиничною пакетною віссю ([1,H,W,C]). Входи HWC для пакета розміру 1 залишаються допустимими, зокрема післяbuild()без початкового входу.compiled_batch_size()читає оголошений розмір пакета MLA, а не виводить його з вимірів тензора. -
Виходи моделей тепер показують кінцеву логічну форму та розміщення, задані в MPK, замість проміжної форми пристрою. Наприклад, вихід batch-flatten ResNet-50 має форму
[1, 1000]і невідоме логічне розміщення, а не чотиривимірну форму HWC. Формат його тензора Float32 може бутиEVXX_FLOAT32замістьFP32. Інтерпретуйте значення за dtype та формою тензора; не виводьте логічні осі з позначки формату бекенду. -
C++ ABI Neat Library тепер має версію 6, а SONAME динамічної бібліотеки —
libsima_neat.so.6. Тензори тепер містять семантичні метадані екстрактора ознак, публічні типи запитів/результатів GenAI містять метадані завдання ASR, мови та проби,GraphLinkOptionsмістить обмеження приймання в реальному часі, аBenchmarkOptionsіBenchmarkReportотримали нові поля. Перезберіть застосунки C++ і плагіни та встановіть відповідні пакети середовища виконання й розробки Core. ДоSimaArgMaxOptionsдоданоaxisіkeepdims, а розміщення класуSimaArgMaxтакож змінено. -
Тепер для створення графа в реальному часі використовуються
GraphLinkOptions,Graph::connect()таGraph::build(). API для попереднього переглядуRealtimeGraphLinkOptions,connect_realtime(),build_fused_realtime_sources()/build_fused_realtime_source()таRealtimeEveryFrameByStreamбуло видалено. Збережені графи, що містятьrealtime_every_frame_by_stream, необхідно відтворити з використанням підтримуваної політики; див. З’єднайте фрагменти в реальному часі.. -
Версія пакета — 0.6.0.
Model::OptionsіBoxDecodeOptionsтепер містятьyolox_seg_pose.pose_classes; ці доповнення публічного представлення потребують компонентів з ABI 6. Не використовуйте символічні посилання для сумісності ABI.GraphOptionsтепер міститьkernel_runner_a65_workers. Під час оновлення до 0.6.0 перебудуйте застосунки, плагіни та розширення Python з відповідними пакетами середовища виконання й розробки. Не змішуйте двійкові файли попередніх збірок із пакетами випуску лише тому, що обидва використовують ABI 6.
Зміни під час роботи (в середовищі виконання)
-
Model::benchmark()читає телеметрію плати з Sentinel, а не опитує шини живлення самостійно. Проходи вимірювання затримки й пропускної здатності тепер кожен тривають, доки не виміряютьnum_samplesвхідних даних і не мине щонайменшеBenchmarkOptions::min_duration_ms(типово 10 с), тож показники потужності й температури охоплюють кілька зразків Sentinel. Щоб повернути попереднє вимірювання за кількістю вхідних даних, встановітьmin_duration_msна 0.BenchmarkReportотримавlatency_p50_ms,latency_p95_ms,latency_p99_ms,peak_power_watts,throughput_samples,throughput_duration_msіtelemetryз потужністю шин живлення, температурами кристала й плати, загальним і поядерним завантаженням CPU та пам’яттю MLA та EV74 і пам’яттю Linux усієї плати.avg_power_wattsіenergy_joulesзберігають свій зміст;energy_joules— це енергія дляnum_samplesвхідних даних. Коли Sentinel недоступний, затримка та FPS усе одно повідомляються, аtelemetry.statusназиває причину. Інсталятор DevKit встановлює Sentinel за допомогоюsima-cli neat install sentinelабо оновлює його, якщо запущена версія не є останньою виробничою збіркою. Див. Вимірювання виконання моделі. -
Телеметрія живлення Run, яку вмикає
enable_board_power(), теж читається з Sentinel. Core більше не відкриває монітори живлення I2C, тож його зчитування більше не заважають зчитуванню тих самих ліній живлення в Sentinel, а інсталятор більше не додаєsimaдо групиi2c. Sentinel збирає дані кожні 2 с, тому вікно вимірювання, коротше приблизно за 2 с, може не містити жодного зразка живлення. Лінії живлення називаються за метриками Sentinel, наприкладmla, і повідомляють лише потужність.sample_interval_ms,PowerMonitorProfile, вбудовані таблиці ліній живлення, поля I2C уPowerRailConfig,enable_modalix_som_power(),enable_modalix_dvt_power()іmodalix_som_power_monitor_options()/modalix_dvt_power_monitor_options()застаріли й ігноруються. -
TelemetryMonitorзаписує потужність плати, температури, завантаження CPU та пам’ять із Sentinel міжstart()іstop(), у C++ і Python.read()повертає зведення на поточний момент, аTelemetryвиводиться як YAML і зберігається як YAML або JSON.Model::benchmark()використовує його дляBenchmarkReport::telemetry.PowerMonitor,read_power_snapshot(),RunOptions::enable_board_power(),RunOptions::power_monitorіMeasureOptions::include_powerзастаріли на користьTelemetryMonitor, але й надалі працюють. Див. Записуйте телеметрію плати. -
BenchmarkOptions::inputsзапускаєModel::benchmark()на ваших власних тензорах замість синтетичних, аBenchmarkReport::inputзаписує, які вхідні дані використано. Див. Вимірювання з власними вхідними даними. -
Затримка плагінів застаріла й буде вилучена. Це стосується
MeasureOptions::include_plugin_latencyіplugin_latency_source,BenchmarkOptions::include_plugin_latency,start_measurement(bool)таModel::benchmark(int, bool)/Model::benchmark(bool). Натомість використовуйтеstart_measurement()іbenchmark(num_samples). -
Апаратне декодування використовує прямі сеанси кодека та DMA-BUF вихід. Core більше не використовує оренди допуску демона декодера або
SIMA_DECODER_ADMISSION_REQUIRE. Параметри пулу та налаштування декодера залишаються доступними. -
Підтримка апаратного декодування H.265/HEVC реалізована за допомогою
SimaDecodeіRtspDecodedInputреалізовано мовами C++ і Python.RtspEncodedInputнадає розпарсені блоки доступу H.265 без їх декодування. Вхідні дані H.265 повинні використовувати профіль HEVC Main, 8 біт, 4:2:0. Селектори кодеків приймають якH265, так іHEVC; селектори H.264 також приймаютьAVC.FormatTag/pyneat.Formatприймають однакові псевдоніми на межах кодованого графа і все ще серіалізуються якH264іH265. -
VideoSenderпередає кодоване відео у форматах H.264 або H.265 як RTP через UDP без повторне кодування за допомогоюVideoSenderOptions::Passthrough(codec)/pyneat.VideoSenderOptions.passthrough(codec). H.265 за замовчуванням використовує тип корисного навантаження RTP 98; H.264 зберігає значення 96.H264RtpUdpFromEncoded()застарілий і замінений наPassthrough(RtspCodec::H264). -
Необроблений вхід
VideoSenderтепер автоматично пропускає перетворення формату для сумісного NV12 у DMA-пам’яті, коли встановлений енкодер оголошуєinput-layout-aware=true. Наявна межа входу енкодера готує інші необроблені входи у кінцевому сховищі енкодера. APIH264RtpUdpFromRaw(...)для C++ і Python не змінено. -
InputMemoryPolicy::Autoрозрізняє бажане виділення пам’яті та обов’язкове сховище входу. Маршрути, що надають перевагу пристрою, утримують сховищеTensorіSample, яке належить викликачеві, замість перетворення через зображення CPU. Сумісні DMA-BUF входи залишаються без копіювання; наявні CPU входи вс е ще можуть потребувати матеріалізації на вході пристрою. Явні вимоги EV74/DMS0 до входу залишаються обов’язковими. -
Вхідні дані RTSP визначають тип корисного навантаження RTP, використовуючи єдиний кодек, який не залежить від конкретного кодека. Поле
payload_typeуRtspEncodedInputOptionsтаRtspDecodedInputOptions:-1обирає кодек за замовчуванням (96 для H.264/H.265, 26 для MJPEG),0вимикає фільтрацію корисного навантаження, а додатне значення обирає конкретне корисне навантаження.RtspEncodedInputOptions::h264_payload_typeтаmjpeg_payload_typeзастаріли, і під час виконання програми буде виведено попередження один раз, коли вони змінюють визначене корисне навантаження. -
Звичайний
build()тепер автоматично вибирає об’єднане зниження для відповідних потоків, що підтримують багатоканальний вхід. Безпосередньо закодована гілка H.264 або H.265VideoSenderоб’єднується перед декодуванням без копіювання декодованого кадру в ЦП. Джерело, декодер і відправник повинні використовувати один і той самий кодек; у разі невідповідності пара залишається в окремих сегментах конвеєра. Встановіть для цьог о з’єднання значенняRealtimeLatestByStreamдля забезпечення перегляду в реальному часі, щоб повільний приймач відео замінював застарілі блоки доступу замість того, щоб створювати додаткове навантаження на гілку декодера. -
Додано документацію та навчальні матеріали для C++ і Python щодо
CameraInput, які охоплюють графи, що належать вихідному коду MIPI/libcamera, зокрема адаптивну передачу пам’яті SiMaAI перед маршрутизацією моделей CVU/MLA. -
MetadataSenderтепер обмежує розмір UDP-пакетів до 1200 байтів, розбиваючи більші пакети на частини. Повідомлення у форматі JSON. Оновіть Insight до версії, яка передбачає повторне складання фрагментів метаданих перед або одночасно з цією версією Neat Library; старіші версії Insight продовжують підтримувати незмінені корисні дані JSON обсягом до 1200 байтів.
Побудова та перевірка графа.
- Нові вузли
SimaVoxelize,SimaPillarScatter,SimaBEVPoolPlanіSimaBEVPoolвиконують операції бібліотеки ядер для LiDAR і перетворення камер у BEV з PointPillars і BEVFusion на A65 або EV74 з тензорами INT8 або BF16. Кожен вузол виконується на вибраній вами цілі без переходу на іншу ціль. Див. Вузли ядер LiDAR і BEV. - Типовий публічний
Input, безпосередньо підключений до єдиного входу зображення моделі, тепер успадковує його оголошений формат зображення. Явні параметри входу зберігають пріоритет; неоднозначні з’єднання потребують явних параметрів. Це змінює інтерпретацію зразка без додаткового копіювання даних. - Тепер при побудові графа один об’єкт Node розглядається як одна логічна вершина. Повторне вставлення та
спроби імпортувати фрагменти, що перекриваються, завершуються невдало, але повторні виклики
connect()використовують наявний вузол для розгалуження. - Тепер кожен створений сегмент конвеєра під час
build()перевіряє остаточні назви GStreamer; явний викликvalidate()не потрібен. У разі дублювання або відсутності імен виникає помилка, і замість створення укороченого конвеєра з’являється повідомленняmisconfig.pipeline_shape. - Тепер спеціальні фрагменти відображають усі явні імена та одночасно трансформують іменовані посилання на блоки. оголошення. У разі виявлення конфліктів імен, система не перейменовує їх автоматично, а відхиляє.
| Випуск | Сумісний з Palette SDK. | Примітки |
|---|---|---|
| 0.6.1 | 3.0.0.1 | Neat Library 0.6.1 |
| 0.6.0 | 3.0.0.0 | Neat Library 0.6.0 |
| 0.5.0 | 2.1.3.1 | Neat Library 0.5.0 |
| 0.4.0 | 2.1.3.0 | Neat Library 0.4.0 |
| 0.3.0 | 2.1.2.3 | Neat Library 0.3.0 |
| 0.2.2 | 2.1.2.2 | Neat Library 0.2.2 |
| 0.2.1 | 2.1.2.1 | Neat Library 0.2.1 |
| 0.2.0 | 2.1.2 | Neat Library 0.2.0 |
| 0.1.0 | 2.0.0 | Neat Library 0.1.0 |