
Задача освещенности – одна из фундаментальных в компьютерном зрении. Например, наша команда CV Lab прошлым летом разработала модуль освещенности для сервиса видеосвязи Контур.Толк: он способен справиться с по-настоящему экстремальной темнотой, но вот в умеренных кейсах ведет себя не так уверенно. И тут не совсем понятно, как решать проблему: то ли держать целую коллекцию моделей под разные уровни освещенности, то ли внедрять вспомогательные эмбеддинги в архитектуру модели. Потенциальных решений уйма, но у всех есть свои недостатки в силу отсутствия пластичности.
Авторы статьи, которую мы разберем, элегантно справляются с проблемой путем внедрения Neural ODE в пайплайн. Если поиграться с моделькой, то работать может шустро, а значит, вполне возможно, что скоро и вы сможете с ней повзаимодействовать в Контур.Толк :)
Интро
Изменять освещенность можно по-разному. Например, играться в Photoshop или использовать классические приемы – выравнивание гистограммы (Histogram Equalization) или экспоненциальное расширение контраста (Gamma Correction). Но традиционные подходы плохо ведут себя в экстремальных условиях, а потому с исследовательской точки зрения слабы и не представляют из себя большого интереса. В то же время, в прикладных задачах — например, в сервисах видеосвязи — их вполне можно переиспользовать: мы зачастую не созваниваемся из полностью темной комнаты, а все-таки имеем более-менее умеренное освещение.
В основном работы концентрируются на итеративном улучшении освещенности, при этом в качестве «модели мира» в них используется retinex theory.
Лирическое отступление

Retinex theory (от лат. retina — сетчатка и cortex — кора) это модель, объясняющая, как человек воспринимает цвет и яркость объектов при различном освещении. Согласно этой теории, наблюдаемое изображение (I) можно разложить на две компоненты: отражение R и освещённость L
I = R * L
где * означает поэлементное умножение. Задача заключается в восстановлении R и L из наблюдаемого I.
В контексте нейросетевых моделей для улучшения изображений при слабом освещении (Low-Light Image Enhancement, LLIE) основная цель состоит в том, чтобы повысить яркость и контраст, сохранив при этом естественные цвета и детали сцены. Нейросети, такие как Retinex-Net, используют структуру, основанную на теории ретинекса, которая включает в себя три основных этапа: декомпозицию, улучшение и реконструкцию.
В нейросетевых методах для улучшения изображений при слабом освещении (Low-Light Image Enhancement, LLIE) основная цель состоит в том, чтобы сделать картинку ярче и контрастнее, сохранив естественные цвета и детали сцены. Нейросети, такие как Retinex-Net, строятся на идеях теории ретинекса и работают в три этапа: декомпозиция, улучшение и реконструкция.
Декомпозиция (Decomposition). Модель разделяет входное изображение на компоненты отражения R и освещённости L. Это позволяет изолировать детали сцены от условий освещения.
Улучшение (Enhancement): Компонент освещённости L подвергается коррекции так, чтобы усилить яркость тёмных областей, избегая при этом пересветов.
Реконструкция (Reconstruction): Получаем восстановленное изображение путём поэлементного умножения улучшенной освещённости L′ и исходного отражения R:
I′ = R * L′
Но в то же время были и экстравагантные работы, где пытались перенести SOTA-подходы из других областей CV на задачу low-light image enhancement (LLIE). Например, модель LLFlow, основанная на потоках, или же GlobalDiff. Работают классно, но уж больно тяжеловесные.
Также уже некоторое время остаются популярны итеративные методы коррекции яркости с использованием кривых, где сеть на каждом шаге уточняет параметры кривой. Вроде бы подход простой, но в реальности он страдает от проблемы «сколько раз обновлять?» — число итераций обычно фиксировано вручную и не адаптируется под конкретное изображение.
В этой работе авторы обыгрывают идею пошагового улучшения яркости: от фиксированного количества итераций они переходят к непрерывному формату — описывают процесс как дифференциальное уравнение. Благодаря этому число шагов интеграции подбирается автоматически самим ODE solver-ом, в зависимости от сложности конкретного изображения.
Метод
Переход от итераций к Neural ODE
Авторы предлагают максимально прямолинейный переход к непрерывному случаю, как в оригинальном Neural ODE.
От такого:

К такому:

Но все же немного теории из LLIE авторы добавили и функция f предсказывает достаточно интересный таргет:

