Обработка изображений и видео на смартфонах: handcrafted-алгоритмы против глубокого обучения

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Зеркалка — хорошая штука, но смартфон однозначно компактнее и удобнее. Да, мобильная оптика все еще далека до уровня зеркалок, однако получить красивые фотографии человек хочет здесь и сейчас. Как быть? Взамен харда, подключается софт, алгоритмы!

Именно софт смартфона помогает снять фото в HDR или сделать видео менее смазанным. Он состоит из «классических» вычислительных алгоритмов и нейросетей. Вычислительные алгоритмы требуют много ручной работы и глубокого понимания решаемой задачи, зато хорошо работают при ограниченных вычислительных ресурсах. Нейросети прожорливы, но сильно упрощают жизнь разработчику и потенциально позволяют достичь большего. Объединение двух этих подходов даёт замечательные результаты!

Несколько примеров улучшения изображений
Несколько примеров улучшения изображений

Вычислительные алгоритмы и нейросети: в чём отличия?

Все вы знаете, что современные парадигмы обработки цифровых, визуальных, звуковых данных — это методы машинного, либо глубокого обучения. Разница между ними не очень большая, но тем не менее, есть.

Deep Learning «забирает» у человека функцию извлечения признаков. Источник картинки: https://levity.ai/blog/difference-machine-learning-deep-learning
Deep Learning «забирает» у человека функцию извлечения признаков. Источник картинки: https://levity.ai/blog/difference-machine-learning-deep-learning

Машинное обучение (Machine Learning, ML) — это некий процесс, в котором человек участвует на этапе формирования правил по извлечению признаков. То есть человек, используя свою интуицию, эвристику, экспертное представление об объектах анализа предполагает, какие из признаков (для изображения: контуры, цвет, размер связанных объектов, частотные характеристики и так далее) могут быть использованы для задач, выполняемых машиной, к примеру, для классификации (разбиения данных на группы, например, для e-mail — на спам и нормальные письма). Таким образом, человек берёт на себя функцию, связанную с тем, что стоит считать важным для данной задачи, какие признаки данных следует далее передавать алгоритму для принятия решения. В этом случае значительную роль играет личный опыт и понимание специфики задачи. Такой подход оправдан до сих пор для случаев, когда отсутствуют тренировочные данные достаточного качества и количества для обучения нейронных сетей.

Глубокое обучение (Deep Learning, DL) — в этом случае человек делегирует ответственность по извлечению признаков самой нейронной сети. Нейронная сеть формирует внутреннее представление признаков в соответствии с тем, какая целевая задача перед ней стоит, и таким образом сама определяет, что считать важным в тренировочных данных. Обычно, целевая задача формулируется в виде математических критериев, численным образом формализующих разницу между предсказанными и истинными значениями. Эту разницу называют функцией потерь. Нейронная сеть пытается решить поставленную задачу наиболее оптимальным образом за счёт минимизации разницы между прогнозируемыми и истинными результатами в ходе тренировки, сводя эту разницу, «потери», к минимуму. Роль человека в данном случае касается выбора предпочтительной архитектуры нейронной сети (модели), и что не менее важно, формулировки критериев обучения с помощью функции потерь.

Кроме выбора характеристик нейронной сети и способа тренировки, ещё одним немаловажным аспектом в глубоком обучении является представительность и качество тренировочных данных, поскольку именно из этих данных нейронная сеть далее черпает представление о том, как должен выглядеть результат. Соответственно, если в тренировочных данных отсутствуют примеры, которые потом будут встречаться на практике, то такая несбалансированность может привести к неверному «поведению» нейронной сети: она будет иметь склонность сводить результаты только к тому, что «видела» в тренировочных данных.

Сейчас большинство инженеров, когда приступают к новой задаче, решают её методами машинного или глубокого обучения. Глубокое обучение в некотором смысле даже более простой вариант, поскольку система устроена как черный ящик, которому мы даем входные данные, определяем задачу с помощью математических критериев и контролируем результат. Поэтому часто забывается, что предшествовало эпохе машинного и глубокого обучения.

Раньше всё приходилось делать руками
Раньше всё приходилось делать руками

Можно сказать, это была ранняя эра разработки алгоритмов, так называемых handcrafted («крафтовых») алгоритмов. Немногие сейчас углубляются в эту область, ведь современный инженер — это, прежде всего, специалист в машинном/глубоком обучении. Handcrafted — это немного пренебрежительное название алгоритмов, в которых человек сам определяет все шаги обработки данных (далее мы будем называть их вычислительными алгоритмами). Например, для задачи классификации человек самостоятельно устанавливает последовательность процесса обработки, способы вычисления признаков и принятия решения, при этом опирается на свое понимание проблемы и наблюдения. В итоге, исследователь создаёт модель этой проблемы и реализует её решение в виде алгоритма действий.

