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

libreyolo doctor

Запускає набір перевірок стану датасету для виявлення об'єктів і повідомляє про те, що зашкодило б навчанню: відсутні файли, зіпсовані мітки, пошкоджені зображення, витік між розбиттями та дисбаланс класів.

Команда
libreyolo doctor
Обов'язково
data
Вивід
Звіт про знахідки у stdout. Код виходу 1, якщо знайдено помилки

Синтаксис

bash
libreyolo doctor <data.yaml> [key=value ...]

Датасет передається позиційно, а як альтернатива приймається data=<path>. Якщо вказати обидва з різними значеннями, команда завершується з config_conflict. Решта аргументів має вигляд пари key=value, до того ж працює й POSIX-форма, тож imgsz=1024 і --imgsz 1024 означають той самий аргумент.

Аргументи

АргументЗа замовчуваннямПризначення
dataПозиційний. YAML датасету у форматі виявлення об'єктів YOLO, наприклад coco8.yaml. Обов'язковий
imgsz640Розмір навчального зображення для перевірок, що спираються на пікселі, як-от дрібні об'єкти
fastfalseПропустити декодування зображень, через що вимикаються перевірки на пошкодження, дублікати та витік
skipРозділені комами ідентифікатори перевірок або сімейства, які треба пропустити, наприклад images,labels.tiny_object
onlyРозділені комами ідентифікатори перевірок або сімейства, які треба виконати виключно
strictfalseПопередження також впливають на код виходу, для бар'єрів CI
downloadfalseДозволити завантаження датасету за URL, якщо його немає. Ніколи не скрипти
jsonfalseВивід JSON у stdout
quietfalseПридушити stderr
help_jsonfalseВивести схему команди у форматі JSON і завершити роботу

Сімейства перевірок

skip і only приймають або повний ідентифікатор перевірки, або префікс сімейства, тож images вибирає всі перевірки images.*.

СімействоОхоплює
configСам YAML датасету: відсутні names, nc проти names, відсутні розбиття, path, який не вдається розв'язати, дубльовані назви класів
filesВідповідність зображень і міток: відсутні мітки, відсутні зображення, осиротілі мітки, непідтримувані розширення, збіги за регістром
labelsВміст міток: синтаксис, рядки полігонів, ідентифікатори класів поза діапазоном, координати поза діапазоном, вироджені рамки, дрібні об'єкти, величезні рамки, екстремальні співвідношення сторін, дубльовані рамки, перенасичені зображення, ідентичні файли
imagesПіксельні дані: пошкоджені файли, орієнтація EXIF, незвичні колірні режими, дрібні або екстремальні розміри, однорідні зображення, точні та наближені дублікати
splitsВитік між розбиттями, точний і наближений
balanceРозподіл класів: класи з нульовою або малою кількістю екземплярів, дисбаланс, покриття розбиттів, частка фону, перекіс розбиттів

Приклади

Базове використання
# download=true дозволяє вбудованому coco8.yaml завантажити зображення, якщо їх немає.libreyolo doctor coco8.yaml download=true
Швидкий прохід, без декодування зображень
libreyolo doctor coco8.yaml download=true fast=true
Бар'єр CI за вибраними перевірками
libreyolo doctor coco8.yaml download=true strict=true json=true \  only=labels,files,config

Примітки

Коди виходу

0, якщо помилок не знайдено, 1, якщо будь-яка знахідка є помилкою. З strict=true попередження також піднімають код виходу до 1, і саме цього налаштування потребує бар'єр CI.

Проблеми з використанням мають власні коди: 2 для невідомого ідентифікатора перевірки або сімейства в skip чи only, 3, якщо датасет не вдається знайти, і 3, якщо датасет не має форми, придатної для виявлення об'єктів.

Вибір перевірок розв'язується до сканування

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

Якщо поєднання skip, only і fast не залишає жодної перевірки для виконання, це теж помилка, а не мовчазне проходження.

Завантаження

Датасет не завантажується, доки не вказано download=true, і виконуються лише завантаження за URL. Вбудований скрипт завантаження на Python у YAML датасету ця команда не виконує ніколи, хай яким буде прапорець.

Область застосування

Перевірки написано для датасетів виявлення об'єктів. Датасет, мітки якого мають форму пози, сегментації чи орієнтованих рамок, розпізнається і відхиляється з data_invalid, замість того щоб оцінюватися за неправильними правилами.

Вивід

Звіт для людини йде у stdout, а json=true замінює його структурованим об'єктом, що містить підсумкові лічильники, статистику датасету, кожну знахідку та перелік пропущених перевірок.

Пов'язане: libreyolo train, запуск, перед яким і призначено виконувати цю команду.

Перевірено з LibreYOLO v1.5.0.