Почему бы не предсказывать изменения просто к исходному изображению, откуда у нас тут возникает парабола? Опять же это очень классное решение, позволяющее повысить универсальность метода.
Функция It ⊗ (1 - It) достигает максимума при I = 0.5 и становится равной нулю при I = 0 и I = 1. То есть обновление будет максимальным в пикселях со средней яркостью (примерно 0.5) — именно там чаще всего и требуется коррекция. А вот для очень тёмных и очень светлых пикселей обновление ослабляется, чтобы не создавать артефакты или пересветы.
Как работает модель
Архитектурно за предсказание попиксельной матрицы A отвечает блок Curve Parameter Estimation, перед которым изображение прогоняют через Noise Removal Module. Это стабилизирует пайплайн и устраняет артефакты, вызванные итеративностью метода.

Под капотом оба блока используют преимущественно простые свертки (с точки зрения нейронных сетей, как ни странно, архитектуры у моделей LLIE всегда максимально примитивны) и в общем-то достаточно легковесны. Но поскольку ODE solver прогоняет изображение через сеть много раз, в итоге всё работает не так уж и быстро. К тому же из-за итеративной природы плохо распараллеливается сам пайплайн.

Что особенно круто — в отличие от обычных моделей, где степень осветления зашита в архитектуру, тут мы можем управлять яркостью вручную. Просто меняем значение T на инференсе и получаем разный уровень экспозиции.
Причём это работает не только в сторону «осветлить», но и наоборот — можно задать отрицательное T, и изображение станет темнее, чем оригинал. Архитектуру при этом трогать не нужно, ничего переобучать не нужно — просто один параметр на входе. На практике можно даже слайдер прикрутить и регулировать степень улучшения в реальном времени.

Функции потерь
Чтобы решить проблему отсутствия ground truth авторы использовали комбинацию из пяти функций потерь:
Spatial consistency loss. Отвечает за сохранение локальных различий между соседними пикселями — чтобы относительные контрасты в изображении не искажались после улучшения.
Exposure control loss. Отвечает за то, чтобы итоговая яркость изображения в среднем стремилась к заданному уровню — 0.6 (серому цвету в RGB), без сильных затемнений или пересветов.
Color constancy loss. Отвечает за сохранение цветового баланса в изображении — минимизирует перекосы между каналами R, G и B после улучшения изображения.
Parameter regularization loss. Отвечает за то, чтобы значения параметров обновления изображения менялись плавно между соседними пикселями и не вызывали резких скачков в яркости.
Noise removal loss. Используется в модуле подавления шума.
Финальная функция потерь (Final Objective Function) — сумма этих лоссов с весами-гиперпараметрами.
Эксперименты

CLODE уверенно обходит все unsupervised-подходы. А если подкрутить экспозицию вручную ( вариант CLODE† в таблице), то по PSNR (peak signal-to-noise ratio – пиковое отношение сигнала к шуму) даже превосходит state-of-the-art supervised-модели на +0.7 dB в среднем.
В Ablation study авторы классно показали, как блоки Noise Removal Module улучшают качество. Ими особенно гордились авторы, так как по сути получилось «задешево» круто повысить метрики. Ну, и LayerNorm ожидаемо дают заметный эффект, но если посмотреть на другие работы и на эксперименты нашей лаборатории, то без LayerNorm в самом деле ничего не получается.
Однако, что интересно, легковесная версия CLODE-S, где нет Noise Removal Module и только одна LayerNorm, тоже показывает супер классные результаты, при этом работая в 10 раз быстрее.
Авторы не предоставили весов и кода для CLODE-S, а значит, придется немного повозиться, но мы уверены, что оно того стоит!)

Ну и помимо высокого уровня кастомизации и применимости для различных уровней освещенности, подтверждается также и высокая степень сходимости для Neural ODE.


Тоже хотим на ICLR
Авторы прикрутили базовый Neural ODE к задаче LLIE – и у них получилась SOTA. Статью приняли на ICLR 2025, скорее всего, за все вместе: NODE отвечает за вау-эффект, а хорошие метрики подтверждают, что авторы не просто смешали тёплое с мягким.
Модули LLIE за пределами научных статей зачастую используются для работы с видеопотоком, а значит, было бы классно обобщить подход для видеоряда, избегая необходимости пересчета ODE для каждого фрейма. Как ни странно, эмпирически запуск модели для изображений на видео не создает визуальных временных артефактов, но вот сэкономить компьют очень хотелось бы.
Возможным решением может выступать вспомогательный легковесный оптический поток, который обрабатывает каждый фрейм, тогда как более трудоемкий CLODE (с поправкой на наличие оптического потока) запускается лишь раз в N кадров.