Такой подход обладает рядом недостатков (но есть и ряд преимуществ, о которых я расскажу далее): он очень сильно зависит от того, насколько человек погружен в проблематику, насколько он может достоверно сделать модель, учесть все нюансы. В задаче улучшения качества изображения инженер составляет математическую модель, описывающую деградацию (ухудшение качества) изображения: то, как оно изменяется под воздействием некоторых мешающих факторов (добавление шума, геометрических искажений или размытия), потом решает обратную задачу и реализует её. Такой подход существовал 10-15 лет назад и в ряде задач им пользуются до сих пор.

В компьютерном зрении 2012-й год стал «водоразделом»: нейросетевые подходы стали преобладать над «традиционными» вычислительными методами. Источник изображения: https://link.springer.com/article/10.1007/s11263-019-01247-4
В компьютерном зрении 2012-й год стал «водоразделом»: нейросетевые подходы стали преобладать над «традиционными» вычислительными методами. Источник изображения: https://link.springer.com/article/10.1007/s11263-019-01247-4

До 2012 года, когда появилась всем известная сеть для классификации AlexNet, доминировали традиционные методы — машинное обучение и вычислительные алгоритмы. После того, как был опубликован AlexNet, внимание разработчиков сконцентрировалось на нейросетевых подходах. Если мы правильно представляем данные и правильно формируем критерии обучения, то потенциал нейросетевых подходов гораздо выше, чем разработка алгоритмов, которые человек создаёт, пользуясь своей интуицией и инженерной эвристикой.

Нейросети: бочка мёда

Оптимальное решение вырабатывается самостоятельно системой в процессе тренировки. Оно будет оптимально в рамках установленных критериев и данных, на которых обучалась сеть.

Параллельно с эволюцией нейросетевых решений и развитием методов оптимизации появляется множество фреймворков, сред разработки, которые позволяют разработчику достаточно быстро погрузиться в предмет и использовать сложные математические функции, вызывая их буквально парой строк кода на Python.

Более того, идет очень плотная интеграция этих фреймворков с «железом», поскольку нейросетевые решения очень требовательны к вычислительным ресурсам. Разработчик получает прослойку в виде фреймворков, которая его отодвигает от необходимости понимания того, как вычисления будут распараллеливаться на графических картах, какие операции наиболее эффективно поддерживают нейросетевые вычисления и так далее. Это очень удобно. Фреймворки часто публикуются по модели Open Source, участники сообщества делают свой вклад и это способствует более стремительному развитию всей этой области. Я уже упоминал, что разработчики мобильных устройств сейчас серьёзно озадачены тем, чтобы обеспечить аппаратную поддержку для нейросетевых решений, поскольку понимают их преимущество. Таким образом, помимо графических ускорителей в смартфонах появляются дополнительные вычислительные модули — нейропроцессоры, которые нацелены именно на особенности вычислений нейронных сетей. Появляются инфраструктурные решения — коммерческие продукты, которые упрощают разработчику жизнь и уменьшают время, необходимое для получения первого результата.

Какие же есть сложности в глубоком обучении? Кратко пробежимся по ним.

Нейросети: ложки дёгтя.

1. Хорошие датасеты на вес золота

Поскольку разработчики постепенно отдаляются от старых приёмов разработки, то роль моделирования изменения данных перекладывается на обучающий датасет. С его помощью мы представляем нейронной сети примеры входных данных и того, как должен выглядеть результат, эталоны. При этом качество датасета играет большую роль: он должен быть достаточно сбалансирован, иметь представительность по всем возможным вариантам результатов.

Для задач улучшения качества изображений обучающие датасеты обычно представляют собой пары фото, например, исходное изображение с камеры смартфона, а другое, эталонное — с цифровой DSLR-камеры (цифровая зеркальная камера). В этом случае нейросеть имеет эталон (ground truth), к которому пытается приблизиться, изменяя входное изображение.

Сбор хороших данных — это сложный и дорогостоящий процесс. Существуют крупные компании, специализирующиеся на подготовке тренировочных данных, такие как Яндекс.Толока, Amazon Mechanical Turk, Dbrain, но такие сервисы в основном сконцентрированы на задачах, которые хорошо описываются и масштабируются, например, разметка изображений для сегментации изображений или распознавания текста. Привлекать их для создания эффективных и узкоспециализированных датасетов, как, например, для задачи повышения разрешения изображений (super resolution), — сложно, потому что здесь необходимо использовать оборудование и иметь понимание процесса, происходящего в камере.

Любопытно, но даже в таких отлаженных процессах как разметка изображений, можно неожиданно натолкнуться на сложности, например, для Amazon Mechanical Turk существовал такой термин как «мексиканский след» в данных. Просто так получалось, что на такую низкооплачиваемую и рутинную работу с готовностью вовлекались краудсорсинговые работники из Мексики, для которых она выглядела как привлекательная подработка. И, в итоге для задачи разметки изображений на две категории: привлекательные или менее привлекательные, мы получаем набор изображений, которые жители Мексики в среднем считают красивыми и интересными. Но, большой вопрос, насколько это может быть справедливо для жителей остальных стран, представители которых не заинтересовались заработком около 2$ в час для участия в разметке данных.

