В экологических исследованиях фотоловушки широко используются для наблюдения за дикой природой, снимая тысячи изображений. Однако многие из этих снимков оказываются пустыми или непригодными для анализа, поскольку животные на них не попали в кадр полностью или их перекрывают другие объекты. Обработка такого объема данных вручную становится долгим и трудоемким процессом, что ограничивает эффективность анализа и уменьшает его точность. Задача требует решения, способного автоматически отбирать качественные фотографии, на которых животные полностью видны и подходят для детального анализа.
Нахождение объектов делается с помощью предобученной YOLOv5. Этот проект использует модель Swin Transformer для классификации изображений животных. Для решения проблемы несбалансированных классов была добавлена функция потерь Focal Loss, которая повышает точность классификации при большом дисбалансе между классами. Модель обучается на наборе данных, включающем изображения животных и пустых фонов, с применением техник аугментации и разделения на обучающую и валидационную выборки.
- PyTorch — для построения и обучения модели
- Hugging Face Transformers — для модели Swin Transformer и предобработки изображений
- Scikit-Learn — для разбиения на обучающую и валидационную выборки
- WandB — для мониторинга и отслеживания метрик
- PIL и OpenCV — для обработки изображений и аугментации
-
Загрузка и подготовка изображений
Для обработки изображений используетсяAutoFeatureExtractor
из библиотеки Hugging Face, который автоматически выполняет базовую предобработку изображений. Дополнительно применяются различные аугментации изtorchvision.transforms
, чтобы увеличить разнообразие данных и улучшить устойчивость модели. -
Модель Swin Transformer
В проекте используется модель Swin Transformer, дообученная на данных с фотоловушек и адаптированная для классификации трех категорий: животные пригодные и непригодные для распознавания, пустые кадры и прочие объекты. Скачать обученные веса модели. -
Focal Loss
Реализована специальная функция потерь Focal Loss, которая учитывает дисбаланс между классами, помогая модели лучше обучаться на данных, где некоторые классы встречаются гораздо реже. -
AnimalTrainer
Специальный классAnimalTrainer
, созданный на основеTrainer
из Hugging Face, в котором переопределен методcompute_loss
. Это позволяет использовать Focal Loss вместо стандартной функции потерь, что делает обучение более адаптированным к условиям задачи. -
AnimalDataset
Класс для подготовки данных, который включает различные аугментации для каждого типа изображений, включая пустые кадры. Это помогает улучшить точность модели за счет увеличения разнообразия обучающих данных. -
Аугментация данных
Для увеличения разнообразия данных применяются следующие аугментации: случайное горизонтальное и вертикальное отражение (RandomHorizontalFlip
,RandomVerticalFlip
), случайное поворачивание изображений (RandomRotation
), случайное изменение размера и обрезка (RandomResizedCrop
), а также опциональный эффект размытия движении (MotionBlurTransform
). Эти трансформации делают модель более устойчивой к различным условиям съемки. -
Обучение модели
Процесс обучения организован с использованием классаTrainer
и включает различные стратегии, такие как ранняя остановка и регуляризация, что позволяет контролировать и оптимизировать обучение модели для достижения наилучших результатов.
pip install -r requirements.txt
python main_app.py
- learning_rate: Скорость обучения установлена на
2e-6
для плавного обучения. - batch_size: Размер батча для обучения — 20, для валидации — 10.
- num_train_epochs: Обучение проводится в 40 эпох.
- weight_decay: Регуляризация с коэффициентом
0.01
для предотвращения переобучения.
Для оценки модели использовался roc_auc
.