Запустіть свою першу модель
| Поле | Значення |
|---|---|
| Категорія | Моделі та інференс |
| Складність | Початковий |
| Орієнтовний час читання | <5 minutes |
| Мітки | model, inference, foundations |
Це вступний розділ. Мета полягає в тому, щоб отримати максимально просте виконання повного циклу обробки: завантажити скомпільовану модель, передати їй одне зображення та вивести передбачений індекс класу. Без графів, без потоків, без потокової передачі даних — лише три виклики, на яких базується кожна програма Neat.
Скомпільована модель — це архів .tar.gz, який можна розгорнути, і який містить контракт для виконання висновків MPK: артефакти моделі плюс метадані Neat, необхідні для її виконання на цільовому пристрої. Вам не потрібно розпаковувати його або самостійно налаштовувати етапи — ви вказуєте Neat на архів, передаєте йому вхідні дані та зчитуєте вихідні дані. В результаті ви виконаєте обробку в три рядки та виведете індекс класу top1=.
Покроковий огляд
Завантаження моделі
Перший рядок перетворює шлях до файлу на робочу, виконувану Model: конструктор завантажує архів і готує його до виконання.
Ви передаєте build_options(size) як другий аргумент, щоб вказати контракт вхідних даних, який очікує ця модель: колір RGB, 224×224, і нормалізацію ImageNet, з якою була навчена ResNet-50. Вказуючи це тут, ви повідомляєте середовищу виконання, як перетворити необроблене зображення на тензор, який потрібен моделі.
simaai::neat::Model model(model_path, build_options(size));
Підготовка вхідних даних
Далі ми створюємо рівно одне зображення для класифікації. Якщо ви передаєте --image, воно зчитується, змінюється до розміру 224×224 і перетворюється на RGB, щоб відповідати контракту вхідних даних; в іншому випадку ми синтезуємо суцільний сірий кадр, щоб повний цикл завантаження → виконання → зчитування все ще працював без необхідності мати під рукою файл.
Кадр — це cv::Mat, створений за допомогою load_rgb(...) або як сірий заповнювач.
cv::Mat input = image.empty() ? cv::Mat(size, size, CV_8UC3, cv::Scalar(99, 99, 99))
: load_rgb(image, size);
Виконання висновків і зчитування результату
Третій рядок виконує фактичну роботу: run() приймає вхідні дані та timeout_ms, виконує модель синхронно та повертає вихідні дані. timeout_ms — це максимальний час очікування; 2000 мс тут означає «видавати гучну помилку, якщо пристрій не видав вихідні дані протягом двох секунд», а не зависати на невизначений час. (Передача -1 блокує на невизначений час; у реальному коді краще використовувати скінченне значення). Потім ми зводимо вихідні дані до одного індексу класу за допомогою argmax і виводимо top1=.
run() повертає TensorList; зчитайте байти першого те нзора за допомогою map_read().
simaai::neat::TensorList outputs = model.run(std::vector<cv::Mat>{input}, /*timeout_ms=*/2000);
Запуск
Запустіть програму, і ви повинні побачити передбачений індекс класу, який буде виведено в стандартний вивід (stdout). Запустіть команди Python і C++ (попередньо скомпільовані) з Neat встановити в кореневу директорію **(директорію, яка містить) share/ і lib/); виконайте команди збірки з вихідного коду з кореневої директорії репозиторію.
C++ (prebuilt):
./lib/sima-neat/tutorials/tutorial_001_run_your_first_model \
--model /tmp/resnet_50.tar.gz
C++ (build from source):
./build.sh --target tutorial_001_run_your_first_model
./build/tutorials-standalone/tutorial_001_run_your_first_model \
--model /tmp/resnet_50.tar.gz
Очікуваний результат (точний індекс залежить від зображення):
top1=285
[OK] 001_run_your_first_model
Щоб інтегрувати вихідний код C++, наведений у цьому розділі, у ваш власний проєкт із використанням спеціального CMakeLists.txt (додаткова т ека не потрібна), див. Як запускати навчальні матеріали на головній сторінці.
Для забезпечення високої пропускної здатності, пакетної обробки або трансляції в режимі реального часу перейдіть до розділу 002. Див.: Модель.
На практиці
Де навчальні матеріали та тести шукають архіви моделей (.tar.gz) та приклади ресурсів, а також способи їх надання локально. Це є обов’язковою умовою для кожного навчального посібника, що базується на моделі.
Переконайтеся sima-cli міститься в PATH
Деякі тести викликають sima-cli з неінтерактивних оболонок. Використовуйте це один раз після встановлення. sima-cli:
SIMA_CLI_BIN_DIR="<path-to-sima-cli-bin>"
grep -Fqx "export PATH=\"${SIMA_CLI_BIN_DIR}:\$PATH\"" ~/.bashrc || echo "export PATH=\"${SIMA_CLI_BIN_DIR}:\$PATH\"" >> ~/.bashrc
source ~/.bashrc
Потім перевірте:
/bin/sh -c 'command -v sima-cli'
Розташування архіву моделі та змінні середовища
Налаштування для вилучення/розміщення в середовищі виконання:
SIMA_MPK_EXTRACT_ROOT=<dir>встановлює базову директорію для вилучення даних.SIMA_MPK_CLEANUP_EXTRACTED=0зберігає вилучені дані моделіproc_*після завершення процесу.SIMA_MPK_EXTRACT_GC_STALE_PROC=0вимикає очищення неактивнихproc_*під час запуску.
ResNet50
Порядок пошуку:
SIMA_RESNET50_TAR(заміна для кожної моделі)SIMA_MODEL_TAR(спільний варіант для резервного копіювання тестів/прикладів моделі-архіву)tmp/resnet_50.tar.gz- Локальні файли переміщено до
tmp/якщо знайдено:resnet_50.tar.gz,resnet-50.tar.gz
Завантажити (якщо sima-cli доступний):
sima-cli modelzoo get resnet_50