Машинное обучение в м/ф Futurama. Источник: https://habr.com/ru/articles/452392/
Машинное обучение в м/ф Futurama. Источник: https://habr.com/ru/articles/452392/

2. Ограничения обобщающей способности нейросетей

Каждая нейросеть имеет свой предел, называемый «обобщающей способностью». Нейросеть пока не может, подобно человеческому мозгу, работать со всей вариативностью реального мира.

В задачах классификации или распознавания образов есть очень известные проблемы. Например, сеть не может сфокусироваться на отдельном предмете, когда у нее множество мелких объектов. Она не может понять, какой из этих объектов наиболее важен, или принять решение о том, к чему он относится. Для такой сети нужны подсказки, по крайней мере, выделение областей интереса.

Источник: https://www.freeimages.com/premium/cartoon-toy-icon-415366
Источник: https://www.freeimages.com/premium/cartoon-toy-icon-415366

Вот другой пример, на полу лежит бесформенный носок. Как роботу-пылесосу понять, что это именно носок и с ним нужно выполнить определенную последовательность действий? Для робота сложно воспринимать его как конкретный предмет, потому что форма слишком неопределенна и изменчива. Даже если мы зададимся целью обучить систему компьютерного зрения робота разным возможным вариантам того, как носок может выглядеть, у робота будет недостаточно визуальных признаков, чтобы классифицировать такой предмет правильно, или наоборот он начнёт множество других предметов считать носками.

Восстания машин не будет из-за раскиданных по комнате носков. Источник: https://shansonline.ru/index.php/novosti/item/3040-v-khakasii-ukrali-million-rublej-khranivshijsya-v-noske-pod-krovatyu
Восстания машин не будет из-за раскиданных по комнате носков. Источник: https://shansonline.ru/index.php/novosti/item/3040-v-khakasii-ukrali-million-rublej-khranivshijsya-v-noske-pod-krovatyu

Также проблемы возникают с протяженными предметами, такими как кабели, удлинители. Это тоже очень сильно сбивает с толку искусственный интеллект, поскольку ему сложно восстановить общую связность предмета из набора наблюдаемых изменчивых фрагментов

Источник: https://novate.ru/blogs/240717/42311/
Источник: https://novate.ru/blogs/240717/42311/

Вот еще одна широко известная иллюстрация узкой специализации нейронных сетей, связанной с их ограниченной обобщающей способностью. Нейронная сеть учится видеть мир только в тех обучающих картинках, которые она видела. Если мы ее обучали на собачках, то она на фотографиях кексиков будет постоянно встречать собак, которые очень похожи в рамках её накопленных признаков, и даже говорить, что она с высокой достоверностью видит чихуахуа в фото кекса. Таким образом, сеть даже не сможет подсказать пользователю, что в её решении что-то не так.

Классический пример обобщающих возможностей нейросетей: чихуахуа распознаётся на фото кексов с изюмом …. сеть “видит” только то, на чём она училась
Классический пример обобщающих возможностей нейросетей: чихуахуа распознаётся на фото кексов с изюмом …. сеть “видит” только то, на чём она училась

В мультфильме «Митчеллы против машин» (2021) есть эпизод, где семья побеждает восстание машин, показывая взбунтовавшимся роботам мопса, и роботы выходят из строя, не в силах понять, что перед ними — буханка хлеба или мопс.

Можно добавить еще более современный пример. В последние пару лет большой импульс в области искусственного интеллекта получили диффузионные генеративные сети, которые удивительным образом генерируют фотореалистичные фотографии по текстовому описанию того, что хочется увидеть на изображении. Но если попробовать эксперимент и попросить нейросеть нарисовать, например, что она считает эталоном настоящей красоты, то обнаружим, что интерпретация такого широкого термина у генеративных сетей находится в некоторой локальной области внутреннего представления, из которого сеть не может выбраться, и каждый раз генерирует очень похожие примеры.

Настоящая красота «Real beauty» для fusionbrain.ai – это исключительно голубоглазая девушка с каштановыми волосами
Настоящая красота «Real beauty» для fusionbrain.ai – это исключительно голубоглазая девушка с каштановыми волосами
Настоящая красота «Real beauty» в воображении Shedevrum.ai более разнообразна, но в среднем также есть свой локальный экстремум – африканская девушка с большим количеством цветов в волосах
Настоящая красота «Real beauty» в воображении Shedevrum.ai более разнообразна, но в среднем также есть свой локальный экстремум – африканская девушка с большим количеством цветов в волосах

3. Эффект «черного ящика»

