Эта статья впервые опубликована в паблике WeChat - интересные вещи в мире.При перепечатке указывайте источник, иначе будете нести ответственность за авторские права. Аккаунт WeChat: a1018998632, группа обмена qq: 859640274
Недавно я узнал о глубоком обучении почти за полтора месяца, поэтому я хочу проверить свои результаты обучения. Бывает, что завершением является реализация приложения для обработки изображений, поэтому ставьтеБыстрая передача стиляизНейронная сеть с прямой связьюпройти черезTensorflow for AndroidПеренесено в приложение в качестве фильтрабыстрая передача стиляЭффект довольно хороший, но скорость немного медленная. Это может быть связано с тем, что глубокое обучение на стороне Android еще не поддерживает GPU.
1. О MyPhotoShop
Это приложение для обработки изображений, которое используетOpencv, Deep Learning, MVVM, Databinding, RxJava, различные шаблоны проектирования и т. д., Я напишу серию блогов, чтобы шаг за шагом проанализировать этот проект в следующий период времени, я надеюсь, что вы сможете уделить ему больше внимания.
1. Эффекты
2. Связанный с проектом
- 1.адрес гитхаба:Адрес проекта приложения для обработки изображений MyPhotoShop.
- 2.apk скачать:Адрес загрузки MyPhotoShop, apk довольно большой, но большинство из них представляют собой файлы модели нейронной сети, поэтому его нельзя уменьшить.
3. Недостатки
- 1. Без компонентности
- 2. Никакой путаницы
- 3. Некоторые места недостаточно абстрактны
2. Основные понятия глубокого обучения и нейронных сетей
1. Что такое глубокое обучение
- 1. AI -- "Машинное обучение --" Глубокое обучение, первые три концепции являются прогрессивными, если говорить простыми словами.глубокое обучениеэто тип машинного обучения,глубокое обучениеЭто использование машин для изучения большого количества данных, а машинное обучение — это способ достижения ИИ.
- 2. В глубоком обучении есть две важные вещи: данные и нейронные сети. В глубоком обучении есть два важных процесса: обучение и тестирование.
- 1. Данные и сеть:
- 1. Данные: мы представляем себе простой сценарий классификации изображений, у нас есть 10 000 изображений, которые были классифицированы вручную, и каждое изображение имеет правильную классификацию, например, кошки, собаки и т. д.
- 2. Сеть: здесьНейронные сетиМы можем представить это как функцию, наш ввод — это изображение, а вывод — оценка этого изображения в каждой категории. То есть массив дробей.
- 2. Обучение и тестирование:
- 1. Обучение: во время обучения мы будем вводить изображения в набор изображений дляНейронные сетиЗайдите внутрь, а затем снова и снова получайте оценку изображения в каждой категории, всякий раз, когда мы получаем массив оценок, мы можем вычислить текущийНейронные сетиизЗначение потерь (чем выше текущая точность сети, тем ниже значение потерь), с участиемстоимость потерь, наша цель - уменьшитьстоимость потерь. Студенты, которые понимают производные, знают, что мы можем получить вывод,функция потерьпозвольстоимость потерьуменьшающееся направление градиента, которое затем возвращается кНейронные сетисередина. Повторяя этот цикл снова и снова, пустьстоимость потерьопускаться до самого низкого.
- 2. Тест: когда будемНейронные сетиПосле обучения до оптимального состояния мы можем ввести изображения, которые нам нужно классифицировать, вНейронные сети, получи финалНейронные сетиРезультат классификации этого изображения.
- 3. Резюме: как глубокое обучение учится? Мы видим, что наши обучающие данные обрабатываются людьми, поэтому процесс глубокого обучения заключается в том, чтобы закрепить процесс обработки человеком в наших данных.Нейронные сети, наконец, пустьНейронные сетивместо ручной обработки.
- 4. Вышеизложенное является лишь введением в основной процесс глубокого обучения, Если вы хотите более глубокого понимания, вы можете увидетьэтот блог
- 1. Данные и сеть:
2. Что такое нейронная сеть
Как мы говорили в предыдущем разделе, процесс обработки данных человеком укрепляется благодаря нашему обучению.Нейронные сетив. Ниже я кратко представлю то, что я сказал ранееНейронные сети.
- 1. Еще в простой сцене классификации изображений:
- 1. Мы предполагаем, что размер изображения x равен 100 * 100 (мы разбиваем изображение на матрицу 1 * 10000), и всего изображение имеет 10 категорий.
- 2. Затем двухслойныйНейронные сетиЭто примерно так: y = x * w1 * w2 (w1 — матрица 10000 * a, w2 — матрица a * 10), где конечное y — оценка изображения в каждой категории, а умножение в формула - умножение матриц.
- 3. Конечно слоев большеНейронные сетиТо есть ws больше, а a в наших w1 и w2 мы можем определить сами.
- 2. Объясните y = x * w1 * w2:
- 1. Исследования показывают, что когда мы смотрим на изображение x, мы сначала смотрим на контур изображения Здесь нейрон в нашем мозгу, который видит контур изображения, эквивалентен w1
- 2. После прочтения плана у нас будет базовое представление о том, что изображено на этой картинке, и судить, к какой категории относится эта картинка.Категория здесь является результатом x * w1
- Результат в 3.2 будет введен в следующий слой нейронов в мозгу, где нейрон эквивалентен w2, после w2 мы выведем результат здесь y.
- 4. Конечно, количество слоев нейронов у человека намного больше, чем указано выше.
- 3. Процесс обучения y = x * w1 * w2 эквивалентен сравнению с людьми: у нас есть куча картинок для ничего не понимающего ребенка, в начале он должен выводить неверные результаты, а мы только нужно каждый раз Если он будет исправлять свои ошибки каждый раз, то нейроны (w) в его голове будут продолжать модифицироваться и точность распознавания будет продолжать улучшаться.
3. Тензорный поток в Android
В этом разделе будет рассказано, как использовать обученные в Android.Нейронные сети
1. Старт
В этой статье я буду использовать демонстрацию только в качестве примера для объяснения вышеупомянутогоMyPhotoShopПроект будет разобран в отдельной теме.
- 1.демо адрес:гитхаб-адрес
- 2. Представьте Tensorflow:compile 'org.tensorflow:tensorflow-android:+'
2. Концепции в Tensorflow
- 1. График: мы объяснилиНейронные сетиКак это выглядит в TensorflowНейронные сетиКаждый нейрон w из , принадлежит узлу в графе,Нейронные сетиВсе узлы составляют ориентированный ациклический граф, который является частью графа Tensorflow. Конечно, помимо графа TensorflowНейронные сетиПомимо узла есть и другие вспомогательные операции: такие как декодирование картинки, кодирование картинки, предварительная обработка картинки и так далее. Давайте возьмем пример изображения: Изображение a -- "Декодировать изображение для создания b -- "Обработать b для создания матрицы данных изображения c(1 * 10000) --" Умножение матрицы c и w1(10000 * x) для создания d(1 * x) -- "матрицы d и w2(x * 10) перемножаются для получения e(1 * 10) -- "Выберите категорию с наибольшим значением e,Нейронные сетиПринято считать, что изображение а является изображением этой классификации.
- 2. Узел: каждый узел является частью графа.Каждый узел имеет: входные параметры, выходные параметры, определенные рабочие функции (например, умножение матриц) и, возможно, значения нейронов w.
- 3. TensorFlowInferenceInterface: обучающий контекст в Tensorflow с разными именами на разных языках. Внутренне содержит все экземпляры, необходимые для обучения.
3. объяснение демонстрационного кода
В этой демонстрации мы используем только Tensorflow в Android.Нейронные сетиИспользование модели не связано с процессом обучения. Причин две: 1. Мобильный терминал не подходит для обученияНейронные сети2. Tensorflow для Android не имеет обучающего API.
- 1. Я использую это времяНейронные сетиуже обученСеть быстрой передачи стилей
- 2. Для модели наши входные данные: преобразованный из изображения тензор типа float, размер (1 * 800 * 600 * 3), и имя входного узлаpadsss:0, где имена определяются во время обучения.
- 3. Для этой модели наш вывод: тензор с плавающей запятой размера (1 * 780 * 680 * 3). Имя выходного узлаsqueezesss:0, имена также определяются во время обучения.
- 4. Давайте посмотрим на код.Сначала используйте RxPermission для получения разрешения.После успешного получения запишите изображения для обработки в активах на SD-карту для последующего использования и введите метод make().
- 5. Прочитайте картинки в 4 на память
- 6. Взяв в качестве примера ARGB, мы знаем, что каждый пиксель в растровом изображении хранится в шестнадцатеричном формате int, аналогичном этой форме.FFFFFFFF, то каждые два бита — это значение канала, а верхний предел — 256. Итак, следующим шагом является преобразование значений пикселей в Bitmap в массив типа float, а размер массива равен (800 * 600 * 3).
- 7. Создал объект TensorFlowInferenceInterface, входными параметрами являются AssetManager и файл модели, здесь это означает, чтоНейронные сетивстроенная память
- 8. Выведите имя каждого узла
- 9. КНейронные сетиИмя входного узла, данные входного узла и размерность тензора данных передаются в
- 10. БегиНейронные сети, входным параметром является имя выходного узла
- 11.Нейронные сетиВремя выполнения заблокировано, поэтому после запуска вы можете получить данные, здесь данные хранятся в массиве с плавающей запятой (780 * 580 * 3).
- 12. Повторно интегрируйте массив с плавающей запятой в значение пикселя растрового изображения, а затем запишите его в растровое изображение.
4. Обратите внимание
- 1. Скорость будет медленнее, когда демо-версия запущена, пожалуйста, терпеливо подождите
- 2. Устройства, которыми я пользуюсь: Xiaomi mix2, Android8.0. На других устройствах могут возникнуть проблемы либо из-за очень низкой скорости, либо из-за того, что версия процессора или системы не поддерживает это.
4. Резюме
Запустите обученный в AndroidНейронные сетиЭто по-прежнему относительно просто, если вы знаете ввод и вывод, это так же просто, как запустить обычную функцию. Что касается того, как тренироватьНейронные сети, это другая история, вы можете следовать за мнойЯ изучаю машинное обучениеАнтология! Он будет продолжать обновлять мой опыт и опыт обучения машинному обучению.
Не продавайте тревогу, не занимайте вечеринку хедлайнерами. Поделитесь некоторыми интересными вещами в этом мире. Темы включают, но не ограничиваются: научная фантастика, наука, технологии, интернет, программисты, компьютерное программирование. Ниже приведена моя общедоступная учетная запись WeChat:интересные вещи в мире, много галантерейных товаров ждут вас, чтобы прийти и посмотреть.