Этот репозиторий содержит пайплайн для:
- подготовки изображений,
- обучения нескольких CNN-моделей,
- генерации модельных предсказаний для последующей доразметки и ансамблирования.
Проект ориентирован на задачу бинарной классификации: есть ли хвойное дерево в кадре.
Пайплайн построен вокруг трёх типов данных:
- Crowd dataset — данные с краудсорсинговой разметкой (шумные, но объёмные)
- Golden dataset — эталонный датасет с доверенной разметкой
- Unlabeled dataset — изображения без разметки, которые требуется доразметить
Модели (ResNet18 / ResNet34 / ResNet50) обучаются на размеченных данных, а затем используются для генерации предсказаний (вероятностей) на unlabeled-наборе. Эти предсказания дальше используются человеком/моделью (например, CatBoost) для финальной разметки.
Сначала необходимо скачать изображения и привести их к единому формату:
- загрузка изображений по URL,
- приведение к RGB,
- resize + center crop до 224×224,
- сохранение метаданных в CSV.
Для этого используется единый скрипт подготовки данных, который поддерживает:
- crowd-разметку,
- golden-разметку,
- unlabeled-данные.
После выполнения этого шага появляются директории вида:
dataset/ golden/ unlabeled/
с подпапками raw/, processed/ и CSV-метаданными.
Запустить можно так:
python src/parse_dataset.pyНа подготовленных данных обучаются несколько моделей:
- ResNet18
- ResNet34
- ResNet50
Все модели:
- инициализируются ImageNet-весами,
- решают бинарную задачу,
- выдают один логит (вероятность наличия хвойного дерева).
Чекпоинты сохраняются отдельно и используются далее только для инференса.
Для unlabeled-датасета:
- каждая модель делает предсказание,
- сохраняются вероятности (0..1) для каждой архитектуры.
Результат — CSV-файл вида:
id | url | processed_path | prob_resnet18 | prob_resnet34 | prob_resnet50
Этот файл является финальным артефактом данного пайплайна и предназначен для дальнейшей ручной разметки, ансамблирования или обучения моделей второго уровня (например, CatBoost).