Следующая сложность: нейросеть представляет собой «черный ящик». Мы подаем на вход данные, управляем её поведением с помощью критериев оптимизации, смотрим на результаты, валидируем их, но, тем не менее, мы не защищены от множества неприятностей. Эффект «черного ящика» очень усложняет разработчику понимание того, что же пошло не так, почему результаты отличаются от ожидаемых.

Вас же тоже раздражает, когда не знаешь, что именно пошло не так? Источник: https://www.freepik.com/premium-vector/robot-with-speech-bubble-login-form_10620044.htm
Вас же тоже раздражает, когда не знаешь, что именно пошло не так? Источник: https://www.freepik.com/premium-vector/robot-with-speech-bubble-login-form_10620044.htm

Алгоритмы, которые мы называем вычислительными, позволяют разработчику следить за каждым этапом обработки. Это гораздо ближе к тому, чтобы получить контролируемые результаты.

В случае нейронных сетей контролируемость результата и влияние на него превращается в проблему. Самый банальный пример, это ошибки в обучающих данных. Когда разработчик замечает неверное поведение нейронной сети, и тренировочных данных относительно немного, гипотетически их можно просмотреть и постараться найти ошибки, хотя даже для небольшого количества данных это нетривиальная задача. Самое элементарные ошибки: перепутали эталон с входом, допустили ошибки в наименованиях файлов или в процессе подготовки данных. Но, если датасет увеличивается до миллионов примеров и мы имеем дело с терабайтами изображений, то уже физически невозможно вручную проверить эти данные. Поэтому приходится вводить критерии и метрики для датасетов и результатов работы нейронной сети, которые могли бы сигнализировать, что что-то пошло не так, и помочь определить источник ошибки.

Для задач классификации метрики относительно просты и легче интерпретируются, изучая результаты, можно понять где ошиблись. Но, в задачах улучшения изображений, когда мы работаем с изменением очень мелких деталей, сложно подобрать объективные метрики. Обычно используются усреднённые генерализованные метрики, которые вычисляются по всему изображению, и если такой правильно подобранной метрикой можно поймать момент, например, что трава вместо зеленой стала синей, то если вдруг нейронная сеть стала производить ступенчатый эффект на границах объектов, такой эффект можно обнаружить только «глазами», внимательно изучая результаты обработки, при этом может остаться неясным источник проблемы в обучающих данных. Для контроля результата сети иногда даже создаются специальные нейросети, которые пытаются повторять работу когнитивного аппарата человека и в соответствии с ним возвращать оценку того, как бы изображение воспринималось человеком, не появился ли в результате обработки какой-нибудь неприятный для человеческого глаза элемент (артефакт).

Кроме контроля ошибок в датасетах, другой немаловажный аспект это сложность интерпретации поведения, решений нейронной сети. Существуют исследования, направленные на то, каким образом можно описать внутреннее представление сети,  чтобы облегчить понимание происходящих процессов внутри сети в ходе обучения и их корректировку.

Есть подход с визуализацией признаков, которые выработала нейронная сеть, чтобы понять, какие из них она посчитала наиболее важными. Другой подход состоит в том, чтобы избегать сложные глубокие сети и заменять их на комбинацию простых, легко интерпретируемых моделей, по крайней мере на начальном этапе работы с задачей. Это важно для разработчиков нейронных сетей чтобы понять, как сеть видит мир и если что-то идет не так — как поменять архитектуру сети, усложнить функцию потерь.

И здесь мы возвращаемся к той самой интуиции инженера, которая была актуальна во времена вычислительных алгоритмов — традиционных методов, от которой нам нейронные сети вроде как позволяли уйти, чтобы более объективно выполнять нахождение оптимального решения.

4. Аппаратная зависимость

Большинство разработчиков этот момент не очень волнует, поскольку есть фреймворки на Python, но если мы хотим, чтобы нейросеть выполнялась на конкретном устройстве, например на смартфоне, то мы получаем такую неприятную особенность, как аппаратная зависимость.

Больше слоёв Богу слоёв! Источник: https://habr.com/ru/articles/455353/
Больше слоёв Богу слоёв! Источник: https://habr.com/ru/articles/455353/

Первое. Нейронный сопроцессор на смартфоне или компилятор может не поддерживать какие-либо операции, слои или поддержать недостаточно оптимально. Обычно, когда говорят про вычислительное железо, то различают устройства общего назначения, такие как центральный, графический процессор (CPU, GPU), так и специализированные, например нейронный процессор (NPU).

  • CPU хорошо подходят для большинства задач, но малоэффективны для выполнения нейронных сетей.

  • GPU выше по эффективности, поскольку поддерживают многопоточность, матричные вычисления, но уже имеют ограничения в том, что на них можно считать.

  • NPU самые быстрые для нейронных сетей, поскольку базовые операции «зашиты» в железо, и вычисления требуют минимальные энергозатраты, но обеспечивают наиболее высокое быстродействие. Но, пользоваться NPU сложнее всего, поскольку требуется учитывать то, что он умеет, а что нет. Соответственно, разработчику приходится перекраивать модель нейронной сети под вид, поддерживаемый NPU, проводить соответствующую оптимизацию, обеспечивать нужную битность, некоторые критически важные вычисления, которые нельзя выполнить на NPU, – отдельно реализовывать на GPU.

