An open API service indexing awesome lists of open source software.

https://github.com/axonstan/2025-spring-vk-ml


https://github.com/axonstan/2025-spring-vk-ml

cv logotypes vk

Last synced: 28 days ago
JSON representation

Awesome Lists containing this project

README

          

# ML Developer

Профильное задание на стажировку в ВК.

**Примечание:**
> Объяснения и код могут содержать смешанный стиль комментариев как на русском и на английском. Я привык писать всё на английском, но понимаю, что проверящий скорее всего ожидает русский и в компании самой возможно используется русский.

## Моё понимание данного "ТЗ"

- Дан корпус данных, где каждой компании соответствует пара образцов логотипов
- На вход подаётся случайный **кроп фото** и название **искомой компании**
- Задача - вывести вероятность, что на кропе логотип искомой компании

Далее можно предложить 2 основных подхода:

1. **SIFT (Scale-Invariant Feature Transform)**

Из названия компании, мы можем извлечь все доступные образцы и сравнить их с кропом

**Плюсы:**

- Не зависит от цвета, так как все фичи берутяся из grayscaled
- Не нужен большой объём данных, хватит пары образцов

**Минусы:**

- Хуже работает в случае большого количества логотипов на одном кропе
- O(N * M) - сложность, что довольно тяжело, если применять на каждый кадр видео

2. **YOLO (You Only Look Ones)**

Дообучить модель семейства yolo для уже задачи детекции логотипа, разделяя датасет на классы, соответсвующие компаниям

**Плюсы:**

- O(n * k) - сложность, проходка по обученной нейросети гораздо быстрее, что позволяет использовать её не только на фото, но и на видео
- Лучше справляется с генераций множества bounding box для разных логотипов на фото
- Так как обучается на задачи детекции, выводит информацию не только о классах, но и их расположении, что может быть полезно для других бизнес задач

**Минусы:**

- Нужно много данных, пары образцов не хватит
- Становиться всё сложнее при возрастании количества классов
- При добавлении новых компаний придётся дообучать и собирать новые данные, а старые классы могут быть неактуальны

## Данные

Датасетов, имеющих размеченные данные под логотипы Российских компаний, я, увы, не нашёл.
Поэтому решил остановиться на предложенном в описании LogoDet-3K.

Из-за того, что его использование неудобно через [paperwithcode.com](https://paperswithcode.com/dataset/logodet-3k), я решил потратить время на то, чтобы сделать этот датасет более удобным доступным.

Таким образом, теперь датасет можно удобно использовать через [huggingface.com](https://huggingface.co/datasets/PodYapolsky/LogoDet-3K), где я рассписал минимальные поля и базовое использование.

[![Dataset on huggingface](https://huggingface.co/datasets/huggingface/badges/resolve/main/dataset-on-hf-md.svg)](https://huggingface.co/datasets/PodYapolsky/LogoDet-3K)

## Заключение

#### SIFT

Подход показал, что способен нормально различать паттерны с разного рода искажениями и трансформациями над изображениями.

#### YOLO

[ЕСЛИ ЧИТАЕТЕ ЭТО, ЗНАЧИТ ЭКСПЕРИМЕНТ ПОКА НЕ УДАЛОСЬ ПРОВЕСТИ]

Подход должен сработать, точность может быть меньше, зато скорость будет выше и будет возможность детектировать положение логотипа на фото (или видео).

- [Logo Detection with YOLO](https://github.com/tadowney/logo_detection)
- [Deep Learning for Logo Detection](https://arxiv.org/pdf/2210.04399)
- [Trinity-Yolo: High-precision logo detection in the real world](https://www.researchgate.net/publication/370096932_Trinity-Yolo_High-precision_logo_detection_in_the_real_world)

#### ORB

[ЕСЛИ ЧИТАЕТЕ ЭТО, ЗНАЧИТ ЭКСПЕРИМЕНТ ПОКА НЕ УДАЛОСЬ ПРОВЕСТИ]

Более совершенный дескриптор точек.

#### Bag of vision words

[ЕСЛИ ЧИТАЕТЕ ЭТО, ЗНАЧИТ ЭКСПЕРИМЕНТ ПОКА НЕ УДАЛОСЬ ПРОВЕСТИ]

Менее точный подход, который может является одним из бейзлайнов

Данные о позиции мы точно потеряем, но это метод прост в реализации.