Представлена методика построения двоичного классификатора для разделения изображений на «дневные» и «ночные» с применением компактной свёрточной нейронной сети. Рассмотрены этапы подготовки данных: изменение размерности, нормализация по статистикам ImageNet и базовые аугментации. Описана архитектура SimpleCNN, а также процесс обучения с использованием Adam, CrossEntropyLoss, StepLR. Показано, что даже при ограниченном объёме данных (20 %) модель достигает валидационной точности ≈ 97 %, а на полном наборе ≈ 99.4 %.
Ключевые слова: двоичная классификация, свёрточная нейронная сеть, аугментации, нормализация ImageNet, Early Stopping, SimpleCNN.
Современные системы компьютерного зрения активно используют двоичные классификаторы, позволяющие разделять изображения по ключевому признаку (сценарий «да/нет», «объект/фон» и пр.). Задача отделения «дневных» и «ночных» кадров лежит в основе систем интеллектуального видеонаблюдения, автомобильных регистраторов и мобильных приложений. Многие существующие методы опираются на анализ гистограмм яркости или простые пороговые алгоритмы, однако они плохо работают при изменяющемся освещении (рассвет, сумерки, фонари). С другой стороны, свёрточные нейронные сети (CNN) автоматически извлекают информативные признаки (текстуры, оттенки, локальные контрасты) и обеспечивают высокую точность даже в пограничных случаях.
В данной статье описан полный цикл создания двоичного классификатора «день/ночь» с нуля: от подготовки и аугментации датасета до проектирования компактной CNN-архитектуры, обучения и оценки качества. Воспользовавшись публичным датасетом Day-Night v2.0, мы провели серию экспериментов, сначала обучив SimpleCNN на 20 % данных, затем — на полном объёме, и сравнили результаты.
Обзор методов классификации и обоснование выбора SimpleCNN.
Задача разделения изображений на «дневные» и «ночные» широко встречается в системах видеонаблюдения, автомобильных регистраторах и мобильных приложениях. Классические подходы дают быструю оценку, но страдают при резких перепадах освещённости, бликах и тенях. Более продвинутые решения на основе HOG+SVM учитывают локальные градиенты, однако требуют ручной настройки параметров и плохо справляются с «пограничными» кадрами (рассвет/сумерки).
С появлением сверточных нейронных сетей (CNN) приоритет сместился в сторону глубокого обучения: архитектуры ResNet, VGG, MobileNet и EfficientNet показывают высокую точность за счёт автоматического извлечения признаков текстуры, контраста и цветовой температуры. ResNet [1] (Residual Networks) использует остаточные связи для борьбы с затуханием градиента и позволяет строить десятки–сотни слоёв, но содержит десятки миллионов параметров, требуя значительных вычислительных ресурсов. VGG представляет серию из 3×3 свёрток и FC-слоёв; модель VGG-16 имеет более 130 млн параметров, что делает её тяжёлой для обучения без мощных GPU. MobileNetV2/V3 и EfficientNet-Lite оптимизированы под мобильные устройства: depthwise separable convolutions уменьшают вычисления, однако точность на «пограничных» кадрах остаётся ниже, чем у более глубоких сетей.
Обоснование выбора собственной компактной CNN [2] (SimpleCNN):
— Лёгковесность и скорость обучения. SimpleCNN состоит из трёх последовательных блоков (Conv2d→ReLU→MaxPool2d) и двух FC-слоёв. Общий объём параметров — сотни тысяч (в отличие от миллионов у ResNet), что позволяет проводить обучение на CPU или одном GPU за несколько минут.
— Простота кода и воспроизводимость. Реализация на PyTorch занимает около 15 строк: настройка числа фильтров (16→32→64), размер ядра (3×3), а затем FC-слои (64000→128→2). Это упрощает эксперименты с гиперпараметрами: learning rate, оптимизатор (Adam), batch size.
— Достаточное качество для «день/ночь». Эксперименты показали, что при 20 % данных SimpleCNN достигает валидационной точности ≈ 97 %, а при полном наборе — ≈ 99.4 %. На задаче, где классы хорошо разделяются по признаку яркости и локального контраста, дополнительная глубина даёт лишь незначительный выигрыш за счёт больших затрат.
— Возможность анализа влияния объёма данных. Быстрое обучение позволяет провести серию экспериментов: `load_partial_data(0.2)` использует 20 % изображений, `load_full_data()` — 100 %. Это помогает оценить риски переобучения и необходимость добавления «пограничных» кадров.
Таким образом, SimpleCNN обеспечивает оптимальный баланс между скоростью, простотой настройки и качеством классификации «день/ночь», делая его предпочтительным выбором в условиях ограниченных ресурсов и требований к быстрой итерации экспериментов.мы видеонаблюдения и безопасность.
Выбор данных и предварительная обработка
Для обучения двоичного классификатора «день/ночь» был использован датасет Day-Night v2.0 [3], представленный на платформе Roboflow. Исходная коллекция насчитывает около 11 000 изображений, разделённых на папки train (~ 82 %, ≈ 9300 снимков), valid (~ 12 %, ≈ 1200) и test (~ 6 %, ≈ 650). В каждой из директорий после удаления класса «twilight» (сумерки) остались две подпапки — «day» и «night», содержащие примерно равное число примеров, что позволяет избежать дисбаланса классов и не требовать особых весовых корректировок в функции потерь. Структура каталогов позволяет загружать данные напрямую через стандартный инструмент ImageFolder, где «day» и «night» автоматически становятся метками 0 и 1.
Предварительная обработка включает следующие шаги. Сначала все изображения приводятся к размеру 224×224 пикселей, затем применяется преобразование в тензор (ToTensor), нормализующее пиксели в диапазон [0, 1], и стандартная нормализация по статистикам ImageNet [4] (mean= [0.485, 0.456, 0.406], std= [0.229, 0.224, 0.225]) для согласования с предобученными моделями и устойчивости к широкому спектру визуальных сцен. Для тренировочного набора дополнительно внедрены базовые аугментации: случайное горизонтальное отражение (RandomHorizontalFlip) и поворот в диапазоне ± 15 °, а также цветовые искажения (ColorJitter) с изменением яркости, контраста и насыщенности до 20 %. Эти меры позволяют моделировать вариативность условий съёмки, от облачности и наклона камеры до искусственного освещения ночных сцен, без искажения ключевого признака освещённости.
Разбиение данных реализовано через две функции: одна загружает весь набор (load_full_data), другая — только 20 % тренировочных примеров для анализа влияния объёма (load_partial_data). При полной загрузке batch_size установлен на 14, num_workers = 8 и shuffle=True для обучения, что обеспечивает скорость около 5.5 итераций в секунду и эффективное использование GPU. Валидационные и тестовые загрузчики работают без перемешивания с теми же batch_size и num_workers. Для частичной загрузки batch_size увеличивается до 32, num_workers снижается до 4, а подборка формируется случайным отбором индексов, что помогает исследовать динамику обучения на ограниченном объёме. Один и тот же набор аугментаций и нормализации применяется в обоих режимах, что гарантирует корректное сравнение результатов и выявление рисков переобучения при разной плотности обучающей выборки.
Проектирование, реализация и обучение модели
Для классификации «день/ночь» была создана компактная свёрточная сеть SimpleCNN, содержащая три блока Conv→ReLU→MaxPool (16, 32, 64 каналов) и два полносвязных слоя (64000→128→2). Всего в модели несколько сотен тысяч параметров. В качестве функции потерь использовался CrossEntropyLoss, оптимизатор — Adam (lr=1e-4), а StepLR (step_size=5, γ=0.5) понижает learning rate каждые пять эпох для стабилизации сходимости
Процесс обучения состоит из последовательных проходов по эпохам: на каждой эпохе модель обновляет свои параметры на основе расчёта ошибки на тренировочном наборе и затем оценивает точность на валидации. При улучшении валидационной метрики сохраняются текущие веса, а если точность не растёт три эпохи подряд — обучение останавливается досрочно.
Для анализа объема данных проведены два эксперимента. При 20 % выборки (batch_size=32, num_workers=4) сеть за 10 эпох достигла val_acc ≈ 0.9718 и train_acc ≈ 0.9730, что свидетельствует об устойчивости на ограниченном наборе. На полном датасете (batch_size=14, num_workers=8) скорость обучения выросла до ≈ 5.5 итераций/сек, и за 10 эпох модель показала val_acc ≈ 0.9937, train_acc ≈ 0.9948.
На тесте при 20 % данных точность ≈ 0.972, при 100 % — ≈ 0.993. Precision, recall и F1 на полном наборе превысили 0.99, а ошибки связаны с «пограничными» кадрами (рассвет/сумерки). Для улучшения предлагается transfer learning, расширение датасета «twilight»-кадрами и более разнообразные аугментации.
З аключение
В данной работе показано, что компактная архитектура SimpleCNN способна эффективно решать задачу бинарной классификации «день/ночь» при минимальных вычислительных затратах. Проведённые эксперименты подтвердили, что даже на 20 % данных модель демонстрирует устойчивую валидационную точность ≈ 97 %, а на полном наборе достигает ≈ 99,4 %. Быстрая сходимость и небольшое число параметров позволяют оперативно проводить эксперименты и избегать длительного обучения, характерного для тяжёлых предобученных сетей.
Полученные результаты свидетельствуют об адекватности выбранного подхода и указывают на перспективы дальнейшего развития: применение transfer learning, включение «пограничных» кадров (рассвет/сумерки) и расширенные аугментации. В целом, SimpleCNN и описанная методика могут служить надёжной основой для задач, где важны скорость обучения и высокая точность при классификации по времени суток.
Литература:
- He, K. Deep Residual Learning for Image Recognition / K. He, X. Zhang, S. Ren, J. Sun // Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). — 2016. — С. 770–778. — Текст: непосредственный.
- Гудфеллоу, Я. Глубокое обучение / Я. Гудфеллоу, И. Бенджио, А. Курвилль. — 2-е изд. — Москва: ДМК, 2018. — 652 c. — Текст: непосредственный.
- Day-night v2.0. — Текст: электронный // Robollow: [сайт]. — URL: https://universe.roboflow.com/emma-feoktistova/day-night-2.0/dataset/1/download (дата обращения: 04.06.2025).
- Deng, J. ImageNet: A large-scale hierarchical image database / J. Deng, W. Dong, R. Socher // 2009 IEEE Conference on Computer Vision and Pattern Recognition. — 2009. — С. 248–255. — Текст: непосредственный.