Разработчику приходится тратить свое время и силы на подбор архитектуры, дружественной к вычислительным ресурсам конкретного устройства. А потом выходит новая модель смартфона с обновленным железом, и приходится проходить путь заново. Справедливости ради стоит сказать, что индустрия стремительно развивается и приходится всё меньше сил тратить на поддержку или обновление модели нейронной сети для эффективного выполнения, но тем не менее проблема остаётся актуальной.

Второе. Фреймворки отстают от железа. Разработчики графических процессоров и нейропроцессоров обычно делают дополнения к существующим крупным фреймворкам, но это процесс небыстрый. Появление нового железа и его полная поддержка занимают некоторое время, и в этот период могут возникать ошибки, требующие отладки.

Третье. Тренировочные данные также часто бывают аппаратнозависимыми. Нейронная сеть обеспечит более корректный результат, если будет обучаться на данных с «целевого» устройства. Например, если снова обращаться к теме улучшения изображения, то характеристики камеры, архитектура сенсора, особенности оптики,  количество и размер пикселей имеют существенное значение. Датасеты со старых камер не годятся, нужно снимать данные заново. При этом есть жесткие временные ограничения по срокам выхода очередной модели смартфона на рынок. Конечно, можно пробовать использовать данные с других устройств, за счёт моделирования оптических эффектов, интерполяции стараться приблизиться к специфике целевой камеры, но от точности такого моделирования зависит эффективность обработки и зачастую по трудоёмкости такой подход не уступает самому сбору тренировочных данных. В статьях иногда встречаются упрощенные варианты моделирования датасетов, например, для задачи повышения разрешения используют хорошие фотографии высокого разрешения (эталон), уменьшают размер (входные данные) и на этих данных тренируют нейронную сеть. Но здесь есть риск, что нейронная сеть просто выучит обратную функцию для операции понижения разрешения, и результат на реальных данных не будет соответствовать ожиданиям.

Теперь посмотрим пример: как нейросети и вычислительные алгоритмы используются в задачах обработки фото и видео на смартфоне.

Особенности задач улучшения изображений и видео

Фотография проходит длинный путь, начиная c накопленных зарядов на фотоматрице сенсора камеры и заканчивая изображением, которое пользователь видит на экране смартфона. Преобразованием сырых данных с сенсора камеры, основными этапами обработки изображения и его улучшением занимается сигнальный процессор (image signal processor — ISP), который является неотъемлемой частью любой цифровой камеры. Этот процессор — «железное» воплощение вычислительных алгоритмов. Сигнальные процессоры строятся на тех самых вычислительных hand-crafted алгоритмах, куда заложена модель изменения изображения: контраст, яркость, баланс белого, четкость границ, шумоподавление и так далее. С одной стороны, это обеспечивает максимальное быстродействие и саму возможность реализации алгоритмов в чипе. С другой стороны, алгоритмы в ISP достаточно консервативные, использование памяти для хранения промежуточных вычислений, рекурсивные приёмы обходятся слишком дорого для таких устройств, поэтому туда закладываются не совсем новые подходы, да и сам процесс разработки ISP занимает несколько лет.

Наиболее типичная задача для камеры смартфона  - это задача шумоподавления. Мобильные камеры обычно имеют маленькие сенсоры, что делает их очень подверженными воздействию шумов, грубо говоря, маленький пиксель сенсора собирает меньше фотонов при низкой освещённости фотографируемой сцены, и шумы сенсора становятся сопоставимы с энергией собранного света. Гонка за размером сенсора как раз и связана с тем, чтобы захватывать больше света и обеспечить меньший уровень шума. При недостаточном размере сенсора задача шумоподавления решается алгоритмически, но в некоторых пределах.

Алгоритмы спасли оленя от шакалов. (Слева фрагмент с шумом, справа результат алгоритмического шумоподавления) Источник фото: https://www.fujirumors.com/topaz-denoise-ai-v3-2-improved-raw-color-processing-and-performance/
Алгоритмы спасли оленя от шакалов. (Слева фрагмент с шумом, справа результат алгоритмического шумоподавления) Источник фото: https://www.fujirumors.com/topaz-denoise-ai-v3-2-improved-raw-color-processing-and-performance/

