Отже, хлопці, що там щодо сегментації? Здається, тепер не доведеться тренувати нову модель сегментації під кожне окреме завдання (sic!). Meta AI розробили фундаментальну модель для сегментації картинок, яка може багато чого.
З коробки модель Segment Anything (SA) вміє сегментувати об’єкти за промптом. Промпт може бути текстовим, або кілька точок, або виділена область.
SA вивчила загальну концепцію об’єктів і може генерувати маски для будь-якого об’єкта на будь-якому зображенні або відео, навіть включно з об’єктами і типами зображень, яких не було в трейні. Вона готова до використання на різних “доменах” без додаткового навчання”.
Вихід Segment Anything – це щось на кшталт “GPT-3 моменту” для сегментації. Коли можна взяти велику загальну модель і вона відразу працюватиме не гірше, а то й краще (якщо даних мало), ніж спеціалізована модель.
Мало того, ваги і код моделі повністю відкриті:
Сайт проєкту:
Demo:
Структура моделі:
Тут усе за класикою – великі трансформери і крос-аттеншени.
- Encoder зображень ViT-H, який обробляє кожне зображення і видає фічі.
- Encoder запитів, який обробляє вхідні промпти, такі як кліки, бокси або текст.
- Легкий декодер на основі трансформера, який передбачає маски об’єктів на основі фіч зображення і запитів.
Розмір моделі:
Image Encoder містить 632M параметрів.
Encoder запитів і decoder масок містять 4M параметрів. Це дає змогу порахувати фічі картинки на GPU (0.15s на A100), і ганяти все інше реаліайм на CPU прямо в браузері (50ms на запит).
Модель навчалася протягом 3-5 днів на 256 GPU A100, що не особливо багато в сучасних реаліях, коли SD або GPT-4 навчаються місяцями.
Для потужної генералізації модель потрібно навчати на величезному датасеті. Так ось автори зібрали й опублікували найбільший датасет із сегментації: 1 млрд масок на 11 млн зображень. Його і використовували для навчання.
Я протестував модельку Segment Anything у себе в браузері.
Запустив на картині Пітера Брейгеля Старшого, який страшенно любив малювати багато дрібних деталей. І ось, що вийшло: Хоч у тренувальному датасеті не було картин, модель добре зіставляється сегментацією і намальованих об’єктів. Іноді, коли однієї точки не вистачає, щоб повністю виділити об’єкт, потрібно клікнути ще разок, або виділити боксом.
Поки я рухав мишкою, prompt encoder і mask decoder крутилися в реальному часі локально в мене на CPU.
До речі, модель Segment Anything можна непогано склеїти в єдиний пайплайн з Instance деткекторами. Детктор буде випльовувати бокси, а SA видаватиме маски за заданими боксами.
Або ще краще. Для артистів: Ви текстом говорите, що поміняти і як, потім Segment Anуthing видає маску, а Stable Diffusion за маскою генерує змінений регіон у бажаному вигляді. Чекайте скоро на просторах інтернету.