Переглянути як Markdown

Типи Results

Results є єдиним типом повернення для одного зображення в усіх моделях LibreYOLO. Він містить вісімнадцять необов'язкових слотів даних, по одному для кожного типу задачі, і заповнює лише ті, які створила модель.

Об'єкт Results

Один об'єкт Results описує одне зображення. Одне джерело зображення повертає один такий об'єкт, джерело-список або каталог повертає список, а stream=True повертає генератор, що послідовно їх видає.

АтрибутТипЗначення
orig_shape(int, int)Початкові висота й ширина зображення
pathstrШлях до джерела, якщо вхідні дані надійшли з диска
namesdict[int, str]Відповідність індексу класу його назві
speeddict[str, float]Кількість мілісекунд на кожному етапі
track_idtensorІдентифікатори відстеження, якщо результат отримано з track()
frame_idxintІндекс кадру для джерел відео та потоків
restore_scaleintКоефіцієнт збільшення вихідного зображення відносно вхідного для результату відновлення; в усіх інших випадках 1

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9t.pt")result = model(SAMPLE_IMAGE) print(result.orig_shape, result.path)print(result.boxes.xyxy)print(result.boxes.conf)print(result.names[int(result.boxes.cls[0])])

Слоти даних

Кожен слот має значення None, якщо модель не створила відповідні дані. Слот, який заповнює сімейство, визначається його задачею.

СлотКласЗадача
boxesBoxesdetect
masksMaskssegment
keypointsKeypointspose
probsProbsclassify
obbOBBobb
gazeGazegaze
pointsPointspoint
semantic_maskSemanticMasksemantic
panopticPanopticSegmentationpanoptic
depth_mapDepthMapdepth
normal_mapNormalMapnormal
edgesEdgeMapedge
restoredRestoredImagerestore
matteMattematte
ocrOCRRegionsocr
embeddingsEmbeddingsembed
identitiesIdentitiesembed, з галереєю
meshesMeshesmesh

result.normals є доступним для читання й запису псевдонімом result.normal_map.

Одночасно можна встановити кілька слотів. Модель сегментації заповнює і boxes, і masks; модель оцінювання погляду заповнює boxes рамками облич, а gaze кутами; модель сітки заповнює boxes рамками людей, а meshes вирівнює з ними за рядками.

Boxes

Рамки виявлення для одного зображення.

ЧленПовертає
xyxyКоординати кутів у пікселях початкового зображення
xywhЦентр і розмір у пікселях
xyxynКоординати кутів, нормалізовані до [0, 1]
xywhnЦентр і розмір, нормалізовані до [0, 1]
confВпевненість для кожної рамки
clsІндекс класу для кожної рамки
idІдентифікатор відстеження для кожної рамки або None
is_trackTrue, якщо наявні ідентифікатори відстеження
dataУпакований тензор

with_id(id) і with_orig_shape(orig_shape) повертають новий об'єкт Boxes, у якому замінено відповідне поле.

Masks

Маски екземплярів для одного зображення. data є тензором масок; xy повертає контури кожного екземпляра в пікселях, а xyn повертає їх нормалізованими.

Keypoints

Ключові точки пози, вирівняні за рядками з boxes. xy містить пару координат для кожної ключової точки, а xyn містить нормалізовану пару. conf є третім каналом, якщо він наявний у даних, інакше має значення None. has_visible є булевим масивом зі значенням true там, де conf > 0, і значенням true для всіх елементів, якщо каналу впевненості немає.

Points

Локалізація точок для одного зображення. data має форму (N, 4) з рядками x, y, class, confidence. Координати задано в абсолютних пікселях; xy, cls і conf розділяють стовпці, а xyn нормалізує координати.

Probs

Оцінки класифікації. top1 є індексом найкращого результату, top5 містить п'ять найкращих індексів, а top1conf і top5conf містять їхні оцінки.

OBB

Орієнтовані рамки. data містить 7 або 8 значень у кожному рядку: xywhr, необов'язковий ідентифікатор відстеження, потім впевненість і клас.