Другая задача связана с ограниченностью динамического диапазона камеры. Например, при съемке заката у моря камера не способна передать весь динамический диапазон, который мы видим своими глазами. Обычно это ограничение также решается алгоритмически: накапливается некоторое количество кадров, полученных с разной экспозицией, и далее они объединяются в одну фотографию с более насыщенными яркими цветами, становятся видны детали в тенях и ярких областях сцены. Возможно, вам известна аббревиатура HDR — она как раз и означает расширенный динамический диапазон (high dynamic range).

Алгоритмы сделают это фото теплее и романтичнее. Источник: https://www.electronicwings.com/users/SujanaAbirami/projects/2074/dark-image-enhancement-using-image-processing
Алгоритмы сделают это фото теплее и романтичнее. Источник: https://www.electronicwings.com/users/SujanaAbirami/projects/2074/dark-image-enhancement-using-image-processing

Следующая картинка — это уже пример более высокоуровневой задачи. Например, когда человек фотографирует через стекло, то отражения и блики на фотографии потом сильно бросаются в глаза. Фотографу или дизайнеру хочется их отретушировать, но для этого нужно обладать соответствующими навыками и программами, поэтому обычные пользователи рассчитывают на автоматические алгоритмы.

Блики тоже удаётся убрать. Источник: https://www.fiverr.com/yanewore/improve-the-quality-of-your-photo-and-change-the-format
Блики тоже удаётся убрать. Источник: https://www.fiverr.com/yanewore/improve-the-quality-of-your-photo-and-change-the-format

Итак, подведем небольшой итог. Улучшение изображения включает в себя разнообразные задачи, как низкоуровневые (шумоподавление, HDR), так и высокоуровневые (ретуширование, коррекция артефактов — например, открыть глаза у человека или добавить улыбку, убрать мешающий объект и т. д.).

Вычислительная сложность и вызовы мобильной фотографии

Какая же главная проблема при работе над улучшением изображений? Увеличивается вычислительная сложность задачи, особенно по сравнению с задачами классификации, распознавания изображений.

Вычислительные затраты на нейросети, понижающие размерность (как классификатор слева), существенно ниже. Источник: http://www.add3d.ru/?page_id=21517, https://www.researchgate.net/figure/UNet-structure-for-localizing-the-clouds-and-shadows-coarsely_fig2_342399093
Вычислительные затраты на нейросети, понижающие размерность (как классификатор слева), существенно ниже. Источник: http://www.add3d.ru/?page_id=21517, https://www.researchgate.net/figure/UNet-structure-for-localizing-the-clouds-and-shadows-coarsely_fig2_342399093

Например, при классификации изображений нейросеть архитектуры VGG-16 получала на вход изображение, а на выход давала класс (размерность слоёв нейронной сети постепенно уменьшается и требуется сравнительно немного вычислительных ресурсов). В случае же сегментации изображений требуется модель нейронной сети формата image-to-image, когда размерность выхода сети сопоставима с размерностью входа (например, широко известные нейросети архитектуры U-Net), в этом случае на порядки возрастает вычислительная сложность задачи.

Размер изображений напрямую влияет на вычислительную сложность. Для сохранения деталей нужно работать попиксельно, с полным разрешением, в то время как производители, стремясь улучшить качество изображения, постоянно увеличивают количество мегапикселей мобильных камер.

«Гонка мегапикселей»: разрешение мобильных камер растет стремительно. Это создает дополнительные вызовы для обработки изображений: даже просто сохранить в памяти 200 Мп изображение — нетривиальная задача.
«Гонка мегапикселей»: разрешение мобильных камер растет стремительно. Это создает дополнительные вызовы для обработки изображений: даже просто сохранить в памяти 200 Мп изображение — нетривиальная задача.

Удобство для пользователя: пользователи не готовы ждать обработку фото больше 3-4 секунд с момента съемки. Сложную обработку можно производить в фоновом режиме, но к моменту, когда пользователь перейдёт в галерею, его должно ждать готовое фото полного разрешения, т.е. применение облачных вычислителей для подготовки фотографии ограничено.

Видео обычно обрабатывается в реальном времени: предполагается, что пользователь снимает видео, и алгоритм тут же пытается уменьшить уровень шума или добавить HDR-эффект. Поэтому требования к обработке видео растут, особенно с внедрением HD, Full HD и даже 4K разрешений на мобильных устройствах. Важно обеспечить высокую скорость обработки видео, в рамках 30-60 кадров в секунду, что требует всего десятки миллисекунд на один кадр.

Как уже упоминалось выше, объективные численные критерии качества для обработки изображений существуют, но они не охватывают все нюансы, поэтому наряду с метриками по-прежнему используется трудоёмкая экспертная оценка результатов человеком на отсутствие видимых артефактов, поскольку человеческий глаз очень чувствителен к тому, что происходит не так на изображении, даже если удельный вес искажений (артефактов) очень мал (например, если замылились границы или появились цветовые искажения).

