Интернет-издания
Розничная торговля новыми и букинистическими книгами, новыми и старыми журналами, фотоатласами, видеофильмами и компакт-дисками по цветоводству, аранжировке, ландшафтному дизайну; продажа книг и журналов по индивидуальным заказам из Англии, Германии, Голландии, Италии, США, Франции.
Получить ответы на все интересующие Вас вопросы Вы можете по электронной почте [email protected] или, оставив сообщение в гостевой книге
-
Интернет-журнал “Палисад” Выпуск 7
от 23.05.08
-
Интернет-журнал “Палисад” Выпуск 6
от 23.05.08
-
Интернет-журнал “Палисад” Выпуск 5
от 30.11.07
-
Интернет-журнал “Палисад” Выпуск 4
от 30.11.07
-
Интернет-журнал “Палисад” Выпуск 3
от 17.
-
Интернет-журнал “Палисад” Выпуск 2
от 21.10.07
- Интернет-журнал “Палисад” Выпуск 1 от 21.10.07
-
Интернет-журнал “Природа и ландшафт” №6
компании “БРУНС ПФЛАНЦЕН” от 31.12.03 -
Интернет-журнал “Природа и ландшафт” №5
-
Интернет-журнал “Природа и ландшафт” №4
-
Интернет-журнал “Природа и ландшафт” №3
-
Интернет-журнал “Природа и ландшафт” №2
- Интернет-журнал “Природа и ландшафт” №1
-
Культивар
– электронный журнал любителей кактусной экзотики.
Фотографии, статьи по содержанию и биологии растений, реклама
коллекций. Издается на русском и английском языках. Приглашаем
любителей всех стран Мира. от 04.04.04 -
Энциклопедия декоративных садовых растений (ЭДСР)
«Энциклопедия декоративных садовых растений» (ЭДСР) создана с
целью объединения информации о растениях, которые используются в
декоративном садоводстве, и распространия ее среди всех
заинтересованных пользователей Интернета. Это – некоммерческий
проект. Его создатели не имеют никакой экономической выгоды от
существования сайта. Данные о растениях собраны из книг, журналов,
газет и CD-ROMов, названия которых приведены в «Источниках».
Большая благодарность всем постоянным посетителям сайта, которые
помогали и помогают советами, знаниями и энтузиазмом. Любое
коммерческое распространение информации с ЭДСР в электронном и
ответственности создателей сайта. от 14.03.07 -
Фотогалерея суккулентов Петра Лапшина
Фотографии около 300 видов различных листовых суккулентов, уход
за ними; материалы по лофофорам, литопсам. от 04.04.04 -
“Эписция” – проект, посвященный новому модному комнатному
растению из семейства Gesneriaceae – эписции. На сайте
иллюстрированные описания более сотни видов и сортов, уход в
домашних условиях, продажа посадочного материала. от 22.07.04
Энциклопедия комнатных и садовых растений
В древнеримской мифологии Флора – богиня цветов, весны, юности (от лат. flos -«цветок»). В наше время флорой называют все множество видов цветов и растений, которые произрастают на какой-либо определенной территории.
Богатейшее царство флоры поражает своим разнообразием. Во флоре нашей планеты насчитывается 250—300 тысяч видов ныне живущих сосудистых растений, в т.ч. 15 тыс. папоротникообразных, 25 тыс. мохообразных. Наиболее богата флора тропических стран, радующая глаз буйством красок и форм, а по направлению к полюсам она беднеет, ее красота строже и неприметней. Чем разнообразнее географические условия страны, тем богаче ее флора.
Представленная в нашей энциклопедии растений информация поможет в постижении тайн и законов царства флоры, пониманию той жизненно важной роли, которую растения играют в нашей жизни, и сохранению их многообразия.
Декоративные деревья и кустарники
Лиственные деревья и кустарники Лиственные породы составляют основной материал для озеленения любой территории. Благодаря различной окраске ствола, листьев, цветков и плодов, с их помощью можно создать живописные древесно-кустарниковые группы. Раздел содержит описание 240 видов деревьев и кустарников. | |
Хвойные растения За исключением лиственницы, все хвойные породы вечнозеленые. Круглый год они создают основные цветовые пятна и фон для других растений. Они геометричны, в отличие от свободных форм лиственных пород. Наша энциклопедия содержит около 50 видов хвойных растений. |
Комнатные растения
Бромелиевые Семейство Бромелиевые включает более 3000 видов. Травянистые растения, ведущие наземный и эпифитный образ жизни. Произрастают в условиях тропиков и субтропиков в Северной и Южной Америке. | |
Декоративно-лиственные растения Обширная группа растений, позволяющая создавать разнообразные композиции на ограниченной территории. Составляют основу ассортимента комнатных растений. | |
Кактусы Обширное семейство, включающее около 3000 видов. Жители тропиков, сухих лесов, горных районов, пустынь. Их можно назвать самыми неприхотливыми в уходе. | |
Комнатные плодовые растения В этой группе наиболее популярны цитрусовые культуры и кофейное дерево. Эти растения больше подходят для зимнего сада и оранжереи, чем для комнатного содержания. | |
Красивоцветущие растения К этой группе относятся растения разных жизненных форм и условий содержания. По длительности цветения подразделяются на одноразовые, повторно- и долгоцветущие. | |
Орхидеи Семейсто Орхидные (Orchidaceae) насчитывает более 20 000 видов. Это, пожалуй, самые экзотические растения для комнатного содержания. Среди них есть капризные и легкие в уходе. | |
Пальмы Семейство Арековые (Arecaceae) насчитывает около 240 родов и 3400 видов. Пальмы стали неизменным элементом растительного декора самых разных помещений. | |
Папоротники Это древнейшие обитатели Земли. Их насчитывается около 12 000 видов. Выращивать папоротники в комнатной культуре стало модно в XVIII веке. Для комнатных условий пригодны более 2 000 видов. | |
Суккуленты Группа многолетних растений, способных запасать воду в мясистых листьях или стеблях. Суккуленты встречаются во многих семействах. Уход за этими растениями специфичен, но не сложен. |
Лианы
Многолетние лианы Большая группа растений, относящихся к разным семействам, но обладающих общим признаком – неспособностью сохранять вертикальное положение, потребностью в опоре. Самый пластичный материал для вертикального озеленения, который позволяет значительно увеличить площадь зеленых насаждений. Представлено около 90 многолетних видов. | |
Однолетние лианы Однолетние виды лиан, незаменимые для открытого грунта и контейнерного выращивания. Позволяют быстро получить декоративный эффект при оформлении стен, изгородей, хозяйственных построек, и т. д. Раздел содержит описание около 30 видов. |
Овощные культуры
Бобовые культуры Группа овощных растений, объединяющая горох, три вида фасоли, бобы. Бобовые ценятся прежде всего за раннюю, питательную продукцию. Так, фасоль и соя по питательности вполне способны заменить мясо. К тому же растения обогащают почву азотом, используются в качестве зеленого удобрения (сидератов), идут на корм скоту. | |
Зеленные культуры Значительная группа растений, включающая 6 ботанических семейств – Сельдерейные, Астровые, Лебедовые, Капустные, Луковые, Яснотковые. Подразделяется на 2 подгруппы: посевные и выгоночные. Ценны содержанием витаминов, минеральных солей, ароматических веществ. | |
Капустные культуры Большое разнообразие видов и хозяйственное значение растений этой группы, а также их вкусовые качества, объясняют популярность капустных культур. В России капуста занимает первое место по валовому сбору среди овощных культур. | |
Корнеплодные и клубнеплодные растения В данную группу входят растения из 7 семейств – Астровые, Вьюнковые, Крестоцветные, Маревые, Пасленовые, Сельдерейные, Яснотковые. Хозяйственное значение одного из представителей этой группы – картофеля – отражено в русской пословице: “Картофель – второй хлеб”. | |
Луковичные культуры К этой группе относятся около 400 представителей рода Лук (Allium) семейства Луковые (Alliaceae). Все растения по своей природе являются многолетними, однако в пищевых целях выращиваются в течение 1-3 лет. Целебные свойства обусловлены высоким содержанием эфирных масел. | |
Пасленовые культуры Наиболее распространенными растениями семейства Пасленовые являются картофель, томат, перец, баклажан, физалис. Томат считается самой популярной культурой в мире, его удельный вес в общем объеме переработки плодоовощного сырья достигает 80%. Баклажан и перец производятся в гораздо меньших объемах, а физалис встречается преимущественно на приусадебных участках. | |
Малораспространенные культуры Группа растений, не являющихся для России новыми, однако не получивших большого распространения или попросту надолго забытых. Эти культуры обладают ценными хозяйственными качествами и заслуживают более широкого признания. | |
Пряно-вкусовые культуры В эту группу входит большое количество растений из различных семейств. Главное отличие этих овощных культур – высокое содержание ароматических масел. Кроме своих пищевых достоинств они обладают целебными свойствами, служат прекрасными медоносами, привлекают полезных насекомых. | |
Тыквенные культуры Семейство Тыквенные довольно велико и разнообразно. В нем более 100 родов и около 400 видов однолетних и многолетних травянистых растений, лиан, кустарников. Культурных растений насчитывается почти два десятка видов. Наибольшую популярность в России получил огурец. |
Плодовые и ягодные культуры
Виноград Возраст винограда оценивается примерно в сто миллионов лет. Культивировать его начали в медном веке. В России первый виноградник был заложен в 1613 году. | |
Косточковые Относятся к семейству Розовые (Розоцветные), подсемейству Сливовые (Prunoideae). Широко распространены в умеренной зоне всего земного шара. | |
Орехоплодные Древесные культуры, дающие плоды, известные под хозяйственным названием «орехи». В странах СНГ орехоплодные культуры распространены слабо, занимают около 4% площади всех садов. | |
Семечковые Семечковые культуры относят к семейству Roseceae (розовые), подсемейству Pomoideae (семечковые). Семейство Розовые насчитывает около 6-10 подсемейств, 90 родов и 1500 видов. | |
Ягодные Большая группа многолетних кустарников, полукустарников и травянистывх растений, образующих сочные плоды. Наиболее распространенной ягодной культурой во всем мире является земляника садовая. | |
Экзотические Редкие теплолюбивые растения, которые, благодаря селекции, могут выращиваться в некоторых регионах России. Информация о пищевых, лекарственных и других ценных свойствах этих экзотических плодов. |
Растения для водоемов
Водные растения Одна из интереснейших групп растений, способных жить только в водной среде. Возделывание их без водоема невозможно. Являются одной из важнейших составляющих экологической системы водоема. | |
Прибрежные растения Многочисленная и разнообразная группа растений, способных произрастать при небольшом погружении или на сыром, временно затопляемом берегу. Достаточно неприхотливы, могут существовать при разной влажности грунта. | |
Растения для берега Растения, которые подходят для посадки на берегу водоема. Многие из них являются классическими садовыми культурами. Переносят переувлажнение в летний период, но лучше зимуют вне пределов водоема. Могут служить кулисой либо связующим звеном между водными и садовыми растениями. |
Травянистые растения для открытого грунта
Авран,
Агератум,
Агростемма,
Адонис,
Аир,
Акант,
Аквилегия,
Аконит,
Актинотус,
Альтернантера,
Алиссум,
Амарант,
Амми,
Аммобиум,
. .. Информация по условиям выращивания и размножению наиболее популярных однолетних и многолетних садовых растений (более 650 описаний). Поиск по прайс-листам садовых центров и питомников. |
Дикорастущие растения
Алтей лекарственный,
Астрагал белостебельный,
Багульник болотный,
Бальзамин железконосный,
Башмачок настоящий,
Бедренец камнеломка,
Беладонна обыкновенная,
Белена черная,
Белозор болотный,
Белокопытник гибридный,
Белокопытник лучистый,
Белокрыльник болотный,
Бересклет бородавчатый,
Бессмертник песчаный,
… Уникальный раздел, где собрано более 120 фотографий и описаний дикорастущих растений средней полосы России. |
Где купить?
АГРОТЕХ
(499) 906-4650 опт,розн,услуги
(495) 485-8642 розн
agrotehcom.ru
Нейронная сеть сверхвысокого разрешения с одним изображением | Энциклопедия MDPI
Сверхвысокое разрешение одиночного изображения (SISR) стремится реконструировать изображение с высоким разрешением с помощью высокочастотной информации (имеющей в виду детали), восстановленной из ее аналога с низким разрешением.
1. Введение
SISR предлагает множество практических приложений, таких как видеонаблюдение, дистанционное зондирование, кодирование видео и медицинская визуализация. С одной стороны, SISR снижает стоимость получения изображений с высоким разрешением, позволяя исследователям получать изображения HR, используя персональные компьютеры вместо сложного и дорогого оптического оборудования для обработки изображений. С одной стороны, SISR снижает стоимость получения изображений с высоким разрешением, позволяя исследователям получать изображения HR, используя персональные компьютеры вместо сложного и дорогого оптического оборудования для обработки изображений. С другой стороны, SISR снижает стоимость передачи информации, т. е. изображения с высоким разрешением могут быть получены путем декодирования передаваемой информации изображения с низким разрешением с использованием SISR. Было предпринято много усилий для решения такой сложной, но некорректно поставленной проблемы из-за неизвестной версии изображения с низким разрешением в высоком разрешении.
Многие традиционные методы [2,3,4] [1][2][3] были предложены для получения изображений с высоким разрешением (HR) из их версий с низким разрешением (LR) путем установления отношения отображения между изображениями LR и изображения ЧСС. Эти методы быстрые, легкие и эффективные, что делает их предпочтительными в качестве базовых инструментов в задачах SISR [5] [4] . Однако при их применении существует общая и неотъемлемая проблема: утомительная настройка параметров. Получение желаемых результатов зависит от постоянной настройки параметров с учетом различных входных данных. Это неудобство отрицательно сказывается как на эффективности, так и на пользовательском опыте.
2. Глубокий SISR на основе CNN
Как и в других задачах компьютерного зрения, SISR добился значительного прогресса благодаря глубоким свёрточным нейронным сетям. Донг и др. впервые предложил SRCNN [15] [5] на основе неглубоких CNN. Этот метод включает в себя увеличение количества изображений с помощью бикубической интерполяции. Благодаря трем сверточным слоям, а также извлечению и представлению фрагментов, а также нелинейному отображению и реконструкции изображений сеть была создана. Позже эта команда предложила FSRCNN [16] [6] , а Shi et al. предложенный ESPCN [25] [7] . Между тем, Лай и др. предложил лапласовскую пирамидальную сеть со сверхвысоким разрешением [8] , которая принимает изображения с низким разрешением в качестве входных данных и постепенно реконструирует остаточные поддиапазоны изображений с высоким разрешением. Тай и др. использовал сеть с постоянной памятью (MemNet) [9] , используя очень глубокую сеть. Тиан и др. предложил метод CNN от грубого к точному [26] [10] , который с точки зрения низкочастотных признаков и высокочастотных признаков добавляет гетерогенные свертки и блоки уточнения для извлечения и обработки высокочастотных и низкочастотных особенности отдельно. Вэй и др. [27] [11] использовал каскадные плотные соединения для извлечения признаков разной тонкости из сверточных слоев разной глубины. Джин и др. принят фреймворк [28] [12] для гибкой настройки архитектуры сети, адаптации различных видов изображений. В DRCN [29] [13] использовалась глубоко рекурсивная сверточная сеть для повышения производительности без введения новых параметров для дополнительных сверток. DRRN [7] [14] улучшил DRCN за счет использования остаточных сетей. Лим и др. предложил расширенную глубокую остаточную сеть (EDSR) [6] [15] . Лю и др. [30] [16] предложил улучшенную версию U-Net на основе многоуровневого вейвлета. Ли и др. [31] [17] предложил использовать внутреннее внимание и семантику лица для получения изображения лица сверхвысокого разрешения. В большинстве исследований SISR была достигнута лучшая производительность за счет углубления сети или добавления остаточного соединения. Однако большая глубина затрудняет обучение этих методов, а большее количество параметров не только вызывает чрезмерное потребление памяти при выводе, но и замедляет скорость выполнения. Поэтому исследователи вводят облегченную и эффективную модель SISR.
Что касается легких моделей, Hui et al. предложенный IDN [11] [18] путем дистилляции знаний для дистилляции и извлечения признаков каждого уровня сети и изучения дополнительных отношений между ними для уменьшения параметров. CARN [10] [19] использовал облегченную каскадную остаточную сеть; локальный и глобальный уровни используют каскадные механизмы для интеграции функций из разных слоев масштаба, чтобы получить больше информации. Однако этот метод по-прежнему использует 1,5 млн параметров и потребляет слишком много памяти. Ан и др. [32] [20] предложил облегченную остаточную сеть, в которой используется групповая свертка для уменьшения количества параметров, а также весовая классификация для усиления эффекта сверхразрешения. Яо и др. предложил GLADSR [33] [21] с плотными связями. Тиан и др. предложил LESRCNN [34] [22] , используя плотные межуровневые соединения и расширенную свертку субпикселей для восстановления изображений. Лан и др. предложил MADNet [12] [23] , который содержит множество видов сетей. Он и др. [13] [24] представил многомасштабную остаточную сеть.
Существующие упрощенные методы SISR могут сократить количество параметров и вычислений, но это приведет к потере производительности. Напротив, наш метод может обеспечить лучшую производительность сверхвысокого разрешения, несмотря на небольшое количество параметров и уменьшенное потребление памяти.
3. Облегченные нейронные сети
Многие современные методы сверхвысокого разрешения сосредоточены на легковесности нейронных сетей. исследователи также обращают внимание на эти особенности. Было предложено множество облегченных сетевых структур, включая плотные сети [10, 9]. 0009 [19][22] ,34], которые используют плотные соединения или остаточные соединения для полного повторного использования функций. Эти методы являются эффективным улучшением для глубоких нейронных сетей, но не подходят для облегченных сетей. Поэтому исследователям необходимо уделять больше внимания эффективным облегченным скелетам сетей. В последующих работах исследователи предложили несколько производных версий, с введением межуровневых соединений внутри сети, повторным использованием функций для достижения лучшей производительности. Яндола и др. предложенный SqueezeNet [35] [25] , используя слой сжатия и слой свертки с размером ядра 1 × 1 для свертки карты объектов предыдущего слоя, тем самым уменьшая размерность карты объектов. В Shufflenet V1 [36] [26] и V2 [37] [27] гибко использовалась точечная групповая свертка и перетасовка каналов для достижения эффективных эффектов классификации в ImageNet [38] [28] . MobileNet [39] [29] построил эффективную сеть, применив — в последующей версии — глубокую сепарабельную свертку, введенную Sifre et al. Мобильная сеть-V2 [40] [30] также использовал такие методы, как групповая свертка и точечная свертка, и ввел механизм внимания. В проекте сети MobileNet-V3 [41] [31] использовался алгоритм NAS (поиск архитектуры сети [42] [32] ) для поиска очень эффективной сетевой структуры. Напротив, EFblock, который предлагают исследователи, использует глобальные и локальные остаточные соединения, глубокую разделимую свертку, групповую свертку и точечную свертку. Наш метод всесторонне учитывает потребности в легком весе и сверхвысоком разрешении и эффективно извлекает функции с небольшим количеством параметров.
4. Извлечение многомасштабных признаков
Многомасштабное извлечение признаков широко используется в задачах компьютерного зрения, таких как семантическая сегментация, восстановление изображений и сверхвысокое разрешение изображений. Самая основная особенность заключается в том, что фильтры с разными размерами ядра свертки могут извлекать признаки разной тонкости. Сегеди и др. предложил многомасштабный модуль [19] [33] , названный начальным модулем. Он использует фильтры свертки с различными размерами ядра свертки для параллельного извлечения признаков, что позволяет сети получать разные размеры рецептивных полей, а затем извлекать различные характеристики тонкости. В последующей версии авторы обработали пакетную нормализацию в Inception-V2 [43] [34], что ускоряет обучение сети. В Inception-V3 [44] [35] авторы добавили новый оптимизатор и асимметричную свертку. Применение многомасштабных сверточных слоев было широко продемонстрировано в таких задачах, как удаление размытия и шумоподавления. Он и др. [13] [24] представил многомасштабную остаточную сеть с функциями изображения, чтобы значительно улучшить производительность сверхвысокого разрешения изображения. Однако эти методы фокусируются только на локальных многомасштабных функциях, игнорируя концепцию глобального масштаба. Есть возможности для дальнейшего совершенствования для реализации многомасштабной сетевой структуры. Как обсуждалось выше, исследователи предлагают гибридную мультимасштабность, которую в широком смысле можно определить как локальную мультимасштабность и глобальную мультимасштабность: «локальная мультимасштабность» относится к характеристике текстуры, а «глобальная мультимасштабность» относится к конструктивным особенностям. исследователи экспериментировали с этой идеей; конкретные экспериментальные детали вводятся позже.
Enhanced Deep Residual Networks для одиночного изображения со сверхвысоким разрешением
» Примеры кода / Компьютерное зрение / Enhanced Deep Residual Networks для одиночного изображения со сверхвысоким разрешением в наборе данных DIV2K.
Посмотреть в Colab • Исходный код GitHub
Введение
В этом примере мы реализуем Расширенные глубокие остаточные сети для одиночного изображения с высоким разрешением (EDSR) Би Лим, Санхён Сон, Хивон Ким, Сынджун На и Кён Му Ли.
Архитектура EDSR основана на архитектуре SRResNet и состоит из нескольких остаточные блоки. Он использует слои постоянного масштабирования вместо слоев пакетной нормализации для дают согласованные результаты (ввод и вывод имеют одинаковое распределение, поэтому нормализация промежуточных признаков может быть нежелательной). Вместо использования потерь L2 (среднеквадратичная ошибка), авторы использовали потерю L1 (средняя абсолютная ошибка), которая лучше работает эмпирически.
Наша реализация включает только 16 остаточных блоков с 64 каналами.
В качестве альтернативы, как показано в примере Keras Изображение сверхвысокого разрешения с использованием эффективного субпиксельного CNN, вы можете сделать супер-разрешение, используя модель ESPCN. Согласно опросному листу, EDSR входит в пятерку лучших наиболее эффективные методы сверхвысокого разрешения, основанные на показателях PSNR. Однако в нем больше параметров и требует большей вычислительной мощности, чем другие подходы. Его значение PSNR (≈34 дБ) немного выше, чем у ESPCN (≈32 дБ). Согласно обзорному документу, EDSR работает лучше, чем ESPCN.
Бумага: Всесторонний обзор одного изображения со сверхвысоким разрешением на основе глубокого обучения
Сравнительный график:
Импорт
импорт numpy как np импортировать тензорный поток как tf импортировать наборы данных tensorflow_datasets как tfds импортировать matplotlib.pyplot как plt из тензорного потока импортировать керас из слоев импорта tensorflow.keras АВТОНАСТРОЙКА = tf.data.АВТОНАСТРОЙКА
Загрузите набор обучающих данных
Мы используем набор данных DIV2K, известный набор данных с одним изображением в суперразрешении с 1000 изображения сцен с разного рода деградациями, разделен на 800 изображений для обучения, 100 изображений для проверки и 100 изображений. изображения для тестирования. Мы используем 4-кратные бикубические изображения с пониженной дискретизацией в качестве эталона «низкого качества».
# Скачать DIV2K из наборов данных TF # Использование бикубического типа деградации 4x div2k_data = tfds.image.Div2k(config="bicubic_x4") div2k_data.download_and_prepare() # Берем данные поезда из объекта div2k_data поезд = div2k_data.as_dataset(split="train", as_supervised=True) train_cache = поезд.кэш() # Данные проверки val = div2k_data.as_dataset(split="validation", as_supervised=True) val_cache = val.кэш()
Переворачивание, обрезка и изменение размера изображений
def flip_left_right(lowres_img, highres_img): """Переворачивает изображения влево и вправо.""" # Выводит случайные значения из равномерного распределения от 0 до 1 rn = tf.random.uniform (форма = (), maxval = 1) # Если rn меньше 0,5, возвращаются исходные lowres_img и highres_img # Если rn больше 0,5, возвращается перевернутое изображение вернуть tf.cond ( рН < 0,5, лямбда: (lowres_img, highres_img), лямбда: ( tf.image.flip_left_right (lowres_img), tf. image.flip_left_right (highres_img), ), ) def random_rotate (lowres_img, highres_img): """Поворачивает изображения на 90 градусов.""" # Выводит случайные значения из равномерного распределения от 0 до 4 rn = tf.random.uniform (форма = (), maxval = 4, dtype = tf.int32) # Здесь rn означает, сколько раз изображения поворачиваются на 90 градусов. вернуть tf.image.rot90 (lowres_img, rn), tf.image.rot90 (highres_img, rn) def random_crop (lowres_img, highres_img, hr_crop_size = 96, масштаб = 4): """Обрезать изображения. изображения низкого разрешения: 24x24 изображения с высоким разрешением: 96x96 """ lowres_crop_size = hr_crop_size // масштаб # 96//4=24 lowres_img_shape = tf.shape(lowres_img)[:2] # (высота,ширина) lowres_width = tf.random.uniform( shape=(), maxval=lowres_img_shape[1] - lowres_crop_size + 1, dtype=tf.int32 ) lowres_height = tf.random.uniform( shape=(), maxval=lowres_img_shape[0] - lowres_crop_size + 1, dtype=tf. int32 ) highres_width = lowres_width * масштаб highres_height = lowres_height * масштаб lowres_img_cropped = lowres_img[ lowres_height : lowres_height + lowres_crop_size, lowres_width : lowres_width + lowres_crop_size, ] # 24x24 highres_img_cropped = highres_img[ highres_height : highres_height + hr_crop_size, highres_width : highres_width + hr_crop_size, ] # 96x96 вернуть lowres_img_cropped, highres_img_cropped
Мы дополняем тренировочные данные случайными горизонтальными сальто и 90 вращениями.
В качестве изображений с низким разрешением мы используем входные патчи RGB 24×24.
def dataset_object (dataset_cache, training = True): ds = dataset_cache ds = ds.map( лямбда с низким разрешением, высоким разрешением: random_crop (низкое разрешение, высокое разрешение, масштаб = 4), num_parallel_calls = АВТОНАСТРОЙКА, ) если обучение: ds = ds.map(random_rotate, num_parallel_calls=AUTOTUNE) ds = ds. map (flip_left_right, num_parallel_calls = AUTOTUNE) # Пакетирование данных дс = дс.пакет (16) если обучение: # Повторение данных, так что количество элементов, если набор данных становится бесконечным ds = ds.repeat() # предварительная выборка позволяет подготовить более поздние изображения во время обработки текущего изображения ds = ds.prefetch (buffer_size = AUTOTUNE) вернуть дс train_ds = dataset_object (train_cache, training = True) val_ds = dataset_object (val_cache, training = False)
Визуализируйте данные
Давайте визуализируем несколько примеров изображений:
низкое разрешение, высокое разрешение = next(iter(train_ds)) # Изображения с высоким разрешением plt.figure(figsize=(10, 10)) для я в диапазоне (9): топор = plt.subplot (3, 3, я + 1) plt.imshow(высокое разрешение[i].numpy().astype("uint8")) plt.title(высокое разрешение[i].shape) плт.ось("выкл") # Изображения с низким разрешением plt. figure(figsize=(10, 10)) для я в диапазоне (9): топор = plt.subplot (3, 3, я + 1) plt.imshow(lowres[i].numpy().astype("uint8")) plt.title(низкое разрешение[i].shape) плт.ось("выкл") def PSNR (супер_разрешение, высокое_разрешение): """Вычисление пикового отношения сигнал-шум, измерение качества изображения.""" # Максимальное значение пикселя 255 psnr_value = tf.image.psnr (высокое_разрешение, сверхвысокое_разрешение, max_val=255)[0] вернуть psnr_value
Построить модель
В статье авторы обучают три модели: EDSR, MDSR и базовую модель. В этом примере кода мы обучаем только базовую модель.
Сравнение с моделью с тремя остаточными блоками
Конструкция остаточных блоков EDSR отличается от ResNet. Пакетная нормализация слои были удалены (вместе с окончательной активацией ReLU): с момента пакетной нормализации Слои нормализуют функции, они ухудшают гибкость диапазона выходных значений. Поэтому их лучше удалить. Кроме того, это также помогает уменьшить объем оперативной памяти графического процессора, требуемый моделью, поскольку слои пакетной нормализации потребляют такое же количество память как предыдущие сверточные слои.
класс EDSModel(tf.keras.Model): def train_step (я, данные): # Распаковать данные. Его структура зависит от вашей модели и # на то, что вы передаете в `fit()`. х, у = данные с tf.GradientTape() в качестве ленты: y_pred = self(x, training=True) # Прямой проход # Вычислить значение потерь # (функция потерь настраивается в `compile()`) потеря = self.compiled_loss (y, y_pred, регуляризация_потери = self.losses) # Вычислить градиенты trainable_vars = self.trainable_variables градиенты = лента.градиент (потери, обучаемые_вары) # Обновить веса self.optimizer.apply_gradients (zip (градиенты, trainable_vars)) # Обновление метрик (включая метрику, которая отслеживает потери) self. compiled_metrics.update_state(y, y_pred) # Вернуть словарь, отображающий имена метрик в текущее значение вернуть {m.name: m.result() для m в self.metrics} определение предсказать_шаг (я, х): # Добавление фиктивного измерения с помощью tf.expand_dims и преобразование в float32 с помощью tf.cast х = tf.cast (tf.expand_dims (x, ось = 0), tf.float32) # Передача изображения низкого разрешения в модель super_resolution_img = self(x, training=False) # Обрезает тензор от min(0) до max(255) super_resolution_img = tf.clip_by_value (super_resolution_img, 0, 255) # Округляет значения тензора до ближайшего целого числа super_resolution_img = tf.round(super_resolution_img) # Удаляет размеры размера 1 из формы тензора и конвертирует в uint8 super_resolution_img = tf.squeeze( tf.cast(super_resolution_img, tf.uint8), ось=0 ) вернуть super_resolution_img # Остаточный блок деф ResBlock (входы): x = слои. Conv2D(64, 3, padding="тот же", активация="relu")(входы) x = слои.Conv2D(64, 3, padding="same")(x) х = слои.Добавить()([входы, х]) вернуть х # Блок повышения частоты дискретизации def Upsampling (входы, фактор = 2, ** kwargs): x = слои.Conv2D(64 * (множитель ** 2), 3, padding="same", **kwargs)(входные данные) x = tf.nn.depth_to_space(x, block_size=коэффициент) x = слои.Conv2D(64 * (множитель ** 2), 3, padding="same", **kwargs)(x) x = tf.nn.depth_to_space(x, block_size=коэффициент) вернуть х def make_model (количество_фильтров, число_остаточных_блоков): # Гибкие входные данные для input_layer input_layer = слои. Ввод (форма = (Нет, Нет, 3)) # Масштабирование значений пикселей x = слои. Масштабирование (масштаб = 1,0/255) (входной_слой) x = x_new = слои.Conv2D (число_фильтров, 3, заполнение = "то же самое") (x) # 16 остаточных блоков для _ в диапазоне (количество_остаточных_блоков): x_new = ResBlock(x_new) x_new = слои. Conv2D(num_filters, 3, padding="same")(x_new) x = слои.Добавить()([x, x_new]) х = повышающая дискретизация (х) х = слои.Conv2D (3, 3, отступ = «то же самое») (х) output_layer = слои. Масштабирование (масштаб = 255) (x) вернуть EDSRMdel (входной_слой, выходной_слой) модель = make_model (num_filters = 64, num_of_residual_blocks = 16)
Обучение модели
# Использование оптимизатора Adam с начальной скоростью обучения 1e-4, изменение скорости обучения после 5000 шагов до 5e-5 optim_edsr = keras.optimizers.Adam( Learning_rate=keras.optimizers.schedules.PiecewiseConstantDecay( границы=[5000], значения=[1e-4, 5e-5] ) ) # Компиляция модели с потерями как средней абсолютной ошибкой (потери L1) и метрикой как psnr model.compile(optimizer=optim_edsr, loss="mae", metrics=[PSNR]) # Обучение большему количеству эпох улучшит результаты model.fit (train_ds, эпохи = 100, steps_per_epoch = 200, validation_data = val_ds)
Эпоха 1/100 200/200 [==============================] - 78 с 322 мс/шаг - потери: 27,7075 - PSNR: 19,4656 - val_loss : 14. 7192 - значение_PSNR: 22.5129 Эпоха 2/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 12,6842 - PSNR: 24,7269 - val_loss : 12.4348 - знач_PSNR: 22.8793 Эпоха 3/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 10,7646 - PSNR: 27,3775 - val_loss : 10.6830 - значение_PSNR: 24.9075 Эпоха 4/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 9.8356 - PSNR: 27,4924 - val_loss: 9,2714 - val_PSNR: 27,7680 Эпоха 5/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 9,1752 - PSNR: 29,4013 - val_loss : 8,7747 - значение_PSNR: 27,6017 Эпоха 6/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 8,8630 - PSNR: 27,8686 - val_loss : 8,7710 - значение_PSNR: 30,2381 Эпоха 7/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 8,7107 - PSNR: 28,4887 - val_loss : 8,3186 - значение_PSNR: 29,4744 Эпоха 8/100 200/200 [==============================] - 6 с 32 мс/шаг - потери: 8,5374 - PSNR: 28,9546 - значение_потери: 8,4716 - значение_PSNR: 28,8873 Эпоха 9/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 8,4111 - PSNR: 30,2234 - val_loss : 8. 1969 - val_PSNR: 28.9538 Эпоха 10/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 8,3835 - PSNR: 29,7066 - val_loss : 8,9434 - значение_PSNR: 31,9213 Эпоха 11/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 8,1713 - PSNR: 30,7191 - val_loss : 8,2816 - значение_PSNR: 30,7049 Эпоха 12/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 7,9129 - PSNR: 30,3964 - val_loss: 8,9365 - val_PSNR: 26,2667 Эпоха 13/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 8,2504 - PSNR: 30,1612 - val_loss : 7,8384 - значение_PSNR: 28,4159 Эпоха 14/100 200/200 [==============================] - 6 с 31 мс/шаг - потери: 8,0114 - PSNR: 30,2370 - val_loss : 7,2658 - значение_PSNR: 29,4454 Эпоха 15/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 8,0059 - PSNR: 30,7665 - val_loss : 7,6692 - значение_PSNR: 31,8294 Эпоха 16/100 200/200 [===============================] - 6 с 28 мс/шаг - потери: 7,9388 - PSNR: 30,5297 - val_loss: 7,7625 - val_PSNR: 28,6685 Эпоха 17/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 7,8627 - PSNR: 30,8213 - val_loss : 8. 1984 - val_PSNR: 30.9864 Эпоха 18/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 7,8956 - PSNR: 30,4661 - val_loss : 8,2664 - значение_PSNR: 34,1168 Эпоха 19/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 7,7800 - PSNR: 30,3071 - val_loss : 7,9547 - значение_PSNR: 30,9254 Эпоха 20/100 200/200 [==============================] - 6 с 31 мс/шаг - потери: 7,7402 - PSNR: 30,7251 - val_loss : 7,9632 – значение_PSNR: 31,7438 Эпоха 21/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 7,7372 - PSNR: 31,3348 - val_loss : 8.0512 - значение_PSNR: 29.4988 Эпоха 22/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,7207 - PSNR: 31,1984 - val_loss : 7,6072 - значение_PSNR: 32,6720 Эпоха 23/100 200/200 [==============================] - 6 с 29 мс/шаг - потери: 7,5955 - PSNR: 31,3128 - val_loss : 6,8593 - значение_PSNR: 28,1123 Эпоха 24/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,6341 - PSNR: 31,6670 - val_loss : 7,4485 - значение_PSNR: 30,0567 Эпоха 25/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,5404 - PSNR: 31,5332 - val_loss : 6. 8795 - значение_PSNR: 33,6179 Эпоха 26/100 200/200 [==============================] - 6 с 31 мс/шаг - потери: 7,4429 - PSNR: 32,3681 - val_loss : 7,5937 - значение_PSNR: 32,5076 Эпоха 27/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,4243 - PSNR: 31,2899 - val_loss : 7,0982 - значение_PSNR: 37,4561 Эпоха 28/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 7,3542 - PSNR: 31,3620 - val_loss : 7,5735 - значение_PSNR: 29,3892 Эпоха 29/100 200/200 [==============================] - 6 с 31 мс/шаг - потери: 7,2648 - PSNR: 32,0806 - val_loss : 7,7589- val_PSNR: 28,5829 Эпоха 30/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 7,2954 - PSNR: 32,3495 - val_loss : 7.1625 - значение_PSNR: 32.0560 Эпоха 31/100 200/200 [==============================] - 6 с 31 мс/шаг - потери: 7,4815 - PSNR: 32,3662 - val_loss : 7,8601 - значение_PSNR: 35,0962 Эпоха 32/100 200/200 [==============================] - 6 с 29 мс/шаг - потери: 7,3957 - PSNR: 30,4455 - val_loss : 7,4800 - значение_PSNR: 31,9397 Эпоха 33/100 200/200 [===============================] - 6 с 29 мс/шаг - потери: 7,3849- PSNR: 32,0058 - val_loss: 7,2225 - val_PSNR: 35,5276 Эпоха 34/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,4285 - PSNR: 31,6806 - val_loss : 7,3937 - значение_PSNR: 30,4433 Эпоха 35/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 7,3841 - PSNR: 32,1425 - val_loss : 7,6458 - значение_PSNR: 30,7912 Эпоха 36/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 7,3049 - PSNR: 31,7272 - val_loss : 7,5190 - значение_PSNR: 33,2980 Эпоха 37/100 200/200 [==============================] - 6 с 31 мс/шаг - потери: 7,3098 - PSNR: 31,7727 - val_loss: 8,0041 - val_PSNR: 26,8507 Эпоха 38/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,4027 - PSNR: 31,1814 - val_loss : 7,7334 - значение_PSNR: 29,2905 Эпоха 39/100 200/200 [==============================] - 6 с 29 мс/шаг - потери: 7,2470 - PSNR: 31,3636 - val_loss : 7,1275 - значение_PSNR: 33,1772 Эпоха 40/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,1907 - PSNR: 32,7381 - val_loss : 7,3437 - значение_PSNR: 33,7216 Эпоха 41/100 200/200 [==============================] - 6 с 29мс/шаг - потери: 7,3383 - PSNR: 31,6409 - val_loss: 6,8769 - val_PSNR: 29,9654 Эпоха 42/100 200/200 [==============================] - 5 с 27 мс/шаг - потери: 7,3393 - PSNR: 31,4941 - val_loss : 6,1088 - значение_PSNR: 35,7083 Эпоха 43/100 200/200 [==============================] - 6 с 32 мс/шаг - потери: 7,2272 - PSNR: 32,2356 - val_loss : 7,4534 - значение_PSNR: 29,5734 Эпоха 44/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 7,1773 - PSNR: 32,0016 - val_loss : 7,4676 - значение_PSNR: 33,0795 Эпоха 45/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,4677 - PSNR: 32,3508 - val_loss : 7. 2459- val_PSNR: 31,6806 Эпоха 46/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 7,2347 - PSNR: 33,3392 - val_loss : 7,0098 - значение_PSNR: 27,1658 Эпоха 47/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,4494 - PSNR: 32,1602 - val_loss : 8.0211 - значение_PSNR: 29.9740 Эпоха 48/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,1128 - PSNR: 32,1696 - val_loss : 7,0101 - значение_PSNR: 32,8874 Эпоха 49/100 200/200 [===============================] - 6 с 31 мс/шаг - потери: 7,1698 - PSNR: 32.0733 - val_loss: 7.5813 - val_PSNR: 26.1697 Эпоха 50/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 7,1904 - PSNR: 31,9198 - val_loss : 6,3655 - значение_PSNR: 33,4935 Эпоха 51/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,0957 - PSNR: 32,3727 - val_loss : 7,2626 - значение_PSNR: 28,8388 Эпоха 52/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 7,1436 - PSNR: 32,2141 - val_loss : 7,6012 - значение_PSNR: 31,2261 Эпоха 53/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,2270 - PSNR: 32,2675 - val_loss : 6,9826 – значение_PSNR: 27,6408 Эпоха 54/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,0638 - PSNR: 32,5191 - val_loss : 6,6046 - значение_PSNR: 32,3862 Эпоха 55/100 200/200 [==============================] - 6 с 31 мс/шаг - потери: 7,1609 - PSNR: 31,6787 - val_loss : 7,3563 - значение_PSNR: 28,3834 Эпоха 56/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 7,1953 - PSNR: 31,9948 - val_loss : 6. 5111 - значение_PSNR: 34.0409 Эпоха 57/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 7,1168 - PSNR: 32,3288 - val_loss : 6,7979 – значение_PSNR: 31,8126 Эпоха 58/100 200/200 [==============================] - 6 с 29 мс/шаг - потери: 7,0578 - PSNR: 33,1605 - val_loss : 6,8349 - значение_PSNR: 32,0840 Эпоха 59/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,0890 - PSNR: 32,7020 - val_loss : 7,4109 - значение_PSNR: 31,8377 Эпоха 60/100 200/200 [==============================] - 6 с 29 мс/шаг - потери: 7,1357 - PSNR: 32,9600 - val_loss : 7,7647 - значение_PSNR: 30,2965 Эпоха 61/100 200/200 [==============================] - 6 с 32 мс/шаг - потери: 7.2003 - PSNR: 32.0152 - val_loss : 7,8508 - значение_PSNR: 27,8501 Эпоха 62/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 7,0474 - PSNR: 32,4485 - val_loss : 7,3319- val_PSNR: 28.4571 Эпоха 63/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 7,1315 - PSNR: 32,6996 - val_loss : 7,0695 - значение_PSNR: 34,9915 Эпоха 64/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,1181 - PSNR: 32,9488 - val_loss : 6,2144 - значение_PSNR: 33,9663 Эпоха 65/100 200/200 [==============================] - 6 с 29 мс/шаг - потери: 7,1262 - PSNR: 32,0699 - val_loss : 7. 1910 - val_PSNR: 34.1321 Эпоха 66/100 200/200 [===============================] - 6 с 28 мс/шаг - потери: 7,2891 - PSNR: 32,5745 - val_loss: 6,9004 - val_PSNR: 34,5732 Эпоха 67/100 200/200 [==============================] - 6 с 31 мс/шаг - потери: 6,8185 - PSNR: 32,2085 - val_loss : 6,8353 - значение_PSNR: 27,2619 Эпоха 68/100 200/200 [==============================] - 7 с 33 мс/шаг - потери: 6,9238 - PSNR: 33,3510 - val_loss : 7,3350 - значение_PSNR: 28,2281 Эпоха 69/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,0037 - PSNR: 31,6955 - val_loss : 6,5887 - значение_PSNR: 30,3138 Эпоха 70/100 200/200 [===============================] - 5 с 27 мс/шаг - потери: 7,0239- PSNR: 32,6923 - val_loss: 6,6467 - val_PSNR: 36,0194 Эпоха 71/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,0828 - PSNR: 32,0297 - val_loss : 6,5626 - значение_PSNR: 34,4241 Эпоха 72/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,0717 - PSNR: 32,5201 - val_loss : 7,5056 - значение_PSNR: 31,4176 Эпоха 73/100 200/200 [==============================] - 6 с 29 мс/шаг - потери: 7,0943 - PSNR: 32,4469 - val_loss : 7. 0981 - значение_PSNR: 33.2052 Эпоха 74/100 200/200 [==============================] - 8 с 38 мс/шаг - потери: 7,0288 - PSNR: 32,2301 - val_loss : 6,9661 – значение_PSNR: 34.0108 Эпоха 75/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,1122 - PSNR: 32,1658 - val_loss : 6,9569 - значение_PSNR: 30,8972 Эпоха 76/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,0108 - PSNR: 31,5408 - val_loss : 7,1185 - значение_PSNR: 26,8445 Эпоха 77/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 6,7812 - PSNR: 32,4927 - val_loss : 7.0030 - значение_PSNR: 31.6901 Эпоха 78/100 200/200 [==============================] - 6 с 29мс/шаг - потери: 6,9885 - PSNR: 31,9727 - val_loss: 7,1126 - val_PSNR: 29,0163 Эпоха 79/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 7,0738 - PSNR: 32,4997 - val_loss : 6,7849 - значение_PSNR: 31,0740 Эпоха 80/100 200/200 [==============================] - 6 с 29 мс/шаг - потери: 7,0899 - PSNR: 31,7940 - val_loss : 6,9975 - значение_PSNR: 33,6309 Эпоха 81/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,0215 - PSNR: 32,6563 - val_loss : 6,5724 - значение_PSNR: 35,1765 Эпоха 82/100 200/200 [===============================] - 6 с 28 мс/шаг - потери: 6,9076 - PSNR: 32,9912 - val_loss: 6,8611 - val_PSNR: 31,8409 Эпоха 83/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 6,9978 - PSNR: 32,7159 - val_loss : 6,4787 - значение_PSNR: 31,5799 Эпоха 84/100 200/200 [==============================] - 6 с 29 мс/шаг - потери: 7,1276 - PSNR: 32,8232 - val_loss : 7,9006 - значение_PSNR: 27,5171 Эпоха 85/100 200/200 [==============================] - 7 с 33 мс/шаг - потери: 7,0276 - PSNR: 32,3290 - val_loss : 8,5374 - значение_PSNR: 25,2824 Эпоха 86/100 200/200 [==============================] - 7 с 33 мс/шаг - потери: 7,0434 - PSNR: 31,4983 - val_loss: 6,9392 - val_PSNR: 35,9229 Эпоха 87/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,0703 - PSNR: 32,2641 - val_loss : 7,8662 - значение_PSNR: 28,1676 Эпоха 88/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,1311 - PSNR: 32,2141 - val_loss : 7. 2089 - знач_PSNR: 27.3218 Эпоха 89/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,0730 - PSNR: 33,3360 - val_loss : 6,7915 - значение_PSNR: 29,1367 Эпоха 90/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,0177 - PSNR: 32,6117 - val_loss : 8,3779- val_PSNR: 31,9831 Эпоха 91/100 200/200 [==============================] - 6 с 31 мс/шаг - потери: 6,9638 - PSNR: 32,2765 - val_loss : 6,6582 - значение_PSNR: 37,5391 Эпоха 92/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 6,9623 - PSNR: 32,8864 - val_loss : 7,7435 - значение_PSNR: 29,8939 Эпоха 93/100 200/200 [==============================] - 6 с 29 мс/шаг - потери: 6,8474 - PSNR: 32,5345 - val_loss : 6,8181 - значение_PSNR: 28,1166 Эпоха 94/100 200/200 [===============================] - 6 с 28 мс/шаг - потери: 6,9059 - PSNR: 32.0613 - val_loss: 7.0014 - val_PSNR: 33.2055 Эпоха 95/100 200/200 [==============================] - 6 с 29 мс/шаг - потери: 7,0418 - PSNR: 32,2906 - val_loss : 6,9686 - значение_PSNR: 28,8045 Эпоха 96/100 200/200 [==============================] - 6 с 30 мс/шаг - потери: 6,8624 - PSNR: 32,5043 - val_loss : 7. 2015 - val_PSNR: 33.2103 Эпоха 97/100 200/200 [==============================] - 7 с 33 мс/шаг - потери: 6,9632 - PSNR: 33,0834 - val_loss : 7.0972 - значение_PSNR: 30.3407 Эпоха 98/100 200/200 [==============================] - 6 с 31 мс/шаг - потери: 6,9307 - PSNR: 31,9062 - val_loss: 7,3421 - val_PSNR: 31,5380 Эпоха 99/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 7,0685 - PSNR: 31,9839 - val_loss : 7,9828 - значение_PSNR: 33,0619 Эпоха 100/100 200/200 [==============================] - 6 с 28 мс/шаг - потери: 6,9233 - PSNR: 31,8346 - val_loss : 6.3802 - знач_PSNR: 38.4415
Выполнить вывод на новых изображениях и построить график результатов
def plot_results(lowres, pres): """ Отображает изображение с низким разрешением и изображение с высоким разрешением """ plt.figure(figsize=(24, 14)) plt.subplot(132), plt.imshow(lowres), plt.title("Низкое разрешение") plt.