Профильное задание на стажировку в ВК.
Примечание:
Объяснения и код могут содержать смешанный стиль комментариев как на русском и на английском. Я привык писать всё на английском, но понимаю, что проверящий скорее всего ожидает русский и в компании самой возможно используется русский.
- Дан корпус данных, где каждой компании соответствует пара образцов логотипов
- На вход подаётся случайный кроп фото и название искомой компании
- Задача - вывести вероятность, что на кропе логотип искомой компании
Далее можно предложить 2 основных подхода:
-
SIFT (Scale-Invariant Feature Transform)
Из названия компании, мы можем извлечь все доступные образцы и сравнить их с кропом
Плюсы:
- Не зависит от цвета, так как все фичи берутяся из grayscaled
- Не нужен большой объём данных, хватит пары образцов
Минусы:
- Хуже работает в случае большого количества логотипов на одном кропе
- O(N * M) - сложность, что довольно тяжело, если применять на каждый кадр видео
-
YOLO (You Only Look Ones)
Дообучить модель семейства yolo для уже задачи детекции логотипа, разделяя датасет на классы, соответсвующие компаниям
Плюсы:
- O(n * k) - сложность, проходка по обученной нейросети гораздо быстрее, что позволяет использовать её не только на фото, но и на видео
- Лучше справляется с генераций множества bounding box для разных логотипов на фото
- Так как обучается на задачи детекции, выводит информацию не только о классах, но и их расположении, что может быть полезно для других бизнес задач
Минусы:
- Нужно много данных, пары образцов не хватит
- Становиться всё сложнее при возрастании количества классов
- При добавлении новых компаний придётся дообучать и собирать новые данные, а старые классы могут быть неактуальны
Датасетов, имеющих размеченные данные под логотипы Российских компаний, я, увы, не нашёл. Поэтому решил остановиться на предложенном в описании LogoDet-3K.
Из-за того, что его использование неудобно через paperwithcode.com, я решил потратить время на то, чтобы сделать этот датасет более удобным доступным.
Таким образом, теперь датасет можно удобно использовать через huggingface.com, где я рассписал минимальные поля и базовое использование.
Подход показал, что способен нормально различать паттерны с разного рода искажениями и трансформациями над изображениями.
[ЕСЛИ ЧИТАЕТЕ ЭТО, ЗНАЧИТ ЭКСПЕРИМЕНТ ПОКА НЕ УДАЛОСЬ ПРОВЕСТИ]
Подход должен сработать, точность может быть меньше, зато скорость будет выше и будет возможность детектировать положение логотипа на фото (или видео).
- Logo Detection with YOLO
- Deep Learning for Logo Detection
- Trinity-Yolo: High-precision logo detection in the real world
[ЕСЛИ ЧИТАЕТЕ ЭТО, ЗНАЧИТ ЭКСПЕРИМЕНТ ПОКА НЕ УДАЛОСЬ ПРОВЕСТИ]
Более совершенный дескриптор точек.
[ЕСЛИ ЧИТАЕТЕ ЭТО, ЗНАЧИТ ЭКСПЕРИМЕНТ ПОКА НЕ УДАЛОСЬ ПРОВЕСТИ]
Менее точный подход, который может является одним из бейзлайнов
Данные о позиции мы точно потеряем, но это метод прост в реализации.