Специфика работы со смартфоном требует осторожного распределения нагрузки на вычислительных ресурсах (например, учета работы приложений в фоновом режиме) и энергопотребления, выражающегося, прежде всего, в нагреве устройства. Все компании, производящие смартфоны, стараются оптимизировать и контролировать вычисления, чтобы ограничить расход батареи и неприятный нагрев смартфона.

Дополнительно, алгоритмам необходимо конкурировать с хардварными сигнальными процессорами ISP, в том смысле, что это устройство уже присутствует в смартфоне, оно выполняет свою работу, пусть даже и не всегда наилучшим образом. Таким образом, разрабатываемое решение (например, нейросеть) должно либо превосходить по качеству, либо предоставлять преимущества пользователю там, где обычный ISP не справляется, например, давая возможность качественной ночной съемки.

Важно учитывать изменчивость аппаратного обеспечения (не только количества мегапикселей в камерах, но и того, как устроены сенсоры), так как каждое новое поколение устройств вносит свои особенности, что также требует адаптации алгоритмов.

Кто побеждает в итоге: машинное обучение или handcrafted алгоритмы?

Это вопрос из раздела «кого любишь больше: маму или папу?» Источник: https://www.livemaster.by/topic/135625-tsena-i-tsennost
Это вопрос из раздела «кого любишь больше: маму или папу?» Источник: https://www.livemaster.by/topic/135625-tsena-i-tsennost

Можно сказать, что машинное обучение перевешивает, так как этот подход обладает огромным потенциалом, тем более, появляются мощные процессоры с поддержкой ИИ. Машинное обучение избавляет разработчика от необходимости вдаваться в детали и позволяет собирать данные и задавать критерии, в то время как ручная настройка требует от человека разработки собственных алгоритмов на основе его понимания задачи.

Но в ряде случаев вычислительные алгоритмы оказываются вне конкуренции:

  1. Когда у нас нет тренировочных данных, например, когда по каким-то причинам нет камеры, которая будет снимать фото для датасета (а мы помним, что алгоритмы машинного обучения очень зависимы от оборудования). Потребуется использовать вычислительные алгоритмы, чтобы поддерживать будущие особенности «железа»

  2. Человек, конструируя алгоритм вручную, получает контроль за вычислительной сложностью и промежуточными вычислениями. Инженер, понимая, какие подпроцессы работают медленнее всего (например, умножение и деление вычислительно гораздо «дороже», чем сложение) может это проецировать на то, как он видит будущий алгоритм. Соответственно, такой алгоритм получится более оптимальным.

В ряде случаев (например, для аппроксимации эллипса или круга) использование нейронных сетей — это как забивание гвоздей микроскопом. Нейросеть будет использовать миллионы параметров и большой объём ресурсов. Человек, обладающий инженерной интуицией, может для этого использовать всего несколько параметров и легко это решить.

Побеждают гибридные алгоритмы!

Сочетание вычислительных и нейросетевых алгоритмов — один из способов решения проблем, о которых я написал выше. В задачах обработки видео стараются отдать нейросетевым алгоритмам небольшую часть, когда они работают с данными, которые уже агрегируют какую-то визуальную информацию.

Рассмотрим несколько примеров.

Пример: увеличение количества кадров

Ниже пример алгоритма для увеличения количества кадров (frame rate conversion, FRC), он используется как дополнение для высокоскоростных сенсоров камеры, обеспечивающих съёмку до 960 кадров в секунду.

Гибридный алгоритм увеличения количества кадров (frame rate conversion, FRC) обеспечивает на порядок больше кадров в секунду даже на смартфоне!
Гибридный алгоритм увеличения количества кадров (frame rate conversion, FRC) обеспечивает на порядок больше кадров в секунду даже на смартфоне!

В этом алгоритме нейросети отвечают только за маленький блок, детектирующий эффект окклюзии, когда из-за движения в кадре один из объектов заслоняет другой, и вычислительный алгоритм с высокой вероятностью запутается и сгенерирует промежуточные кадры с ошибками. Здесь нейронная сеть справляется гораздо лучше мозга инженера. Для неё проще определить признаки окклюзии. Поскольку в данном случае нейросеть оперирует не с пикселями, а с векторами движения, ей проще уложиться в требуемые временные рамки и выделенные вычислительные ресурсы. Анализируя сложность движения на видео, алгоритм предсказывает момент появления артефактов и включает меры для предотвращения этого.

Благодаря современным алгоритмам шакалы не доберутся до этого щеночка
Благодаря современным алгоритмам шакалы не доберутся до этого щеночка

Пример: как получить датасет с данными глубины

Ниже пример end-to-end задачи (вычисляемой полностью на нейросетевых алгоритмах), чтобы рассказать о способе получения данных для датасета без затраты больших ресурсов. Хорошие датасеты — это нефть IT-индустрии. Если команда имеет хорошие представительные тренировочные датасеты или инструменты для их сбора, она может «торговать» ими не хуже, чем алгоритмическими решениями. 

