Предполагаю, что тут всё же нужны видео разной тематики по теме + эксперименты + проекты (заказы). Иначе на "тестовой выборке" нейросеть вряд ли покажет хорошие результаты. P.S. Я запускаю 2 эпохи видео )) и через 3 месяца планирую ещё одну ))
Спасибо большое за видео. Сначала подумал, что несколько видео пропустит, ничего не понял с первого раза. Потом законспектировал предыдущие видео, три раза пересмотрел это видео, построчно разобрал программу и через 3 часа все стало предельно понятно)))
Видео полезное. Симбиоз предыдущих уроков, немного ЦОС и особенностей Tensorflow2. Рекордное количество кода. Голова пухнет, особенно когда меняешь количество итераций + настройки оптимизации или параметры альфа и бетта и получаешь не то что ожидаешь. Как сказано ниже, нужно много эпох теории и эксперементов для понимания всего кода :) Лайк!
Как хорошо, что я внимательно изучил плейлист ЦОС перед этим. В этом уроке осталось просто уловить последовательность действий. Ну и сам тензорфлоу все же специфичный фреймворк. Надо разбираться с его методами. Спасибо! Очень круто!
использую этот же код для вкрб (который ты брал изначально) как же прекрасно, что я нашла этот плейлист, помогает "распутать мозги" нужны были видео про vgg + предыдущее + это спасибо огромное за объяснение, возможно буду использовать их в рпз :D
Интересен пример обработки изображений нефиксированного размера - чтобы можно было подавать на вход изображения различных размеров, и на выходе получать обработанное изображение такого же размера.
вопрос, на 12.36 когда мы вычисляем матрицу ГРАМА - в предыдущем уроке мы записывали что нужно перемножить "матрицу признаков" на матрицу признаков".транспонированную. А На этом уроке в фукции gram_matrix мы наоборот перемножаем "матрицу признаков".транспонированную на "матрицу признаков". насколько это правильно? или нам в принцыпе не важно что на что перемножать, главное что бы этот алгоритм применялся ко все обьектам одинаковый???
Почему, если я подаю изображение большего размера на вход сети, то НС работает медленнее, но РАБОТАЕТ? При этом она даже значения выдаёт, как это, там же только 244х244 можно подавать?
НС обучается на обучающей выборке, дальше она эксплуатируется на разных изображениях. Конечно, если задача меняется, скажем, обучили отличать мужчин от женщин, а собираетесь использовать для различения кошек и собак, то конечно, нужно обучать заново )
Скажите, пожалуйста, как нам сохранять навыки созданной модели? Ведь выходит, что в данном коде модель не сохраняет никаких навыков, каждый запуск изображений для нее - это чистый лист
Круто, конечно! Как я понимаю, приложение Prizma было основано на подобной сети (а может и прямо на этой?))). Один вопрос только возникает - зачем этой сети нужно еще одно измерение на подаваемых изображениях, если для положения/размера и цвета пикселя, вроде и трех достаточно?
Вы имеете в виду скрытые слои? Зачем там брать дополнительные каналы? Это нужно только для оценки степени стилизации изображения, т.к. понятие несколько абстрактное, вот и приходится применять более сложный подход (кстати, далеко не единственный, есть и другие методы оценки степени стилизации изображений).
@@selfedu_rus Нет, по этому поводу я, как ни странно, понял. Думаю, что понял) Поскольку контент - это четкое изображение, то нам достаточно выходов с одного слоя, чтобы приблизить стилизованную картинку к нему, а стиль - абстракция, поэтому нужно больше выходов, чтобы пытаться ему соответствовать при "размазывании контента". То есть нам нужно как бы сбалансировать "точную" передачу контента (и здесь этой точности добиться проще) наложением "точной стилизации" (здесь задача сложнее, поэтому "информации" нужно больше).
@@selfedu_rus мой вопрос более простого характера. Для подачи на вход сети VGG каких-либо изображений приходится добавлять дополнительную нулевую ось (делать np.expand (...axis=0)). Не могу понять, зачем у сети VGG такое требование. Просто интересно. В этом измерении можно еще какой-то параметр изображения задавать?
@@РоманЛ-г6ш а, ясно, это не то чтобы требование сети, скорее особенность реализации пакета Keras и Tensoflow. Они предполагают работу с пакетами данных (батчами), поэтому первая ось - это измерение для разных наблюдений (изображений). Если, например, подать тензор из двух изображений, то эта первая ось, как раз, и пригодится.
не могу понять, почему мы в видео vgg16, после загрузки изображения преобразовывали его в массив с помощью np.array, потом только загружали в preprocess для преобразования в bgr и добавляли ось, а тут мы сразу без преобразования в массив добавляем ось и запихиваем в preprocess. Помогите пожалуйста понять
А здесь это не принципиально, мы же не классификацию делаем, а лишь используем его обученные слои для оценки степени стилизации. Другая задача и преобразование делать смысла нет.
А можно ли по какому-то алгоритму обучить сеть стилизации без тензорных векторов? Сделать 1000+ входных картинок (оригинал + стиль) и столько же выходных (стилизованных). Смотрю видео. До VGG16 было идеально понятно. Дальше с каждыми видео становится много загадочного. понимаю, что уровень моей математики не на столько продвинутый. ((
Здравствуйте!Подскажите, пожалуйста, а если не использовать ноубук как Вы, а использовать Pycharm....Как загрузить изображения с компьютера, аналогично Вашим действиям?
А есть ли предобученные модели для изображений большего размера чем 224x224? Как это все применять на практике, если размер изображений из "реального мира" гораздо больше?
Здравствуйте! Решил попробовать повторить то, что делалось в уроке. Единственным исключением было то, что делал не в гугл колаб, а в анаконде, открывал изображения при помощи opencv, командой cv2.imread. Изображение открывалось сразу в формате bgr, соответственно манипуляции с rgb->bgr->rgb можно было опустить. Дошел до конца, анаконда делает одну итерацию и все. Воевал несколько часов, в итоге скопировал Ваш код, только в начале свои изображения открывал так же при помощи imread, и приводил все к rgb командой cv2.cvtColor(img, cv2.COLOR_BGR2RGB). Все равно одна итерация и все. Код - прям копия, ctrl+c, ctrl+v. Подскажите пожалуйста, с чем это может быть связано?
Большое спасибо за крутые видео и материалы!) Не могу пофиксить эту ошибку никак(( ValueError: Input 0 is incompatible with layer model_2: expected shape=(None, None, None, 3), found shape=(1, 224, 224, 4)
у меня та же проблема была, когда картинку в png формате загрузил, а оказалось что у изображения в png размерность 4, переделал ту же картинку в jpeg, у неё уже 3 было и всё заработало.
Сергей. здравствуйте. Спасибо за уроки! Учусь на 3 курсе информационной безопасности и делаю научный проект по объекту стеганографии. Если кратко, то моя задумка заключается в том. чтобы брать сообщение, которое нужно будет спрятать ("вписать") в изображение, разбить по символьно и через таблицу ascii представить в виде списка чисел от 0 до 255. Затем с помощью ГПСЧ с заданным сидом раскидать эти числа на холсте изображения в виде пикселей, и уже отталкиваясь от этих пикселей нейросеть должна генерировать какое-либо изображение (например, изображение кота). Скажите пожалуйста, какой тип НС для этого лучше подходит и слишком ли это сложная задача? Я пока только на 17 занятии, но дедлайны уже начинают гореть. В конце данного курса вы делали видео про генеративно-состязательную сеть (я очень поверхностно знаю что это), подойдут ли они для этой задачи, если на вход подавать не какой-то случайный шум, а конкретные значения символов сообщения по таблице ASCII? Подскажите, пожалуйста🙏
Если один просмотр этого видео принять за эпоху, то сколько нужно эпох, чтобы моя боилогическая нейронная сеть распознала всё содержимое видео?
Я предлагаю принять просмотр этого видео за батч
Ахахах
Столько эпох, сколько тут лайков 👍
Предполагаю, что тут всё же нужны видео разной тематики по теме + эксперименты + проекты (заказы). Иначе на "тестовой выборке" нейросеть вряд ли покажет хорошие результаты.
P.S. Я запускаю 2 эпохи видео )) и через 3 месяца планирую ещё одну ))
Спасибо большое за видео. Сначала подумал, что несколько видео пропустит, ничего не понял с первого раза. Потом законспектировал предыдущие видео, три раза пересмотрел это видео, построчно разобрал программу и через 3 часа все стало предельно понятно)))
Да, это занятие не простое, приходится вникать, но по другому никак. То, что вы сделали над собой все эти усилия - очень здорово!
@@selfedu_rus спасибо вам
Вот это уже было сложно, я конечно, в итоге, этот код понял, но самому такое написать, а тем более придумать... нужно много практики.
Видео полезное. Симбиоз предыдущих уроков, немного ЦОС и особенностей Tensorflow2. Рекордное количество кода. Голова пухнет, особенно когда меняешь количество итераций + настройки оптимизации или параметры альфа и бетта и получаешь не то что ожидаешь. Как сказано ниже, нужно много эпох теории и эксперементов для понимания всего кода :)
Лайк!
Как хорошо, что я внимательно изучил плейлист ЦОС перед этим. В этом уроке осталось просто уловить последовательность действий. Ну и сам тензорфлоу все же специфичный фреймворк. Надо разбираться с его методами. Спасибо! Очень круто!
использую этот же код для вкрб (который ты брал изначально)
как же прекрасно, что я нашла этот плейлист, помогает "распутать мозги"
нужны были видео про vgg + предыдущее + это
спасибо огромное за объяснение, возможно буду использовать их в рпз :D
написала для этого кода интерфейс на streamlit, даже есть задеплоенный вариант)
@@discara привет, а можешь скинуть ?
Мильярд лайкау)
Интересен пример обработки изображений нефиксированного размера - чтобы можно было подавать на вход изображения различных размеров, и на выходе получать обработанное изображение такого же размера.
Можно просто подогнать любое изображение под сеть, - изменить качество, добавить дополнительную свертку в начало
вопрос, на 12.36 когда мы вычисляем матрицу ГРАМА - в предыдущем уроке мы записывали что нужно перемножить "матрицу признаков" на матрицу признаков".транспонированную. А На этом уроке в фукции gram_matrix мы наоборот перемножаем "матрицу признаков".транспонированную на "матрицу признаков". насколько это правильно? или нам в принцыпе не важно что на что перемножать, главное что бы этот алгоритм применялся ко все обьектам одинаковый???
Какой же ты крутой, ну просто трындец
скажите пож-та, как сохранить веса модели и применить этот же стиль к другому изображению 224*224 ?
Почему, если я подаю изображение большего размера на вход сети, то НС работает медленнее, но РАБОТАЕТ? При этом она даже значения выдаёт, как это, там же только 244х244 можно подавать?
Посмотри ещё раз видео в котором рассказывается об операции maxpool
Как всё работает то понятно, но вот сама реализация... Тьма просто. До такого уровня еще долго. надо будет глянуть курс по тензорфлоу
Правильно ли я понимаю, что для каждой пары изображений нужно заново обучать сеть? Вернее сказать мы же ее не обучаем, а уменьшаем критерий ошибки ?
НС обучается на обучающей выборке, дальше она эксплуатируется на разных изображениях. Конечно, если задача меняется, скажем, обучили отличать мужчин от женщин, а собираетесь использовать для различения кошек и собак, то конечно, нужно обучать заново )
@@selfedu_rus Ну т.е. в данном случае мы должны взять большое множество пар изображение-стиль чтобы обучить сеть конкретно задаче стилизации?
@@VenatoresnamIgnotisда
Скажите, пожалуйста, как нам сохранять навыки созданной модели? Ведь выходит, что в данном коде модель не сохраняет никаких навыков, каждый запуск изображений для нее - это чистый лист
save_weights() и load_weights() вроде такие методы для сохранения и загрузки коэффициентов модели, чтобы не обучать каждый раз заново
Круто, конечно! Как я понимаю, приложение Prizma было основано на подобной сети (а может и прямо на этой?))). Один вопрос только возникает - зачем этой сети нужно еще одно измерение на подаваемых изображениях, если для положения/размера и цвета пикселя, вроде и трех достаточно?
Вы имеете в виду скрытые слои? Зачем там брать дополнительные каналы? Это нужно только для оценки степени стилизации изображения, т.к. понятие несколько абстрактное, вот и приходится применять более сложный подход (кстати, далеко не единственный, есть и другие методы оценки степени стилизации изображений).
@@selfedu_rus Нет, по этому поводу я, как ни странно, понял. Думаю, что понял) Поскольку контент - это четкое изображение, то нам достаточно выходов с одного слоя, чтобы приблизить стилизованную картинку к нему, а стиль - абстракция, поэтому нужно больше выходов, чтобы пытаться ему соответствовать при "размазывании контента". То есть нам нужно как бы сбалансировать "точную" передачу контента (и здесь этой точности добиться проще) наложением "точной стилизации" (здесь задача сложнее, поэтому "информации" нужно больше).
@@selfedu_rus мой вопрос более простого характера. Для подачи на вход сети VGG каких-либо изображений приходится добавлять дополнительную нулевую ось (делать np.expand (...axis=0)). Не могу понять, зачем у сети VGG такое требование. Просто интересно. В этом измерении можно еще какой-то параметр изображения задавать?
@@РоманЛ-г6ш а, ясно, это не то чтобы требование сети, скорее особенность реализации пакета Keras и Tensoflow. Они предполагают работу с пакетами данных (батчами), поэтому первая ось - это измерение для разных наблюдений (изображений). Если, например, подать тензор из двух изображений, то эта первая ось, как раз, и пригодится.
@@selfedu_rus точно, в стандартной ситуации пакеты же подаются, а мы по одному изображению прогоняем! Спасибо за пояснение!
А почему функция потерь не определяется в соответствии формулы, а просто берётся среднее через reduce_mean?
константные множители при оптимизации не имеют смысла, их можно отбросить по идее
@@selfedu_rus понятно, спасибо за ответ
не могу понять, почему мы в видео vgg16, после загрузки изображения преобразовывали его в массив с помощью np.array, потом только загружали в preprocess для преобразования в bgr и добавляли ось, а тут мы сразу без преобразования в массив добавляем ось и запихиваем в preprocess. Помогите пожалуйста понять
А здесь это не принципиально, мы же не классификацию делаем, а лишь используем его обученные слои для оценки степени стилизации. Другая задача и преобразование делать смысла нет.
А можно ли по какому-то алгоритму обучить сеть стилизации без тензорных векторов? Сделать 1000+ входных картинок (оригинал + стиль) и столько же выходных (стилизованных).
Смотрю видео. До VGG16 было идеально понятно. Дальше с каждыми видео становится много загадочного. понимаю, что уровень моей математики не на столько продвинутый. ((
Ура! Я всё понял всего за 8 просмотров
Здравствуйте!Подскажите, пожалуйста, а если не использовать ноубук как Вы, а использовать Pycharm....Как загрузить изображения с компьютера, аналогично Вашим действиям?
еще проще, используйте Image.open(путь к файлу):
from PIL import Image
with Image.open("hopper.jpg") as im:
im.rotate(45).show()
@@selfedu_rus спасибо,Сергей!
@@selfedu_rus уже сам нашел решение)
в калабе ставьте Аппаратный ускоритель GPU и бедет счастье
А есть ли предобученные модели для изображений большего размера чем 224x224? Как это все применять на практике, если размер изображений из "реального мира" гораздо больше?
Надо уже искать в сети, или делать, обучать самому, но это непросто.
А почему Learning Rate такой высокий? Обычно же должен быть не более 1
Мы здесь меняем значения пикселей, для этого нужен высокий шаг изменения. Это не веса связей у НС.
@@selfedu_rus Кстати, я тестировал 1000 итераций обучения с лр=0.02. Результаты стали намного лучше выглядеть, сохраняется детализация.
@@selfedu_rus Вы не делали видео по переносу сразу нескольких стилей?
@@networkpy8352 нет, только так как в видео
Здравствуйте! Решил попробовать повторить то, что делалось в уроке. Единственным исключением было то, что делал не в гугл колаб, а в анаконде, открывал изображения при помощи opencv, командой cv2.imread. Изображение открывалось сразу в формате bgr, соответственно манипуляции с rgb->bgr->rgb можно было опустить. Дошел до конца, анаконда делает одну итерацию и все. Воевал несколько часов, в итоге скопировал Ваш код, только в начале свои изображения открывал так же при помощи imread, и приводил все к rgb командой cv2.cvtColor(img, cv2.COLOR_BGR2RGB). Все равно одна итерация и все. Код - прям копия, ctrl+c, ctrl+v. Подскажите пожалуйста, с чем это может быть связано?
Ну так сложно сказать, тем более, что в Анаконде никогда не работал, не знаю ее нюансов.
В смысле на 1 эпохе все застревало?
Почти "Ни чего не понял, но очень интересно." хочется посмотреть на хотя бы маленькое шоу как работает НС. на не только лекцию прослушать.
под видео ссылка на программу, каждый себе может устроить маленькое шоу ))
Большое спасибо за крутые видео и материалы!)
Не могу пофиксить эту ошибку никак((
ValueError: Input 0 is incompatible with layer model_2: expected shape=(None, None, None, 3), found shape=(1, 224, 224, 4)
у вас последняя размерность тензора 4, а должно быть 3
@@selfedu_rus , спасибо, буду разбираться)
@@artyomkolas6850 если разобрались подскажите пожалуйста, никак не могу преобразовать
пока нет)
у меня та же проблема была, когда картинку в png формате загрузил, а оказалось что у изображения в png размерность 4, переделал ту же картинку в jpeg, у неё уже 3 было и всё заработало.
Описать это видео можно одним словом - пиздец.
жесть
Спасибо за видео, но я никак не могу решить проблему:
ModuleNotFoundError: No module named 'google.colab'
это все в коллаборатории гугл нужно прописывать: colab.research.google.com
Сергей. здравствуйте. Спасибо за уроки!
Учусь на 3 курсе информационной безопасности и делаю научный проект по объекту стеганографии.
Если кратко, то моя задумка заключается в том. чтобы брать сообщение, которое нужно будет спрятать ("вписать") в изображение, разбить по символьно и через таблицу ascii представить в виде списка чисел от 0 до 255.
Затем с помощью ГПСЧ с заданным сидом раскидать эти числа на холсте изображения в виде пикселей, и уже отталкиваясь от этих пикселей нейросеть должна генерировать какое-либо изображение (например, изображение кота).
Скажите пожалуйста, какой тип НС для этого лучше подходит и слишком ли это сложная задача? Я пока только на 17 занятии, но дедлайны уже начинают гореть.
В конце данного курса вы делали видео про генеративно-состязательную сеть (я очень поверхностно знаю что это), подойдут ли они для этой задачи, если на вход подавать не какой-то случайный шум, а конкретные значения символов сообщения по таблице ASCII?
Подскажите, пожалуйста🙏
13102024