FOMO
FOMO є сітковим локалізатором точок: кожна клітинка сітки низької роздільної здатності класифікується як фон або центр об'єкта без регресії обмежувальної рамки. LibreYOLO підтримує його для завдання точок.
- Задачі
- point
- Розміри
- Встановлення
pip install libreyolo- Рівень підтримки
- Підтримуваний, починаючи з v. Додаткові придатні до навчання моделі: тести CI підтримують справними, а функції додають за нагоди.
- Першоджерело
- FOMO (Faster Objects, More Objects), автори: Edge Impulse, ліцензія MIT. Стаття, джерело
- Ліцензії
- Код: MIT, ваги: MIT. Комерційне використання
Встановлення
FOMO не потребує нічого, крім базового пакета.
pip install libreyoloПередбачення
На відміну від усіх інших сімейств на цьому сайті, ваги LibreFOMO не
завантажуються автоматично: LibreYOLO("LibreFOMOs-point.pt") шукає цей файл на
диску й спричиняє ValueError із його назвою замість завантаження з Hugging Face.
Спочатку завантажте контрольну точку з
організації LibreYOLO та завантажте її за
локальним шляхом або навчіть власну (див. розділ «Навчання» нижче).
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Ваги LibreFOMO не завантажуються автоматично (див. розділ «Контрольні точки» нижче).# Укажіть тут контрольну точку, яку вже завантажено локально.model = LibreYOLO("./LibreFOMOs-point.pt")result = model(SAMPLE_IMAGE, save=True) for point in result.points: print(point.cls, point.conf, point.xy)libreyolo predict model=./LibreFOMOs-point.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueРезультат містить points замість boxes: кожен рядок має вигляд
x, y, class, confidence і доступний як result.points.data або через засоби
доступу .xy, .xyn, .cls і .conf. Поріг iou не задається, оскільки немає
рамок для пригнічення; predict(..., nms_radius=1) визначає, на скільки клітинок
сітки мають відстояти два виявлення, щоб збереглися обидва, а назва файлу повинна
містити суфікс завдання FOMO -point, щоб завантажувач його розпізнав. Джерела,
потокове оброблення та роботу з результатами описано на сторінці
передбачення.
Варіанти
Три розміри, s, m та l, використовують дедалі ширші бекбони в стилі
MobileNetV2 із відповідно більшими фіксованими роздільними здатностями вхідних
даних, кожен з однією головою класифікації 1x1. Це сімейство не має тут таблиці
бенчмарків; розмір файлу контрольної точки в таблиці нижче наразі є
найзрозумілішим показником для кожного розміру.
Навчання
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.train( data="my-dataset.yaml", epochs=40, batch=32, lr0=3e-4,)# Потрібно передати imgsz: типовим значенням CLI є 640, а контрольна точка s# приймає лише свій нативний розмір 96.libreyolo train model=./LibreFOMOs-point.pt data=my-dataset.yaml imgsz=96 epochs=40 batch=32 lr0=3e-4imgsz не можна вибирати довільно: типовим є нативний розмір завантаженої
контрольної точки, а передавання іншого значення спричиняє ValueError із назвою
очікуваного розміру. Ці розміри дорівнюють 96 для s, 192 для m та 224 для
l. Типовим значенням imgsz у CLI є 640, тому команда libreyolo train
повинна явно задавати значення відповідно до контрольної точки.
Без інших параметрів тренер виконує 40 епох із батчем 32, Adam та lr0=3e-4,
без спаду ваг, а клас переднього плану отримує вагу у 100x більшу за фон у
перехресній ентропії кожної клітинки, оскільки майже кожна клітинка сітки у
типовій сцені є фоном. EMA та змішану точність типово вимкнено, а геометричні й
колірні аугментації, які використовуються в інших частинах LibreYOLO, не
застосовуються: mosaic, mixup, зміна HSV, віддзеркалення, обертання, перенесення
та зсув мають нульові значення.
Саме цим шляхом опубліковані контрольні точки LibreFOMO навчено з нуля на COCO.
Датасети й системи журналювання описано на сторінці навчання.
Валідація
Метод val() виконує диспетчеризацію до валідатора на рівні сітки, створеного
для цього сімейства. Разом зі спільними для інших завдань точок ключами
зіставлення точок metrics/precision, metrics/recall та metrics/mAP@ він
перебирає пороги упевненості й значення nms_radius та публікує найкраще
поєднання F1 у metrics/grid_F1, metrics/grid_precision,
metrics/grid_recall і metrics/grid_mean_distance, а також поріг і радіус,
які його створили, у decode/threshold і decode/nms_radius.
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/grid_F1"])print(metrics["metrics/grid_precision"], metrics["metrics/grid_recall"])libreyolo val model=./LibreFOMOs-point.pt data=my-dataset.yamlЕкспорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| point | point to ONNX: підтримується | point to TorchScript: підтримується | point to ExecuTorch: підтримується | point to TensorRT: підтримується | point to OpenVINO: підтримується | point to Paddle: не підтримується | point to MNN: не підтримується | point to RKNN: не підтримується | point to ncnn: підтримується | point to TFLite: не підтримується | point to CoreML: не підтримується | point to Core AI: підтримується |
Експортований артефакт повторно завантажується через LibreYOLO() за суфіксом
файлу, тому файл .onnx або .engine поводиться як контрольна точка й повертає
той самий Results. Запуск графа безпосередньо в середовищі виконання без
установленої LibreYOLO також підтримується, але тоді попередню та подальшу
обробку потрібно написати самостійно.
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=./LibreFOMOs-point.pt format=onnxfrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика виконує маршрутизацію за суфіксом файлу, тому експортований артефакт# завантажується як будь-яка контрольна точка й повертає той самий об'єкт Results.model = LibreYOLO("./LibreFOMOs-point.onnx")result = model(SAMPLE_IMAGE) print(result.points.xy)Контрольні точки
Усі опубліковані файли ваг для цього сімейства. Жоден із них не завантажується
автоматично: отримайте потрібний файл із пов'язаної сторінки Hugging Face і
передайте його локальний шлях до LibreYOLO().
| Файл | Вхід (пікс.) | Ліцензія ваг |
|---|---|---|
| point | ||
| LibreFOMOs-point.pt | mit | |
| LibreFOMOm-point.pt | mit | |
| LibreFOMOl-point.pt | mit | |
Кожен наведений вище файл уже доступний у організації LibreYOLO і завантажується під час першого використання.
Ліцензування
Перевіряйте ліцензію в репозиторії Hugging Face конкретних ваг, які завантажуєте. Кожна контрольна точка в організації LibreYOLO має ліцензію, і вона не завжди однакова для всього сімейства. Цей репозиторій є авторитетним джерелом, а наведене нижче резюме описує умови на момент останньої перевірки сторінки.
Це опис відповідних ліцензій, а не юридична консультація. Якщо відповідь має комерційне значення, самостійно прочитайте ліцензії та зверніться по юридичну консультацію.
- Оригінальна робота
- FOMO (Faster Objects, More Objects), Edge Impulse
- Ліцензія першоджерела
- MIT
- Джерело першоджерела
- docs.edgeimpulse.com/docs/edge-impulse-studio/learning-blocks/object-detection/fomo-object-detection-for-constrained-devices
- Код LibreYOLO
- MIT
- Ваги
- MIT, повторно опубліковано на huggingface.co/LibreYOLO
- Тлумачення
- FOMO is a technique Edge Impulse introduced through a blog post and its product documentation, not a code release, so there is no upstream repository or license to inherit. LibreYOLO's architecture is an original MobileNetV2-style reimplementation of the published description, and the LibreFOMO checkpoints are trained from scratch on COCO, so both the code and these weights are MIT, LibreYOLO's own. They are also not auto-downloaded: LibreYOLO("LibreFOMOs-point.pt") looks for that file locally and raises rather than fetching it, so get the checkpoint from the Hugging Face repository first. The name FOMO and the technique it describes remain Edge Impulse's.
Немає репозиторію початкового коду FOMO, на який можна послатися: Edge Impulse описує метод у дописі блогу та документації продукту, але не випустила код навчання чи інференсу FOMO. Наведені тут архітектура й навчання є власною реалізацією LibreYOLO за опублікованим описом, а опубліковані контрольні точки LibreFOMO навчено з нуля на COCO. Тому і код, і ці ваги є власністю LibreYOLO за ліцензією MIT. Назва FOMO та описаний нею метод залишаються власністю Edge Impulse.