Существует задача предсказания глубины по всего одному изображению: камера видит одну картинку и пытается понять, на каком расстоянии находятся объекты. У сети нет вспомогательной информации, и поэтому она по аналогии с человеческим восприятием учится понимать относительные пропорции «знакомых» объектов, и за счёт понимания их взаиморасположения строить карту глубины. Карта глубины может использоваться как для навигации роботов, так и для фотоэффектов, например имитации эффекта размытия объектов вне фокуса, который возникает для профессиональных камер с хорошей оптикой.

Это не кадры из фильма ужасов, это фото с картами глубины (depth)
Это не кадры из фильма ужасов, это фото с картами глубины (depth)

Идея подхода вроде простая, как раз для нейронной сети, но возникает проблема, где искать тренировочные данные и в каком представлении? Самый простой вариант: используем оборудование для измерения глубины (например, с помощью ToF камеры или лидара) и совмещаем с карту глубины с фотографией от обычной камеры. Это трудоемко и затратно, требуется специальное оборудование, выравнивание фотографии и карты глубины и время для съёмки.

Но можно использовать более простой и интересный способ, который уже себя оправдал: показывать нейронной сети коммерческие стереофильмы высокого качества. Этого будет достаточно, чтобы нейросеть за счёт наблюдения непохожестей в изображениях стереопары сформировала внутреннее представление, используемое далее для оценки глубины изображений. Такие фильмы доступны, и за редким исключением, когда резко меняется сцена или появляются субтитры, применимы без проблем.

Знаете, я своего рода тоже нейросеть!
Знаете, я своего рода тоже нейросеть!

Но даже несмотря на доступность данных, возникали сложности: в части датасетов были перепутаны левое и правое изображения, и нужно было искать ошибки в данных вручную. Таким образом, даже при использовании нейросетей, инженерный подход иногда остается необходимым для анализа и фильтрации входных данных.

Пример: как получить датасет со смазанными изображениями

Ещё один пример того, как можно достаточно «дешево» получить обучающие данные. Да, всё равно приходится собирать датасет, но значительно с меньшими затратами времени и сил.

Инженеры Samsung решали задачу компенсации смаза и для сбора данных использовали высокочастотную камеру, которая снимала со скоростью 400 кадров в секунду. Таким образом, получали 400 четких изображений сцены — эталон (ground truth). Затем имитировали смазанное изображение с помощью специального алгоритма, который использовал несколько последовательных кадров и объединял их, моделируя дрожание рук у пользователя и длительное открытие апертуры камеры. Это позволило создать пары из смазанных и четких изображений, что сильно упростило обучение и позволило быстро достичь первых результатов.

Алгоритмы сделали изображения справа гораздо более чёткими
Алгоритмы сделали изображения справа гораздо более чёткими

Заключение

Главное: при решении задачи вам следует иметь в виду разные способы получения обучающих данных, иметь широкий кругозор и понимать, что не всегда нейросетевые решения исключительно удобны и эффективны. Если ваше решение ориентировано на реальный мир, эти датасеты должны быть очень высокого качества.

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

Важно подходить к задаче гибко и искать оптимальное сочетание методов для ее решения, учитывая специфику и требования конкретной задачи.

Илья Курилин

канд. техн. наук, эксперт Samsung

Статья основана на лекции, прочитанной в рамках финала конкурса IT Школы Samsung.


А если вас заинтересовало, как освоить методы глубокого обучения и применять их в своей практике, то приглашаем вас пройти бесплатный онлайн-курс «Нейронные сети и компьютерное зрение» от Samsung! Курс включает 20 часов видеолекций, тесты и упражнения, а итоговое задание — самостоятельная задача на Kaggle.

https://stepik.org/course/50352
https://stepik.org/course/50352

Источник: https://habr.com/ru/companies/samsung/articles/783546/


Интересные статьи

Интересные статьи

Хорошего настроения, Хаброжители! Освойте ключевые навыки проектирования, разработки и развертывания приложений на базе машинного обучения (МО)! Пошаговое руководство по созданию МО-приложений ...
Спустя два года после запуска Turing в сентябре 2020 года NVIDIA сменила архитектуру своих видеокарт на Ampere. AMD не осталась в стороне и вскоре после этого тоже обнови...
В прошлой статье цикла мы познакомились с типами биржевых заявок. Сегодня мы разберем книгу ордеров, обработку заявок и вопросы связанные с организацией хранения торговой информации. ...
Как вы знаете, мы тут в своей Самаре каждый год проводим Фестиваль 404, куда приезжают разные люди и делятся опытом. Доклады записываем на видео и выкладываем совершенно бесплатно на свой кан...
Окончание первой части истории, раскрывающей кратко упомянутый эпизод в финской книге "Finnish Video Games: History and Catalog". В этой части я описываю организационно-технические вопросы и д...