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
- Host: GitHub
- URL: https://github.com/axonstan/2025-spring-vk-ml
- Owner: axonstan
- Created: 2025-01-31T11:26:27.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-06T14:44:27.000Z (over 1 year ago)
- Last Synced: 2025-09-21T18:05:13.603Z (9 months ago)
- Topics: cv, logotypes, vk
- Language: Jupyter Notebook
- Homepage:
- Size: 3.91 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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), где я рассписал минимальные поля и базовое использование.
[](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
[ЕСЛИ ЧИТАЕТЕ ЭТО, ЗНАЧИТ ЭКСПЕРИМЕНТ ПОКА НЕ УДАЛОСЬ ПРОВЕСТИ]
Менее точный подход, который может является одним из бейзлайнов
Данные о позиции мы точно потеряем, но это метод прост в реализации.