ЧленПовертає
xywhrЦентр, розмір і обертання в радіанах
xyxyxyxyЧотири кути в пікселях
xyxyxyxynЧотири нормалізовані кути
xyxyВирівняна за осями оболонка в пікселях
conf, cls, id, is_trackТе саме, що в Boxes

Gaze

Кути погляду для кожного обличчя в радіанах, форма (N, 2), з вирівнюванням за рядками відносно рамок облич у boxes. Стовпець 0 містить нахил, а стовпець 1 поворот згідно з домовленістю L2CS: додатний поворот спрямовує погляд ліворуч відносно людини, а додатний нахил спрямовує його вниз. pitch_deg і yaw_deg перетворюють значення на градуси, а direction_3d повертає одиничний вектор напрямку.

SemanticMask

Щільна семантична карта у формі (H, W) з цілочисловими ідентифікаторами класів на полотні початкового зображення. 255 є значенням ігнорування й ніколи не враховується як клас (SemanticMask.IGNORE_INDEX). classes перелічує наявні ідентифікатори класів, а class_mask(class_id) повертає булеву маску одного класу.

PanopticSegmentation

Кожен піксель отримує рівно один сегмент без перекриття, що поєднує області фону та екземпляри об'єктів. data є цілочисловою картою ідентифікаторів сегментів у формі (H, W); ідентифікатор сегмента 0 означає відсутність мітки (PanopticSegmentation.IGNORE_INDEX). segments_info є списком словників, по одному для кожного сегмента, кожен з яких містить щонайменше {"id": int, "category_id": int}, де id відповідає значенню на карті, а category_id індексує names. segment_ids перелічує наявні ідентифікатори, а segment_mask(segment_id) повертає булеву маску одного сегмента.

Поділ на об'єкти та фон є властивістю категорії, а не сегмента. Дані можуть денормалізувати її в кожен сегмент як "isthing": bool; якщо це відбувається, значення має збігатися з картою на рівні категорій.

DepthMap

Щільна карта відносної оберненої глибини у формі (H, W) зі значеннями з рухомою комою на полотні початкового зображення. Вищі значення означають меншу відстань до камери. Значення є відносними, а не метричними в метрах. min, max і mean обчислюються за скінченними значеннями, а normalized() масштабує карту до [0, 1].

NormalMap

Щільне поле нормалей поверхні типу float32 у формі (H, W, 3) на полотні початкового зображення в системі координат камери OpenCV: +x праворуч, +y донизу, +z углиб сцени. Нормалі спрямовано до камери, тому поверхня, паралельна площині зображення, має нормаль (0, 0, -1). Кожен піксель містить одиничний вектор. assert_normalized(atol=1e-4) перевіряє цей інваріант.

EdgeMap

Щільна карта ймовірностей країв типу float32 у формі (H, W) на полотні початкового зображення, де 0 означає не край, а 1 означає край. Безперервну карту збережено, щоб поріг обирав код виклику: binary(threshold=0.5) застосовує поріг, а array повертає подання numpy.

RestoredImage

Відновлене зображення RGB у формі (H, W, 3) типу uint8. Для надроздільної здатності полотно у Results.restore_scale разів більше за вхідне зображення. array повертає подання numpy, а save(path) записує зображення.

Matte

М'яка матова маска непрозорості типу float32 у формі (H, W) у діапазоні [0, 1] на полотні початкового зображення. 1 означає повністю передній план, а 0 повністю тло. М'яка матова маска охоплює жорстку маску видалення тла з порогом 0.5 і зберігає згладжені краї, які відкидає бінарна маска. array повертає подання numpy.

Для результату з матовою маскою Results.cutout(image=None) повертає масив RGBA у формі (H, W, 4) типу uint8, четвертим каналом якого є матова маска, а Results.save(path, image=None) записує цей виріз як PNG із прозорим тлом. Обидва методи беруть RGB з image, якщо його надано, інакше повторно завантажують його зі шляху Results.path.

