Модель
Model завантажує скомпільований архів моделі та надає доступ до шляху, за яким Neat може виконувати обчислення.
Використовуйте Model, коли вам потрібне виконання з урахуванням моделі, без ручного налаштування кожного етапу попередньої обробки, обчислення та подальшої обробки. Спочатку перевірте специфікацію. Потім запустіть її. Жодних незрозумілих тензорів.
Що дає вам Model?
input_specs()таoutput_specs()показують, які тензори модель очікує на вході та які генерує на виході.metadata(),info()та Pythonsummary()допомагають вам переглянути завантажену модель.run(...)виконує один прямий прохід для отримання результату.build(...)створює повторно використовуваний засіб для запуску моделей, який можна застосовувати для виконання завдань у режимі «push» або «pull».graph()повертає маршрут моделі у вигляді фрагментаGraph, який можна повторно використовувати.preprocess(),inference()таpostprocess()визначають етапи маршруту для розширеної композиції.
Посилання:
Завантажте архів моделі.
Приклади на цій сторінці передб ачають, що model_path вказує на скомпільований архів моделі, створений за допомогою Model Compiler, зазвичай це .tar.gz, скопійований на машину, на якій працює Neat. Спочатку використовуйте параметри за замовчуванням; додавайте ModelOptions лише тоді, коли це вимагається умовами контракту або джерелом вхідних даних.
const std::string model_path = "resnet_50_model.tar.gz";
simaai::neat::Model model(model_path);
const auto info = model.info();
const auto inputs = model.input_specs();
const auto outputs = model.output_specs();
Якщо цей етап перевірки вас здивував, зупиніться. Відкоригуйте шлях до моделі, артефакт або контракт, перш ніж розробляти навколо цього більш масштабну програму.
Оберіть шлях виконання моделі.
Обирайте шлях, який відповідає конкретній задачі. Зберігайте обсяг тестів на наявність помилок на мінімаль ному рівні; використовуйте інструменти для роботи з графами лише для вирішення задач, пов’язаних із графами.
| Потрібно | Використовуйте | Повертає |
|---|---|---|
| Запустіть один набір вхідних даних для моделі один раз. | model.run(...) | TensorList для тензорного вхідного сигналу або Sample для зразкового вхідного сигналу. |
| Використовуйте один і той самий маршрут моделі для багатьох вхідних даних. | model.build(...) та засіб для запуску моделі. | Регулювання шляхом натискання/тяжіння вздовж траєкторії моделі. |
| Вимірюйте лише час виконання моделі. | model.benchmark(...) або інструмент для оцінювання роботи моделі. | BenchmarkReport або MeasureReport |
| Додайте модель до робочого процесу застосунку. | graph.add(model) | Етап Graph. |
| Визначте межі маршрутів для компонування. | model.graph(route_options) | Повторно використовуваний фрагмент Graph. |
| Відлагоджуйте один етап моделі. | model.fragment(ModelStage::...) | Фрагмент Graph, що відповідає певній стадії. |
Для підвищення впевненості використовуйте прямі виклики моделі. Використовуйте Graph, коли модель стає частиною застосунку: іменовані вхідні дані, вихідні вузли, гілки, з’єднання, візуалізація, виведення відео, виведення метаданих або кілька моделей.
Оберіть варіанти моделі.
Почніть зі стандартних ModelOptions. Додавайте параметри лише тоді, коли це вимагається контрактом моделі або джерелом вхідних даних.
| Мета | Варіанти використання | Примітки |
|---|---|---|
| Надсилайте декодоване зображення. | preprocess.kind, preprocess.preset та конкретні поля попередньої обробки, такі як зміна розміру, колір, макет, нормалізація, квантування або теселяція. | Використовуйте це, коли ваш застосунок надсилає пікселі, і Neat має адаптувати їх до моделі контракту. |
| Передати тензори, що відповідають публічним входам моделі | Залиште параметри попередньої обробки незаданими. | Зберігає потрібні адаптери Cast/Quant/Tess, зокрема для вже масштабованих і нормалізованих входів FP32. |
| Розшифруйте результати виявлення. | decode_type, decode_type_option, score_threshold, nms_iou_threshold, top_k, num_classes | Моделі виявлення потребують чітко визначеного наміру декодування. |
| Зберігайте отримані файли моделі для подальшого перегляду. | cleanup_extracted_model_data = false | Корисно під час налагодження. Залиште значення за замовчуванням для звичайного запуску. |
| Запустіть декілька моделей маршрутів в одному процесі. | name_suffix та префікс/суфікс назви елемента графа. | Забезпечує читабельність згенерованих назв і результатів діагностики. |
| Зупиніть виконання маршруту моделі достроково. | inference_terminal | Розширений метод налагодження маршруту. Не використовуйте його для первинного запуску коду. |
| Налаштуйте розташування місця виконання або внутрішні черги. | processcvu, processmla, advanced_execution | Розширений режим. Виміряйте стандартний шлях перед налаштуванням. |
Вхідне зображення з декодуванням для виявлення об’єктів.
Використовуйте цей шаблон, коли модель передбачає попередню обробку зображень і видає результати у форматі YOLO.
simaai::neat::Model::Options options;
options.preprocess.kind = simaai::neat::InputKind::Image;
options.preprocess.preset = simaai::neat::NormalizePreset::COCO_YOLO;
options.decode_type = simaai::neat::BoxDecodeType::YoloV8;
options.score_threshold = 0.25f;
options.nms_iou_threshold = 0.45f;
options.top_k = 100;
simaai::neat::Model model(model_path, options);
Дотримуйтеся чіткості налаштувань: не встановлюйте значення за замовчуванням або застарілі поля, якщо вони не змінюють контракт, який вам потрібен. Якщо метадані тензора або зображення вже містять інформацію про вихідний формат, уникайте повторення цієї інформації, якщо тільки на сторінці не пояснюється, чому це необхідно.
Посібник з ідентифікації та розшифрування сигналів
Встановіть параметри декодування для визначення, коли маршрут має повертати декодовані обмежувальні рамки, результати визначення пози, або результати сегментації замість необроблених тензорів, отриманих у процесі виведення. Залиште поля без змін, якщо вам потрібні необроблені вихідні дані моделі.
| Поле | Використовуйте його, коли | Значення за замовчуванням. |
|---|---|---|
decode_type | Вам потрібен Neat, щоб додати етап BoxDecode для моделі виявлення. | Unspecified; не виявлено наміру розшифрування. |
decode_type_option | Для визначення порядку тензора в блоці виявлення потрібна певна варіація. | Auto; нехай модель контракту та планувальник маршрутів приймуть рішення. |
score_threshold | Ви хочете відкинути кандидатів із низьким рівнем достовірності під час декодування. | 0; зберігайте список кандидатів до наступного етапу відбору. |
nms_iou_threshold | Під час декодування слід застосовувати метод придушення локальних максимумів. | 0; зберігається значення, упаковане в модель. Якщо його немає, YOLO26 пропускає NMS, а інші декодери пригнічують кожну рамку, що перекривається. |
top_k | Ви хочете встановити жорстке обмеження на кількість виявлених об’єктів для кожного результату. | 0; обмеження кількості найкращих результатів (top-K) відсутнє. |
num_classes | Глибину шару, що відповідає за класифікацію, неможливо надійно визначити, наприклад, у випадку з однокласовою версією YOLO, де використовується єдиний шар для класифікації. | 0; використовуйте метадані MPK або застарілі методи обробки. |
Для більшості моделей, що використовують архітектуру YOLO, почніть з налаштування параметрів decode_type, score_threshold, nms_iou_threshold та top_k. Додайте параметр num_classes лише тоді, коли це необхідно для покращення роботи моделі. Залиште параметр decode_type_option у режимі Auto, якщо не відомо, що для обробки тензора потрібен певний селектор.
simaai::neat::Model::Options options;
options.decode_type = simaai::neat::BoxDecodeType::YoloV8;
options.score_threshold = 0.25f;
options.nms_iou_threshold = 0.45f;
options.top_k = 100;
options.num_classes = 1; // Set only when the model contract needs the class count.
simaai::neat::Model model(model_path, options);
Не використовуйте boxdecode_original_width або boxdecode_original_height у нових прикладах. Для інверсії координат використовуйте попередньо оброблені метадані; зберігайте ці метадані замість того, щоб жорстко кодувати розмір зображення.