Вступление

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

Аудитория: Большинство предстоящих статей ориентированы на продвинутых читателей, которые знакомы с Python Imaging Library (Pillow, PIL), сверточными нейронными сетями (CNN), PyTorch, fastai и базовыми концепциями веб-разработки. Тем не менее, я подробно остановлюсь на важных частях нашего кода, так что ничего страшного, если есть небольшие пробелы в ваших знаниях по указанным темам.

Без лишних слов, приступим к кодированию!

Наша цель

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

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

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

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

Набор данных

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

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

От низкого до высокого качества

Одна вещь, которую мы не обсуждали, - это то, что делает изображение низким или высоким. Объективно мы могли бы определить это как количество пикселей, поэтому увеличение изображения с 256 X 256 до 512 X 512 дает более качественную фотографию. Это то, что делают многие уже существующие приложения, и результат обычно отличный.

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

Модель

На данный момент главное, что нужно знать относительно модели, это то, что мы собираемся использовать архитектуру U-Net с предварительно обученным кодировщиком для более быстрой сходимости. Мы тщательно взвесим все за и против ряда моделей и поймем, почему в нашем случае это наш лучший выбор, даже несмотря на то, что другие архитектуры, такие как генеративные состязательные сети (GAN), взяли на себя проблемы преобразования изображения в изображение и обычно дают изображения более высокого качества.

Производство

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

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

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

Заключение

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

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

Пожалуйста, если у вас есть какие-либо вопросы или отзывы, не стесняйтесь размещать их в комментариях ниже и, как всегда, благодарим вас за чтение!

Похожие статьи:











Социальные сети: