В процессе работы над задачами компьютерного зрения нашим специалистам по разметке удалось поработать с различными инструментами. Это были LabelImg, LabelMe ну и, конечно же, Label Studio. В Label Studio мы реализовали полноценный сценарий разметки, тренировки и проверки результатов.
Основным достоинством этих инструментов была лёгкость установки. Но с точки зрения удобства и возможностей их постоянно приходилось дорабатывать под себя и чинить баги.
Что в процессе разметки не нравилось больше всего:
Поиск изображений. При сборе картинок в интернете приходилось искать их в Яндексе или Google, а потом много раз повторять одну и ту же процедуру: выделить картинку, «сохранить как», придумать имя, закинуть в проект. Ничего сложного, но это куча рутины и потерянного времени.
Сложные объекты. Не хватало инструментов, когда объект составной и разбросан по разным частям изображения. Приходилось выдумывать, как выделить его так, чтобы он потом оставался одной сущностью: например, код объекта, который начинается в одной строке таблицы и продолжается в другой.
Хранение и сбор от нескольких разметчиков. Тоже отдельная процедура с именованием. Одинаковые имена файлов приводили к тому, что при слиянии датасетов их приходилось переименовывать, а это порождало ошибки в духе «ой, а я перезаписал всё не теми данными».
Экспорт в нужные форматы. Разные модели — разные форматы. Конвертеры несложные, но их приходилось запускать отдельно и писать вокруг них свои интерфейсы.
Тестирование и корректировка результатов. После обучения сети идёт отдельный процесс — проверка её работы на реальных данных и правка некорректных результатов. На это тоже уходило много сил и времени.
С появлением Roboflow часть этих задач закрылась, но работа в облаке возможна не на всех материалах, и зачастую приходится возвращаться к проверенным локальным инструментам. Поэтому мы сделали свой — он решает ровно эти проблемы.
Это браузерное расширение, по сути локальный аналог LabelImg и LabelMe, но заточенный под наши боли. Работает прямо в браузере, данные лежат локально, наружу уходят только те запросы к модели, которые мы делаем сами и своим ключом. Как мы их закрыли:
Сбор картинок. Правый клик на любой картинке в вебе и выбор пункта «Send image to Annotator», и она сразу в проекте. Нужно много — есть пакетный режим: прямо на странице выдачи (Google или Яндекс Картинки да и любой другой сайт) кликаешь нужные изображения и отправляешь пачкой. Никаких «сохранить как / придумать имя / переложить в папку». Заодно вместе с картинкой сохраняется, откуда она взята: сайт-источник, страница (объявление, статья, карточка) и поисковый запрос, по которому её нашли.
Составные объекты. Добавили блоки: несколько рамок или полигонов в разных местах изображения связываются в одну сущность. Тот самый случай с кодом, который начинается в одной строке таблицы и продолжается в другой, — рисуешь куски, они линкуются в один объект и так же уходят в экспорт и обучение.
Хранение и слияние. Каждой картинке присваивается уникальный id, поэтому имена файлов больше ничего не ломают — при слиянии датасетов от разных разметчиков нет ни коллизий, ни случайных перезаписей. История происхождения хранится рядом, так что контекст не теряется.
Экспорт. Встроенная выгрузка в COCO, YOLO и Pascal VOC — без отдельных конвертеров и самописных обвязок.
Поддержка Word, PDF: Отдельная фишка, что для сбора именованных сущностей можно делать разметку документа также как картинки. Для документов доступен экспорт текста в форматы под BERT, NER, CoNLL и LayoutLM.
Большая модель как учитель. Если данные можно размечать в облаке то здесь же работает авторазметка большой моделью — Gemini, Qwen, GPT-4o, Claude. Добавляешь нужные объекты для разметки, описываешь задачу текстом, модель ставит черновые рамки, а человек правит. Тот же подход годится и для проверки обученной сети: прогоняешь её или модель-учителя на реальных данных и поправляешь ошибки прямо в редакторе.
Из важного: инструмент не требует дополнительных библиотек и установленного Office и Adobe работает напрямую из браузера.
Сбор датасета из недель ручной работы превращается в часы проверки, и при этом данные остаются локально.
Интересно? Пишите нам, поделимся опытом и утилитой)