OCRRegions

Локалізований текст із транскрипціями. data містить багатокутники типу float у формі (N, 4, 2) у пікселях початкового зображення, впорядковані від лівого верхнього кута до правого верхнього, правого нижнього й лівого нижнього; області розташовано в порядку читання, зверху вниз, а потім зліва направо. texts є списком із N транскрипцій. conf містить оцінку розпізнавання кожної області, а det_conf оцінку виявлення, обидва мають форму (N,).

Чотирикутники виявлення є справжніми багатокутниками, тому вони не заповнюють Results.boxes. xyxy повертає їхні вирівняні за осями оболонки.

Embeddings

L2-нормалізовані вектори із задачі embed, які завжди мають форму (N, D). Результат для всього зображення містить один рядок і не має рамок; ембединги областей вирівняно за рядками з boxes. Оскільки кожен рядок нормалізовано, косинусна подібність дорівнює скалярному добутку.

ЧленПовертає
dimD
normalizedРядки після повторної нормалізації
similarity(other)Попарна косинусна подібність з іншим об'єктом Embeddings або тензором
verify(i, j, threshold=0.4)True, якщо рядки i та j збігаються

Identities

Іменовані збіги з галереєю, вирівняні за рядками з embeddings. Створюються, коли об'єкт Gallery передано до передбачення embed. name є списком, у якому елемент має значення None нижче порога збігу, а найближче ім'я нижче порога ніколи не вгадується. score є масивом оцінок збігу, а data об'єднує їх у пари.

Meshes

Параметричні сітки людського тіла, вирівняні за рядками з рамками людей у boxes. Усі дані подано в системі координат камери початкового зображення. transl має метричні значення в метрах, причому +z спрямовано від камери; vertices і joints3d мають метричні значення та вже враховують transl; joints2d задано в пікселях полотна початкового зображення, а не кадрованої ділянки, яку обробляла мережа. Жодне поле не містить світової системи координат або системи відліку сили тяжіння.

Схеми параметрів різняться між моделями тіла, тому форми ніде не задано жорстко. body_model називає параметризацію, а кількість зчитується з тензорів: num_vertices, num_joints, num_betas і has_vertices. params повертає словник параметрів, а save_obj(path, index=0) записує одну сітку. Поля: global_orient, body_pose, betas, transl, vertices, faces, joints3d, joints2d, conf, focal_length та extras.

Для body_model="mhr" обертання подано кутами Ейлера в радіанах, а не представленням вісь-кут, body_pose є плоским вектором параметрів для суглобів, а не трійкою для кожного суглоба, а betas є коефіцієнтами ідентифікаційної форми. Масштаб скелета, поза кистей і вираз обличчя містяться в extras.

Перетворення та вибір

Кожен об'єкт даних має методи to(*args, **kwargs), cpu(), cuda() і numpy(), а виклик одного з них для Results одночасно застосовує його до кожного заповненого слоту.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9t.pt")result = model(SAMPLE_IMAGE) # Усі дані переміщуються разом.result = result.cpu().numpy() # Рядки як звичайні словники, а потім як JSON.print(result.summary()[:1])print(result.to_json())

result[idx] вибирає рядки в усіх вирівняних за рядками даних. len(result) повертає кількість виявлень або точок, якщо рамок немає. result.update(...) повертає копію із заміненими вказаними слотами; метод приймає кожен слот, а також track_id і restore_scale.

summary і to_json

summary(normalize=False, decimals=5, embeddings=False) повертає список звичайних словників, по одному рядку для кожного виявлення, сегмента, точки або області залежно від установлених слотів. to_json(**kwargs) передає свої аргументи до summary і повертає рядок JSON.

plot() візуалізує щільний результат нормалей або країв у його канонічному поданні; для інших типів результатів він породжує виняток. Анотовані зображення для інших задач створює predict(save=True).

Назви слотів, форми, властивості та типові значення звірено з libreyolo/utils/results.py у версії v1.5.0. Семантику взято з докстрингів класів даних.