1. Начало работы с мобильным TensorFlow
В этой главе рассказывается, как настраивать и развивать среду.,киспользовать TensorFlow Построить все iOS или Android приложения, которые обсуждаются в оставшейся части этой книги. Мы не будем подробно обсуждать все поддерживаемые TensorFlow Версия, ОС Версия, Xcode и Android Studio Версия,потому чтодля Можетксуществовать Веб-сайт Тенсор Флоуилипроходить Google。 Напротив,Мы Волясуществовать эту главу кратко обсудим Пример рабочей среды,к便нас能够быстрыйучитьсяМожетиспользоватьокружающая среда Строить Местоиметьвыдающийсяприложение.
Если вы уже установили TensorFlow,Xcode и Android Студия и может запустить тест Пример TensorFlow iOS и Android приложение,И если вы уже установили NVIDIA GPU Для более быстрого обучения модели глубокого обучения вы можете пропустить эту главу. или вы можете сразу перейти к той части понятия «приехать», с которой вы не знакомы.
нас Волясуществоватькнигаглава涵盖к Вниз主вопрос(какнастраивать Raspberry Pi развиватьсреда Волясуществовать Нет. 12 глава,“существовать Raspberry Pi Развивайтесь дальше TensorFlow Приложение"):
TensorFlow Это ведущая платформа с открытым исходным кодом для машинного интеллекта. когда Google существовать 2015 Год 11 Лунный генерал TensorFlow Когда проект был выпущен как проект с открытым исходным кодом, уже существовало несколько других подобных фреймворков с открытым исходным кодом для глубокого обучения: Caffe, Torch. и Theano。 существовать 5 луна 10 ежедневно Google I/O 2018 на GitHub на TensorFlow Достиг 99000 звезда,существовать 4 Добавлено в индивидуальнолуна 14k звезда, в то время как Caffe только увеличился 2k к 24k звезда. Два года спустя он стал самым популярным инструментом для обучения и внедрения глубокого обучения (он также очень хорошо поддерживает традиционное машинное обучение). перехватывать 2018 Год 1 луна,TensorFlow существовать GitHub начальстводержатьиметьПочти 85 000 звезд,И остальные трииндивидуальныйведущийизоткрытьисточникглубокое обучениерамка Caffe,CNTK и Mxnet принадлежит отдельно 22k,13k и 12k зернозвезда.
Если вы правда, машинное обучение,глубокое обучение,Машинный интеллект и искусственный интеллект (ИИ) из модных словечек вызывают некоторую путаницу,этот внутрииметьиндивидуальный Краткое изложение: Машинный интеллект и AI Это действительно то же самое. машинное обучение это AI Один из районов и самый популярный район; Глубокое обучение — это особый тип машинного обучения, который также решает такие проблемы, как компьютерное зрение, распознавание речиисинтеза а также обработка естественного языка и другие сложные проблемы современного и наиболее эффективного метода. Поэтому существуют в этой книге, когда мы говорим AI мы в основном имеем в виду глубокое обучение, которое AI Длинная зима приносит лето из спасения звезды. связанный AI Зимнее иглубокое обучениеиз Подробнее,ты Можетк查смотретьэтотвнутрииэтотвнутри。
Мы предполагаем, что вы уже знакомы с TensorFlow иметь Понятно基книгаизучиться,Но да, если у тебя нет,пожалуйста, проверьтеначинаяиУчебное пособиечастьили Awesome TensorFlow Учебное пособие。 Две хорошие книги по этой теме — Python. Машинное обучение: Python , scikit-learn и TensorFlow Машинное обучение и глубокое обучение》и《использовать Scikit-Learn и TensorFlow Практическое машинное обучение».
TensorFlow Можетк Установитьсуществовать MacOS,Ubuntu или Windows начальство. нас Воляпредставлятьсуществовать MacOS X El Capitan(10.11.6),macOS Sierra(10.12.6)и Ubuntu 16.04 Установить из исходного кода на TensorFlow 1.4 шаги. Если вы используете другую систему управления или версию, вы можете обратиться к Документация по установке TensorFlowкполучать Дополнительная информация。 когда Обновления могут появиться, пока вы читаете эту книгуиз TensorFlow Версия. хотя у вас все равно должна быть возможность использовать более новую версию исходного кода, но это не гарантируется, поэтому мы существуем. Mac и Ubuntu Использовать на TensorFlow 1.4 начальствоhaicha фильм «приходи и приходи» Настройка Тензор Флоу; Таким образом, вы можете легко протестировать запуск и поиграть с приложениями из книги.
Поскольку мы 2017 Год 12 Поскольку луна написала предыдущий абзац, TensorFlow Вышло четыре новых официальных версии (1.5, 1.6, 1.7). и 1.8),а такжеперехватывать 2018 Год 5 лунаизновый Версия Xcode(9.3),ты Можетксуществоватьк Вниз Расположениескачать, илисуществовать TensorFlow источниккодсклад Библиотека。 TensorFlow Более новая версия (например. 1.8) Поддерживается по умолчанию NVIDIA CUDA и cuDNN из Newer Version (связанный. Дополнительную информацию см. в разделе «существовать». Ubuntu настройки включенына основе GPU из TensorFlow»), и лучше всего следить за официальной версией TensorFlow Документация для установки GPU Поддержите последние TensorFlow Версия. существуют этот глава и следующий глава, мы Воля с конкретным из TensorFlow версия в качестве примера, но будет применяться ко всем iOS,Android и Python код для проверки и существования нужна часовая стрелка, верно, какая из последних TensorFlow,Xcode и Android Studio версия обновлена. книга书изисточниккодсклад Библиотека Кусочек Вэтотвнутри。
В целом мы Волясуществовать Mac Использовать на TensorFlow развивать iOS и Android TensorFlow приложение,исуществовать Ubuntu Использовать на TensorFlow тренироватьсяприложениеиспользуется визглубокое обучение Модель.
Обычно вы должны использовать VirtualEnv,Docker или Anaconda Установитьсуществоватьодинизсредасередина Установить TensorFlow。 Но поскольку нам приходится использовать TensorFlow Сборка исходного кода iOS и Android TensorFlow приложение, так что можно и от Сборка исходного кода TensorFlow сам по себе, существуетэтот случай,используйте эту единицу PIP Варианты установки могут быть проще других. Если вы хотите попробовать что-то другое TensorFlow версию,мы рекомендуем вам использовать VirtualEnv,Docker и Anaconda вариант один установить другой TensorFlow Версия. существоватьэтотвнутри,Мы Воляиспользоватькнига地 PIP и Python 2.7.10 прямойсуществовать MacOS Установить в систему TensorFlow 1.4。
Выполните следующие действиясуществовать MacOS Загрузите и установите TensorFlow 1.4:
zip
илиtar.gz
)tensorflow-1.4.0
папкатащитьприезжатьтыиз Домашний каталогcd tensorflow-1.4.0
xcode-select --install
к Установить Инструменты командной строкиsudo pip install six numpy wheel
brew install automake
brew install libtool
./configure
brew upgrade bazel
.whl
документрасширениеиз PIP Файл пакета:bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.4.0-cp27-cp27m-macosx_10_12_intel.whl
если быть честным,Если во время этого процесса вы столкнулись с какими-либо ошибками,Тогда поиск сообщения об ошибке должен быть лучшим способом исправить ошибку.,Поскольку мы намерены существовать, эта книга фокусируется на нашем долгосрочном накоплении навыков и знаний.,отчасыизстроитьи Практично для отладкииздвигаться TensorFlow Полученные из приложения, их нелегко найти где-либо еще. бегатьsudo pip install
Когда командуешь,ты Может能встречасмотретьприезжатьизодининдивидуальныйконкретная ошибкадаOperation not permitted
ошибка。 Чтобы решить эту проблему, вы можете перезапустить Mac и НажмитеCmd + R
ключ Приходить禁использовать Mac изЗащита целостности системы(SIP) Чтобы войти в режим восстановления, перезапустите терминал инструмента. Mac Извпередбегатьcsrutil disable
。 Если вы заинтересованы в отключении SIP Если вы не удовлетворены, вы можете следовать Документация TensorFlow пробует один из более сложных методов, например. VirtualEnv。
если все пойдет хорошо,тогда вы сможете существовать в окне терминала,Python илибольшинствосуществовать IPython начальствобегать,Затембегатьimport tensorflow as tf
иtf.__version__
Воля 1.4.0 в качестве вывода.
использоватьхорошийизглубокое обучениерамка(Например TensorFlow)из好处Изодиндасуществовать Модельтренироватьсясередина无缝поддерживатьиспользоватьблок обработки изображений в форме картины(GPU) 。 существовать GPU Обучение необыкновенное основе TensorFlow из Модель Чемсуществовать CPU Гораздо быстрее тренироваться и когдавперед NVIDIA поставлять TensorFlow Лучшая и наиболее экономически эффективная поддержка GPU。 Ubuntu это использовать TensorFlow бегать NVIDIA GPU изоптимальныйдействоватьсистема. Вы можете легко купить его за несколько сотен долларов. GPU,Затем Воля Что Установитьсуществоватьприноситьиметь Ubuntu Система из дешевого настольного началства. Вы также можете существовать Windows Установить на NVIDIA графический процессор, но TensorFlow верно Windows поддержка не так хороша, как правда Ubuntu изподдерживать.
для прохождения обучения в приложении к книге и развертывания из Модели мы используем NVIDIA GTX 1070,ты Можетксуществовать Amazon или eBay Примерно 400 Купить по цене в долларах США. Тим Детмерс Dettmers)иметьодининдивидуальныйхорошийизблог,Чтосерединапредставлять Понятноиспользовать Вглубокое обучениеиз GPU。 существоватьполучатьэтот Образециз GPU и Воля Что Установитьсуществовать Ubuntu После установки системы такжесуществовать Установить включить GPU из TensorFlow Прежде чем вам нужно будет установить NVIDIA CUDA 8.0(или 9.0)и cuDNN(CUDA-DeepNeuralNetwork)6.0 (или 7.0), оба TensorFlow 1.4 поддерживать.
использовать TensorFlow настраиватьссебяиз GPU управляемый Ubuntu из另одиндобрыйметоддасуществоватьподдерживать GPU из Облачные сервисы (например. Google Cloud Platform из Cloud ML Engine)используется в TensorFlow。 Каждый вариант имеет преимущества и недостатки. Облачные сервисы обычно даны на основе времени из биллинга. Если ваша цель развернуть Модель на мобильных устройствах, то это означает, что Модель не сложная, а если вы планируете долго обучать машинному обучению, то обладание имеетссиз GPU Более экономически эффективно и сытно.
Выполните следующие действиясуществовать Ubuntu 16.04 Установить на CUDA 8.0 и cuDNN 6.0 (вы сможете скачать и установить аналогичным образом CUDA 9.0 и cuDNN 7.0):
[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-24owtE5N-1681653027406) (https://gitcode.net/apachecn/apa). checn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/0e74beec-5ac6-4755-8268-dcf83c27a700.png)]
картина 1.1:Подготовитьсуществовать Ubuntu 16.04 скачать CUDA 8.0
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-wQ8ALCmL-1681653027407)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/49296f66-83aa-48a5-973b-a4d9c8dd4348.png)]
картина 1.2: для Ubuntu 16.04 выбирать CUDA 8.0 установочный файл
.bashrc
документсередина,Чтобы две индивидуальные переменные среды вступили в силу при следующем запуске нового терминала):sudo dpkg -i /home/jeff/Downloads/cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda-8-0
export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-Wl1Sp3ho-1681653027408)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/f8e7636c-a193-4915-8c4f-8a234ffaf788.png)]
картина 1.3:существовать Linux Выше CUDA 8.0 выбирать cuDNN 6.0
~/Downloads
в каталоге,Пожалуйста, разархивируйте этот документ,Затемтывстречасмотретьприезжатьодининдивидуальныйимядляcuda
изпапка,Чтосередина Сумка含дваиндивидуальныйимядляinclude
иlib64
изребенокпапкаinclude
иlib64
документкопироватьприезжатьCUDA_HOME
изlib64
иinclude
папкасередина:sudo cp ~/Downloads/cuda/lib64/* /usr/local/cuda/lib64
sudo cp ~/Downloads/cuda/include/cudnn.h /usr/local/cuda/include
сейчассуществоватьнас Подготовитьсуществовать Ubuntu Установить включить GPU из TensorFlow 1.4(приведено здесьизвпереддваиндивидуальныйшагисуществовать MacOS начальство Настройка Тензор Флоу Действия такие же, как описано в разделе из):
zip
илиtar.gz
)sudo pip install six numpy wheel
cd ~/Downloads
chmod +x bazel-0.5.4-installer-linux-x86_64.sh
./bazel-0.5.4-installer-linux-x86_64.sh --user
.whl
документрасширениеиз pip Файл пакета:cd ~/tensorflow-1.4.0
./configure
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.4.0-cp27-cp27mu-linux_x86_64.whl
Сейчас существуют, если все пойдет хорошо, можно приступать IPython и введите следующий скрипт для просмотра TensorFlow использоватьиз GPU информация:
In [1]: import tensorflow as tf
In [2]: tf.__version__
Out[2]: '1.4.0'
In [3]: sess=tf.Session()
2017-12-28 23:45:37.599904: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:892] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2017-12-28 23:45:37.600173: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties:
name: GeForce GTX 1070 major: 6 minor: 1 memoryClockRate(GHz): 1.7845
pciBusID: 0000:01:00.0
totalMemory: 7.92GiB freeMemory: 7.60GiB
2017-12-28 23:45:37.600186: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1)
поздравляю! Сейчас существуют, вы можете тренироваться Приложениеиспользуется в этой книге визглубокое обучение Модель. существоватьнасоткрыть始玩насизновый玩Инструментииспользоватьэто Приходитьтренироватьсянасиз Прохладный Модель Затемсуществуют на мобильных устройствахразвертыватьибегатьиз нихвперед,наспервый Приходитьсмотретьсмотреть Подготовить好развиватьдвигатьсяприложениечто нужно сделать。
Xcode использовать Вразвивать iOS приложение, которое вам нужно Mac Компьютер и бесплатно из Apple ID Скачать и Установить его. Если ты Mac Взаимноверностаршеииспользовать OS X El Капитан (версия 10.11.6),но Можеткотэтотвнутрискачать Xcode 8.2.1。 или, если вы установите macOS Sierra(10.12.6 версия) или выше Версия, скачать ее можно по ссылке отвпередиз Xcode 9.2 или 9.3(перехватывать 2018 Год 5 лунаиз最новый Версия)。 Все в этой книге iOS приложение Всесуществовать Xcode 8.2.1、9.2 и 9.3 Протестировано в .
Чтобы установить Xcode, просто дважды щелкните, чтобы загрузить документ, и следуйте инструкциям на экране, чтобы действовать. Это очень просто. сейчассуществовать,ты Можетксуществовать Xcode Поставляется с iOS Эмулятор или самостоятельно из iOS оборудованиеначальствобегатьприложение. от Xcode 7 Для начала вы можете существовать iOS Бесплатная программа отладки на устройстве iOS приложение,Но если вы хотите распространять или публиковать свое изприложение,Тогда вам нужно К в год 99 долларов США из стоимости участия Apple разработать кадровый план。
хотяты Можеткиспользовать Xcode Тесты симулятора проводятся из многих приложений, но для книги из какого-то приложения необходимо использовать реальные возможности. iOS Устройство на камере делает снимки, прежде чем вы сможете пройти мимо TensorFlow Обучение глубокому обучению Модельно его обработка. Кроме того, обычно лучше протестировать Модельиз на реальном устройстве для точной производительности и использования памяти: сущесес Твовать хорошее в эмуляторе из Модель может привести к сбою или существование в реальном устройстве работает слишком медленно. Поэтому настоятельно рекомендуется или попросить вас (если не всегда да) меньше существовать в реальности. iOS Протестировано на устройстве и запущено в этой книге из iOS Применить один раз.
В этой книге предполагается, что вы знакомы с iOS программирование, но если вы новичок в iOS Улучшив, вы сможете реализовать множество отличных линий. Учебное Учитесь в пособии, например Ray Wenderlich из iOS Учебное пособие。 Мы не будем вводить сложное из iOS программирование; Мы, Воля, главная К, ты покажи, как мы существуем из iOS приложениеиспользуется в TensorFlow C++ API Приходитьбегать TensorFlow Поезд имеет возможность выполнять различные интеллектуальные задачи. Apple из Два вида чиновников iOS язык программирования Objective-C и Swift код Воля для и нас с мобильного AI приложениесерединаиз C++ код для взаимодействия.
Android Studio даразвивать Android приложениеиз лучший инструмент и TensorFlow верно Чтоиспользоватьпоставлятьмощныйизподдерживать. и Xcode По-другому, ты можешь существовать Mac,Windows или Linux Установить наибегать Android Studio。 связанный Подробные системные требования см. Веб-сайт Android-студии。 существоватьэтотвнутри,нас Воляпредставлятькаксуществовать Mac настройки включены Android Studio 3.0 или 3.0.1-Все в этой книгеприложение Всесуществоватьдваиндивидуальный Версияначальство Протестировано。
первый,отвпередлапшаиз Связьскачать Android Studio 3.0.1, если последняя версия 3.0.1 Если вы не против решить возможные незначительные проблемы, скачайте последнюю версию. тытакже Можеткотэтотвнутриизжить档серединаскачать 3.0.1 или 3.0。
Затем,двойной щелчокскачатьиздокументи ВоляAndroid Studio.app
картина标тащить放приезжатьApplications
。 Если вы ранее установили Android Studio, система предложит вам использовать более новую версию. Android Studio Замените его. Все, что вам нужно, это выборзаменить.
Далее открываем Android Студия, которая вам нужна Android SDK из пути, если вы установите с помощью вперед Версияиз Android Studio,тогда по умолчанию это Кусочек В~/Library/Android/sdk
середина,Или вы можете открыть текущий проект Android Studio.,Затемизменятьприезжать“существовать MacOS начальство Настройка Тензор Раздел Флоу создан из TensorFlow 1.4 источник Оглавление,Затем打открытьtensorflow/examples/android
папка。 После этого вы можете применитьщелкнуть Установить сообщение инструмента по ссылке или включить приехать. Android Studio изTools | Android | SDK Manager
Приходитьскачать Android SDK,нравитьсяк Вниз Экранперехватыватьартинапоказано. от SDK Во вкладке «Инструменты» вы можете выбрать конкретную версиюиз. Android SDK 工Инструмент旁边изкоробка,Затемщелкнуть确定кнопкак Установить Должен Версия:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-0zQGe2Xr-1681653027408)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/3b90efdb-6655-4e35-b74a-a44e69e17487.png)]
картина 1.4:Android SDK Менеджер по установке SDK Инструменты NDK
Наконец, из-за TensorFlow Android приложениеиспользовать C++ серединаиз родного TensorFlow Библиотека загружена. TensorFlow Модель, так что вам нужно установить Android Родной развивающий комплект(NDK),Вы можете выполнить любое из следующих действий.,от Предыдущий индивидуальный снимок экрана, полученный в Android SDK Manager,илиили напрямуюотэтотвнутрискачать NDK。 NDK Версия r16b и r15c Все они проверены и могут быть использованы в этой книге. Android приложение. Если вы загружаете напрямую NDK,носуществовать打открытьпроективыбирать Android Studio изFile | Project Structure
назад,Вам также могут понадобиться настройки Android NDK,нравитьсяк Вниз Экранперехватыватьартина Показано:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-qqIIkRPs-1681653027408)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/1f6a2d74-0be0-4f36-9796-2cf66eb1694f.png)]
картина 1.5:настраиватьпроектсорт Неиз Android NDK Расположение
Установитьинастраивать Понятно Android SDK и NDK После этого вы можете протестировать Запуске образец приложения TensorFlow для Андроид.
существоватьнасоткрыть始бегать Пример TensorFlow iOS и Android Прежде чем подавать заявку, давайте кое-что уточним. TensorFlow когдавпередиметьдвадобрыйсуществоватьдвигатьсяоборудование Развивайтесь дальшеи Развертывание приложения глубокого обученияиз метода: TensorFlow Mobile и TensorFlow Lite。 TensorFlow Mobile от да с самого начала TensorFlow из части, и TensorFlow Lite для улучшения развертывания TensorFlow Это более новый метод, поскольку он имеет лучшую производительность и меньший размер. Но даиметь отдельные ключевые факторы позволяют нам сосредоточиться на существовании в этой книге. TensorFlow Мобильный, хотя еще представлен в разделе существования одининдивидуальныйглава TensorFlow Lite:от TensorFlow 1.8 и 2018 Год 5 лунаиз Google I/O Запуск, Тензор Флоу Lite Все еще существуетразвивать штатный предварительный просмотр. В настоящее время существуют, готовы к запуску в производство на мобильных устройствах TensorFlow Чтобы подать заявку,вы должны следовать Google изпредположениеиспользовать TensorFlow Mobile。
Мы решили сейчас сосредоточиться на TensorFlow Mobile по другой причине, да, хотя TensorFlow Lite Поддерживается только оператор «верно Модель подает», но TensorFlow Mobile Поддерживает настройку для добавления по умолчанию TensorFlow Mobile Нет Поддерживатьновый Операция符,Вы обнаружите, что это случается довольно часто во всех видах приложения Модель среди нас.
Да Воля Приходить,когда TensorFlow Lite Не существуетразвиваться в штатном превью, скорее всего будет заменен TensorFlow Однако мобильность редко преодолевает свои ограничения. для для Готовьтесь, мы Волясуществовать подробно представим это в следующей главе. TensorFlow Lite。
существуют последние две части этого раздела, нашего тестового проекта «Воля». TensorFlow 1.4 Поставляется с Три примера iOS приложениеи Четыреиндивидуальный Пример Android приложение, чтобы убедиться, что вы правильно перешли на настройку TensorFlow улучшить среду и быстро просмотреть часть ее содержимого TensorFlow Мобильные приложения могут это сделать.
Три примера TensorFlow iOS приложениеизисточниккод Кусочек Вtensorflow/examples/ios: simple
,camera
иbenchmark
。 для Чтобы успешно реализовать некоторые образцы, вам необходимо сначала скачать индивидуальную версию Google Обучение из модели глубокого обучения, называемой для Inception,использовать Вкартинакартина识Не。 Inception иметьмногоиндивидуальный Версия:v1 приезжать v4,существовать Каждыйиндивидуальный较новыйиз Версиясерединаточный率更высокий。 существоватьэтотвнутри,Мы Воляиспользовать Inception v1 делатьдлядля Чторазвиватьиз Пример。 скачать Модельдокументназад,Воляи Модель Взаимно关издокументкопироватьприезжать Каждыйиндивидуальный Образецкнигаизdata
папкасередина:
curl -o ~/graphs/inception5h.zip https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip
unzip ~/graphs/inception5h.zip -d ~/graphs/inception5h
cd tensorflow/examples/ios
cp ~/graphs/inception5h/* simple/data/
cp ~/graphs/inception5h/* camera/data/
cp ~/graphs/inception5h/* benchmark/data/
сейчассуществовать,существовать打открытьибегатьприложение Извперед,изменятьприезжать Каждыйиндивидуальныйapp
папкаивыполнить следующую командукскачать Каждыйиндивидуальныйприложение Необходимый Pod:
cd simple
pod install
open tf_simple_example.xcworkspace
cd ../camera
pod install
open tf_camera_example.xcworkspace
cd ../benchmark
pod install
open tf_benchmark_example.xcworkspace
Тогда ты сможешь существовать iOS оборудованиеначальствобегатьэтоттрииндивидуальныйприложение,или ВОЗсуществовать iOS Запустить Simple и Benchmark и приложение на эмуляторе. Если вы нажмете кнопку «Проектировать модель» после простого приложения, вы увидите текстовое сообщение о том, что «приехать приезжать» загружено. TensorFlow Inception модель, за которой следуют несколько лучших результатов распознавания и значений достоверности.
Если приложение бенчмарка существует, нажмите Benchmark Model кнопка вы Воля просмотреть приезжатьпроектировать Модель закончилась 20 раз от среднего времени. Например,существоватьяиз iPhone 6 В среднем это занимает около 0.2089 Второй,существовать iPhone 6 В среднем требования к симулятору составляют 0.0359 Второй.
наконец,существовать iOS оборудованиеначальствобегать照Взаимно机приложениеи Воля Чтоверно准Взаимно机Можетк Кты实часпоказывать Долженприложениесмотретьприезжатьи识Неизвернослон。
tensorflow/examples/android
серединаиметь Четыреиндивидуальный Образецкнига TensorFlow Android приложения соответственно TF Классификация, ТФ Обнаружение, ТФ Голос и TF стилизованный. бегатьэтотнекоторый Примериз Самый простой способэто использовать Android Studio существоватьвпередлапшаизпапкасередина打открытьпроект,Как показано в разделе «Настройка Android Studio».,Затемпроходитьредактироватьпроектизbuild.gradle
документ Порядок прогрессаиндивидуальный Изменять,и Воляdef nativeBuildSystem = 'bazel'
Изменятьдляdef nativeBuildSystem = 'none'
。
сейчассуществовать,Воля Android Подключите устройство к компьютеру, а затем подключите его к компьютеру. Android Studio изRun | Run 'android'
строить,Установитьибегать Долженприложение.этотвстречасуществоватьтыизоборудование Установить на Четыреиндивидуальныйимясказатьдля“TF Классификация», «ТФ Обнаружение», «ТФ Голос"и"ТФ стилизованный"из Android приложение. “TF Классификация» похожа на iOS Взаимно机приложениеодин Образец,использовать TensorFlow Inception v1 Камера модельного устройства точно выполняет классификацию изображений в режиме реального времени. “TF Обнаружение”использовать另одиндобрый Модель,сказатьдляОднокадровый многокадровый детектор(SSD)и Мобил Нет, это Google Выпущен новый набор инструментов глубокого обучения, специально предназначенных для мобильных и встраиваемых устройств. Выполнить Обнаружение объектов, пожалуйста, найдите значок прибытияизверно, чтобы нарисовать прямоугольник. “TF Речь» использовать еще один вариант глубокого обучения (распознавание речи)Модель Приходить收слушатьи识Неодин Маленькийчастьодин词,НапримерYes
,No
,Left
,Right
,Stop
иStart
。 “TF «Стилизовать» используйте другую модель, чтобы изменить внешний вид камеры, подобный стилю проживания в карте. связанныйэтотнекоторыйприложениеиз更многоподробныйинформация,ты Можетксуществоватьэтаиндивидуальная страницасередина查смотреть TensorFlow Android Образец документа.
существования В этой главе мы объясняем, как существовать Mac и Ubuntu Установить на TensorFlow 1.4,каксуществовать Ubuntu настройки включены Инструментиметь成книгаэффект益из NVIDIA GPU Для более быстрого обучения из Модели также Как переехать AI приложениеразвивать Настройте Xcode и Android Studio。 Мы также покажем вам, как сделать что-то крутое TensorFlow Пример iOS и Android приложение. существоватьиз В оставшейся части книги мы с Волей подробно обсудим, как существоватьна основе GPU из Ubuntu Создавайте и обучайте систему виз Каждыйиндивидуальный Модельа также другие Модель и К. Вы показываете, как существует развертывание Модели в следующей среде. iOS и Android приложение и написанный код для существования мобильного устройства AI приложениеиспользуется в Модель. Теперь мы готовы и нам не терпится отправиться в путь. Это увлекательное путешествие, и мы рады поделиться им с нашими друзьями. Так,что не начинается с наших лучших друзей,Давайте разберемся, что нужно для построения приложения по определению породы собаки?
начальствоодинглавасередина描описыватьиз Пример TensorFlow iOS Приложение, Простое и Camera а также Android Применить «ТФ Категория» всеиспользуются Inception v1 модель, которая Google Публикация предоставляет предварительно обученную изкартину, подобную модели глубокой нейронной сети классификации. Должен Модель Иголкаверно ImageNet прошел обучение в ImageNet Одна из самых больших и известных статуй изображений в Библиотеке данных, среди которых более 10 миллионов статуй индивидуальных изображений, помеченных, наверное, категорией слонов. Inception Модель Можетиспользовать ВВолякартинакак классификациядляУкажите одну из 1000 индивидуальных категорий。 этот 1000 Категория «Индивидуальный верный слон» включает в себя множество верных слонов из многих пород собак. Однако точность определения пород собак не очень высока, примерно для 70%,Потому что для Модель обучена распознавать большое количество верных слонов.,А не конкретное изображение, например, порода собаки или что-то в этом роде.
еслинас想提высокийточный率исуществоватьиспользоватьулучшать Модельиз Смартфонначальствостроитьдвигатьсяприложениечто делать,Ну, когда мы гуляем и смотрим на приезжающих, у нас есть забавная собака,Мы можем использовать приложение, чтобы рассказать нам, что это за собака.
существоватькнигаглавасередина,Мы, Воля, сначала обсудим, что такое верно эта и зкартина, например, задачи классификации.,мигрироватьизучатьилипереподготовка После пред-обучениеглубокое обучение Модельда Завершить задачуизсамый экономичныйиметьэффектизметод。 Затем мы, Воля К, покажем вам, как использовать хороший набор данных из собак, действительно одни из лучших изображений, например, классифицированную модель для переобучения, а такжесуществовать Нет. 1 Глава «Мобильный TensorFlow начиная". Кроме того,мы предоставим пошаговые инструкции по конвертации TensorFlow добавить вприезжатьна основе Objective-C или Swift из iOS и Android В приложении.
Подводя итог, мы Волясуществовать в этой главе представлены следующие темы:
Мы, люди, не просто начинаем изучать новые вещи. Вместо этого мы в полной мере используем то, чему научились, сознательно или нет. Искусственный интеллект — это техника, которая учится делать одно и то же, пытаясь сделать одно и то же — техника, которая обычно требует обучения только на небольшом участке большой модели среды. , который затем повторно используется в связанных задачах из новой Модели без необходимости доступа к большим данным обучения и вычислительным ресурсам, необходимым для обучения исходной Модели. В целом, трансферное обучение все еще AI серединаизодининдивидуальный Открытая проблема, потому что длясуществовать Во многих случаях человеку нужно всего лишь несколько раз попробовать несколько индивидуальных примеров, прежде чем он научится освоить что-то новое, и на обучение и обучение уйдет много времени. AI。 Да,существующаякартина поле распознавания изображений,Мигрировать обучение оказалось очень эффективным.
использовать Вкартинакартина识Неизсовременныйглубокое обучение Модельв целостностьглубокая нейронная сеть,или более конкретно,да Инструментиметь许многослойизглубинасверточная нейронная сеть(CNN)。 этотдобрый CNN Нижние уровни отвечают за изучение и идентификацию функций более низкого уровня, таких как края, контуры и детали, а последний уровень определяет категории изображения. Для разных типов изображений, таких как породы собак и виды цветов, нам не нужно заново запоминать параметры и веса нижних слоев сети. Фактически, требуется несколько недель обучения, чтобы научиться распознавать современные изображения, такие как картина. CNN иметь вес, обычно миллионы или даже больше. существующаякартина подобна классификации случаев, мигрировать обучение позволяет нам использовать конкретную изкартину, например набор переподготовок, таких CNN изнаконецодинслой,Обычно не приезжать один час,А все остальные слои остаются неизменными,И достигает почти такой же точности, как приезжать,Точно так же, как мы начали обучать всю сеть в течение нескольких недель.
Основные преимущества обучения мигрировать из второго человека, нам нужно лишь небольшое количество переподготовки данных обучения. CNN из Последний слой. Если вам необходимо начать глубокую тренировку CNN из Миллионы индивидуальных параметров требуют большого количества обученных. Например, для нашей переподготовки по породе собак нам нужно только по каждой породе собак. 100 рамка накартинакартина,Вы можете создать более индивидуальное изображение, чем исходное, например, Классификационная Модель из модели классификации пород собак.
Если вы не знакомы с CNN, посмотрите одну из лучших новостей из видео и обзоров, этада Stanford CS231n курс«CNN для визуального распознавания»。 CNN это еще один человек, хорошо известный в источнике активов Michael Nielsen изсуществовать онлайн-книгу "Нейронные сети и глубокое обучение" изth 6 глава。
существовать Следующийиздваиндивидуальныйчастьсередина,Мы Воляиспользовать Иголкаверно TensorFlow индивидуальныйлучший из предварительно прошедших обучение CNN Модели отдельных пород собак. Сбор данных для переподготовки модели и создания более точной модели идентификации породы собаки. Первая модель Inception v3, это лучше, чем Inception v1 Более точная модель, оптимизированная для верной точности, но большего размера. Другая модель MobileNet, оптимизированный с учетом размера и эффективности мобильных устройств. TensorFlow Поддерживатьпредварительнотренироваться Модельиз Подробный список Кусочек Вэтотвнутри。
существоватьначальствоодинглавасерединанастраиватьиз TensorFlow В исходном коде есть Python 脚книгаtensorflow/examples/image_retraining/retrain.py
,Можетиспользовать Впереподготовка Inception v3 или MobileNet Модель. существоватьбегать脚книгакпереподготовка Inception v3 Моделькруководитьсобака品добрый识Не Извперед,нас需хотетьпервыйскачатьСтэнфордский набор данных о собаках,120 индивидуальных пород собак изкартина в таблетках (вам просто нужна существующая ссылка, чтобы скачать таблички с картинкой),Только не отмечайте это знаком да).
существовать~/Downloads
середина Разархивироватьскачатьизсобакаimages.tar
документ,ты应Долженсуществовать~/Downloads/Images
серединасмотретьприезжатьпапкасписок,нравитьсяк Вниз Экранперехватыватьартинапоказано. Каждый индивидуальный папкаверно должен относиться к одной отдельной породе собак и содержать ок. 150 Изображение изображения (вам не нужно явно помечать изображение длякартины в представлении, поскольку имя длякартины используется для обозначения изображения папки, которое содержит изкартину):
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-BNHjmcvF-1681653027408)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/c8c4fa68-5db2-406d-9444-fbf1fdeb5418.png)]
картина 2.1: Отдельно папкаили собака из пород из набора собак картина лайк
Вы можете скачать набор данных,Затемсуществовать Mac начальствобегатьretrain.py
脚книга,потому чтодля Должен脚книгасуществовать Взаимноверно Расположениеначальствобегать Нетвстреча花费太长час间(少Водин Маленькийчас) Небольшой набор данных (всего ок. 20,000 Чжан картина нравится), но да, как упоминалось в предыдущем главе, если вы существуете GPU управляемый Ubuntu Если вы сделаете это, выполнение сценария займет всего несколько минут. Кроме того, для переобучения используются большие изображения, такие как наборы данных. Mac Путешествие по торгу может занять часы и дни, поэтому существовать GPU управляемыйкомпьютерначальствобегатьэтодаиметьзначениеиз。
假设тыуже经создавать Понятно/tf_file
Оглавлениеи/tf_file/dogs_bottleneck
Оглавление,Тогда команда переподготовка Моделиз выглядит следующим образом:
python tensorflow/examples/image_retraining/retrain.py
--model_dir=/tf_files/inception-v3
--output_graph=/tf_files/dog_retrained.pb
--output_labels=/tf_files/dog_retrained_labels.txt
--image_dir ~/Downloads/Images
--bottleneck_dir=/tf_files/dogs_bottleneck
этотпятьиндивидуальныйпараметрсуществоватьэтотвнутри需хотетьодиннекоторый解释:
--model_dir
обозначение应Должен Зависит отretrain.py
сдвигатьсяскачать Inception v3 Путь к каталогу модели, если он еще не находится в существующем каталоге.--output_graph
выражать再тренироваться Модельизимясказатьипуть。--output_labels
да Зависит откартинакартинаданныенаборизпапка(Этикетка)имясказать组成издокумент,Позже Воля переподготовил его и использовал для правильного использования нового изображения изображения, подлежащего засекречиванию.--image_dir
даиспользовать Впереподготовка Inception v3 Модельизкартинакартинаданныенаборизпуть。--bottleneck_dir
использовать В缓житьсуществоватьузкое место(наконецодинслой Извпередиз那одинслой)начальствогенерироватьизрезультат; Последний слойиспользуетэтот классифицирует эти результаты. Во время существованияпереподготовки используется каждый образ ть несколько раз, но образ узкого места остается прежним, даже если Воля придет перепроектировать сценарий переподготовки и да. поэтому,В первый раз это занимает больше времени,Потому что для этого нужно создать узкое место в результате.существовать再тренироваться期间,ты Воля Каждый 10 шагсмотретьприезжать 3 значения, итог по умолчанию 4,000 шаг. вперед 20 индивидуальныйшагиназад 20 индивидуальныйшага также Окончательная точность следующая.Показано:
INFO:tensorflow:2018-01-03 10:42:53.127219: Step 0: Train accuracy = 21.0%
INFO:tensorflow:2018-01-03 10:42:53.127414: Step 0: Cross entropy = 4.767182
INFO:tensorflow:2018-01-03 10:42:55.384347: Step 0: Validation accuracy = 3.0% (N=100)
INFO:tensorflow:2018-01-03 10:43:11.591877: Step 10: Train accuracy = 34.0%
INFO:tensorflow:2018-01-03 10:43:11.592048: Step 10: Cross entropy = 4.704726
INFO:tensorflow:2018-01-03 10:43:12.915417: Step 10: Validation accuracy = 22.0% (N=100)
...
...
INFO:tensorflow:2018-01-03 10:56:16.579971: Step 3990: Train accuracy = 93.0%
INFO:tensorflow:2018-01-03 10:56:16.580140: Step 3990: Cross entropy = 0.326892
INFO:tensorflow:2018-01-03 10:56:16.692935: Step 3990: Validation accuracy = 89.0% (N=100)
INFO:tensorflow:2018-01-03 10:56:17.735986: Step 3999: Train accuracy = 93.0%
INFO:tensorflow:2018-01-03 10:56:17.736167: Step 3999: Cross entropy = 0.379192
INFO:tensorflow:2018-01-03 10:56:17.846976: Step 3999: Validation accuracy = 90.0% (N=100)
INFO:tensorflow:Final test accuracy = 91.0% (N=2109)
Точность обучения нейронной сети использовалась для обучения изкартины, например, для точности классификации, тогда как точность проверки нейронной сети не использовалась для обучения изкартины, например, для точности проверки. поэтому,Точность валидации да измерения Точность модели является более надежным показателем,и обычно должен быть немного меньше точности обучения,Даеслитренироваться收敛ируководитьпридетсяочень хороший,То есть, да,обучение Модельда否既Нет欠拟合также Нет Проходить拟合。
Если точность обучения высокая, но точность проверки по-прежнему низкая, это означает, что модель переоснащена. Если точность обучения по-прежнему низкая, это указывает на то, что модель не подходит. Аналогично, перекрестная энтропия — это значение функции потерь, которое в целом должно уменьшаться, если переобучение проходит успешно. Наконец, точность теста зависит от изображения, которое не использовалось для обучения и проверки. Обычно с этимда наиболее точно можно сказать «изопереподготовка Модельиз».
Как показано на лицевой стороне вывода,существовать по окончании переподготовки,нассмотретьприезжать Точность проверкиитренироваться精度Взаимно似(90% и 93% по сравнению с первоначальным 3% и 21%), окончательная точность теста 91% 。 Перекрестная энтропия также является отправной точкой. 4.767 Спуск приезжатьластиз 0.379。 поэтому,Мы представляем существующую индивидуальную модель, которая очень хорошо подходит для переобучения модели распознавания пород собак.
для дальнейшего повышения точности,ты Можеткиспользоватьretrain.py
издругойпараметр(Напримертренироватьсяшаг) (--how_many_training_steps
),изучать率(--learning_rate
),иданныерасширение(--flip_left_right
, --random_crop
, --random_scale
, --random_brightness
). Обычно этада — утомительный процесс, включающий много «грязной работы», этада — один из самых известных экспертов по глубокому обучению. Andrew Ng существоватьониз“приложениеглубокое обучениеиз基книга原理”演讲середина提приезжатьиз(视频Можетсуществоватьк Вниз Расположениепопытаться найтиприезжать)。
ты Можеткиспользовать另одининдивидуальный Python 脚книгаlabel_image
Приходитьвернопройтипереподготовкаиз Модельруководитьбыстрыйтест,ктестссебяизкартинакартина(Например/tmp/lab1.jpg
серединаиз Labrador Retriever картинакартина),ты Можетксуществоватьпервыйверно Чторуководитьнравиться Внизстроитьназадбегать Должен脚книга:
bazel build tensorflow/examples/image_retraining:label_image
bazel-bin/tensorflow/examples/label_image/label_image
--graph=/tf_files/dog_retrained.pb
--image=/tmp/lab1.jpg
--input_layer=Mul
--output_layer=final_result
--labels=/tf_files/dog_retrained_labels.txt
тывстречасмотретьприезжатьик Внизсодержание Взаимно似извпередпятьиндивидуальный Классификациярезультат(Да,Из-за случайных изменений в сети,может быть не совсем таким же) следующим образом:
n02099712 labrador retriever (41): 0.75551
n02099601 golden retriever (64): 0.137506
n02104029 kuvasz (76): 0.0228538
n02090379 redbone (32): 0.00943663
n02088364 beagle (20): 0.00672507
--input_layer (Mul)
и--output_layer (final_result)
изценность очень важна–должени Модельсерединаопределениеизценить Взаимно同,этот Образец Классификация才能完全起делатьиспользовать。 Если вам интересно, как их получить (откартина, она же Модель,документdog_retrained.pb
серединаполучать),ноиметьдваиндивидуальный TensorFlow Инструменты могут помочь. Нет.одининдивидуальныйдаподходящийкогда命имяизsummarize_graph
。 этот метод построить и реализовать:
bazel build tensorflow/tools/graph_transforms:summarize_graph
bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph=/tf_files/dog_retrained.pb
Ваш вид Воля приезжать похож на следующий из сводных результатов:
No inputs spotted.
No variables spotted.
Found 1 possible outputs: (name=final_result, op=Softmax)
Found 22067948 (22.07M) const parameters, 0 (0) variable parameters, and 99 control_edges
Op types used: 489 Const, 101 Identity, 99 CheckNumerics, 94 Relu, 94 BatchNormWithGlobalNormalization, 94 Conv2D, 11 Concat, 9 AvgPool, 5 MaxPool, 1 DecodeJpeg, 1 ExpandDims, 1 Cast, 1 MatMul, 1 Mul, 1 PlaceholderWithDefault, 1 Add, 1 Reshape, 1 ResizeBilinear, 1 Softmax, 1 Sub
иметьодининдивидуальный Может能извыход,имясказатьдляfinal_result
。 Неудачная изда,иметьчасsummarize_graph
工Инструментбезиметь告诉насвходитьимясказать,потому чтодляэто似乎верноиспользовать Вобучениесмысл узлаприезжатьозадаченный。 удалитьтолькоиспользовать Вобучениеузел(нас Волясуществовать稍назадобсуждать)после,summarize_graph
工Инструмент Воля Вернуть правильноизвходитьимясказать。 Еще один по имени TensorBoard Инструмент для нашей модели обеспечивает более полную моделькартины. Если напрямую из бинарного документа Установить TensorFlow, вы должны уметь просто программировать TensorBoard,Потому что по умолчанию,это Установитьсуществовать/usr/local/bin
середина。 Но да, если понравится наш форвардисточниккод Установить TensorFlow, вы можете собрать его с помощью следующей команды TensorBoard:
git clone https://github.com/tensorflow/tensorboard
cd tensorboard/
bazel build //tensorboard
сейчассуществовать,убеждатьсяты Инструментиметь/tmp/retrained_logs
,существоватьбегатьretrain.py
чассдвигатьсясоздаватьибегать:
bazel-bin/tensorboard/tensorboard --logdir /tmp/retrain_logs
Затемсуществовать浏览устройствосерединазапускать URL http://localhost:6006
。 первый,Вы, Воля, видите, приезжать точность картина,нравитьсяк Вниз Экранперехватыватьартина Показано:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-GFin3z7h-1681653027409)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/3ae39776-c298-4b42-9125-f25ca84c9ed2.png)]
картина 2.2: Inception v3 переподготовка Модельобучение ипроверка точности
существовать Внизлапшаиз Экранперехватыватьартинасерединаизперекрестная энтропиякартина,инас Извпередверно Вбегатьretrain.py
извыход Место描описыватьизодин Образец:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-hpiU85KV-1681653027409)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/cd4cea6a-8847-40bd-9ec4-3d9696972a5f.png)]
картина 2.3: Inception v3 переподготовка Модельобучения и валидации перекрестной энтропии
сейчассуществоватьщелкнутьGRAPHS
вкладка,ты ВолясмотретьприезжатьодининдивидуальныйимядляMul
издействовать,Еще один по имениfinal_result
издействовать , как показано ниже:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-K2HEMYPh-1681653027409)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/18aa75d8-28e3-497c-ba8f-145baa6cee37.png)]
картина 2.4:переподготовка МодельсерединаизMul
иfinal_result
узел
действительныйначальство,еслиты希望и TensorFlow Для небольшого взаимодействия можно попробовать несколько строк Python код, чтобы узнать выходной слой и входной слой и имя, например iPython Показано взаимодействие:
In [1]: import tensorflow as tf
In [2]: g=tf.GraphDef()
In [3]: g.ParseFromString(open("/tf_files/dog_retrained.pb", "rb").read())
In [4]: x=[n.name for n in g.node]
In [5]: x[-1:]
Out[5]: [u'final_result']
Обратите внимание, потому что что无法保证узелиззаказ,Поэтому этот абзац не всегда актуален,ноэтов целомвстречадлятыпоставлять Необходимыйинформацияилипроверять。
сейчассуществовать,Готовы обсудить дальнейшую доработку переподготовкаиз Модель.,к便Можетксуществуют на мобильных устройствахразвертыватьибегатьэто。 переподготовкаиз Модельдокументdog_retrained.pb
изразмер слишком большой,О 80 МБ, существующие для развертывания на мобильных устройствах, следует оптимизировать в два этапа:
Документация TensorFlowпоставлятьсвязанный量化及Что工делать原理из更многоподробныйинформация。
иметьдвадобрыйметод Можетк执ХОРОШОвпередлапшаиздваиндивидуальный Задача:использоватьstrip_unused
Инструментыз旧методииспользоватьtransform_graph
Инструментызновыйметод。
让нассмотретьсмотреть旧методиз工делать原理:первыйвыполнить следующую командуксоздаватьодининдивидуальный Модель,Все узлы, которые не были удалены, удаляются:
bazel build tensorflow/python/tools:strip_unused
bazel-bin/tensorflow/python/tools/strip_unused
--input_graph=/tf_files/dog_retrained.pb
--output_graph=/tf_files/stripped_dog_retrained.pb
--input_node_names=Mul
--output_node_names=final_result
--input_binary=true
Если вывод изображения существует в проекте в виде кода Python, вы можете найти правильное название места проживания по имени входного слоя:
In [1]: import tensorflow as tf
In [2]: g=tf.GraphDef()
In [3]: g.ParseFromString(open("/tf_files/ stripped_dog_retrained.pb", "rb").read())
In [4]: x=[n.name for n in g.node]
In [5]: x[0]
Out[5]: [u'Mul']
Теперь используйте следующую команду для количественной оценки модели:
python tensorflow/tools/quantization/quantize_graph.py
--input=/tf_files/stripped_dog_retrained.pb
--output_node_names=final_result
--output=/tf_files/quantized_stripped_dogs_retrained.pb
--mode=weights
после,Можетксуществовать iOS и Android приложениесерединаразвертыватьииспользовать Модельquantized_stripped_dogs_retrained.pb
,Мы волясуществовать этого главы рассмотрим возможность проживания в следующем разделе.
Зачистка неразрезанных узлов и Количественная модельиз Другой способэто использоватьсказатьдляtransform_graph
из工Инструмент。 этотда TensorFlow 1.4 Новые методы рекомендованы и могут существовать. Python label_image
脚книгасередина正常工делать,Дасуществоватьразвертыватьприезжать iOS и Android Приложение по-прежнему приводит к неправильному распознаванию результата.
bazel build tensorflow/tools/graph_transforms:transform_graph
bazel-bin/tensorflow/tools/graph_transforms/transform_graph
--in_graph=/tf_files/dog_retrained.pb
--out_graph=/tf_files/transform_dog_retrained.pb
--inputs='Mul'
--outputs='final_result'
--transforms='
strip_unused_nodes(type=float, shape="1,299,299,3")
fold_constants(ignore_errors=true)
fold_batch_norms
fold_old_batch_norms
quantize_weights'
существоватьтестиспользуется вlabel_image
脚книга Можеткправильныйбегатьquantized_stripped_dogs_retrained.pb
иtransform_dog_retrained.pb
。 Да Толькоиметь Нет.одининдивидуальный Можетксуществовать iOS и Android Приложение работает нормально.
связанныйкартинаизменять换Инструментызподробныйдокумент,Видеть Что GitHub README。
начальствоодин节Чжуншенгизслезатьи Количественная Размер модели все еще превышает 20MB。 этада для переобучения из готовых Inception v3 Модель Крупномасштабная модель глубокого обучения, имеющая более 2500 Тысячи параметров и Inception v3 Мы не стремимся быть мобильными в первую очередь.
2017 Год 6 луна, Google выпустил MobileNets v1, всего 16 добрый Иголкаверно TensorFlow Модель глубокого обучения Mobile-first. эти несколько моделейиз всего лишь нескольких размеров МБ, с 47 Десять тысяч к 424 10 000 параметров, он по-прежнему обеспечивает хорошую точность (только лучше, чем Inception v3 ниже). связанный Дополнительная информация,ВидетьЧтосописыватьдокумент。
начальствоодин节серединаобсуждатьизretrain.py
脚книгавозвращатьсяподдерживатьна основе MobileNet Модельизпереподготовка。 Просто запустите следующую команду:
python tensorflow/examples/image_retraining/retrain.py
--output_graph=/tf_files/dog_retrained_mobilenet10_224.pb
--output_labels=/tf_files/dog_retrained_labels_mobilenet.txt
--image_dir ~/Downloads/Images
--bottleneck_dir=/tf_files/dogs_bottleneck_mobilenet
--architecture mobilenet_1.0_224
генерироватьиз Этикеткадокументdog_retrained_labels_mobilenet.txt
действительныйначальствоииспользовать Inception v3 Модель при переобучении генерировала те же теги, что и документ. --architecture
параметробозначение 16 индивидуальный MobileNet Модель Изодин,И ценностьmobilenet_1.0_224
выражатьиспользовать Модельразмердля 1.0 из Модель (верно для других параметров, остальные три человека могут выбирать значения соответственно 0.75、0.50 и 0.25 – 1.0, наоборот, точный, но максимально размерный для 0.25)и 224 Сделайте длякартина размером ввода (остальные три отдельных значения предназначены для 192、160 и 128)。 если Воля_quantized
добавить вприезжать Значение схемыизконец,Прямо сейчас--architecture mobilenet_1.0_224_quantized
,Тогда Модель также квантуется,отв результате чегопереподготовкаиз Модельразмеродля 5.1MB。 Нет Количественная модельизразмеродля 17MB。
ты Можеткв соответствии ск Внизшагтест先впередиспользоватьlabel_image
генерироватьиз Модель:
bazel-bin/tensorflow/examples/label_image/label_image
--graph=/tf_files/dog_retrained_mobilenet10_224.pb
--image=/tmp/lab1.jpg
--input_layer=input
--output_layer=final_result
--labels=/tf_files/dog_retrained_labels_mobilenet.txt
--input_height=224
--input_width=224
--input_mean=128
--input_std=128
n02099712 labrador retriever (41): 0.824675
n02099601 golden retriever (64): 0.144245
n02104029 kuvasz (76): 0.0103533
n02087394 rhodesian ridgeback (105): 0.00528782
n02090379 redbone (32): 0.0035457
пожалуйста, обрати внимание,существоватьбегатьlabel_image
час,input_layer
имядляinput
。 Мы можем использовать интерактивный iPython кодили вперед Посмотрите сводную таблицу прибытия, чтобы найти это имя:
bazel-bin/tensorflow/tools/graph_transforms/summarize_graph
--in_graph=/tf_files/dog_retrained_mobilenet10_224.pb
Found 1 possible inputs: (name=input, type=float(1), shape=[1,224,224,3])
No variables spotted.
Found 1 possible outputs: (name=final_result, op=Softmax)
Found 4348281 (4.35M) const parameters, 0 (0) variable parameters, and 0 control_edges
Op types used: 92 Const, 28 Add, 27 Relu6, 15 Conv2D, 13 Mul, 13 DepthwiseConv2dNative, 10 Dequantize, 3 Identity, 1 MatMul, 1 BiasAdd, 1 Placeholder, 1 PlaceholderWithDefault, 1 AvgPool, 1 Reshape, 1 Softmax, 1 Squeeze
Итак, когда же нам следует существовать мобильное устройство? на Inception v3 или MobileNet переподготовкаиз Модель? Если вы хотите получить максимальную точность, вы должны и можете использовать основе Inception v3 изпереподготовка Модель. Если скорость является вашей главной заботой, вам следует учитывать минимальный размер параметра, например размер входных данных. MobileNet Переобучите модель в обмен на некоторую потерю точности.
benchmark_model
дадлятыпоставлять Модельточные данныеизодиндобрый工Инструмент。 Сначала создайте его следующим образом:
bazel build -c opt tensorflow/tools/benchmark:benchmark_model
Затем,Иголкавернона основе Inception v3 или MobileNet v1 изпереподготовка Модельбегатьэто:
bazel-bin/tensorflow/tools/benchmark/benchmark_model
--graph=/tf_files/quantized_stripped_dogs_retrained.pb
--input_layer="Mul"
--input_layer_shape="1,299,299,3"
--input_layer_type="float"
--output_layer="final_result"
--show_run_order=false
--show_time=false
--show_memory=false
--show_summary=true
Вы, Воля, получаете довольно длинный вывод и в конечном итоге получаете строку типа Have FLOPS из Оценочная стоимость: 11,42B, это означает, что она Воляиспользована основе Inception v3 изпереподготовка Модельо 11B FLOPS (операции с плавающей запятой) для вывода. iPhone 6 бегать О 2 B FLOPS,поэтомусуществовать iPhone 6 начальствобегать Модель Нужно 5–6 Второй. Другие современные смартфоны могут запускать 10B FLOPS。
проходить Волякартинадокументзаменятьдляна основе MobileNet Модельизпереподготовка Модельdog_retrained_mobilenet10_224.pb
и重новыйбегать基准тест工Инструмент,ты Волясмотретьприезжать FLOPS Оценка становится приблизительной. 1.14B, примерно быстро 10 раз.
нассуществовать Нет. 1 Глава «Мобильный TensorFlow часть»серединасмотретьпожалуйста, приходите iOS Простой Примериспользовать Понятно Inception v1 Модель. для составления приложенияиспользовать мы прошли переподготовкуиз Inception v3 Модельи MobileNet Модель Чтобы лучше идентифицировать собаку по породам, нам необходимо в приложение внести некоторые изменения. Во-первых, давайте посмотрим на существование iOS Простойприложениеиспользуется впройтипереподготовкаизquantized_stripped_dogs_retrained.pb
встреча发生什么:
tensorflow/examples/ios/simple
серединаизtf_simple_example.xcworkspace
документк Xcode 打открытьприложениеlabel_image
脚книгаизquantized_stripped_dogs_retrained.pb
Модельдокумент,dog_retrained_labels.txt
Этикеткадокументиlab1.jpg
картинакартинадокумент,Затем перетащите приезжатьпроектныепапки,И убедитесь, что отмечены флажки «По запросу копироватьпроект» и «Добавить цель проживания».,нравитьсяк Вниз Экранперехватыватьартина Показано:[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-sbBZuuPp-1681653027409)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/d2e25f9d-c88d-4fe5-918d-ba7e64420682.png)]
картина 2.5:Воляпереподготовкаиз Модельдокументи Этикеткадокументдобавить вприезжатьприложение
RunModelViewController.mm
документ,Должендокументиспользовать TensorFlow C++ API Входные данные процессакартинакартина,проходить Inception v1 Модельбегатьэто,и получите результаты классификации изображений,и измените строку:NSString* network_path = FilePathForResourceName(@"tensorflow_inception_graph", @"pb");
NSString* labels_path = FilePathForResourceName(@"imagenet_comp_graph_label_strings", @"txt");
NSString* image_path = FilePathForResourceName(@"grace_hopper", @"jpg");
Используйте правильное имя документа из Модель, имя документа тега и тестовое изображение, например имя, для следующих операций:
NSString* network_path = FilePathForResourceName(@"quantized_stripped_dogs_retrained", @"pb");
NSString* labels_path = FilePathForResourceName(@"dog_retrained_labels", @"txt");
NSString* image_path = FilePathForResourceName(@"lab1", @"jpg");
RunModelViewController.mm
середина,хотеть匹配насиз Inception v3(от v1)переподготовка Модель Необходимыйвходитькартинакартинаразмер,пожалуйста Воляconst int wanted_width = 224;
иconst int wanted_height = 224;
серединаиз224
ценить Изменятьдля299
,и同час Воляconst float input_mean = 117.0f;
серединаизценить ]иconst float input_std = 1.0f;
к128.0f
std::string input_layer = "input";
std::string output_layer = "output";
правильное значение для:
std::string input_layer = "Mul";
std::string output_layer = "final_result";
dog_retrained_labels.txt
документкудалить Каждый ХОРОШОсерединаизвпередгидnxxxx
нить(Например,удалитьn02099712 labrador retriever
серединаизn02099712
)– существовать Mac начальство,ты Можеткпроходить Нажмите и удерживайтеOption
ключ Затемруководитьвыбиратьиудалить–отиделать识Нерезультат更Инструмент Может读性立Прямо сейчасбегатьприложение,Затемщелкнутьбегать Моделькнопка,существует Xcode из окна консоли или поля редактирования приложения,Вы, Воля, увидите следующие результаты распознавания.,ибегатьlabel_image
脚книгаизрезультат Нет常один致:
Predictions: 41 0.645 labrador retriever
64 0.195 golden retriever
76 0.0261 kuvasz
32 0.0133 redbone
20 0.0127 beagle
хотетьиспользовать MobileNet(mobilenet_1.0_224_quantized
)тренироваться Модельdog_retrained_mobilenet10_224.pb
,Пожалуйста, следуйте инструкциям, аналогичным ийствовать.,исуществоватьшаг 2 и 3 середина,насиспользоватьdog_retrained_mobilenet10_224.pb
,Дасуществоватьшаг 4 середина,нас需хотеть保留const int wanted_width = 224;
и const int wanted_height = 224;
,только Воляconst float input_mean
иconst float input_std
Изменятьдля128
。 наконец,существоватьшаг 5 середина,насдолжениспользоватьstd::string input_layer = "input";
иstd::string output_layer = "final_result";
。 этотнекоторыйпараметриdog_retrained_mobilenet10_224.pb
изlabel_image
脚книгаиспользоватьизпараметр Взаимно同。
Снова запустите приложение, и ваша Воля посмотрит, как приезжает аналогичный лучший результат.
существовать Android из“TF Классификация”приложениеиспользуется впройтипереподготовкаиз Inception v3 Модельи MobileNet Модель также очень проста. пожалуйстав соответствии с照здесьизшагтестдваиндивидуальныйпереподготовкаиз Модель:
tensorflow/examples/android
серединаиз Пример TensorFlow Android приложение.quantized_stripped_dogs_retrained .pb
иdog_retrained_mobilenet10_224.pb
а также Этикеткадокументdog_retrained_labels.txt
тащить放приезжать android приложениеизassets
папкасередина。ClassifierActivity.java
,киспользовать Inception v3 тренироватьсяназадиз Модель,изаменятьк Внизкод:private static final int INPUT_SIZE = 224;
private static final int IMAGE_MEAN = 117;
private static final float IMAGE_STD = 1;
private static final String INPUT_NAME = "input";
private static final String OUTPUT_NAME = "output";
этотнекоторый ХОРОШО:
private static final int INPUT_SIZE = 299;
private static final int IMAGE_MEAN = 128;
private static final float IMAGE_STD = 128;
private static final String INPUT_NAME = "Mul";
private static final String OUTPUT_NAME = "final_result";
private static final String MODEL_FILE = "file:///android_asset/quantized_stripped_dogs_retrained.pb";
private static final String LABEL_FILE =
"file:///android_asset/dog_retrained_labels.txt";
private static final int INPUT_SIZE = 224;
private static final int IMAGE_MEAN = 128;
private static final float IMAGE_STD = 128;
private static final String INPUT_NAME = "input";
private static final String OUTPUT_NAME = "final_result";
private static final String MODEL_FILE = "file:///android_asset/dog_retrained_mobilenet10_224.pb";
private static final String LABEL_FILE = "file:///android_asset/dog_retrained_labels.txt";
этот Сразудасуществовать Пример TensorFlow iOS и Android приложениеиспользуется вдваиндивидуальныйпройтипереподготовкаиз Модель Место需хотетьизвсе。 Теперь, когда вы знаете, как существовать Пример Используйте переобученную модель в своем приложение, то вам может быть интересно из Следующее да Как Воля TensorFlow Добавить жилье из дома сейчас иметь iOS или Android приложение, чтобы вы могли начать добавлять AI Верно, у вас есть мощные функции для мобильных приложений. в этом содержании подробно обсуждается остальная часть данных главы Воли.
существовать TensorFlow из Первые дни Версиясередина,Воля TensorFlow Добавление места проживания в ваше сизприложение очень утомительно и требует использования. TensorFlow из Ручная процесс сборки и др. Ручные настройки. существовать TensorFlow 1.4 , процесс очень простой, но существует TensorFlow Подробные шаги не описаны подробно на веб-сайте. отсутствует из-за чего-то отсутствует, связанный с тем, как существует основе Swift из iOS приложениеиспользуется в TensorFlow издокумент; Пример TensorFlow iOS приложение Всесуществовать Objective-C , они позвонили TensorFlow из C++ API。 Давайте посмотрим, как мы можем добиться большего.
первый,в соответствии с照к Внизшаг Воля Инструментиметькартинакак классификация Функцияиз TensorFlow Добавить жильевашиз Objective-C iOS приложение (наша Воляот индивидуального нового приложения, но да, если нужно Воля TensorFlow Добавьте жилье сейчас иметьприложение, первый шаг можно пропустить):
HelloTensorFlow
делатьдля产品имясказать,выбирать Obj-C Создал на языке для, затем щелкнуть далее и выбратьпроектиз Расположение, затем щелкнуть. закрытие Xcode в окне изпроекта (потому что позже мы будем Воляиспользовать Pod чтобы открыть документ рабочей области проекта).cd
приезжатьпроект Местосуществоватьиз Расположение,ЗатемсоздаватьодининдивидуальныйимядляPodfile
изновыйдокумент,Его содержание следующее:target 'HelloTensorFlow'
pod 'TensorFlow-experimental'
pod install
скачатьи Установить TensorFlow Pod。HelloTensorFlow.xcworkspace
документ,Затем Волядваиндивидуальныйдокумент(ios_image_load.mm
иios_image_load.h
)тащить放приезжать TensorFlow iOS Пример Оглавлениеtensorflow/examples/ios/simple
приезжатьHelloTensorFlow
файлы проекта夹середина。quantized_stripped_dogs_retrained.pb
иdog_retrained_mobilenet10_224.pb
,label file dog_retrained_labels.txt
а также Несколькоиндивидуальныйтесткартинакартинадокументтащить放приезжатьфайлы проекта夹середина,после,Вам следует посмотреть приезжать контент, похожий на:[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-KEomP26v-1681653027410)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/b89b3444-a6a9-45b4-bb02-ddf8388a6992.png)]
картина 2.6:добавить в工Инструментдокумент,Модельдокумент,Этикеткадокументикартинакартинадокумент
ViewController.m
重命имядляViewController.mm
,потому чтодлянас Волясуществовать Должендокументсерединасмешиваниеиспользовать C++ коди Objective-C код для звонка TensorFlow C++ API И обрабатывайте изображение, например ввод и результат вывода. Затем,существовать@interface ViewController
Извперед,добавить вк Вниз#include
ипрототип функции:#include <fstream>
#include <queue>
#include "tensorflow/core/framework/op_kernel.h"
#include "tensorflow/core/public/session.h"
#include "ios_image_load.h"
NSString* RunInferenceOnImage(int wanted_width, int wanted_height, std::string input_layer, NSString *model);
ViewController.mm
изконец,добавить вотtensorflow/example/ios/simple/RunModelViewController.mm
копироватьизк Внизкод,вернофункцияRunInferenceOnImage
稍делать Изменять,Чтобы принять разные размеры входных данных и имена входных слоев из разных переобучений. Модель:namespace {
class IfstreamInputStream : public ::google::protobuf::io::CopyingInputStream {
...
static void GetTopN(
...
bool PortableReadFileToProto(const std::string& file_name,
...
NSString* FilePathForResourceName(NSString* name, NSString* extension) {
...
NSString* RunInferenceOnImage(int wanted_width, int wanted_height, std::string input_layer, NSString *model) {
viewDidLoad
методизViewController.mm
середина,Сначала добавьте добавить тег изкод,Пользователи use знают, что они могут использовать. Приложение выполняет действие:UILabel *lbl = [[UILabel alloc] init];
[lbl setTranslatesAutoresizingMaskIntoConstraints:NO];
lbl.text = @"Tap Anywhere";
[self.view addSubview:lbl];
Затем Воля Этикетка置ВЭкрансередина央изо束:
NSLayoutConstraint *horizontal = [NSLayoutConstraint constraintWithItem:lbl attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual toItem:self.view
attribute:NSLayoutAttributeCenterX multiplier:1 constant:0];
NSLayoutConstraint *vertical = [NSLayoutConstraint constraintWithItem:lbl attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual toItem:self.view
attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
[self.view addConstraint:horizontal];
[self.view addConstraint:vertical];
наконец,Существуют Добавьте сюда распознаватель жестов щелчка:
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[self.view addGestureRecognizer:recognizer];
alert
действовать,кпозволятьиспользовать户выбиратьпереподготовкаиз Модель:UIAlertAction* inceptionV3 = [UIAlertAction actionWithTitle:@"Inception v3 Retrained Model" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
NSString *result = RunInferenceOnImage(299, 299, "Mul", @"quantized_stripped_dogs_retrained");
[self showResult:result];
}];
UIAlertAction* mobileNet = [UIAlertAction actionWithTitle:@"MobileNet 1.0 Retrained Model" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
NSString *result = RunInferenceOnImage(224, 224, "input", @"dog_retrained_mobilenet10_224");
[self showResult:result];
}];
Затемсоздаватьодининдивидуальныйnone
действовать,и Воля Местоиметьтрииндивидуальныйalert
действоватьдобавить вприезжатьконтроллер сигнализацииипоказыватьэто:
UIAlertAction* none = [UIAlertAction actionWithTitle:@"None" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {}];
UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Pick a Model" message:nil preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:inceptionV3];
[alert addAction:mobileNet];
[alert addAction:none];
[self presentViewController:alert animated:YES completion:nil];
showResult
серединапоказыватьдля另одининдивидуальныйконтроллер сигнализации:-(void) showResult:(NSString *)result {
UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Inference Result" message:result preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* action = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
[alert addAction:action];
[self presentViewController:alert animated:YES completion:nil];
}
ивызов TensorFlow Взаимно关изосновнойкодсуществоватьRunInferenceOnImage
методсередина,Долженметодна основе TensorFlow iOS Простое приложение было немного доработано, в том числе сначала создано индивидуальное TensorFlow встречаразговариватьиодининдивидуальныйкартина:
tensorflow::Session* session_pointer = nullptr;
tensorflow::Status session_status = tensorflow::NewSession(options, &session_pointer);
...
std::unique_ptr<tensorflow::Session> session(session_pointer);
tensorflow::GraphDef tensorflow_graph;
NSString* network_path = FilePathForResourceName(model, @"pb");
PortableReadFileToProto([network_path UTF8String], &tensorflow_graph);
tensorflow::Status s = session->Create(tensorflow_graph);
Затем загрузите теги документикартина, например документ, и Волякартина, например, конвертировать данные для когдаиз. Tensor данные:
NSString* labels_path = FilePathForResourceName(@"dog_retrained_labels", @"txt");
...
NSString* image_path = FilePathForResourceName(@"lab1", @"jpg");
std::vector<tensorflow::uint8> image_data = LoadImageFromFile([image_path UTF8String], &image_width, &image_height, &image_channels);
tensorflow::Tensor image_tensor(tensorflow::DT_FLOAT, tensorflow::TensorShape({1, wanted_height, wanted_width, wanted_channels}));
auto image_tensor_mapped = image_tensor.tensor<float, 4>();
tensorflow::uint8* in = image_data.data();
float* out = image_tensor_mapped.data();
for (int y = 0; y < wanted_height; ++y) {
const int in_y = (y * image_height) / wanted_height;
...
}
Наконец, используйтекартину, например вызов имени входного слоя данных тензора. TensorFlow встречаразговариватьизrun
метод,Получите возвращенный результат вывода,И действительно, он обрабатывается для получения результата, что значение достоверности превышает пороговое значение, полученное индивидуально:
std::vector<tensorflow::Tensor> outputs;
tensorflow::Status run_status = session->Run({{input_layer, image_tensor}},{output_layer}, {}, &outputs);
...
tensorflow::Tensor* output = &outputs[0];
const int kNumResults = 5;
const float kThreshold = 0.01f;
std::vector<std::pair<float, int> > top_results;
GetTopN(output->flat<float>(), kNumResults, kThreshold, &top_results);
существует Остальная часть книги из,нас ВолявыполнитьRunInferenceOnxxx
методиз Нет同Версия,киспользовать Нет同извходить Приходитьбегать Нет同из Модель. Так что не волнуйтесь, если вы не до конца понимаете какой-то код; провести построение большего количества изприложений, вы волядля нового определения изс Модель напишите сизрассуждение логичное и почувствуете, что приезжатьссуществовать.
Кроме того, полная версия приложения HelloTensorFlow для iOS также включена в существующий магазин исходных кодов Библиотека.
сейчассуществовать,существует эмулятор или реальное приложение на устройствах iOS,первый,Вы, Воля, увидите следующее сообщение.,хотеть求тывыбиратьпереподготовкаиз Модель:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-p0nAa1Pm-1681653027410)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/1823f6a6-f212-4ac9-9d78-a978a234c4aa.png)]
картина 2.7:выбирать Нет同из再тренироваться Модельруководитьрассуждение
Затем,Ваша Волясуществоватьвыбирать Модель после просмотра приезжать полученные результаты:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-KS4OFUYg-1681653027410)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/b9de1c02-8b3a-4482-b7f5-4d0d8d3e4692.png)]
картина 2.8: на основе различных переподготовок Модельизрассуждение результатов
Обратите внимание, что MobileNet После обучения из Модельсуществовать в том же стиле iPhone набегать速度хотетьбыстрыйпридетсямного,существовать iPhone 6 чем выше Inception v3 из Модель после тренировки работает примерно на секунду быстрее.
с 2014 Год 6 С рождением Луны, Свифт Стал для самого элегантного и современного языка Одна из программ. Поэтому, верно для некоторых продвинутых людей, Воля современная. TensorFlow Комплексное проживание основе Swift изсовременный iOS приложениесередина既иметь Интересныйиметьиспользовать。 этот Образец做изшагина основе Objective-C изприложениеиз Шаги аналогичны, но имеют некоторые особенности Swift Похожие из советов. Если вы следовали Objective-C Некоторые шаги выполняются в режиме действия, вы можете обнаружить, что некоторые шаги повторяются в режиме действия, а те, которые можно пропустить. Objective-C раздел и перейдите непосредственно к Swift из пользователей, все еще выполняет полные шаги:
HelloTensorFlow_Swift
делатьдля产品имясказать,выбирать Swift Волянастраиватьдляязык,Затемщелкнуть Следующийивыбиратьпроектиз Расположение,Создал Затемщелкнуть. закрытие Xcode в окне изпроекта (потому что для дальнейшего Воляиспользовать Pod чтобы открыть документ рабочей области проекта).cd
приезжатьпроект Местосуществоватьиз Расположение,ЗатемсоздаватьодининдивидуальныйимядляPodfile
изновыйдокумент,Его содержание следующее:target 'HelloTensorFlow_Swift'
pod 'TensorFlow-experimental'
pod install
скачатьи Установить TensorFlow Pod;
HelloTensorFlow_Swift.xcworkspace
документ,Затем Волядваиндивидуальныйдокумент(ios_image_load.mm
иios_image_load.h
)тащить放приезжать TensorFlow iOS Пример Оглавлениеtensorflow/examples/ios/simple
приезжатьHelloTensorFlow_Swift
файлы проекта夹середина。 когда Волядваиндивидуальныйдокументдобавить вприезжатьпроектсерединачас,ты Волясмотретьприезжатьодининдивидуальныйинформациякоробка,нравитьсяк Вниз Экранперехватыватьартина Место示,询问тыда否хотеть配置 Objective-C Переходной заголовок, Swift кодовый вызов C++ Этот заголовок является обязательным. Objective-C код. Таким образом, щелкнуть создаёт кнопку заголовка моста:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-34n2r9ES-1681653027411)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/afa22723-f59f-4544-8a61-e73ee7c43e85.png)]
картина 2.9: Добавлено C++ Создать связующий заголовок при файле
quantized_stripped_dogs_retrained .pb
иdog_retrained_mobilenet10_224.pb
этотдваиндивидуальный Модель,Этикеткадокументdog_retrained_labels.txt
и Несколькоиндивидуальныйтесткартинакартинадокументтащить放приезжатьфайлы проекта夹середина–после,Вы должны увидеть нечто похожее на:[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-FEDYBpgY-1681653027411)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/8236a55a-15fe-41a1-9ff7-c7280ae6c43f.png)]
картина 2.10:добавить в工Инструментдокумент,Модельдокумент,Этикеткадокументикартинакартинадокумент
RunInference.h
изновыйдокумент(одининдивидуальный Советыда,насдолженсуществовать Внизодиншагиспользуется в Objective-C класс какRunInferenceOnImage
методиз Упаковка,к便насиз Swift код выполняет косвенные вызовы) 。в противном случае,Воля А произошла ошибка сборки):#import <Foundation/Foundation.h>
@interface RunInference_Wrapper : NSObject
- (NSString *)run_inference_wrapper:(NSString *)name;
@end
RunInference.mm
издокумент,Должендокументкк Внизinclude
вернослонипрототипоткрытьголова:#include <fstream>
#include <queue>
#include "tensorflow/core/framework/op_kernel.h"
#include "tensorflow/core/public/session.h"
#include "ios_image_load.h"
NSString* RunInferenceOnImage(int wanted_width, int wanted_height, std::string input_layer, NSString *model);
RunInference.mm
,квыполнитьсуществовать Что.h
документсерединаопределениеизRunInference_Wrapper
:@implementation RunInference_Wrapper
- (NSString *)run_inference_wrapper:(NSString *)name {
if ([name isEqualToString:@"Inceptionv3"])
return RunInferenceOnImage(299, 299, "Mul", @"quantized_stripped_dogs_retrained");
else
return RunInferenceOnImage(224, 224, "input", @"dog_retrained_mobilenet10_224");
}
@end
RunInference.mm
изконец,добавить ви Objective-C частьсерединаViewController.mm
完全Взаимно同изметод,иtensorflow/example/ios/simple/RunModelViewController.mm
серединаизметод略иметь Нет同:class IfstreamInputStream : public namespace {
class IfstreamInputStream : public ::google::protobuf::io::CopyingInputStream {
...
static void GetTopN(
...
bool PortableReadFileToProto(const std::string& file_name,
...
NSString* FilePathForResourceName(NSString* name, NSString* extension) {
...
NSString* RunInferenceOnImage(int wanted_width, int wanted_height, std::string input_layer, NSString *model) {
viewDidLoad method
конецизViewController.swift
,Сначала добавьте добавить тег изкод,Пользователи с помощью приложения знают, что они могут делать:let lbl = UILabel()
lbl.translatesAutoresizingMaskIntoConstraints = false
lbl.text = "Tap Anywhere"
self.view.addSubview(lbl)
Затем Воля Этикетка置ВЭкрансередина央изо束:
let horizontal = NSLayoutConstraint(item: lbl, attribute: .centerX, relatedBy: .equal, toItem: self.view, attribute: .centerX, multiplier: 1, constant: 0)
let vertical = NSLayoutConstraint(item: lbl, attribute: .centerY, relatedBy: .equal, toItem: self.view, attribute: .centerY, multiplier: 1, constant: 0)
self.view.addConstraint(horizontal)
self.view.addConstraint(vertical)
наконец,Существуют Добавьте сюда распознаватель жестов щелчка:
let recognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapped(_:)))
self.view.addGestureRecognizer(recognizer)
alert
двигатьсяделать,кпозволятьиспользовать户выбирать Inception v3 После обучения из Модель:let alert = UIAlertController(title: "Pick a Model", message: nil, preferredStyle: .actionSheet)
alert.addAction(UIAlertAction(title: "Inception v3 Retrained Model", style: .default) { action in
let result = RunInference_Wrapper().run_inference_wrapper("Inceptionv3")
let alert2 = UIAlertController(title: "Inference Result", message: result, preferredStyle: .actionSheet)
alert2.addAction(UIAlertAction(title: "OK", style: .default) { action2 in
})
self.present(alert2, animated: true, completion: nil)
})
Затемсуществовать展示Извперед,для MobileNet Тяжелая тренировка Модель создает еще одно индивидуальное действие такжеодининдивидуальныйnone
двигатьсяделать:
alert.addAction(UIAlertAction(title: "MobileNet 1.0 Retrained Model", style: .default) { action in
let result = RunInference_Wrapper().run_inference_wrapper("MobileNet")
let alert2 = UIAlertController(title: "Inference Result", message: result, preferredStyle: .actionSheet)
alert2.addAction(UIAlertAction(title: "OK", style: .default) { action2 in
})
self.present(alert2, animated: true, completion: nil)
})
alert.addAction(UIAlertAction(title: "None", style: .default) { action in
})
self.present(alert, animated: true, completion: nil)
HelloTensorFlow_Swift-Bridging-Header.h
документ,и КЧтосерединадобавить водин ХОРОШОкод:#include "RunInference.h"
。сейчассуществовать,существовать模拟устройствосерединабегать Долженприложение,Ваш вид Воля приобрести индивидуальный контроллер сигнализации,хотеть求тывыбирать Модель:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-jnVb7EBf-1681653027411)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/098c0b7a-c32a-4ffc-bf3d-49c1ea80d36f.png)]
картина 2.11:выбиратьодининдивидуальныйпройтиобучение Модельруководитьрассуждение
а также различные переподготовки Модельизрассуждение результатов:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-HA5gG3Tz-1681653027411)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/f3d05b5e-fda7-46d6-8e47-f234a1b4175e.png)]
картина 2.12: Различные переподготовки Модельизрассуждение результатов
Продолжайте теперь, когда вы знаете, что Воля силен из TensorFlow Модельдобавить вприезжать iOS приложение нужно сделать, что бы оно ни было Objective-C все еще Swift Пишу из-за того, что нет причин останавливать тебя, Воля. AI Добавить жильевашиздвигатьсяприложениесередина,除Неттыда Android。 Но ты знаешь, мы позаботимся и об этом. Android。
Факты доказали, что TensorFlow добавить вприезжатьссебяиз Android приложение Сравнивать iOS легкий. 让нас跳приезжатьшаг:
build.gradle
(Module: app
)документ,исуществовать Зависимости{...};
внутреннийиконецдобавить вкомпилировать'org.tensorflow:tensorflow-android:+'
。gradle
документ,ты Волясуществоватьapp
Оглавлениеиз Расположениеapp/build/intermediates/transforms/mergeJniLibs/debug/0/lib
изребенокпапка内смотретьприезжатьlibtensorflow_inference.so
,этотда Java коди Изверноразговариватьиз TensorFlow книга机Библиотека。assets
папка”Приходитьсоздаватьassets
папка。 ,нравитьсяк Вниз Экранперехватыватьартина Место示,Затемот Сумкавыключатель回 Android:[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-xTCPEphz-1681653027412)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/6cf6b889-8ecb-4837-9087-19b34d6e68ed.png)]
картина 2.13:Воляматериалпапкадобавить вприезжатьновыйпроект
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-SH8Sgc83-1681653027412)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/fff27710-5222-410c-8d40-f451dea548f8.png)]
картина 2.14:Воля Модельдокумент,Этикеткадокументитесткартинакартинадобавить вприезжатьматериал
tensorflow/examples/android/src/org/tensorflow/demo
иClassifier.java
отtensorflow/examples/android/src/org/tensorflow/demo
тащить放приезжатьпроектиз Java папкасередина, как показано ниже:[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-kharFPaj-1681653027412)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/7f41c4fe-6454-44e2-82d8-892290761eb5.png)]
картина 2.15: Уилл TensorFlow Классификацияустройстводокументдобавить вприезжатьпроектсередина
MainActivity
,первыйсоздаватьипереподготовкаиз MobileNet Модель Взаимно关изпостоянный-входитькартинакартинаразмер,Имя узла,Модельдокументимяи Этикеткадокументимя:private static final int INPUT_SIZE = 224;
private static final int IMAGE_MEAN = 128;
private static final float IMAGE_STD = 128;
private static final String INPUT_NAME = "input";
private static final String OUTPUT_NAME = "final_result";
private static final String MODEL_FILE = "file:///android_asset/dog_retrained_mobilenet10_224.pb";
private static final String LABEL_FILE = "file:///android_asset/dog_retrained_labels.txt";
private static final String IMG_FILE = "lab1.jpg";
onCreate
методвнутренний,первыйсоздаватьодининдивидуальныйClassifier
Пример:Classifier classifier = TensorFlowImageClassifier.create(
getAssets(),
MODEL_FILE,
LABEL_FILE,
INPUT_SIZE,
IMAGE_MEAN,
IMAGE_STD,
INPUT_NAME,
OUTPUT_NAME);
Затемотassets
папкасередина读取насизтесткартинакартина,Отрегулируйте в соответствии с размером, указанным Моделью.,ЗатемвызоврассуждениеметодrecognizeImage
:
Bitmap bitmap = BitmapFactory.decodeStream(getAssets().open(IMG_FILE));
Bitmap croppedBitmap = Bitmap.createScaledBitmap(bitmap, INPUT_SIZE, INPUT_SIZE, true);
final List<Classifier.Recognition> results = classifier.recognizeImage(croppedBitmap);
для Проще говоря, у нас нет Android приложение Добавить любое и UI Связанный исходник, но вы можете получить результат после существования этой строки, настроив индивидуальную точку останова и отладив это приложение; ты Волясмотретьприезжатьк Вниз Экранперехватыватьартина Место示изрезультат:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-XIyeYzNW-1681653027412)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/4c91b3a9-1a32-4288-aa75-205d0b71d584.png)]
изображение 2.16:использовать переобучение MobileNet Модельиз результатов распознавания
еслитыпроходить ВоляMODEL_FILE
Изменятьдляquantized_stripped_dogs_retrained.pb
,ВоляINPUT_SIZE
Изменятьдля299
,и ВоляINPUT_NAME
ИзменятьдляMul
Приходитьиспользовать Inception v3 После обучения из Модель, а затем отладки этого приложения, вы получите результаты, показанные ниже из :
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-1s92KyhD-1681653027412)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/ca49452a-b256-4c9e-8e96-6de4c75effa7.png)]
изображение 2.17:Использовать переобучение Inception v3 Модельиз результатов распознавания
Теперь, когда вы знаете, как TensorFlow ипройтипереподготовкаиз Модельдобавить вприезжатьссебяиз iOS и Android приложение, то если вы хотите добавить не- TensorFlow Соответствующие функции не должны быть слишком сложными. Например, камера телефона фотографирует собаку и определяет ее породу.
существоватькнигаглавасередина,наспервый简хотетьпредставлять Понятно什么дамигрироватьизучатьа также для Что мы можем и должны использовать Это происходит через предварительную подготовку из глубокого обучения, например классификационную модель. Затем мы покажем, как переподготовка основе Inception v3 из Модельи MobileNet Смоделируйте детали, чтобы мы могли лучше понять и встретиться с нашими лучшими друзьями. После этого мы впервые показали, как существуют TensorFlow Пример iOS и Android Используйте переобученную модель в своем приложение, затем приводит связанный с тем, как Воля TensorFlow Добавить приезжать самому основе Objective-C и Swift из iOS приложениесерединаизшаг за шагом Учебное пособие,а такжетыссебяиз Android приложение.
Теперь у нас есть лучшие друзья,Он содержит несколько хороших и понятных советов.,Мы знаем, что есть много других,К лучшему или к худшему. В следующей главе мы, Воля, узнаем, как стать умнее и как распознавать интересных изверно слонов в картине иметьиметь такжекаксуществовать Смартфонначальство随час随地верно Чторуководить定Кусочек。
Обнаружение объектов — это шаг вперед по сравнению с обсуждением в предыдущей главе классификации изображений изкартина. Категоризация «картина как» возвращает только теги «картина как из категории», а «Обнаружение» объекты возвращает список значков, указанных в изображении значка изверно Также каждый индивидуальный логотип, как и в ограничительной рамке. Модерн из Обнаружение Алгоритмы объектов используют глубокое обучение для создания различных верных изображений и моделей, которые можно использовать для обнаружения и определенных изображений отдельных индивидуальных карт. существуют в прошлом несколько лет, быстрее и точнее из Обнаружение алгоритмы объектов выходили один за другим.2017 Год 6 луна, Google выпустил TensorFlow Обнаружение объектов API, API Объединяет несколько ведущих из Обнаружение объектовалгоритм。
существоватькнигаглавасередина,нас Воляпервый简хотеть概описывать Обнаружение Объекты: Создание эффектов глубокого обучения. Модель для Обнаружения. объектов,Затемиспользовать Должен Модельруководитьрассуждениеизпроцесс。 Тогда мы подробно обсудим TensorFlow Обнаружение объектов API из工делать原理,какиспользовать Чтомногоиндивидуальный Модельруководитьрассуждениеа такжекакиспользоватьссебяизданныенаборверно Чторуководитьпереподготовка。 Тогда мы, Воля К, покажем вам, как существуют iOS приложениеиспользуется в Предварительное обучениеиз Обнаружение объектов Модельа такжепереподготовкаиз Модель. Мы, Воля, представляем несколько полезных советов, чтобы вы могли Ручная сборкасопределениеиз TensorFlow iOS Библиотека,крешатьиспользовать TensorFlow Pod вопрос; Эта Воля поможет вам подготовиться к решению любой темы, описанной в остальной части этой книги. TensorFlow Поддерживать Модель. существоватькнигаглавасередина,нас Воля Нетпоставлятьиспользовать ВОбнаружение объектовиз Android Примерприложение,потому чтодля TensorFlow исходный код поставляется с индивидуальным очень хорошим примером, можно использовать TensorFlow Обнаружение объектовпредварительнотренироваться Модельа также YOLO модель для работы. Мы Волясуществовать эту главу последнего вступления. Мы, Воля К, покажем вам, как существуют iOS приложениеиспользуется в Другой ведущий из объекта Модель обнаружения YOLO v2。 Подводя итог, мы Волясуществовать в этой главе представлены следующие темы:
сот 2012 С момента прорыва нейронной сети Года, названной для AlexNet глубоко CNN Модельпроход значительно снижает частоту ошибок победить степень Года. ImageNet Столкнувшись с проблемами визуального распознавания, многие исследователи в области компьютерного зрения и обработки естественного языка начали использовать мощные возможности глубокого обучения. на основеглубокое обучениеизсовременный Обнаружение объектоввсена основе CNN, и строить такие существования, как AlexNet,Google Inception или Другие популярныеиз VGG Сетевое и другое предварительное обучение из Модели начального уровня. этотнекоторый CNN Обычно обучаются сотни Тысячей параметров Вы можете ввести изображение преобразования изображения для набора функций, эти функции можно в дальнейшем использовать, например, в предыдущей главе и классификации изображений зкартина а. также Обнаружение объектова Также Другие задачи, связанные с компьютерным зрением.
2014 Год, предложено последнее из Обнаружение объектовустройство,Должен Обнаружение объектовустройствоиспользоватьсказатьдля RCNN (с CNN Особенности из области) из отметок Обнаружение объектовданныенаборверно AlexNet После обучения по сравнению с традиционным методом обнаружения его точность значительно улучшилась. RCNN Включает метод под названием «Предложение области», который генерирует О. 2,000 индивидуальный Может能изобласть候选ВОЗ,исуществовать Каждыйиндивидуальныйэтотнекоторыйобластьначальствобегать CNN для классификации и прогнозирования ограничивающей рамки. Затем эти результаты объединяются для получения результата обнаружения. RCNN из Процесс обучения очень сложен, занимает несколько дней, рассуждение также очень медленное, существует GPU накартинакартинаначальство花费Понятно Волязакрыватьодинминута.
поднятый RCNN С тех пор производительность стала лучше. объектовалгоритм纷к沓Приходить:быстрый RCNN, быстрее из RCNN, YOLO (видите только один раз), SSD (Однокадровый многокадровый детектор)и YOLO v2。
2014 Год,Андрей Карпатый, правда, RCNN хорошо представил,«Веселье RCNN, усовершенствованный детектор объектов»。 Джастин Джонсон Джонсон) существуют Стэнфордский университет CS231n курссерединапоставлять Понятноодининдивидуальныйочень хорошийиз Видео лекция«Пространственное определение обнаружения Кусочек»,Контент предполагает обнаружение объектов,К ним относятся RCNN,Fast RCNN,Faster RCNN и YOLO из Подробности. YOLO2 веб-сайтдаэтотвнутри。
быстрый RCNN проходитьпервыйсуществоватьвсеиндивидуальныйвходитькартинакартинаначальствои Нетда Тысячииндивидуальныйпредположениеизобластьначальствоприложение Затем CNN обрабатывает предложения региона, что значительно сокращает время обучения и обсуждение (10 часов тренировок 2.x (второе решение). Быстрее RCNN Использоватьпользовать региональную сеть предлагается дальнейшее Волярассуждение Увеличение скорости приезжать в режиме реального времени (0,2 Второй),Поэтому существуют после тренировки,Больше нет трудоемкого процесса рекомендации областей.
и RCNN Различные серии обнаружения, SSD и YOLO Оба метода одиночного выстрела, это означает, что они являются одиночными. CNN Приложение полностью содержит входные изображения без использования региональных предложений и региональной классификации. этот оба метода очень быстрые, они имеют среднюю точность (mAP) примерно для 80%, лучше, чем Faster RCNN。
Если вы впервые слышите об этих методах, возможно, вы немного растеряны. Да,делатьдляверноиспользовать AI Для тех, кто заинтересован в расширении возможностей мобильного приложения, вам не нужно знать о настройке архитектуры глубоких нейронных сетей и обучении Обнаружение сведения о свойстве objectModelize; Вы должны просто знать, как использовать также (при необходимости) переподготовка предварительно обученной модели, а такжекаксуществовать iOS и Android приложениеиспользуется в производственный тренинг перепроготовкаиз Модель.
еслиты真изверноглубокое обучение Интерес к исследованиям,и хотите знать, как работает каждый детектор, чтобы решить, какой детектор использовать, подробности,Тогда вам обязательно стоит прочитать каждый метод из бумаги.,ипытатьсяссебякопироватьтренироватьсяпроцесс。 эта Воляда Долгая и прибыльная дорога. Но если ты хочешь послушать Andrej Karpathy из советов: "Не будь героем" (существовать YouTube Искать «Андрей изComputer Vision Deep Learning»), то вы можете «принять наиболее эффективный из имеющихся методов, загрузить предварительно обученную из Модель,Добавить/удалить некоторые его части,Тогда вы сможете это настроить».,этоттакжеданас Волясуществоватьздесьиспользоватьизметод。
существуют Начните исследовать, какой метод лучше TensorFlow вперед, дайте нам знать о наборе данных. иметь 3 индивидуальный主хотетьизданныенабориспользовать Втренироваться Обнаружение объектов:PASCAL VOC,ImageNet и Microsoft COCO,это们Инструментиметьиздобрый数分Недля 20、200 и 80。 TensorFlow Обнаружение объектов API когдавперед Поддерживать大много数предварительнотренироваться Модель Всесуществовать 80 сорт MS COCO данныенаборначальстворуководить Понятнотренироваться(связанныйпредварительнотренироваться Модель及Чтообучениеданныенабориз完всесписок,Видетьэтотвнутри。
хотя мы не будем начинать обучение с самого начала,Датывстреча经常提приезжать PASCAL VOC или MS COCO данные Формат,а также Они покрывают из 20 или 80 индивидуальный通использоватьдобрый,это们Вседасуществоватьпереподготовкаилииспользоватьпройтиобучение Модельчасиспользоватьиз。 существоватькнигаглаваизнаконецчасть,нас Воляпытатьсяиспользовать VOC обучение YOLO Модельи COCO обучение Модель.
TensorFlow Обнаружение объектов API существовать Чтоофициальный сайтначальствоиметьподробный Записывать,тыодин定хотеть查смотреть Что“быстрыйначиная:использовать Всейчас成изсделать выводиз Jupyter Путеводитель «Блокнот», кратко объясняет, как существовать Python используется визPre-training Модель для обнаружения. Но то, что документ существует на многих разных страницах, трудно понять. существование В этом и следующем разделе мы Воляпроходить реорганизуем существующее множество мест, чтобы записать важные детали и добавить больше. инструкции по рикоду для упрощения официального документа и создания связанного следующего содержания индивидуального пошагового учебного пособия. пособие:
Выполните следующие шаги, чтобы Установитьипроектобнаружение объектов:
git clone https://github.com/tensorflow/models
matplotlib
,pillow
,lxml
иjupyter
Библиотека。 существовать Ubuntu или Mac начальство,Вы можете проектировать:sudo pip install pillow
sudo pip install lxml
sudo pip install jupyter
sudo pip install matplotlib
models
/ research
Оглавление,Затемвыполнить следующую команду:protoc object_detection/protos/*.proto --python_out=.
этот Волякомпилироватьobject_detection/protos
Оглавлениесерединаиз Местоиметь Protobuf для включения TensorFlow Обнаружение объектов API удовлетворить. Protobuf или Protocol Buffer да Автоматическая сериализация и метод извлечения структурированных данных, который лучше, чем XML Легче и эффективнее. ты Место需хотеть做из Сразуда编写одининдивидуальный描описыватьданныеструктураиз.proto
документ,Затемиспользоватьprotoc
(proto Компилятор) генерирует динамический анализ и кодирование. protobuf данныеизкод. Уведомление--python_out
параметробозначение Понятно Местогенерироватькодизязык。 существовать В следующей части этой главы, когда мы обсудим, как существовать iOS используется в Модельчас,Мы Воляиспользоватьприноситьиметь--cpp_out
из协议компилироватьустройство,Таким образом генерируется исходда C++. связанныйProtocol Buffer из полного документа,Видетьэтотвнутри。
export PYTHONPATH=$PYTHONPATH:
pwd:
pwd/slim
,Затембегатьpython object_detection/builders/model_builder_test.py
кпроверятьодин切正常。jupyter notebook
Заказисуществовать浏览устройствосередина打открытьhttp://localhost:8888
。 первыйщелкнутьobject_detection
,Затемвыбиратьobject_detection_tutorial.ipynb
笔记книгаи逐индивидуальныйединицабегать Демо。сейчассуществовать让нас Приходитьсмотретьодин Внизиспользоватьпредварительнообучение TensorFlow Обнаружение объектов Модельсуществовать Python Записная книжка несет в себе основные компоненты рассуждениеиз. Сначала определите некоторые ключевые константы:
MODEL_NAME = 'ssd_mobilenet_v1_coco_2017_11_17'
MODEL_FILE = MODEL_NAME + '.tar.gz'
DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/'
PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'
PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')
NUM_CLASSES = 90
笔记книгакодскачатьииспользовать Понятнопредварительнообучение Обнаружение объектов Модельssd_mobilenet_v1_coco_2017_11_17
(использовать SSD Метод построения, существующий у нас, представлен в предыдущей статье из MobileNet CNN Выше «Модель существования» была кратко представлена в предыдущем разделе). TensorFlow Модель найти экспонаты в зоопарке TensorFlow Обнаружение объектов API Поддерживатьпредварительнотренироваться Модельиз完всесписок,и大много数Всеэто использовать MS COCO данныенаборруководитьобучение。 использовать Врассуждениеизточный Модельдаfrozen_inference_graph.pb
документ(существоватьскачатьизssd_mobilenet_v1_coco_2017_11_17.tar.gz
документсередина),Должен Модельиспользовать Всейчас成израссуждениеа такжепереподготовка。
Кусочек Вmodels/research/object_detection/data/mscoco_label_map.pbtxt
серединаизmscoco_label_map.pbtxt
Этикеткадокумент Инструментиметь 90(NUM_CLASSES
)индивидуальныйпроект,использовать Вssd_mobilenet_v1_coco_2017_11_17
Модель Можетк Обнаружениеприезжатьизвернослонтип。 В двух индивидуальных проектах:
item {
name: "/m/01g317"
id: 1
display_name: "person"
}
item {
name: "/m/0199g"
id: 2
display_name: "bicycle"
}
…
item {
name: "/m/03wvsk"
id: 89
display_name: "hair drier"
}
item {
name: "/m/012xff"
id: 90
display_name: "toothbrush"
}
нассуществоватьвпередлапшаизшаг 3 обсуждалось в Protobuf,描описыватьmscoco_label_map.pbtxt
серединаданныеиз proto документдаstring_int_label_map.proto
,Кусочек Вmodels/research/object_detection/protos
середина,Его содержание следующее:
syntax = "proto2";
package object_detection.protos;
message StringIntLabelMapItem {
optional string name = 1;
optional int32 id = 2;
optional string display_name = 3;
};
message StringIntLabelMap {
repeated StringIntLabelMapItem item = 1;
};
поэтому,по сути,协议компилироватьустройствона основеstring_int_label_map.proto
создаватькод,Затем Можеткиспользовать Долженкодиметьэффект地последовательность列化mscoco_label_map.pbtxt
серединаизданные. 稍назад,когда CNN Обнаруживает объект прибытия и возвращает целое число. ID час,Можетк Воля Чтоизменять换дляname
илиdisplay_name
для человеческого чтения。
Воля Модель скачать,После распаковки и загрузки приезжать в память,Тег карты документ также Воля загружен,и Кусочек Вmodels/research/object_detection/test_images
изодиннекоторыйтесткартинакартина Можетксуществовать Чтосерединадобавить втыссебяиз任何тесткартинакартинакруководить Обнаружениетест。 。 Затем определите соответствующие входные и выходные тензоры:
with detection_graph.as_default():
with tf.Session(graph=detection_graph) as sess:
image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
detection_boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
detection_scores = detection_graph.get_tensor_by_name('detection_scores:0')
detection_classes = detection_graph.get_tensor_by_name('detection_classes:0')
num_detections = detection_graph.get_tensor_by_name('num_detections:0')
снова,еслиты想知道этотнекоторыйвходитьивыход Тензоримясказать Приходитьсmodels/research/object_detection/ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb
серединаскачатьидержатьиз SSD Модель, тогда можно существовать iPython используется в следующем коде, чтобы найти:
import tensorflow as tf
g=tf.GraphDef()
g.ParseFromString(open("object_detection/ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb","rb").read())
x=[n.name for n in g.node]
x[-4:]
x[:5]
The last two statements will return:
[u'detection_boxes',
u'detection_scores',
u'detection_classes',
u'num_detections']
and
[u'Const', u'Const_1', u'Const_2', u'image_tensor', u'ToFloat']
Другой способэто использоватьначальствоодинглавасередина描описыватьиз Краткое содержаниекартина工Инструмент:
bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph= models/research/object_detection/ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb
эта Воля генерирует следующий вывод:
Found 1 possible inputs: (name=image_tensor, type=uint8(4), shape=[?,?,?,3])
No variables spotted.
Found 4 possible outputs: (name=detection_boxes, op=Identity) (name=detection_scores, op=Identity (name=detection_classes, op=Identity) (name=num_detections, op=Identity)
После загрузки каждого отдельного тестового изображения Воляпроект фактически обнаруживает:
image = Image.open(image_path)
image_np = load_image_into_numpy_array(image)
image_np_expanded = np.expand_dims(image_np, axis=0)
(boxes, scores, classes, num) = sess.run(
[detection_boxes, detection_scores, detection_classes, num_detections],
feed_dict={image_tensor: image_np_expanded})
наконец,использоватьmatplotlib
Библиотека Воля Обнаружениеприезжатьизрезультат Может视化。 еслииспользоватьtensorflow/models
хранилище Библиотека Поставляется спо умолчаниюдваиндивидуальныйтесткартинакартина,новстречасуществоватькартина 3.1 Посмотрите на результаты проживания:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-fE74MfCc-1681653027413)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/0df3a5c2-f983-4921-a901-b14c262d34a4.png)]
изображение 3.1: Обнаружение приезжающихизверно объектов и их ограничивающих рамок и оценки достоверности
существовать“существовать iOS используется в Обнаружение ObjectModel часть, Разберемся как существовать iOS оборудование Использовать на той же модели и нарисуйте тот же результат обнаружения.
Вы также можете заказать проживаниеиз Tensorflow Модель обнаружения Zoo Протестируйте другую предтренировочную модель. Например,еслииспользоватьfaster_rcnn_inception_v2_coco
Модель,Воляobject_detection_tutorial.ipynb
笔记книгасерединаизMODEL_NAME = 'ssd_mobilenet_v1_coco_2017_11_17'
заменятьдляMODEL_NAME = ' faster_rcnn_inception_v2_coco_2017_11_08'
(Можетот TensorFlow Модель обнаружения Zoo Страница из URL илиMODEL_NAME = ' faster_rcnn_resnet101_coco_2017_11_08'
серединаполучать),Затем вы можете увидеть жилье, похожее на два других индивидуальных на основе Faster RCNN из результатов обнаружения по содержанию.,Даэто们花费изчас间更长。
кроме того,существоватьдваиндивидуальныйfaster_rcnn
Модель Использовать наsummarize_graph
工Инструментвстречасуществоватьвходитьивыходначальствогенерировать Взаимно同изинформация:
Found 1 possible inputs: (name=image_tensor, type=uint8(4), shape=[?,?,?,3])
Found 4 possible outputs: (name=detection_boxes, op=Identity) (name=detection_scores, op=Identity) (name=detection_classes, op=Identity) (name=num_detections, op=Identity)
Обычно и другие крупные изна основе Inception или Resnet-CNN увеличенная Модель по сравнению с на основе MobileNet из Модель самая быстрая, но имеет меньшую точность (mAP значение меньше). 顺便说один Вниз,скачатьизssd_mobilenet_v1_coco, faster_rcnn_inception_v2_coco_2017_11_08
иfaster_rcnn_resnet101_coco_2017_11_08
документизразмер分Недля 76MB,149MB и 593MB。 Позже мы, Воля, смотрим, где жить, на мобильных устройствах, на основе MobileNet из Модель(Напримерssd_mobilenet_v1_coco
)бегать速度хотетьбыстрыйпридетсямного,иметьчас,Большой Модель(Напримерfaster_rcnn_resnet101_coco_2017_11_08
)Тольковстречасуществоватьстаршеиз iPhone крушение. Надеюсь, вы сможете использоватьна основе MobileNet из Модель,пройтипереподготовкаиз MobileNet Модельили Воля Приходить Можеткпоставлятьболее высокая точностьизssd_mobilenet
из Воля Приходить Версиярешать проблемы,хотяssd_mobilenet
из v1 существования достаточно хорош для многих случаев использования.
После пред-обучение TensorFlow Обнаружение Объекты Моделькогда, безусловно, могут очень хорошо решать определенные проблемы. Даиметьчас候,Вам может понадобиться использоватьсиз с аннотированным изданным набором (существовать, который представляет для вас особый интерес изв. ерно или верно с ограничивающей рамкой вокруг части слона) и переподготовка модели,Чтобы он мог более точно обнаруживать различные коллекции категорий изображений.
Мы Воляиспользовать TensorFlow Обнаружение объектов API веб-сайт записывает то же самое из Oxford-IIIT Pets данныенабор Приходитьпереподготовкакнига地компьютернадваиндивидуальныйсейчасиметь Модель,и Нетэто использоватьдокументсерединапредставлятьиз Google Cloud。 При необходимости мы также добавляем инструкции для каждого отдельного шага. к Вниздасвязанныйкакиспользовать Oxford Oxford Pets Переобучение набора данных TensorFlow Обнаружение Пошаговое руководство по моделиз объектов:
cd models/research first
,ускорить переподготовкуиз,Затемвыполнить следующую командускачатьданныенабор(images.tar.gz
одля 800MB,annotations.tar.gz
для 38MB):wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz
wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/annotations.tar.gz
tar -xvf images.tar.gz
tar -xvf annotations.tar.gz
python object_detection/dataset_tools/create_pet_tf_record.py \
--label_map_path=object_detection/data/pet_label_map.pbtxt \
--data_dir=`pwd` \
--output_dir=`pwd`
Должен Заказ Волясуществоватьmodels/research
Оглавлениесерединагенерироватьдваиндивидуальныйимядляpet_train_with_masks.record
(268MB)иpet_val_with_masks.record
(110MB)из TFRecord документ. TFRecords даA иметь бинарный формат quiz, который содержит TensorFlow приложение можно использовать для обучения или проверки имеющихся, если вы хотите использовать TensorFlow Обнаружение объектов API переподготовкассебяизданныенабор,но TFRecords да Обязательный формат документа.
ssd_mobilenet_v1_coco
Модельиfaster_rcnn_resnet101_coco
Модельи Воля Что Разархивироватьприезжатьmodels/research
Оглавление,Пожалуйста, выполните следующие действия:wget http://storage.googleapis.com/download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2017_11_17.tar.gz
tar -xvf ssd_mobilenet_v1_coco_2017_11_17.tar.gz
wget http://storage.googleapis.com/download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz
tar -xvf faster_rcnn_resnet101_coco_11_06_2017.tar.gz
object_detection/samples/configs/faster_rcnn_resnet101_pets.config
документсередина出сейчасизPATH_TO_BE_CONFIGURED
пять次,поэтомуэто们变для:fine_tune_checkpoint: "faster_rcnn_resnet101_coco_11_06_2017/model.ckpt"
...
train_input_reader: {
tf_record_input_reader {
input_path: "pet_train_with_masks.record"
}
label_map_path: "object_detection/data/pet_label_map.pbtxt"
}
eval_input_reader: {
tf_record_input_reader {
input_path: "pet_val_with_masks.record"
}
label_map_path: "object_detection/data/pet_label_map.pbtxt"
...
}
faster_rcnn_resnet101_pets.config
документиспользовать Вобозначение Модельконтрольно-пропускной пунктдокументиз Расположение,Этот файл содержит Модельиз весов после тренировки.,существоватьшаг 2 Сгенерировать для обучения и проверки TFRecords документа такжеобнаружить из 37 Классный питомец из тега item. object_detection/data/pet_label_map.pbtxt
из Нет.один项инаконецодин项нравиться Вниз:
item {
id: 1
name: 'Abyssinian'
}
...
item {
id: 37
name: 'yorkshire_terrier'
}
object_detection/samples/configs/ssd_mobilenet_v1_pets.config
документсередина ИзменятьPATH_TO_BE_CONFIGURED
изпять次出сейчас,поэтомуэто们变для:fine_tune_checkpoint: "object_detection/ssd_mobilenet_v1_coco_2017_11_17/model.ckpt"
train_input_reader: {
tf_record_input_reader {
input_path: "pet_train_with_masks.record"
}
label_map_path: "object_detection/data/pet_label_map.pbtxt"
}
eval_input_reader: {
tf_record_input_reader {
input_path: "pet_val_with_masks.record"
}
label_map_path: "object_detection/data/pet_label_map.pbtxt"
...
}
train_dir_faster_rcnn
Оглавление,Затембегатьпереподготовка Заказ:python object_detection/train.py \
--logtostderr \
--pipeline_config_path=object_detection/samples/configs/faster_rcnn_resnet101_pets.config \
--train_dir=train_dir_faster_rcnn
существоватьна основе GPU из системы, из первоначальной потери 5.0 приезжатьпотеря 0.2 О, только не приезжать 25,000 Просто следуйте инструкциям:
tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties:
name: GeForce GTX 1070 major: 6 minor: 1 memoryClockRate(GHz): 1.7845
pciBusID: 0000:01:00.0
totalMemory: 7.92GiB freeMemory: 7.44GiB
INFO:tensorflow:global step 1: loss = 5.1661 (15.482 sec/step)
INFO:tensorflow:global step 2: loss = 4.6045 (0.927 sec/step)
INFO:tensorflow:global step 3: loss = 5.2665 (0.958 sec/step)
...
INFO:tensorflow:global step 25448: loss = 0.2042 (0.372 sec/step)
INFO:tensorflow:global step 25449: loss = 0.4230 (0.378 sec/step)
INFO:tensorflow:global step 25450: loss = 0.1240 (0.386 sec/step)
Ctrl + C
Заканчиватьначальствоописыватьпереподготовка脚книгаизбегать。 создаватьодининдивидуальныйновыйизtrain_dir_ssd_mobilenet
Оглавление,Затембегать:python object_detection/train.py \
--logtostderr \
--pipeline_config_path=object_detection/samples/configs/ssd_mobilenet_v1_pets.config \
--train_dir=train_dir_ssd_mobilenet
Результаты обучения должны выглядеть так:
INFO:tensorflow:global step 1: loss = 136.2856 (23.130 sec/step)
INFO:tensorflow:global step 2: loss = 126.9009 (0.633 sec/step)
INFO:tensorflow:global step 3: loss = 119.0644 (0.741 sec/step)
...
INFO:tensorflow:global step 22310: loss = 1.5473 (0.460 sec/step)
INFO:tensorflow:global step 22311: loss = 2.0510 (0.456 sec/step)
INFO:tensorflow:global step 22312: loss = 1.6745 (0.461 sec/step)
Вы можете посмотреть приезжать,иFaster_RCNN
Модель Взаимно Сравнивать,SSD_Mobilenet
Модельизпереподготовкасуществоватьоткрыть始и Заканчиватьчасиз损失Все更大。
eval_dir
Оглавлениеибегать评估脚книга:python object_detection/eval.py \
--logtostderr \
--pipeline_config_path=object_detection/samples/configs/faster_rcnn_resnet101_pets.config \
--checkpoint_dir=train_dir_faster_rcnn \
--eval_dir=eval_dir
cd
,Затем打открытьmodels/research
,Затембегатьtensorboard --logdir=.
。 существовать浏览устройствосередина,打открытьhttp://localhost:6006
,ты Волясмотретьприезжатьпотерякартина,нравитьсякартина 3.2 Показано:[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-XV4Jtzdk-1681653027413)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/539aa2c8-da68-42e8-ad74-ad3f2a25e07f.png)]
изображение 3.2: Тенденция общих потерь при обучении Обнаружение объектов Модель
Вы также можете ознакомиться с некоторыми результатами оценки проживания, такими как картина 3.3 Показано:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-5hGhPNon-1681653027413)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/ee6c4a9d-473f-429c-a7e2-df3162500502.png)]
изображение 3.3: переподготовка объекта Модель обнаружения при оценке результатов обнаружения изображения изображения
SSD_MobileNet
Модельбегать评估脚книга,Затемиспользовать TensorBoard Просмотрите тенденцию потерь и оцените результаты изображения, например:python object_detection/eval.py \
--logtostderr \
--pipeline_config_path=object_detection/samples/configs/ssd_mobilenet_v1_pets.config \
--checkpoint_dir=train_dir_ssd_mobilenet \
--eval_dir=eval_dir_mobilenet
python object_detection/export_inference_graph.py \
--input_type image_tensor \
--pipeline_config_path object_detection/samples/configs/ssd_mobilenet_v1_pets.config \
--trained_checkpoint_prefix train_dir_ssd_mobilenet/model.ckpt-21817 \
--output_directory output_inference_graph_ssd_mobilenet.pb
python object_detection/export_inference_graph.py \
--input_type image_tensor \
--pipeline_config_path object_detection/samples/configs/faster_rcnn_resnet101_pets.config \
--trained_checkpoint_prefix train_dir_faster_rcnn/model.ckpt-24009 \
--output_directory output_inference_graph_faster_rcnn.pb
ты需хотетьиспользоватьссебяиз特定контрольно-пропускной пунктценитьзаменять--trained_checkpoint_prefix
ценить(начальствоописывать 21817 и 24009)。
приезжатьэтотдляконец-тысейчассуществоватьдержатьиметьдваиндивидуальныйпройтипереподготовкаиз Обнаружение объектов Модельoutput_inference_graph_ssd_mobilenet.pb
иoutput_inference_graph_faster_rcnn.pb
,Можетксуществоватьтыиз Python код (из предыдущего раздела) Jupyter 笔记книга)илидвигатьсяприложениеиспользуется в них. Нетиспользовать再тащить延Понятно,Давайте прыгнем в мобильный мир,Посмотрите, как использовать предварительную подготовку и переподготовку модели.
существоватьначальствоодинглавасередина,нас Кты展示Понятнокакиспользовать TensorFlow Экспериментальные контейнеры будут TensorFlow быстрый Добавить жильевашиз iOS В приложении. TensorFlow Экспериментальный Pod существовать诸нравиться Inception и MobileNet Например, из Модельили, который хорошо работает в переподготовкеиз Модель. Но да, если к менее существовали на момент написания статьи (2018 г.) Год 1 луна)использовать TensorFlow экспериментстручок,ииспользоватьSSD_MobileNet
Модель,носуществоватьнагрузкаssd_mobilenet
картинадокументчас Может能встреча收приезжатьк Внизошибкаинформация:
Could not create TensorFlow Graph: Not found: Op type not registered 'NonMaxSuppressionV2'
Пока не TensorFlow эксперимент Pod 更новыйдля Сумка括未существоватьздесь注册издействовать,в противном случаерешатьэтотнекоторый问вопросиз唯одинметоддапроходитьот TensorFlow источникbuildсопределение TensorFlow iOS Библиотека, это не то, что вы показываете первым 1 Глава «Мобильный TensorFlow начиная”серединаизсодержание,“какотисточниккодполучатьи Настройка Тензор Флоу”。 Давайте посмотрим на сборку TensorFlow iOS Библиотека и используйте ее для создания уникальных TensorFlow Поддерживатьновый iOS приложениешаги.
Просто выполните следующие действия, чтобы создать библиотеку TensorFlow iOS:
cd
приезжать TensorFlow источниккорень Оглавление,Прямо сейчас~/tensorflow-1.4.0
。tensorflow/contrib/makefile/build_all_ios.sh
Заказ,этотпроцессот 20 Это может варьироваться от минут до часов, в зависимости от ваших потребностей. Mac скорость. После успешного завершения процесса сборки ваша Воля создает три индивидуальные Библиотеки:tensorflow/contrib/makefile/gen/protobuf_ios/lib/libprotobuf-lite.a
tensorflow/contrib/makefile/gen/protobuf_ios/lib/libprotobuf.a
tensorflow/contrib/makefile/gen/lib/libtensorflow-core.a
впереддваиндивидуальный Библиотека处理нас Извпередобсуждатьиз protobuf данные. наконецодининдивидуальный Библиотекада iOS Универсальная статическая библиотека.
Если вы запустите приложение,Пожалуйста, выполните следующие шаги,И столкнулся с ошибкой прибытия в консоли Xcode.,Invalid argument: No OpKernel was registered to support Op 'Less' with these attrs. Registered devices: [CPU], Registered kernels: device='CPU'; T in [DT_FLOAT]
,ты需хотетьсуществоватьздесь执ХОРОШОшаг 2 Извперед Изменятьtensorflow/contrib/makefile/Makefile
документ(пожалуйстаженьшень阅Нет. 7 глава,“использовать CNN и LSTM Определите картину «серединаиз» для iOS Определение сборки TensorFlow раздел «Библиотека»). использоватьновый Версияиз TensorFlow Вы можете не увидеть ошибку прибытия.
хотетьсуществоватьтыссебяизприложениеиспользуется в Библиотека,Пожалуйста, выполните следующие действия:
TFObjectDetectionAPI
проектсередина,щелкнутьпроектимясказать,Затемсуществоватьстроитьнастраивать Вниз,щелкнуть+
идобавить виспользовать户определениеизнастраивать,ЗатемвходитьTENSORFLOW_ROOT
делатьдля TensorFlow источниккореньизпуть(Например$HOME/tensorflow-1.4
),нравитьсякартина 3.4 показано. Если вы хотите процитировать более новую версию TensorFlow Приходитьисточник,этотиспользовать户определениеизнастраивать Волясуществоватьдругойнастраиватьиспользуется чтобы потом легко изменить проект обустройства:[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-VrTnaK52-1681653027413)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/a8474e70-b35d-4585-a9f9-620aa6cff313.png)]
картина 3.4:добавить вTENSORFLOW_ROOT
использовать户определениеизнастраивать
-force_load $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/gen/lib/libtensorflow-core.a $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/gen/protobuf_ios/lib/libprotobuf.a $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/gen/protobuf_ios/lib/libprotobuf-lite.a $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/downloads/nsync/builds/lipo.ios.c++11/nsync.a
需хотеть Нет.одининдивидуальный–force_load
,потому чтодляэтоубеждаться TensorFlow Необходимый C++ 构造устройство Волясвязанный,в противном случае,Вы все еще можете создать приложение,Но вы столкнетесь с тем, что приезжатьсвязанный сеанс не зарегистрирован из-за ошибки.
наконецодининдивидуальный Библиотекаиспользовать Вnsync
,этотдаодининдивидуальный C Библиотека,Экспортируемый мьютекс и другие методы синхронизации.。 существоватьновыйиз TensorFlow Представлено в версии.
$(TENSORFLOW_ROOT) $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/downloads/protobuf/src $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/downloads $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/downloads/eigen $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/gen/proto
после,тывстречасмотретьприезжатьпохожийкартина 3.5 из Содержания:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-BcQ9PbiI-1681653027414)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/bae0f128-065f-4267-b1cc-b2450650e8d7.png)]
картина 3.5: для цели добавлено хаби TensorFlow Сопутствующие изменениястроительства
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-TPYeFSUH-1681653027414)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/3c92f162-ad1d-4718-a72f-07f10ebc71fa.png)]
картина 3.6: Добавьте структуру ускорения
tensorflow/core/platform/default/mutex.h
Найти вприезжатьк Вниздва ХОРОШОкод:#include "nsync_cv.h"
#include "nsync_mu.h"
Затем измените его на:
#include "nsync/public/nsync_cv.h"
#include "nsync/public/nsync_mu.h"
Только需Воля Ручная сборкаиз TensorFlow Библиотека TensorFlow добавить вприезжать iOS приложение Прямо сейчас Может。
использоватьот TensorFlow изhigherВерсия (например. 1.4)Ручная сборкаиз TensorFlow Библиотекасуществоватьтыизприложениесерединанагрузка TensorFlow Обнаружение объектов Модельчас,Воля Нетвстреча出сейчасиспользовать TensorFlow Экспериментальный POD илиот Первые дни Версия Строить Руководство Библиотекачас Может能встречасмотретьприезжатьизошибка版。этотдапотому чтодля Кусочек Вtensorflow/contrib/makefile
серединаизимядляtf_op_files.txt
издокументиспользовать Вопределение应для TensorFlow Библиотекастроитьи Сумка括哪некоторыйдействовать,существовать TensorFlow 1.4 Среднее определение «издействовать» встречается чаще, чем предыдущая версия. Например, Тензор Флоу 1.4 серединаизtf_op_files.txt
документиметьодин ХОРОШОtensorflow/core/kernels/non_max_suppression_op.cc
определение ПонятноNonMaxSuppressionV2
действовать,этот Сразуدلا 什么нас电影Ручная сборкаиз Библиотекасередина处理Понятно载是件,防конец出сейчасошибкаCould not create TensorFlow Graph: Not found: Op type not registered 'NonMaxSuppressionV2'
,Давайте проверим, не возникли ли какие-либо ошибки панели TensorFlow. Волякоме,если遇приезжатьпохожийизOp type not registered
ошибка,но Можеткпроходитьсуществоватьtf_op_files.txt
документсерединадобавить вопределениедействоватьизправильныйизисточниккоддокумент,Потом снова проектbuild_all_ios.sh
Приходитьремонт Долженошибка。создаватьодининдивидуальныйновыйизlibtensorflow-core.a
документ.
Теперь существуют, выполните следующие действия, чтобы воля Модель документа, метка документа Добавьте код Добавитьприложение и спроектировать, чтобы увидеть фактическое из Обнаружение объекты:
ssd_mobilenet_v1_frozen_inference_graph.pb
,faster_rcnn_inceptionv2_frozen_inference_graph.pb
иfaster_rcnn_resnet101_frozen_inference_graph.pb
,а такжеmscoco_label_map.pbtxt
Этикетка映射документи Несколькоиндивидуальныйтесткартинакартина Отправить приезжатьTFObjectDetectionAPI
проект。ios_image_load.mm
及Что.h
документдобавить вприезжатьпроектсередина。protoc-3.4.0-osx-x86_64.zip
документ)скачать协议缓冲区Версия 3.4.0。 хотетьиспользовать TensorFlow 1.4 Библиотеканужно быть точнымиз 3.4.0 Версия,и更высокий Версияиз TensorFlow Могут потребоваться буферы протокола более высокой версии.~/Downloads
Оглавлениесередина,Откройте окно «Терминал» и выполните следующую команду:cd <TENSORFLOW_ROOT>/models/research/object_detection/protos
~/Downloads/protoc-3.4.0-osx-x86_64/bin/protoc string_int_label_map.proto --cpp_out=<path_to_your_TFObjectDetectionAPI_project>, the same location as your code files and the three graph files.
protoc
компилироватьустройство Заказ Заканчиватьназад,ты Волясуществоватьпроектизисточник Оглавлениесерединасмотретьприезжатьдваиндивидуальныйдокумент:string_int_label_map.pb.cc
иstring_int_label_map.pb.h
。 Волядваиндивидуальныйдокументдобавить вприезжать Xcode проектсередина。ViewController.m
重命имядляViewController.mm
,Затемпохожий ВНет. 2 глава,“проходитьмигрироватьизучатьвернокартинакартинаруководить Классификация”изHelloTensorFlow
приложениеизViewController.mm
,существовать Нажмитеиз处理устройствосерединадлятрииндивидуальный Обнаружение объектов Модельдобавить втрииндивидуальныйUIAlertAction
,Мы добавили Воля Модель в приезжатьпроект и Воля для тестирования. Сейчас существуют,完всеизфайлы проекта应нравитьсякартина 3.7 Показано:[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-Eb4f0Hkz-1681653027414)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/7023289e-ae57-4518-920e-140985314d13.png)]
картина 3.7:TFObjectDetection
API файлы проекта
ViewController.mm
серединадобавить в Что余код. существоватьviewDidLoad
середина,добавить вк编степень方РежимсоздаватьновыйUIImageView
изкод,кпервыйпоказыватьтесткартинакартина,исуществоватьвыбирать Понятно特定Модельксуществоватьтесткартинакартинаначальствобегатьпослепоказывать Обнаружениеприезжатьизрезультат,Затемдобавить вк Внизфункциявыполнить:NSString* FilePathForResourceName(NSString* name, NSString* extension)
int LoadLablesFile(const string pbtxtFileName, object_detection::protos::StringIntLabelMap *imageLabels)
string GetDisplayName(const object_detection::protos::StringIntLabelMap* labels, int index)
Status LoadGraph(const string& graph_file_name, std::unique_ptr<tensorflow::Session>* session)
void DrawTopDetections(std::vector<Tensor>& outputs, int image_width, int image_height)
void RunInferenceOnImage(NSString *model)
Внизодиншагпосле,Мы, Воля, объясним, что это за некоторые функции, извыполнить,ты Можетксуществовать Должен书изисточниккодсклад Библиотекаизch3/ios
папкасерединаполучать Местоиметьисточниккод.
SSD MobileNet
Модель,существования занимает О одну секунду в эмуляторе,существовать iPhone 6 Потратьте пять секунд на существованиекартина, как на результат обнаружения розыгрыша. Faster RCNN Inception V2 Это занимает больше времени (требуется в эмуляторе 5 Второй,существовать iPhone 6 Это занимает примерно 20 Второй); Должен Модельтакже СравниватьSSD MobileNet
более точный,Можетк捕获SSD MobileNet
Модель Упущениеизодининдивидуальныйсобакаобъект。 наконецодининдивидуальный Модель,Быстрее RCNN Resnet 101,существовать iOS Волязакрытие, проведенное в эмуляторе 20 Второй,нопотому что Чторазмерисуществовать iPhone 6 крушение. картина 3.8 Подвести итог Понятнобегатьрезультат:[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-T3LUDHYE-1681653027414)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/411e68db-3026-4ba4-964a-3d9a174dce6f.png)]
изображение 3.8: использовать различные из Модельпроектприложения и отображать результаты обнаружения
Вернуться к шагам 7 серединаизфункция,FilePathForResourceName
функциядаиспользовать В返回资источникдокументпутьиз助手функция:mscoco_label_map.pbtxt
документ,Должендокументопределение Понятнохотеть Обнаружениеиз 90 индивидуальныйвернослондобрыйиз Идентификатор, внутреннее имя и отображаемое имя. ,Моделькартинадокументитесткартинакартина。 этоизвыполнитьинассуществоватьначальствоодинглаваизHelloTensorFlow
приложениесерединасмотретьприезжатьизвыполнить Взаимно同。
LoadLablesFile
иGetDisplayName
функцияиспользовать Google Protobuf API нагрузкаианализироватьmscoco_label_map.pbtxt
документ,И возвращает отображаемое имя для отображения обнаружения прибытияизверно слона из ID.
LoadGraph пытается загрузить один из трех документов индивидуального пользователя, выбирающих Модель, и возвращает статус загрузки.
этотдваиндивидуальный关ключфункциядаRunInferenceOnImage
иDrawTopDetections
。 正нравитьсянассуществовать“Настройка Тензор Флоу Обнаружение объектов API”частьсередина Местосмотретьприезжатьиз那Образец,summary_graph
工Инструментпоказывать Понятнонассуществоватьприложениеиспользуется виз Три вида предварительной подготовки Обнаружение объектов Модельизк Внизинформация(пожалуйста, обрати вниманиеuint8
тип):
Found 1 possible inputs: (name=image_tensor, type=uint8(4), shape=[?,?,?,3])
этот Сразудадля什么нас需хотетьиспользоватьuint8
создаватьодининдивидуальныйкартинакартина Тензор,и Нетдаfloat
тип Приходитьнагрузкаприезжатьнасиз Модель,в противном случаесуществоватьбегать Модельчасвстреча出сейчасошибка。 Также обратите внимание, что при использовании TensorFlow C++ API изSession
изRun
метод Воляimage_data
изменять换дляTensor
типизimage_data
час,нас Нетиспользоватьinput_mean
и input_std
Сразукартинанассуществоватьиспользоватькартинакак классификация Модельчас Место做из(связанныйподробный Сравнивать较,Видеть Нет. 2 глава,“проходитьмигрироватьизучатьвернокартинакартинаруководить Классификация”из HelloTensorFlow приложениеизRunInferenceOnImage
выполнить)。 нас知道иметь Четыреиндивидуальныйимядляdetection_boxes
,detection_scores
,detection_classes
иnum_detections
извыход,поэтомуRunInferenceOnImage
Инструментиметьк Внизкод Приходитьдля Модельвходитькартинакартинавходитьиполучать Четыреиндивидуальныйвыход:
tensorflow::Tensor image_tensor(tensorflow::DT_UINT8, tensorflow::TensorShape({1, image_height, image_width, wanted_channels}));
auto image_tensor_mapped = image_tensor.tensor<uint8, 4>();
tensorflow::uint8* in = image_data.data();
uint8* c_out = image_tensor_mapped.data();
for (int y = 0; y < image_height; ++y) {
tensorflow::uint8* in_row = in + (y * image_width * image_channels);
uint8* out_row = c_out + (y * image_width * wanted_channels);
for (int x = 0; x < image_width; ++x) {
tensorflow::uint8* in_pixel = in_row + (x * image_channels);
uint8* out_pixel = out_row + (x * wanted_channels);
for (int c = 0; c < wanted_channels; ++c) {
out_pixel[c] = in_pixel[c];
}
}
}
std::vector<Tensor> outputs;
Status run_status = session->Run({{"image_tensor", image_tensor}},
{"detection_boxes", "detection_scores", "detection_classes", "num_detections"}, {}, &outputs);
хотетьсуществовать Обнаружениеприезжатьизвернослонначальство绘制边界коробка,нас Воляoutputs
Тензор К量проходить递给DrawTopDetections
,назад ВОЗиспользоватьк Внизкоданализироватьoutputs
К量кполучать Четыреиндивидуальныйвыходизценить,и пройдитесь по каждому обнаружению, чтобы получить значение ограничивающей рамки (слева),начальство,верно,(Вниз) а также Обнаружениеприезжатьизверно Нравится ID из отображаемого имени,поэтомуты Можетк编写кодкиспользоватьк Внизимясказать绘制边界коробка:
auto detection_boxes = outputs[0].flat<float>();
auto detection_scores = outputs[1].flat<float>();
auto detection_classes = outputs[2].flat<float>();
auto num_detections = outputs[3].flat<float>()(0);
LOG(INFO) << "num_detections: " << num_detections << ", detection_scores size: " << detection_scores.size() << ", detection_classes size: " << detection_classes.size() << ", detection_boxes size: " << detection_boxes.size();
for (int i = 0; i < num_detections; i++) {
float left = detection_boxes(i * 4 + 1) * image_width;
float top = detection_boxes(i * 4 + 0) * image_height;
float right = detection_boxes(i * 4 + 3) * image_width;
float bottom = detection_boxes((i * 4 + 2)) * image_height;
string displayName = GetDisplayName(&imageLabels, detection_classes(i));
LOG(INFO) << "Detected " << i << ": " << displayName << ", " << score << ", (" << left << ", " << top << ", " << right << ", " << bottom << ")";
...
}
когдавпередлапшаизLOG(INFO)
ХОРОШОикартина 3.1 середина из второго индивидуального теста картина как вместе проектировать, когда, а также TensorFlow Object Detection API веб-сайтначальствопоказыватьиз Демокартинакартиначас,Выведет следующую информацию:
num_detections: 100, detection_scores size: 100, detection_classes size: 100, detection_boxes size: 400
Detected 0: person, 0.916851, (533.138, 498.37, 553.206, 533.727)
Detected 1: kite, 0.828284, (467.467, 344.695, 485.3, 362.049)
Detected 2: person, 0.779872, (78.2835, 516.831, 101.287, 560.955)
Detected 3: kite, 0.769913, (591.238, 72.0729, 676.863, 149.322)
этот Сразудасуществовать iOS приложениеиспользуется всейчасиметьиз После пред-обучение Обнаружение объектов Модель Место需хотетьиз。 каксуществовать iOS используется внасизпройтиобучение Обнаружение объектов Модель? Оказывается,этотиииспользовать предварительное обучение Модель практически такая же,существующие обрабатывают переподготовку картина типа классификационной модели,无需картинаначальствоодинглаваодин Образец修改input_size, input_mean, input_std
иinput_name
。 Все, что вам нужно сделать, это:
output_inference_graph_ssd_mobilenet.pb
документ,использовать ВМодельизобучение Этикетка映射документ,Напримерpet_label_map.pbtxt
)добавить вприезжатьTFObjectDetectionAPI
проектViewController.mm
середина,использоватьпереподготовкаиз МодельвызовRunInferenceOnImage
ViewController.mm
середина,существоватьDrawTopDetections
функция内вызовLoadLablesFile([FilePathForResourceName(@"pet_label_map", @"pbtxt") UTF8String], &imageLabels);
Вот и все. Запланировать Приложение, как вы можете видеть, приезжать вернопереподготовкаиз Модельверно обнаружение прибытияиз результатов корректировок стало лучше. Например, использоватьпроходитьиспользовать набор данных Oxford Pet для переподготовки при создании извперед-изпереподго. Товка Модель, мы хотим видеть ограничивающую рамку вокруг головы без всего индивидуального тела, и это наша существующаякартина. 3.9 Показанное в тестовом изображении изображение выглядит как приезжать:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-3QdwEhv3-1681653027415)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/ced173a8-1b82-4868-a274-3cdf666556e1.png)]
изображение 3.9: Сравнение результатов обнаружения моделиз перед обучением и повторным обучением
Как упоминалось в первой части нашей жизни, приезжатьиз,YOLO2 да另одининдивидуальныйпрохладныйиз Обнаружение объектов Модель,этоиспользовать Понятнои RCNN Серия разных методов. Он использует одну индивидуальную нейронную сеть для ввода изображения, например, деление на регионы фиксированного размера (но не так, как RCNN 系列метод那Образецпоставлятьобластьпредположение),И предсказать каждый отдельный регион по ограничивающей рамке,Категория и Вероятность.
TensorFlow Android Примерприложение Инструментиметьиспользоватьпредварительнообучение YOLO Модельиз Примеркод,нобезиметь iOS Пример。 потому что YOLO2 что удобнее всего из Обнаружения Модель объекта одна и очень точная (посмотрите на существующемвеб-сайте) SSD Модельиз mAP Сравните), поэтому необходимо понять, как существуют iOS приложениеиспользуется в этом.
YOLO использоватьсказатьдля Darknet из уникального открывает источник кадра нейронной сети для обучения своей модели. Также есть Еще один по имени darkflow из Библиотека,Должен Библиотека Можетк Воляиспользовать Darknet обучение YOLO Модельиз Преобразование веса нейронной сетидля TensorFlow картина Формат,ипереподготовкапредварительнообучение Модель.
К TensorFlow Конструкция формата YOLO2 Модель,пожалуйстапервыйотэтотвнутриполучать темный поток. потому что это требует Python3 и TensorFlow 1.0(Python 2.7 и TensorFlow 1.4 или более поздняя версия также может работать), поэтому мы Воляиспользовать Anaconda Приходитьнастраиватьодининдивидуальныйновыйиз Инструментиметь Python3 Поддерживать TensorFlow 1.0 среда:
conda create --name tf1.0_p35 python=3.5
source activate tf1.0_p35
conda install -c derickl tensorflow
同часбегатьconda install -c menpo opencv3
к Установить OpenCV 3,этотда darkflow из Другая индивидуальная зависимость. сейчассуществовать,Воляcd
сдвигк darkflow Оглавление,Затембегатьpip install .
Установить darkflow。
Следующий,нас需хотетьскачать После пред-обучение YOLO Модельиз WEIGHTS - Мы Воля пробуем две индивидуальные Tiny-YOLO Модель, они супер быстрые, но не такие полные, как YOLO Модель точная. 同часбегать Tiny-YOLO Модельи YOLO Модельиз iOS код почти такой же, поэтому мы просто покажем вам, как его запускать. Tiny-YOLO Модель.
ты Можетксуществовать YOLO2 официальный сайтскачать крошечный-йоло-вок (по мотивам 20 индивидуальныйвернослондобрыйиз PASCAL VOC dataSET TRAINING)и крошечный йоло (получил 80 индивидуальныйвернослондобрыйиз MS COCO dataSET ОБУЧЕНИЕ)изучите документ о весе и конфигурации. или darkflow склад Библиотека。 сейчассуществовать,выполнить следующую команду Воля权重изменять换для TensorFlow картинадокумент:
flow --model cfg/tiny-yolo-voc.cfg --load bin/tiny-yolo-voc.weights --savepb
flow --model cfg/tiny-yolo.cfg --load bin/tiny-yolo.weights --savepb
генерироватьиздваиндивидуальныйдокументtiny-yolo-voc.pb
иtiny-yolo.pb
Воля Кусочек Вbuilt_graph
Оглавлениесередина。 сейчассуществовать,изменятьприезжать TensorFlow источниккорень Оглавление,икартинаначальствоодинглаваодин Образецвыполнить следующую команду Приходитьсоздавать量化Модель:
python tensorflow/tools/quantization/quantize_graph.py --input=darkflow/built_graph/tiny-yolo.pb --output_node_names=output --output=quantized_tiny-yolo.pb --mode=weights
python tensorflow/tools/quantization/quantize_graph.py --input=darkflow/built_graph/tiny-yolo-voc.pb --output_node_names=output --output=quantized_tiny-yolo-voc.pb --mode=weights
сейчассуществовать,пожалуйстав соответствии с照к Внизшаг查смотретькаксуществоватьнасиз iOS приложениеиспользуется вдваиндивидуальный YOLO Модель:
quantized_tiny-yolo-voc.pb
иquantized_tiny-yolo.pb
ВсетащитьприезжатьTFObjectDetectionAPI
проектсерединаViewController.mm
серединадобавить вдваиндивидуальныйновыйизтревогадействовать,поэтомусуществоватьбегать Долженприложениечас,ты Воля смотретьприезжать можно использовать для создания модели,нравитьсякартина 3.10 Показано:[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-xdaWkWrO-1681653027415)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/532a45ca-35ee-452b-b33a-79d557fee667.png)]
картина 3.10:Волядваиндивидуальный YOLO Модельдобавить вприезжать iOS приложение
tensorflow::Tensor image_tensor(tensorflow::DT_FLOAT,tensorflow::TensorShape({1, wanted_height, wanted_width, wanted_channels}));
auto image_tensor_mapped = image_tensor.tensor<float, 4>();
tensorflow::uint8* in = image_data.data();
float* out = image_tensor_mapped.data();
for (int y = 0; y < wanted_height; ++y) {
...
out_pixel[c] = in_pixel[c] / 255.0f;
}
std::vector<tensorflow::Tensor> outputs;
tensorflow::Status run_status = session->Run({{"input", image_tensor}}, {"output"}, {}, &outputs);
пожалуйста, обрати внимание,здесьизfor-loop
иsession->Run
иначальствоодинглавасерединаиспользовать Вкартинакак классификацияизкода такжеиспользоватькнигаглававпередлапша Место示издругой Модельруководить Обнаружение объектовизкодсерединажитьсуществовать细微но重хотетьиз区Не(нас未показывать...
серединаизкодчасть,потому чтодляиэтотдваиндивидуальный Примерсерединаиз Взаимно同)。 Чтобы правильно преобразовать изображение в данные, вам необходимо знать подробности о Модельиз,илиот. Python,Android или iOS Изиметь Эффективное обучение Примера, конечно, также необходимо для отладки. для Понятноправильныйнастраиватьвходитьивыход Имя узла,Можеткиспользоватьsummarize_graph
Инструментылинасмного次показыватьиз Python фрагмент кода.
YoloPostProcess
изфункция,Долженфункцияпохожий Вtensorflow/examples/android/src/org/tensorflow/demo/TensorFlowYoloDetector.java
Android Примердокументсерединаизназад处理код:tensorflow::Tensor* output = &outputs[0];
std::vector<std::pair<float, int> > top_results;
YoloPostProcess(model, output->flat<float>(), &top_results);
Мы не показываем здесь остальной код. ты Можетксуществоватьисточниккодхранилище Библиотекаизch3/ios
середина检出完всеиз iOS приложение.
Хотя на основе MobileNet из TensorFlow Модельи Tiny YOLO2 Модельиз менее точен, но TensorFlow Обнаружение объектов Модельи YOLO2 Модель существования мобильных устройств работает очень быстро. Больше Faster RNN Модельи完всеиз YOLO2 Модель более точная, но она занимает больше времени и даже не может существовать на мобильном устройстве. Поэтому К переместить приложение добавить быстрое Обнаружение объектыиз лучший методэто использовать SSD MobileNet или Tiny-YOLO2 Модель,илипройтипереподготовкаитонкая настройкаиз Модель. Модельиз Версия, вероятно, будет иметь лучшую производительность и точность в будущем. Зная это введение в «главуиз», вы сможете существовать. iOS приложениесерединабыстрый启использовать Обнаружение объектов。
существоватькнигаглавасередина,наспервый简хотеть概описывать Понятно各добрый Нет同изна на основе глубокого обученияиз Обнаружение объектовметод。 Затем мы подробно расскажем, как использовать TensorFlow Обнаружение объектов API проходитьпредварительнообучение Модельруководитьсейчас成израссуждение,а такжекаксуществовать Python серединапереподготовкапредварительнообучение TensorFlow Обнаружение объектов Модель. насвозвращатьсяпоставлять Понятносвязанныйкак Вручную создайте библиотеку TensorFlow iOS.,использовать Должен Библиотекасоздаватьновыйиз iOS приложениеа такжекаксуществовать iOS используется в приветствиях и перепереготовкеиз SSD MobileNet и Faster RCNN Модельизподробный Учебник. Наконец, мы представляем существованиетыиз iOS приложениеиспользуется Еще одно мощное из Обнаружение объектов Модель YOLO2 Требуемый контент.
существовать Внизодинглавасередина,этотдаус и компьютерное зрение, связанные с Третьей задачей,нас Воля仔细研究каксуществовать Python и TensorFlow Средняя подготовка и конструкция, интересные и глубокие модели обучения. такжекаксуществовать iOS и Android приложениеиспользуется В него добавлена потрясающая изкартина, похожая на художественный стиль.
сот 2012 Годглубокая нейронная сетьсуществовать AlexNet победить ImageNet 挑战назадоткрыть始起飞к Приходить,人工智能研究人员одинпрямойсуществовать Воляглубокое обучениетехнология(Сумка括После пред-обучениеглубина CNN Модель) приложение во все большем количестве проблемных мест. Иметь Что может быть более творческим, чем создавать искусство? одиндобрый想法уже经提出ивыполнить Понятно,для передачи нейронных паттернов,этоделатьты Можетк利использоватьпредварительнообучениеглубокая нейронная сеть Модельипроходить递картинакартинаилилюбой Ван Гогиз Образец Режимили Монеиз杰делать),Например, другая картинка картины (например, индивидуальная аватарка картинакусокили Вам нравится картинка изкартины),отисоздавать Волякартинакусоксодержаниеи杰делать风格融合существоватьодин起изкартинакусок。 действительныйначальство,иметьодининдивидуальныйимядля Prisma из iOS приложениесуществовать 2016 Год получил награду Год за лучшее приложение степени Год. существует Всего за несколько секунд вы сможете выбрать любой стиль и мигрировать фрагмент изкартины.
существоватькнигаглавасередина,нас Воляпервый概описыватьтридобрый神经Образец Режиммигрироватьметод,Один из оригинальных методов,Улучшенный метод,另одиндобрыйда进одиншагулучшатьизметод。 Затем мы, Воля, подробно изучим, как использовать второй метод для обучения быстрому нейронному стилю Мигрировать Модель, какая Модель может существовать из вас. iOS и Android Смартфониспользуется в,квыполнить Prisma из функции. Далее мы Воляактуальносуществовать iOS приложениеи Android приложениеиспользуется В «Модели» проведет вас через заголовок, чтобы начать процесс создания такого индивидуального приложения. Напоследок мы Воля К вас кратко познакомим TensorFlow Magenta Откройте исходный проект, вы можете получить его за основеглубокое обучениестроить更многоизмузыкаи艺术генерироватьприложение,и Кты展示какиспользоватьодининдивидуальныйпредварительнообучение Образец Режиммигрировать Модель, дана основа Нейронный стиль мигрироватьиз был создан на основе последних достижений исследований, в том числе 26 Крутой художественный стиль, который вы можете использовать iOS и Android приложениесерединаполучать Быстреепроизводительностьирезультат. Подводя итог, в этой главе будут рассмотрены следующие темы:
использовать глубокую нейронную сеть Волякартина, например, контент и другую картинку, например, в стиле, объединить оригинальную идею и алгоритм в 2015 Год Опубликовано летомсуществоватьвопросдля«Художественный стиль из нейронного алгоритма»из论文середина。этода 2014 Год ImageNet Картина Как и победитель конкурса, вызов имеет 16 отдельный сверточный слой или отображение объектов, соответственно представляющее содержимое изображения различного типа изкартина. существуетэтот В исходном методе сначала воля окончательно мигрируетизкартина изображения инициализирует для содержимого изображения изображение сливается с белым шумом изображения изображения. содержание损失функцияопределениедлясодержаниекартинакартинаирезультаткартинакартинаизслой сверткиconv4_2
начальство Все被馈入 VGG-19 После сети определенный набор представлений объектов представлен квадратом потерь ошибок. Функция потери стиля вычисляет стиль изображения типа и результирующий образ типа существования пятьиндивидуальные различные сверточные слои на основе общей разницы ошибок. Затем Воля общая потеря определяет потерю контента, потерю стиля и общую потерю. существоватьтренироваться期间,Потери будут снижены до минимального уровня.,И сгенерируйте одну индивидуальную карту, например, по содержанию, а другую индивидуальную карту, например, по стилю, смешанную вместе из результата, подобного изображению.
хотя Оригинальный нейронный стиль мигрировать алгоритм из потрясающих результатов,Но его производительность очень низкая — обучение стилю мигрироватькартину похоже на часть процесса генерации,в целомсуществовать GPU Потратьте несколько минут на существование CPU Создание хорошего изображения занимает около часа. результат.
Если вас интересуют подробности оригинального алгоритма,Можетксуществоватьк Вниз Расположениечитать Должен论文а такжедокументполныйиз Python выполнить.нас Нетвстречаобсуждатьэтотдобрыйоригинальныйалгоритм,потому чтодлясуществоватьсотовый телефонначальствобегать Долженалгоритмда Нет Может ХОРОШОиз,Дапытаться Долженалгоритм很иметьинтересныйиметьиспользовать,Можетк更好地учитьсякак Иголкаверно Нет同изкомпьютер视觉Задачаиспользоватьпредварительнообучениеглубина CNN Модель.
естественно,существовать 2016 Год,В статье опубликован новый алгоритм «быстрой сортировки трех индивидуальных количеств».,Прямо сейчас«Передача стиля в реальном времени, сверхвысокое разрешение и потеря восприятия»,делать ВОЗда Justin Johnson ждать. Он разделяет процесс обучения и определяет лучшие функции потерь, которые сами по себе являются глубокими нейронными сетями. После обучения (существовать) В следующем разделе мы Воля посмотрим на проживание, существование. GPU начальство Может能хотеть花费Несколькоиндивидуальный Маленькийчас),использоватьтренироватьсяназадиз Модель Приходитьгенерировать Образец Режиммигрироватьизкартинакартинасуществоватькомпьютерначальство Несколько乎да实часиз,исуществовать Смартфонначальство Только需Несколько Второй钟。
использоватьэтот быстро Алгоритм нейронной миграции по-прежнему индивидуален. Недостатки: Модель можно обучить только для определенных стилей.,поэтому,хотетьсуществоватьтыизприложениеиспользуется В различных стилях эти стили необходимо обучать один за другим, чтобы каждый стиль генерировал индивидуальную модель. 。 2017 Год发表Понятноодин篇имядля«Изучение стилей и художественного выражения»изновый论文,это发сейчасодининдивидуальныйодинодинизглубокая нейронная сеть Модель Можетк概括许много Нет同из Образец Режим。 Проект TensorFlow MagentaСумка括Инструментиметьмногодобрый Образец Режимизпредварительнотренироваться Модель,Мы Волясуществовать этого главы из двух последних отдельных частей, посмотрим на проживание,существовать iOS и Android приложениеиспользуется Этот тип модели позволяет создавать мощные и волшебные художественные эффекты, да насколько они легки.
В этом разделе мы Воля К покажем вам, как использовать с иметь TensorFlow избыстрый нейронный стиль Мигрировать алгоритм обучения Модель. Выполните следующие шаги для обучения этой из Модели:
git clone https://github.com/jeffxtang/fast-style-transfer
,этотда Johnson избыстрый Образец Режиммигрироватьиз TensorFlow выполнитьизодининдивидуальныйочень хорошийизветвь,Модифицированныйдляпозволятьсуществовать iOS или Android приложениеиспользуется впройтиобучение Модель.cd
приезжатьбыстрый Образец Режиммигрировать Оглавление,Затембегатьsetup.sh
脚книгаскачатьпредварительнообучение VGG-19 Модельдокумента также MS COCO тренироватьсяданныенабор,нассуществоватьначальствоодинглавасередина提приезжать Проходить,Обратите внимание, что загрузка большого документа может занять несколько часов.starry_night.jpg
из Образец Режимкартинакартинаиимядляww1.jpg
изсодержаниекартинакартинаруководитьтренироваться,Чтобы создать документ контрольной точки:mkdir checkpoints
mkdir test_dir
python style.py --style images/starry_night.jpg --test images/ww1.jpg --test-dir test_dir --content-weight 1.5e1 --checkpoint-dir checkpoints --checkpoint-iterations 1000 --batch-size 10
images
Оглавлениесерединавозвращатьсяиметьодиннекоторыйдругой Образец Режимизкартинакартина,Можетиспользовать Всоздавать Нет同изконтрольно-пропускной пунктдокумент. здесьиспользоватьизstarry_night.jpg
Образец Режимкартинакусокда Ван Гогизодин幅著имя画делать,нравитьсякартина 4.1 Показано:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-LNZjkACR-1681653027415)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/ea1f4494-b7f4-4be2-a897-adfcbc4f0ef4.jpg)]
картина 4.1: Сделать портрет в стиле картины, используя картину Ван Гога из живописи
существовать Нет. 1 глава, "двигаться TensorFlow начиная”серединанастраиватьиз NVIDIA GTX 1070 GPU управляемый Ubuntu В целом индивидуальное обучение О необходимо 5 индивидуальный Маленькийчас,исуществовать CPU Это определенно займет больше времени 。
Этот сценарий изначально был написан для TensorFlow 0.12 Написано из, но позже для TensorFlow 1.1 Были внесены изменения и подтверждено, что они могут существовать. TensorFlow 1.4 из Python 2.7 Обычный бег в окружающей среде.
evaluate.py
документ,Затем取消Комментарийк Вниздва ХОРОШОкод(существовать 158 и 159 ХОРОШО):# saver = tf.train.Saver()
# saver.save(sess, "checkpoints_ios/fns.ckpt")
img_placeholder
имигрироватьизкартинакартинаpreds
создаватьновыйизконтрольно-пропускной пункт:python evaluate.py --checkpoint checkpoints \
--in-path examples/content/dog.jpg \
--out-path examples/content/dog-output.jpg
.pb
документ:python freeze.py --model_folder=checkpoints_ios --output_graph fst_frozen.pb
/tf_files
Оглавление,Волягенерироватьизfst_frozen.pb
документкопироватьприезжать/tf_files
,cd
прямойкопироватьприезжать TensorFlow источниккорень Оглавление(Может能да~/tensorflow-1.4.0
),Затемвыполнить следующую командукгенерировать Количественная модельиз.pb
документ(нассуществовать Нет. 2 Количественная оценка вводится в главе «Изучение верных картина изображений для классификации»):bazel-bin/tensorflow/tools/quantization/quantize_graph \
--input=/tf_files/fst_frozen.pb \
--output_node_names=preds \
--output=/tf_files/fst_frozen_quantized.pb \
--mode=weights
этотвстреча Волязаморозитьизкартинадокументразмерот 6.7MB уменьшатьприезжать 1,7 МБ, это означает, что оно существует, если вы разместили изприложение 50 разные стили 50 индивидуальный Модель,но增加изразмер Воляодля 85MB。 Apple в 2017 Год 9 Луна объявила, что лимит загрузки приложений для сотовой беспроводной сети увеличен 150 МБ, поэтому пользователи по-прежнему смогут загружать инструмент через сотовые сети. 50 многодобрый Неттакой же Режимизприложение.
этот Сразуэто использовать изображение стиля и ввести изображение изображения для обучения и квантования. Быстрое нейронное мигрирование. Моделировать все шаги. Вы можете существовать шаги 3 Чжуншенгиз test_dir
Посмотрите сгенерированное изображение изкартины в каталоге, чтобы увидеть эффект мигрировать из стиля. если需хотеть,ты МожеткиспользоватьГиперпараметры записаны в https://github.com/jeffxtang/fast-style-transfer/blob/master/docs.md#style. Для просмотра, а Также надеюсь, что стиль мигрировать работает лучше.
существоватьучитьсякаксуществовать iOS и Android приложениеиспользуется вэтот вперед какой-то модели, важно из маленького да, нужно записать существование 5 шагиспользуется виз,обозначениедля--in-path
ценитьизкартинакартинаизточныйкартинакартинаширинаивысокий度параметр,исуществовать iOS или Android кодиспользуется вкартина, например, значение ширины и высоты (как долго вы увидите приезжать), в противном случае появится существующее приложение в модели проекта. Conv2DCustomBackpropInput: Size of out_backprop doesn't match computed
ошибка 。
Оказывается, существование состоит из TensorFlow Экспериментальный容устройство Строить iOS приложениесередина,использоватьсуществоватьшаг 7 Чжуншенгизfst_frozen_quantized.pb
Модельдокументбезиметь问вопрос,нравиться Нет. 2 глава,“проходитьмигрироватьизучатьвернокартинакак классификация”,но Проект TensorFlow Предварительное обучение в Magenta мультистилевая модельдокумент(нас Волясуществоватькнигаглаваизназад续частьиспользуется в)Воля не последует примеру TensorFlow Pod один起нагрузка(перехватывать 2018 Год 1 луна)—пытатьсянагрузкамультистилевая модельдокумента Воля выдает следующую ошибку:
Could not create TensorFlow Graph: Invalid argument: No OpKernel was registered to support Op 'Mul' with these attrs. Registered devices: [CPU], Registered kernels:
device='CPU'; T in [DT_FLOAT]
[[Node: transformer/expand/conv1/mul_1 = Mul[T=DT_INT32](transformer/expand/conv1/mul_1/x, transformer/expand/conv1/strided_slice_1)]]
существовать Нет. 3 В главе «Обнаружение верных слонов и их расположение» мы обсуждаем причины такжекакиспользовать Ручная сборкаиз TensorFlow Библиотека Исправьте эту ошибку. потому чтонас Волясуществовать同один iOS приложениеиспользуется это два вида Модели, поэтому наша Воляиспользовать является более мощной в ручном режиме. TensorFlow Библиотекасоздаватьодининдивидуальныйновыйиз iOS приложение.
Если вы не создали его вручную TensorFlow Библиотека, сначала тебе нужно вернуться к главе. Затем выполните следующие шаги для преобразования TensorFlow поддерживатьибыстрыйиз神经Образец Режиммигрировать Модельдокумент Добавить жильевашиз iOS приложениеитестбегать Долженприложение:
NeuralStyleTransfer
,или ВОЗсуществоватьсейчасиметьприложениесередина,существоватьPROJECT
Внизсоздаватьодининдивидуальныйновыйизиспользовать户определениенастраивать,命имядляTENSORFLOW_ROOT
,ценитьдля$HOME/tensorflow-1.4.0
,предполагалосьсуществовать Там уже Установить TensorFlow 1.4.0,ЗатемсуществоватьTARGET
изстроитьнастраиватьсередина,Воля Другие флаги компоновщика-force_load $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/gen/lib/libtensorflow-core.a $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/gen/protobuf_ios/lib/libprotobuf.a $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/gen/protobuf_ios/lib/libprotobuf-lite.a $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/downloads/nsync/builds/lipo.ios.c++11/nsync.a
Затем Воля标вопрос搜索путьнастраиватьдля:
$(TENSORFLOW_ROOT) $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/downloads/protobuf/src $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/downloads $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/downloads/eigen $(TENSORFLOW_ROOT)/tensorflow/contrib/makefile/gen/proto
fst_frozen_quantized.pb
Документы Некоторые тестовые изображения, такие как перетаскивание, приезжатьпроектизпапка. отквпередиз iOS приложениесередина,илиоткнига书источниккодсклад БиблиотекасерединаCh4/ios
ВнизизNeuralStyleTransfer
приложениепапкасерединакопироватьнассуществоватьвперед Несколькоглаваиспользуется в Проходитьиз Взаимно同ios_image_load.mm
и.h
документприезжатьпроектсередина。
ViewController.m
重命имядляViewController.mm
и Воля ЧтозаменятьдляCh4/ios/NeuralStyleTransfer
серединаизViewController.h
и.mm
документ. После тестирования запуска приложения мы Воля подробно знакомим с основным фрагментом. кода.
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-bXLQcpNY-1681653027415)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/9bdc2a19-7e59-4f72-b41f-ea3eeba0c5c5.png)]
картина 4.2:приложение Образец Режим Извпередизоригинальныйсобакакартинакусок
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-RdEYvQG1-1681653027416)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/a78207bb-2407-4343-b84d-2f17aacfd4ff.png)]
картина 4.3: Это как если бы Ван Гог нарисовал твою любимую собаку.
Просто выберите изкартины, сделанные по стилю.,Затемв соответствии с照начальствоодин节серединаизшагдействовать,Прямо сейчас Может轻松строить Инструментиметь Неттакой же Режимиздругой Модель. Затем вы можете выполнить действия, описанные в этом разделе. iOS приложениеиспользуется в Модель. Если вы хотите узнать метод обучения Модельиз, вам следует просмотреть предыдущий раздел из GitHub Посмотреть код в магазине Библиотека. Давайте подробнее рассмотрим использование модели Complete Magic из iOS код.
ViewController.mm
серединаиметь Несколькоиндивидуальный关ключкодчасть,Они существуют вводить изображение, например, в результате предварительной обработки, и мигрировать карту, как в результате постобработки, да только из:
wanted_width
иwanted_height
определениедляихранилище Библиотекакартинакартинаexamples/content/dog.jpg
изкартинакартинаширинаивысокий度Взаимно同изценить:const int wanted_width = 300;
const int wanted_height = 400;
dispatch_async(dispatch_get_global_queue(0, 0), ^{
UIImage *img = imageStyleTransfer(@"fst_frozen_quantized");
dispatch_async(dispatch_get_main_queue(), ^{
_lbl.text = @"Tap Anywhere";
_iv.image = img;
});
});
tensorflow::Tensor image_tensor(tensorflow::DT_FLOAT, tensorflow::TensorShape({wanted_height, wanted_width, wanted_channels}));
auto image_tensor_mapped = image_tensor.tensor<float, 3>();
Session->Run
методизвходить Имя узлаивыход Имя узлаопределениедляитренироваться Модельчас Взаимно同:std::string input_layer = "img_placeholder";
std::string output_layer = "preds";
std::vector<tensorflow::Tensor> outputs;
tensorflow::Status run_status = session->Run({{input_layer, image_tensor}} {output_layer}, {}, &outputs);
tensorToUIImage
из实использоватьфункция,к Воля Тензорданныепервыйизменять换для RGB Буфер:UIImage *imgScaled = tensorToUIImage(model, output->flat<float>(), image_width, image_height);
static UIImage* tensorToUIImage(NSString *model, const Eigen::TensorMap<Eigen::Tensor<float, 1, Eigen::RowMajor>, Eigen::Aligned>& outputTensor, int image_width, int image_height) {
const int count = outputTensor.size();
unsigned char* buffer = (unsigned char*)malloc(count);
for (int i = 0; i < count; ++i) {
const float value = outputTensor(i);
int n;
if (value < 0) n = 0;
else if (value > 255) n = 255;
else n = (int)value;
buffer[i] = n;
}
UIImage
Пример,Затем再调все Чторазмери返回к供показывать:UIImage *img = [ViewController convertRGBBufferToUIImage:buffer withWidth:wanted_width withHeight:wanted_height];
UIImage *imgScaled = [img scaleToSize:CGSizeMake(image_width, image_height)];
return imgScaled;
完всеизкодиприложениестепеньпоследовательность Кусочек ВCh4/ios/NeuralStyleTransfer
папкасередина。
существовать Нет. 2 Глава, «Проходитьмигрировать Обучение верной картине изображений для классификации» мы описываем, как добавить TensorFlow в свои приложения для Андроид., но ничего нет UI。 Давайте создадим нового человека Android приложение,киспользоватьнас Извпередтренироватьсяисуществовать iOS используется визбыстрый Образец Режиммигрировать Модель.
потому чтоэтот Android приложениепоставлять Понятноодининдивидуальныйочень хорошийиз机встреча Приходитьиспользоватьнаименееиз TensorFlow Связанный код, Android UI Резьбовой код поставляется в комплекте TensorFlow Модельуправляемыйприложение, поэтому мы начинаем добавлять код каждой строки, чтобы помочь вам узнать больше о возможностях развития. Android TensorFlow Что нужно для приложения:
FastNeuralTransfer
делатьдляприложениеимясказать; существоватьщелкнуть“Заканчивать”Извперед,принимать Местоиметьпо умолчаниюнастраивать。 assets
папка,нравитьсякартина 2.13 Тогда Воля показал, что ты тренировался из быстрого нейронного мигрировать Модельот iOS приложениесерединатащитьдвигаться(еслитысуществоватьначальствоодин节серединапытаться Проходить),или ВОЗотпапка/tf_files
серединатащитьдвигаться,нравиться“тренироватьсябыстрый神经Образец Режиммигрировать Модель”частьшаг 7 Как показано, а такжеодиннекоторыйтесткартинакартинаприезжатьassets
папка。
build.gradle
документсередина,существовать dependencies
из Добавить строку в конце compile 'org.tensorflow:tensorflow-android:+'
и。
res/layout/activity_main.xml
документ,существовать Чтосерединаудалитьпо умолчаниюизTextView
,Затемпервыйдобавить водининдивидуальныйImageView
кпоказывать Образец Режиммигрироватьвпередназадизкартинакартина:
<ImageView
android:id="@+id/imageview"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Style Transfer"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.502"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.965" />
MainActivity.java
документсередина,первыйвходитьнас最重хотетьизгид入:import org.tensorflow.contrib.android.TensorFlowInferenceInterface;
TensorFlowInferenceInterface
поставлять JAVA интерфейс для доступа к машине TensorFlow рассуждение API。 ЗатемубеждатьсяMainActivity
добрыйвыполнить ПонятноRunnable
интерфейс, нам нужно, чтобы наше приложение было отзывчивым и существовало, загруженным в рабочие потоки и запускало TensorFlow Модель.
private static final String MODEL_FILE = "file:///android_asset/fst_frozen_quantized.pb";
private static final String INPUT_NODE = "img_placeholder";
private static final String OUTPUT_NODE = "preds";
private static final String IMAGE_NAME = "pug1.jpg";
private static final int WANTED_WIDTH = 300;
private static final int WANTED_HEIGHT = 400;
ты Можетк Воля任何тренироватьсяиметьбелыйиз Модельдокументиспользовать ВMODEL_FILE
。 INPUT_NODE
иOUTPUT_NODE
изценитьинассуществовать Python тренироваться脚книгасерединанастраиватьисуществовать iOS приложениеиспользуется виз значения одинаковые. такой же,WANTED_WIDTH
иWANTED_HEIGHT
инассуществовать“тренироватьсябыстрый神经Образец Режиммигрировать Модель”частьиз Нет. 5 шагиспользуется виз--in-path
картинакартинаизширинаивысокий度Взаимно同。
private ImageView mImageView;
private Button mButton;
private Bitmap mTransferredBitmap;
private TensorFlowInferenceInterface mInferenceInterface;
mImageView
иmButton
ВоляиспользоватьonCreate
методсерединаиз ПростойfindViewById
методруководитьнастраивать。 mTransferredBitmap
Воля Сдержанныймигрироватькартинакартинаиз Кусочеккартина,к便mImageView
Можеткпоказыватьэто。 mInferenceInterface
использовать Внагрузканасиз TensorFlow Модель,Тип Воля картина типа Тип Модель,бегать Модель,и返回рассуждениерезультат.
Handler
Пример发送информацияпосле,создаватьодининдивидуальныйHandler
Пример Приходить处理существовать主线степеньсерединапоказыватьфинальныймигрироватьизкартинакартинаиз Задача,насвозвращатьсясоздаватьодининдивидуальныйудобныйизToast
информация:Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
mButton.setText("Style Transfer");
String text = (String)msg.obj;
Toast.makeText(MainActivity.this, text,
Toast.LENGTH_SHORT).show();
mImageView.setImageBitmap(mTransferredBitmap);
} };
onCreate
методвнутренний,Мы ВоляиспользоватьmImageView
Пример变量绑定布局 xml документсерединаизImageView
,Волятесткартинакартинаиз Кусочеккартинанагрузкаприезжатьassets
папкасередина,исуществоватьImageView
серединапоказывать :mImageView = findViewById(R.id.imageview);
try {
AssetManager am = getAssets();
InputStream is = am.open(IMAGE_NAME);
Bitmap bitmap = BitmapFactory.decodeStream(is);
mImageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
mButton
инастраиватьодининдивидуальный Нажмите监слушатьустройство,чтобы существовало при нажатии кнопки,Создать и начать новую тему,ивызовrun
метод:mButton = findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mButton.setText("Processing...");
Thread thread = new Thread(MainActivity.this);
thread.start();
}
});
run
методсередина,наспервый声明трииндивидуальныймножество,идля Что分配подходящийкогдаиз Память:intValues
множестводержатьтесткартинакартинаизкартинабелыйценить,Каждыйиндивидуальныйкартинабелыйценить代表 32 Кусочек Значения ARGB (альфа, красный, зеленый, синий); floatValues
множествонравиться Модель Местопредварительно期из那Образец分Недержать Каждыйиндивидуальныйкартинабелыйизкрасный,значение зеленого и синего,поэтому ЧторазмердаintValues
изтри倍,иoutputValues
изразмериfloatValues
Взаимно同 ], но сохраните выходное значение Модельиз:public void run() {
int[] intValues = new int[WANTED_WIDTH * WANTED_HEIGHT];
float[] floatValues = new float[WANTED_WIDTH * WANTED_HEIGHT * 3];
float[] outputValues = new float[WANTED_WIDTH * WANTED_HEIGHT * 3];
Затем,Мы сдаем анализы, как из Кусочеккартинаданные,верно, который масштабируется в соответствии с обучением, используется визкартина, например, по размеру,Затем Воля缩放назадиз КусочеккартинаизкартинабелыйнагрузкаприезжатьintValues
множествои Воля Чтоизменять换дляfloatValues
:
Bitmap bitmap = BitmapFactory.decodeStream(getAssets().open(IMAGE_NAME));
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, WANTED_WIDTH, WANTED_HEIGHT, true);
scaledBitmap.getPixels(intValues, 0, scaledBitmap.getWidth(), 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight());
for (int i = 0; i < intValues.length; i++) {
final int val = intValues[i];
floatValues[i*3] = ((val >> 16) & 0xFF);
floatValues[i*3+1] = ((val >> 8) & 0xFF);
floatValues[i*3+2] = (val & 0xFF);
}
Уведомление,val
илиintValues
картинабелыймножествоиз Каждыйиндивидуальный元белыйдаодининдивидуальный 32 Кусочеквсе数,существовать Что Каждыйиндивидуальный 8 битовые области зарезервированы ARGB。 насиспользовать Кверносдвиг Кусочек(использовать Вкрасныйизеленый)ив соответствии с Кусочеки Операция Приходить提取Каждыйиндивидуальныйкартинабелыйизкрасный,значение зеленого и синего,и忽略intValues
元белыйсередина最左边из 8 Кусочекиз Alpha ценить. поэтомуfloatValues[i*3]
,floatValues[i*3+1]
иfloatValues[i*3+2]
分Не保持картинабелыйизкрасный,Зеленый и синий ценить.
сейчассуществовать,нассоздаватьодининдивидуальныйновыйизTensorFlowInferenceInterface
Пример,исуществовать Чтосередина ВоляAssetManager
Примери Модельдокументимяпроходить递приезжатьassets
папкасередина,Затемиспользовать TensorFlowInferenceInterface
Пример Воляизменять换назадиз[ floatValues
множество。 если Модель需хотетьмногоиндивидуальныйвходитьузел,но Можетквызовмногоиндивидуальныйfeed
метод。 Затем мы передаем имя выходного узла из массива строк в проект Модель. существуетэтот, правда в нашем избыстром стиле мигрировать Мод ель, у нас есть только один индивидуальный входной узел и один индивидуальный выходной узел. Наконец, мы передаем имя выходного узла, чтобы получить выходную цену Моделииз. Если вы хотите получить несколько отдельных выходных узлов, вы можете вызвать индивидуальную выборку:
AssetManager assetManager = getAssets();
mInferenceInterface = new TensorFlowInferenceInterface(assetManager, MODEL_FILE);
mInferenceInterface.feed(INPUT_NODE, floatValues, WANTED_HEIGHT, WANTED_WIDTH, 3);
mInferenceInterface.run(new String[] {OUTPUT_NODE}, false);
mInferenceInterface.fetch(OUTPUT_NODE, outputValues);
МодельгенерироватьизoutputValues
существовать Каждыйиндивидуальный元белыйсередина Все保留 0 приезжать 255 между 8 Кусочек красного, зеленого и синего значений один, сначала мы верно, красный и зеленый значения используем сдвиг влево, но у нас есть другой размер смещения Кусочек (16 и 8),Затемиспользоватьв соответствии с Кусочекили Операция Воля 8 Кусочек Alpha ценить(0xFF
)и 8 Кусочек RGB ценить组合,ВолярезультатдержатьсуществоватьintValues
множествосередина:
for (int i=0; i < intValues.length; ++i) {
intValues[i] = 0xFF000000
| (((int) outputValues[i*3]) << 16)
| (((int) outputValues[i*3+1]) << 8)
| ((int) outputValues[i*3+2]);
Затем,нассоздаватьодининдивидуальныйновыйизBitmap
Пример,ииспользоватьintValues
множествонастраивать Чтокартинабелыйценить,Воля Кусочеккартина увеличить приезжать тест изображение как в оригинальном размере,и Воля缩放назадиз КусочеккартинадержатьприезжатьmTransferredBitmap
:
Bitmap outputBitmap = scaledBitmap.copy( scaledBitmap.getConfig() , true);
outputBitmap.setPixels(intValues, 0, outputBitmap.getWidth(), 0, 0, outputBitmap.getWidth(), outputBitmap.getHeight());
mTransferredBitmap = Bitmap.createScaledBitmap(outputBitmap, bitmap.getWidth(), bitmap.getHeight(), true);
наконец,Наш главный поток процессора К отправляет сообщение,Чтобы он знал стиль отображения мигрироватькартину как время:
Message msg = new Message();
msg.obj = "Tranfer Processing Done";
mHandler.sendMessage(msg);
поэтому,общий共Нетприезжать 100 Код ОК, у вас есть индивидуальный полный Android приложение, может правдакартина любит потрясающий стиль мигрировать. существовать Android Устройство или виртуальное устройство можно запустить в приложении, сначала Воля посмотрите, как приезжать к человеку с кнопкой "Из" Проверьте изображение изображения, нажмите кнопку, и через несколько секунд вы увидите изображение в стиле прибытия, например изображение. 4.4 Показано:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-I7Jq4uxa-1681653027416)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/07ef305b-1e23-4a4c-98f5-faf14f398d65.png)]
картина 4.4:Android начальствооригинальныйкартинакартинаи Образец Режиммигрироватьизкартинакартина
быстрый神经Образец Режим Модельжитьсуществоватьизодининдивидуальный问вопросда,Даже после квантования каждая отдельная Модель имеет только 1,7 МБ.,Нам все еще нужно тренировать каждый стиль отдельно.,и Каждыйиндивидуальныйобучение Модель Только能поддерживатьодиндобрый Образец Режиммигрировать。 К счастью, у этих индивидуальных проблем есть хорошие решения.
Проект TensorFlow Magentaпозволятьтыиспользовать 10 многодобрый После пред-обучение Модель Приходитьгенерироватьновыйизмузыкаикартинакартина。 существуют В этом разделе и в следующем разделе мы, Воля, сосредоточимся на использовании Magenta изкартинакартина Образец Режим化Модель. ты Можеткщелкнуть Связьсуществоватькомпьютер Установить на Magenta,хотяхотетьсуществоватьдвигатьсяприложениеиспользуется в своей крутой изкартине, как стиль мигрировать Модель или Установить Magenta。 на на основе Диссертация «Приобретенное изображение художественного стиля»выполнить Magenta Предварительно обученный стиль Мигрировать Модель устраняет ограничение, заключающееся в том, что отдельная Модель может иметь только один стиль, и позволяет нескольким стилям содержать сущ. Вы можете комбинировать эти стили в любом одном стиле. ты Можетксуществоватьэтаиндивидуальная страницаначальствобыстрый浏览Должен Демо,но Можетксуществоватьздесьскачатьдваиндивидуальныйпредварительнообучениеконтрольно-пропускной пункт Модель. потому чтоконтрольно-пропускной пунктдокументсерединадержать Понятно某некоторыйNaN
(Нетдачисло)ошибка,поэтому无法прямойсуществоватьтыиздвигатьсяприложениеиспользуется в。 Мы не будем подробно объяснять, как удалить это какое-то число и сгенерировать существование для вашего изприложения. виз.pb
Модельдокумент(если感интерес,ты Можетк查смотретьэтотвнутри),настолькоиспользовать TensorFlow Android Примерtensorflow/examples/android/assets
середина Сумка含из После пред-обучениеstylize_quantized.pb
Модельдокумент Приходить查смотреть Что工делать原理。
Если ты действительно хочешь тренироваться сиз Модель,но Можеткв соответствии с照впередлапшаизimage_stylization
Связьсерединаизтренироваться Модель Внизизшагруководить。 Но учтите, что вам редко понадобится 500GB из Доступное место на диске для загрузки ImageNet набор данных и нужен сильный из GPU чтобы завершить обучение. существоватькнига节или Внизодин节серединасмотретьприезжатькодирезультатпосле,ты更иметь Может能вернопредварительнообучениеstylize_quantized.pb
Модель启использоватьиз Прохладный Образец Режиммигрироватьэффект果感приезжатьудовлетворить.
существоватькнигаглававпередлапшасоздаватьиз iOS приложениесередина,执ХОРОШОк Внизшаг Приходитьиспользоватьибегатьмультистилевая модель:
stylize_quantized.pb
документотtensorflow/examples/android/assets
тащить放приезжать Xcode серединаиз iOS apps
папкасередина。dispatch_async
,К抽голова处理устройствосерединадобавить вновыйизUIAlertAction
:UIAlertAction* multi_style_transfer = [UIAlertAction actionWithTitle:@"Multistyle Transfer" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
_lbl.text = @"Processing...";
_iv.image = [UIImage imageNamed:image_name];
dispatch_async(dispatch_get_global_queue(0, 0), ^{
UIImage *img = imageStyleTransfer(@"stylize_quantized");
dispatch_async(dispatch_get_main_queue(), ^{
_lbl.text = @"Tap Anywhere";
_iv.image = img;
});
});
}];
input_layer
иoutput_layer
ценитьзаменятьдляновый Модельизправильныйценить,идобавить водининдивидуальныйимядляstyle_num
изновыйвходить Имя узла(этотнекоторыйценить ПриходитьсStylizeActivity.java
серединаиз Пример Android код,нотытакже Можеткиспользоватьsummarize_graph
工Инструмент,TensorBoard или мы существоваливпереди нескольких глав, которые показаны в параграфе изкода «Найти их приезжать»):std::string input_layer = "input";
std::string style_layer = "style_num";
std::string output_layer = "transformer/expand/conv3/conv/Sigmoid";
tensorflow::Tensor image_tensor(tensorflow::DT_FLOAT, tensorflow::TensorShape({1, wanted_height, wanted_width, wanted_channels}));
auto image_tensor_mapped = image_tensor.tensor<float, 4>();
style_tensor
определениедляформадля[NUM_STYLES * 1]
из另одининдивидуальный Тензор,ЧтосерединаNUM_STYLES
существоватьViewController.mm
изоткрытьголоваопределениедляconst int NUM_STYLES = 26;
。 число 26 да stylize_quantized.pb
Модельдокументсередина内置из Образец Режим数,ты Можетксуществовать Чтосерединабегать Android TF Стилизовать приложение и просмотреть 26 вид результата, например картина 4.5 показано. Обратите внимание, что нет. 20 Фотография Чжана (левый нижний угол изкартины) да Ван Гог Знакомый из «Звездной из Ночи»:[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-n4095Y9F-1681653027416)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/ea7a04fe-8b56-47b2-ac5a-7f25ced4acbd.png)]
картина 4.5:мультистилевая модельсерединаиз 26 добрый Образец Режимкартинакартина
tensorflow::Tensor style_tensor(tensorflow::DT_FLOAT, tensorflow::TensorShape({ NUM_STYLES, 1}));
auto style_tensor_mapped = style_tensor.tensor<float, 2>();
float* out_style = style_tensor_mapped.data();
for (int i = 0; i < NUM_STYLES; i++) {
out_style[i] = 0.0 / NUM_STYLES;
}
out_style[19] = 1.0;
out_style
множествосередина Местоиметьценитьизобщийидолжендля 1,финальныйиз Образец Режиммигрироватькартинакартина Воляда Зависит отout_style
множествосерединаобозначениеизценить加权из Образец Режимизсмешивание。 Например, впередлапшаизкод Воля использовать только стиль звездной ночи (индекс массива 19 верно应Вкартина 4.5 Среднее изображение в стиле, подобное списку 20 индивидуальныйкартинакартина)。
если希望Воля繁звезда点点изночной видкартинакартинаиверноначальстворогкартинакартина均匀смешивание,но需хотетьиспользоватьк Внизкодзаменятьвпередлапшакод块серединаизнаконецодин ХОРОШО:
out_style[4] = 0.5;
out_style[19] = 0.5;
Если ты хочешь иметь 26 добрый Образец Режим均等地смешиваниеиспользовать,пожалуйста Волявпередлапшаизfor
循环Изменятьдляк Вниз Образец Режим,и Нетхотеть Волядругойценитьнастраиватьдлялюбой конкретныйизout_style
元белый:
for (int i = 0; i < NUM_STYLES; i++) {
out_style[i] = 1.0 / NUM_STYLES;
}
Позже вы увидите три стиля настройки мигрировать эффект в Волясуществоватькартина 4.8 и 4.9.
session->Run
вызов Изменятьдляк Вниз ХОРОШО,к Волякартинакартина Тензори Образец Режим Тензор Все Отправить приезжать Модель:tensorflow::Status run_status = session->Run({{input_layer, image_tensor}, {style_layer, style_tensor}}, {output_layer}, {}, &outputs);
этотнекоторый Сразуэто использоватьмультистилевая модельбегать iOS приложение Необходимыйвсе Изменять。 сейчассуществоватьбегатьтыизприложение,ты Воляпервыйсмотретьприезжатьнравитьсякартина 4.6 Место示из Содержания:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-qKmu1OCt-1681653027416)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/f2841f1f-b0c3-412d-822b-5e9d0f34f235.png)]
изображение 4.6: Показать оригинальное содержание
Нажмитепроизвольный Расположение,ты Волясмотретьприезжатьдваиндивидуальный Образец Режимвыбирать,нравитьсякартина 4.7 Показано:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-aLUbStFZ-1681653027417)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/c462927f-71be-46f1-995f-5cbd536ae175.png)]
картина 4.7: Показаны два стиля Модельизвыбирать
Две уже мигрироваликартину из результатов,out_style[19] = 1.0
; нравитьсякартина 4.8 Показано:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-iWx8H5Nn-1681653027417)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/cc28a550-1a66-4845-b330-1c01d3806e62.png)]
изображение 4.8: Два разных стиля Моделиз мигрировать результаты (слева дабыстрый стиль мигрировать,верносторонадамного Образец Режим)
картина 4.9 показывать Понятносуществоватькартина 4.5 используется Картина «ЗВЕЗДНАЯ НОЧЬ» и изображение в правом верхнем углу равномерно смешаны. также Местоиметь 26 Этот стиль представляет собой равное сочетание результатов, например, картина 4.9 Показано:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-NgOQ5lkI-1681653027417)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/c5dd63f4-32a7-4177-afb8-af0e8a8770e8.png)]
картина 4.9: Несколько стилей и разные смешанные результаты (слева: половина звездного неба, половина другого, справа: все 26 стиль измикс)
мультистилевая модельсуществовать iPhone 6 Требуется на проект О 5 Второй钟,Сравниватьбыстрый Образец Режиммигрировать Модельбегатьбыстрый О 2-3 раз.
хотя TensorFlow Android Примерприложение существует во многих стилях. iOS приложениеиспользуется в Android Примерприложениесерединаиз Модель),но Примерприложениесерединаи TensorFlow Связанный исходник, но и более 600 ХОРОШОизStylizeActivity.java
документсерединаиз很много UI кодсмешиваниесуществоватьодин起。 Вы также можете пройти TensorFlow Android Образец Режиммигрироватьиз Codelab руководитьдействовать,Дакоди TensorFlow Android Примерприложение примерно то же самое. потому чтонасуже经использовать TensorFlow быстрый Образец Режиммигрировать Модельвыполнить Понятно Android приложениеиз Простое обновление и поэтому очень интересное изда как можно изменить всего несколько строк кода Для поддержки иметь один мощный мультистильный стиль приложения. это также должно стать более интуитивным способом понять, в чем превосходство Воля. TensorFlow Модельдобавить вприезжатьсейчасиметьиз Android В приложении.
поэтому,этот Сразудасуществоватьнас Извперед Строить Android приложениеиспользуется в Различные стили мигрировать Требуется модель:
stylize_quantized.pb
документотtensorflow/examples/android/assets
тащить放приезжатьнас Android приложениеизassets
папкасередина。
MainActivity.java
,Найдите следующие три строки кода:private static final String MODEL_FILE = "file:///android_asset/fst_frozen_quantized.pb";
private static final String INPUT_NODE = "img_placeholder";
private static final String OUTPUT_NODE = "preds";
Затем замените их следующими четырьмя строками:
private static final int NUM_STYLES = 26;
private static final String MODEL_FILE = "file:///android_asset/stylize_quantized.pb";
private static final String INPUT_NODE = "input";
private static final String OUTPUT_NODE = "transformer/expand/conv3/conv/Sigmoid";
этотнекоторыйценитьинассуществоватьначальствоодин节середина Строить iOS приложение Взаимно同。 Если ты делаешь только Android приложениеразвивать и пропустить предыдущее индивидуально iOS часть,пожалуйстабыстрыйчитатьначальствоодининдивидуальный iOS Некоторые шаги в верном направлении 3 из Объясните.
mInferenceInterface.feed(INPUT_NODE, floatValues, WANTED_HEIGHT, WANTED_WIDTH, 3);
mInferenceInterface.run(new String[] {OUTPUT_NODE}, false);
mInferenceInterface.fetch(OUTPUT_NODE, outputValues);
for (int i = 0; i < intValues.length; ++i) {
intValues[i] = 0xFF000000
| (((int) outputValues[i * 3]) << 16)
| (((int) outputValues[i * 3 + 1]) << 8)
| ((int) outputValues[i * 3 + 2]);
}
использоватьпервыйнастраиватьstyleVals
множествоизкодчасть(есливерноstyleVals
икакнастраиватьмножествоизценить感приезжатьозадаченный,пожалуйста, проверьтеначальствоодин节Нет. 5 Пошагово из аннотации):
final float[] styleVals = new float[NUM_STYLES];
for (int i = 0; i < NUM_STYLES; ++i) {
styleVals[i] = 0.0f / NUM_STYLES;
}
styleVals[19] = 0.5f;
styleVals[4] = 0.5f;
Затем Волявходитькартинакартина Тензори Образец Режимценить Тензор同час馈送приезжать Модель,ибегать Моделькполучатьмигрироватьизкартинакартина:
mInferenceInterface.feed(INPUT_NODE, floatValues, 1, WANTED_HEIGHT, WANTED_WIDTH, 3);
mInferenceInterface.feed("style_num", styleVals, NUM_STYLES);
mInferenceInterface.run(new String[] {OUTPUT_NODE}, false);
mInferenceInterface.fetch(OUTPUT_NODE, outputValues);
Наконец, он обрабатывает вывод:
for (int i=0; i < intValues.length; ++i) {
intValues[i] = 0xFF000000
| (((int) (outputValues[i*3] * 255)) << 16)
| (((int) (outputValues[i*3+1] * 255)) << 8)
| ((int) (outputValues[i*3+2] * 255));
}
Уведомление,мультистилевая модель返回浮点数множествоприезжатьoutputValues
,это们из范围Всесуществовать 0.0 приезжать 1.0 между, поэтому нам нужна Воля, чтобы их умножить. существующее приложение оставило сдвиг Кусочек, чтобы получить красное и зеленое значение вперед, продолжайте сначала 255 умножить на 255,Затемверно intValues
множествоиз Каждыйиндивидуальный元белыйприложениев соответствии с Кусочек“или”настраиватьфинальный ARGB ценить.
этот Сразуда Воля Прохладныйизмультистилевая модельдобавить вприезжатьнезависимыйиз Android приложение Необходимыйвсе工делать。 сейчассуществовать,Давайте запустим приложение,И используйте разные изображения из тестов, например,ноиспользоватьи iOS Сочетание тех же трех значений стиля в приложении.
общий 20 и сначала 5 стиль изображения нравится шаг за шагом 3 После равного смешивания средних сегментов исхода исходное изображение напоминает иммигрироватьизкартину, как изображение. 4.10 Показано:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-MDgLznpe-1681653027417)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/f582db90-6795-43d5-8d6d-28e2835e58de.png)]
картина 4.10: Исходное содержание изображения изображения и стиля мигрировать изображение карты в сочетании с пятым индивидуальным изображением карты и изображением звездной ночи
Если вы замените следующие две строки кода:
styleVals[19] = 0.5f;
styleVals[4] = 0.5f;
использоватьодин ХОРОШОкодstyleVals[19] = 1.5f;
илизаменятьк Внизкодчасть:
for (int i = 0; i < NUM_STYLES; ++i) {
styleVals[i] = 0.0f / NUM_STYLES;
}
styleVals[19] = 0.5f;
styleVals[4] = 0.5f;
Иметь следующий параграф кода:
for (int i = 0; i < NUM_STYLES; ++i) {
styleVals[i] = 1.0f / NUM_STYLES;
}
Затем,ты Волясуществоватькартина 4.11 Средний, чтобы увидеть эффект перемещения:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-pGKXVJeG-1681653027417)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/a6009bea-e770-4c76-b7ab-9f426ea66e0b.png)]
картина 4.11: Стилизовать изображение изкартины только в стиле звездного неба, а также Воля Местоиметь 26 Смесь одинаковых стилей изкартина вроде
существоватьодиннекоторый强大из TensorFlow Модельиз помогите такженаскаксуществоватьдвигатьсяприложениеиспользуется С их знаниями, кажется, наши мобильные умники тоже могут стать большими художниками.
существоватькнигаглавасередина,наспервый概описывать Понятнос 2015 Год С момента разработки различных нейронных стилей мигрировать методы. Затем мы покажем, как обучить стилю второго поколения Мигрировать Модель, которая достаточно быстра, чтобы существовать на мобильном устройстве за считанные секунды. После этого мы рассказали, как существовать iOS приложениеи Android приложениеиспользуется В модели этот заголовок дает несколько способов начать сборку, используя минималистский подход, в общей сложности не приезжая. 100 ХОРОШОкод. Наконец, мы обсудили, как существовать iOS и Android приложениеиспользуется в TensorFlow Magenta много Образец Режим神经мигрировать Модель,Должен Модельсуществоватьодининдивидуальный Маленький Модельсередина Сумка含 26 Удивительный художественный стиль.
существования В следующий раз мы, Воля, исследуем другого индивидуальносуществовать человека или Наши лучшие из друзей были замечены, когда демонстрировали умное решение задачи: способность распознавать голосовые команды. Кто не хочет, чтобы наши собаки понимали «сидеть», «подойди», «нет» и другие команды, а наши малыши верно «да», «стой» и «иди» и реагировали на них? Давайте посмотрим, как мы выведем их из мобильного приложения.
В настоящее время голосовые услуги (например. Apple Siri,Amazon Alexa,Google Assistant и Google Translate) становится все более популярным, поскольку для нас Voice является в некоторых случаях наиболее эффективным способом поиска информации или выполнения задачи. это Некоторые голосовые услуги недоступны основеоблакоиз,Потому что для пользователей голоса могут быть очень длинными и громоздкими.,исдвигатьсяраспознавание речи(ASR)Нет常复杂,и需хотеть大量извычислительная мощность。 Фактически, благодаря прорыву в области глубокого обучения, только самые закрывающие годы существуют в шумной среде обитания. ASR Это стало возможным.
Дасуществовать某некоторый情况Вниз,能够Оффлайн识Необорудованиена Простой语音Заказдаиметьзначениеиз。 Например, для контроля Raspberry-Pi управляемый робот в движении, вам не нужны сложные голосовые команды, не только устройство на ASR Сравниватьна Решение на основе облака также является быстрым и даже существующим, не имеющим доступа к сети из окружающей среды. Устройство распознавания простых голосовых команд также может использовать только тогда, когда существуют определенные явные команды пользователя. Сервер отправляет сложные голоса пользователей для экономии пропускной способности сети.
существоватькнигаглавасередина,нас Воляпервый概описывать ASR Технология, охватывающая на основе новейшей системы глубокого обучения и высшего класса проекта с открытым исходным кодом. Потом мы с Волей обсудим, как тренировать ипереподготовку. TensorFlow Модель,распознавать простые голосовые команды,Например"left", "right", "up", "down", "stop", "go"
。 Далее мы Воляиспользовать обучение, имея возможность из Модели построить индивидуальное простое из Android приложение, а затем постройте два индивидуальных комплекта из iOS приложение,одининдивидуальный Зависит от Objective-C выполнить,另одининдивидуальный Зависит от Swift выполнить. существоватьвпереддваглавасерединанасбезиметьпредставлятьиспользовать TensorFlow Модельизна основе Swift из iOS приложение, в то время как этот обзор главы и укрепляет нашу верную сборку основе Swift из TensorFlow iOS приложениеиз понимания из отличного места.
Подводя итог, в этой главе будут рассмотрены следующие темы:
1990 Год генерации появился первый индивидуальный практический опыт, независимый от говорящего, с большим словарным запасом и непрерывным распознаванием. речисистема. существовать 2000 Раннее поколение, ведущие стартапы Nuance и SpeechWorks поставлятьизраспознавание Речевой движок для многих первого поколения основе Web поддерживается, например, голосовая служба по предложениям TellMe,Phone из AOL и BeVocal。 когдачас Строитьраспознавание Система речи Основная основепроходить统изСкрытая марковская модель(HMM),А чтобы механизм распознавания работал более точно, необходимы написанная вручную грамматика и тихая обстановка.
сейчас代распознавание Двигатель может понимать практически все, что люди говорят в шумной обстановке, и основеконецприезжатьконецглубокое обучение,В частности, другой вид больше подходит для обработки естественного языка и глубоких нейронных сетей.,сказатьдлярекуррентная нейронная сеть(RNN)。 и Традиция изна основе HMM израспознавание речьразная, традиционная основе HMM израспознавание Речь требует человеческого опыта для создания точной настройки созданных вручную функций. также Акустика и языковая модель, и на основе RNN изконецприезжатьконецраспознавание Речевая система преобразует аудиовход «Воля» непосредственно в текст, не требуя преобразования аудиовхода «Воля» в речевое представление для дальнейшей обработки.
RNN Позволяет нам обрабатывать входные и/или выходные последовательности, поскольку по замыслу сеть может хранить входную последовательность из первых прямых проектов, которые могут генерировать выходную последовательность. этотделать RNN Больше подходит для распознавания речь (ввод, когда пользователь произносит последовательность слов), изображение, подобное заголовку (выходные данные состоят из последовательности слов из предложений естественного языка), генерация текста и прогнозирование временных рядов 。 Если вы не знакомы с RNN, ты должен проверить Andrey Karpathy изблог,рекуррентная нейронная сетьиз Нет合理иметьэффект性。 существования Далее в этой книге мы также представим некоторые подробности. RNN Модель.
о RNN конецприезжатьконецраспознавание речииз Первая научная статья была опубликована в 2014 Год,использоватьиздаКоннекционизм из темпоральной классификации(CTC)слой。 2014 Вторая половина Года, Baidu вышла Deep Speech,этотда Нет.одининдивидуальныйиспользоватьна основе CTC изконецприезжатьконец RNN Постройте одну из крупнейших бизнес-систем в мире. и шумные существа из окружающей среды восстанавливаются гораздо лучше, чем традиционные ASR Система имеет меньший процент ошибок. еслитыиметьинтерес,Можетк查смотретьглубина Голос из TensorFlow выполнить,Дапотому чтоэтотдобрыйна основе CTC У системы есть проблемы с существованием, а создание модели требует слишком большого количества капитала, чтобы существовать на мобильном телефоне. При развертывании существования требуется большая языковая модель, чтобы исправить часть, сделанную RNN природа вызывает появление текстовых ошибок (если вы хотите узнать, что такое, прочитайте ссылку на переднюю страницу) RNN блог, чтобы получить некоторое представление).
существовать 2015 Годи 2016 Год,较новыйизраспознавание речевая системаиспользовать подобное изEnd приезжатьEnd RNN метод, но будет CTC слойзаменятьдляна основе Уведомлениесилаиз Модель,поэтомубегать Модельчас Нет需хотеть Большойязык Модель,поэтому Можетксуществовать Памятьиметьпределиздвигатьсяоборудованиеначальстворуководитьразвертывать。 существование из В этой версии мы, Воля, не будем исследовать эти возможности, но Воля опишет, как существует приложение. в最новыйизвысокийсорт ASR Модель. Вместо этого мы Воляот человека проще распознавать речи Модельоткрыть始,нас知道Должен Модель肯定встречасуществуют на мобильных устройствахочень хороший地工делать。
хотеть Воля Оффлайнраспознавание Добавлена функция голосовой связи в мобильном приложении, вы также можете использовать следующие два отдельных ведущих источника обнаружения источника: речьпроект первый:
потому чтоэтотдаодинкнигаосуществоватьдвигатьсяоборудование Использовать на TensorFlow из книги, поэтому TensorFlow Может использоваться для картины обработки изображений, обработки речи и обработки текста. Также другие умные задачи (остальные из этой главы) создают мощную из Модель. Мы, Воля, сосредоточимся на том, как использовать TensorFlow Обучение легко распознается речи Модельи Воля Чтосуществоватьдвигатьсяприложениеиспользуется в。
существоватькнига节середина,нас Воля Подвести итогХорошо написано из TensorFlow Простое распознавание звука Учебное пособиеиспользуется вшаги. Некоторые модели обучения действительно могут вам помочь советами.
Мы Воля строим из простого распознавания голосовых команд. Модель Воля умеет распознавать 10 индивидуальныйодин词:"yes", "no", "up", "down", "left", "right", "on", "off", "stop", "go"
; Он также может обнаружить тишину. Если не найдено ни обладания, ни тишины, и не найдено ни одного обладания. 10 индивидуальное слово, оно Воля порождает «неизвестное». 稍назадбегатьtensorflow/example/speech_commands/train.py
脚книгачас,Мы с Воля скачиваем набор данных голосовых команд и используем их для обучения Модель,действительныйначальство除Понятноэтот 10 Помимо слова индивидуальный, оно содержит еще 20 индивидуальныйодин词:"zero", "two", "three", ..., "ten"
(приезжатьглазвпереддляконец,тыуже经смотретьприезжатьиз 20 индивидуальный词сказатьдляосновной词)и 10 индивидуальныйвспомогательное слово:"bed", "bird", "cat", "dog", "happy", "house", "marvin", "sheila", "tree", "wow"
。 Основные слова встречаются чаще, чем вспомогательные (ок. 1750)Инструментиметь更многоиз.wav
документ Записывать(о 2350)。
语音ЗаказданныенабордаотОткрыть сайт записи голоса收набориз。ты应Долженпытатьсяодин Вниз,Возможно, мне потребовалось некоторое время, чтобы записать себя.,чтобы улучшить производительность записи,И научитесь собирать существующие при необходимости данные из набора голосовых команд. оиспользованные комплекты сборки Модель,возвращатьсяиметьодининдивидуальный Kaggle соревнование,Здесь вы можете получить дополнительную информацию о связанных советах по голосовым моделям.
существоватьдвигатьсяприложениесерединахотетьтренироватьсяииспользоватьиз Модельна основе Бумагасверточная нейронная сеть,Используется для обнаружения ключевых слов небольшого размера.,этоти大много数другойна основе RNN из массового обнаружения Модель речи другая. на основе CNN израспознавание речи Модельда Может能из,Но очень интересно,Благодаря простому распознаванию голосовых команд,Мы можем существовать в течение короткого времени, например, преобразование аудиосигнала для карты,или точнее,Воля Спектркартинаизменять换длязвуковой сигнал во время частотного окнаизраспределенный(связанныйиспользоватьwav_to_spectrogram
脚книгагенерироватьиз Пример Спектркартинакартинакартина,Видетькнига节открытьголоваиз TensorFlow Ссылка на учебник). Другими словами, мы можем преобразовать аудиосигнал из его исходного представления во временной области в представление в частотной области. руководитьэтотизменять换изоптимальныйалгоритмдаДискретное преобразование Фурье(DFT),быстрое преобразование Фурье(FFT)Толькодаодиндобрыйиметьэффектизвыбирать DFT выполнитьизалгоритм。
Вам, как специалисту по мобильному развитию, вероятно, не нужно знать DFT и FFT。 Но да, вам лучше знать все о модели обучения. Как это работает, потому что мы знаем, что Воля хочет представить из TensorFlow Простой语音Заказ Модельобучение幕назад花絮,этотда FFT изиспользовать, вхожу в десятку форварда. когдаран, среди прочего, 20 Век из алгоритма делает на основе CNN из Распознавание голосовых команд. Модель обучения для возможного. связанный DFT изиметь Весело и интуитивно понятноиз Учебное пособие,ты МожеткчитатьСледующий текст глава。
Теперь, когда это существует, давайте выполним следующие шаги для обучения простой модели распознавания голосовых команд:
cd
приезжатьтыиз TensorFlow источниккорень,Может能да~/tensorflow-1.4.0
。python tensorflow/examples/speech_commands/train.py
ты Можеткиспользовать许многопараметр:--wanted_words
по умолчаниюдлякyes
открытьголоваиз 10 индивидуальныйосновной词; Вы можете использовать этот параметр, чтобы добавить больше слов, которые может распознать Модель. хотеть训упражнятьсяссебяиз语音Заказданныенабор,пожалуйстаиспользовать--data_url --data_dir=<path_to_your_dataset>
禁использовать语音Заказданныенаборизскачатьи访问тыссебяизданныенабор,где каждая команда должна называться форсизпапка,Чтосередина应Сумка含 1000-2000 индивидуальный аудиоклип, обязательно 1 Секунды длины; если Аудиокусокчасть更长,но Можетк Взаимно应地Изменять--clip_duration_ms
параметрценить. связанный更многоподробныйинформация,Видетьtrain.py
источниккоди TensorFlow Простое распознавание звука Учебник.
train.py
из Местоиметьпо умолчаниюпараметр,носуществоватьскачать 1.48GB После набора голосовых команд данные существуют, GTX-1070 GPU управляемый Ubuntu да, готово 18,000 индивидуальныйшагизвсеиндивидуальныйтренироваться Нужно 90 минута. тренироваться Заканчиватьназад,ты应Долженсуществовать/tmp/speech_commands_train
папка内смотретьприезжатьконтрольно-пропускной пунктдокументизсписок,а такжеconv.pbtxt
картинаопределениедокументиимядляconv_labels.txt
из Этикеткадокумент,Чтосередина Сумка含Заказсписок(и Заказсписок Взаимно同)。 --wanted_words
параметрдапо умолчаниюценитьилинастраиватьдля,существоватьдокументизоткрытьголова加начальстводваиндивидуальный Дополнительные слова_silence
и_unknown
):-rw-rw-r-- 1 jeff jeff 75437 Dec 9 21:08 conv.ckpt-18000.meta
-rw-rw-r-- 1 jeff jeff 433 Dec 9 21:08 checkpoint
-rw-rw-r-- 1 jeff jeff 3707448 Dec 9 21:08 conv.ckpt-18000.data-00000-of-00001
-rw-rw-r-- 1 jeff jeff 315 Dec 9 21:08 conv.ckpt-18000.index
-rw-rw-r-- 1 jeff jeff 75437 Dec 9 21:08 conv.ckpt-17900.meta
-rw-rw-r-- 1 jeff jeff 3707448 Dec 9 21:08 conv.ckpt-17900.data-00000-of-00001
-rw-rw-r-- 1 jeff jeff 315 Dec 9 21:08 conv.ckpt-17900.index
-rw-rw-r-- 1 jeff jeff 75437 Dec 9 21:07 conv.ckpt-17800.meta
-rw-rw-r-- 1 jeff jeff 3707448 Dec 9 21:07 conv.ckpt-17800.data-00000-of-00001
-rw-rw-r-- 1 jeff jeff 315 Dec 9 21:07 conv.ckpt-17800.index
-rw-rw-r-- 1 jeff jeff 75437 Dec 9 21:07 conv.ckpt-17700.meta
-rw-rw-r-- 1 jeff jeff 3707448 Dec 9 21:07 conv.ckpt-17700.data-00000-of-00001
-rw-rw-r-- 1 jeff jeff 315 Dec 9 21:07 conv.ckpt-17700.index
-rw-rw-r-- 1 jeff jeff 75437 Dec 9 21:06 conv.ckpt-17600.meta
-rw-rw-r-- 1 jeff jeff 3707448 Dec 9 21:06 conv.ckpt-17600.data-00000-of-00001
-rw-rw-r-- 1 jeff jeff 315 Dec 9 21:06 conv.ckpt-17600.index
-rw-rw-r-- 1 jeff jeff 60 Dec 9 19:41 conv_labels.txt
-rw-rw-r-- 1 jeff jeff 121649 Dec 9 19:41 conv.pbtxt
conv_labels.txt
Сумка含к Вниз Заказ:
_silence_
_unknown_
yes
no
up
down
left
right
on
off
stop
go
сейчассуществоватьвыполнить следующую команду,Волякартинаопределениедокументиконтрольно-пропускной пунктдокумент组синтезодининдивидуальныйнас Можетксуществоватьдвигатьсяприложениеиспользуется виз Модельдокумент:
python tensorflow/examples/speech_commands/freeze.py \
--start_checkpoint=/tmp/speech_commands_train/conv.ckpt-18000 \
--output_file=/tmp/speech_commands_graph.pb
speech_commands_graph.pb
Модельдокумент Извперед,Для выполнения быстрого теста вы можете использовать следующую команду:python tensorflow/examples/speech_commands/label_wav.py \
--graph=/tmp/speech_commands_graph.pb \
--labels=/tmp/speech_commands_train/conv_labels.txt \
--wav=/tmp/speech_dataset/go/9d171fee_nohash_1.wav
Ваша Воля смотрит на выходные данные прибытия, подобные следующему:
go (score = 0.48427)
no (score = 0.17657)
_unknown_ (score = 0.08560)
summarize_graph
工Инструмент查попытаться найтивходитьузеливыходузелизимясказать:bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph=/tmp/speech_commands_graph.pb
Вывод должен выглядеть так:
Found 1 possible inputs: (name=wav_data, type=string(7), shape=[])
No variables spotted.
Found 1 possible outputs: (name=labels_softmax, op=Softmax)
К сожалению, он правильно выводит только имя да и не показывает другие возможные входные данные. использоватьtensorboard --logdir /tmp/retrain_logs
,Затемсуществовать浏览устройствосередина打открытьhttp://localhost:6006
икартинаруководить交互также无济В事。 Но да, каждая глава, показанная в небольшом сегменте кода, может помочь вам понять имя входа и выхода, следующее и iPython Взаимодействовало:
In [1]: import tensorflow as tf
In [2]: g=tf.GraphDef()
In [3]: g.ParseFromString(open("/tmp/speech_commands_graph.pb","rb").read())
In [4]: x=[n.name for n in g.node]
In [5]: x
Out[5]:
[u'wav_data',
u'decoded_sample_data',
u'AudioSpectrogram',
...
u'MatMul',
u'add_2',
u'labels_softmax']
поэтому,нассмотретьприезжатьwav_data
иdecoded_sample_data
Вседа Может能извходить。 еслисуществоватьfreeze.py
документсерединасмотреть Нетприезжать Комментарий,Мы должны вникнуть в код обучения Модели.,кточныйпопытаться найти出应Должениспользоватьизвходитьимясказать:“результаткартина Сумка含одининдивидуальныйимядля WAV из кодирования ввода данных wav_data
,использовать Воригинальный PCM данные(существовать -1.0 приезжать 1.0 范围内浮двигаться)изодиндобрыйсказатьдляdecoded_sample_data
,выходсказатьдляlabels_softmax
。” действительныйначальство,существовать Должен Модельиз情况Вниз,иметьодининдивидуальный TensorFlow Android Примерприложение,этотданассуществовать Нет. 1 Глава «Мобильный TensorFlow часть»серединасмотретьпожалуйста, приходитеодинчасть,сказатьдля TF Речь конкретно определяет эти входные и выходные имена. существоватькнига书назадлапшаиз Несколькоглавасередина,ты Волясмотретьприезжатькаксуществовать需хотетьчас借助или Нет借助насизтридобрыйметод Приходить查попытаться найти Модельобучениеисточниккод,кпопытаться найти出关ключизвходитьивыход Имя узла。 Или Я надеюсь, что когда вы прочитаете эту книгу, TensorFlow summarize_graph
工Инструмент Воляпридетсяприезжатьулучшать,кдлянаспоставлятьточныйизвходитьивыход Имя узла。
сейчассуществоватьдачас候существоватьдвигатьсяприложениеиспользуется внасиз热门новый Модель Понятно。
Кусочек Вtensorflow/example/android
изиспользовать ВПростой语音Заказ识Неиз TensorFlow Android Примерприложение ИнструментиметьсуществоватьSpeechActivity.java
документсерединаруководить Аудио Записыватьи识Неизкод,предполагалось Долженприложение需хотетьвсегда Подготовить好приниматьновыйиз Аудио Заказ。 хотясуществовать В некоторых случаях это действительно разумно, но это приводит к тому, что исходный код оказывается намного сложнее, чем просто существование записи и идентификации исходного кода после того, как пользователь нажимает кнопку, например. Apple из Siri из Как работать. существуют В этом разделе мы Воля К покажем вам, как создать новый из Android приложение и добавьте как можно меньше исходников, чтобы записывать голосовые команды пользователя и показывать результаты распознавания. это должно помочь вам легче интегрировать Воля Модель Android В приложении. Однако, если вам нужно иметь дело с голосовыми командами, которые всегда должны автоматически записываться и распознаваться, вам следует проверить TensorFlow Пример Android приложение.
Следуйте инструкциям ниже, чтобы создать полноценный новый Android приложение,Долженприложениеиспользоватьнассуществоватьначальствоодин节середина Строитьspeech_commands_graph.pb
Модель:
AudioRecognition
изновый Android приложение,Затем Воляcompile 'org.tensorflow:tensorflow-android:+'
ХОРОШОдобавить вприезжатьприложениеbuild.gradle
документ Зависимостиизконец。<uses-permission android:name="android.permission.RECORD_AUDIO" />
добавить вприезжатьприложениеизAndroidManifest.xml
документсередина,Чтобы приложению можно было разрешить запись звука.speech_commands_graph.pb
иconv_actions_labels.txt
документтащить放приезжатьassets
папкасередина。activity_main.xml
документк容纳трииндивидуальный UI элемент. Нет.одининдивидуальныйдаиспользовать В识НерезультатпоказыватьизTextView
:<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="24sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Нет.二индивидуальныйTextView
Воляпоказыватьначальствоодин节Нет. 2 шагиспользуется вtrain.py
Python степеньпоследовательностьобучение 10 индивидуальныйпо умолчанию Заказ:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="yes no up down left right on off stop go"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.50"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.25" />
наконецодининдивидуальный UI 元белыйдаодининдивидуальныйкнопка,существовать Нажмите эту кнопкучас,Начнется запись на одну секунду,Затем Волязапись Отправить приезжатьнасиз Моделькруководить识Не:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.50"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.8" />
MainActivity.java
,первыйсоздаватьMainActivity
implements Runnable
добрый。 Затемдобавить вк Внизпостоянный,определить название модели,Имя тега,Имя входа и имя выхода:private static final String MODEL_FILENAME = "file:///android_asset/speech_commands_graph.pb";
private static final String LABEL_FILENAME = "file:///android_asset/conv_actions_labels.txt";
private static final String INPUT_DATA_NAME = "decoded_sample_data:0";
private static final String INPUT_SAMPLE_RATE_NAME = "decoded_sample_data:1";
private static final String OUTPUT_NODE_NAME = "labels_softmax";
private TensorFlowInferenceInterface mInferenceInterface;
private List<String> mLabels = new ArrayList<String>();
private Button mButton;
private TextView mTextView;
onCreate
методсередина,наспервый Пример化mButton
иmTextView
,Затем кнопку настройкищелкнуть обработчик событий,Должен事件处理устройствопервый Изменятькнопка标вопрос,Затемзапускать线степеньруководить Записыватьи识Не:mButton = findViewById(R.id.button);
mTextView = findViewById(R.id.textview);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mButton.setText("Listening...");
Thread thread = new Thread(MainActivity.this);
thread.start();
}
});
существоватьonCreate
методизконец,Читаем содержимое тега документиз построчно,и Воля Каждыйодин ХОРОШОдержатьсуществоватьmLabels
множествосписоксередина。
public void run()
методизоткрытьголова(щелкнуть“открыть始”кнопкачасоткрыть始),Добавить код,Долженкодпервыйполучатьиспользовать Всоздавать Android AudioRecord
вернослониз最Маленький缓冲区размер,Затемиспользоватьbuffersize
создаватьновыйизAudioRecord
Пример Инструментиметь 16,000 SAMPLE_RATE
и 16 Кусочекодин声道Формат,этаданаша Модель ожидается из оригинального аудио из типа,ифинальныйотAudioRecord
Примероткрыть始Записывать:int bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
AudioRecord record = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
if (record.getState() != AudioRecord.STATE_INITIALIZED) return;
record.startRecording();
Android серединаиметьдваиндивидуальныйиспользовать ВЗаписывать Аудиоиздобрый:MediaRecorder
иAudioRecord
。 MediaRecorder
СравниватьAudioRecord
更易Виспользовать,Даэтовстречадержать压缩из Аудиодокумент,прямойприезжать Android API Level 24(Android 7.0), API Поддерживает запись необработанного оригинального звука. корень据этотвнутри,перехватывать 2018 Год 1 луна,рынокначальствоиметь 70% с на Android оборудованиевсе ещесуществоватьбегать 7.0 или Ранееиз Android Версия. Возможно, вы не захотите заказывать Воляприложение Кусочекприезжать Android 7.0 или更высокий Версия. кроме того,хотеть解码Зависит отMediaRecorder
Записыватьиз压缩Аудио,тыдолжениспользоватьMediaCodec
,использовать起Приходить Нет常复杂。 AudioRecord
хотядаодининдивидуальный Низкийсортиз API,нодействительныйначальство Нет常подходящий合Записывать未处理изоригинальныйданные,Затем Воля Что Отправить приезжать语音Заказ识Не Модельруководить处理。
audioBuffer
иrecordingBuffer
,верно записано за 1 секунду,Каждый次AudioRecord
вернослон读取и填充audioBuffer
множествоназад,действительный读取изданные Всевстреча附加приезжать recordingBuffer
:long shortsRead = 0;
int recordingOffset = 0;
short[] audioBuffer = new short[bufferSize / 2];
short[] recordingBuffer = new short[RECORDING_LENGTH];
while (shortsRead < RECORDING_LENGTH) { // 1 second of recording
int numberOfShort = record.read(audioBuffer, 0, audioBuffer.length);
shortsRead += numberOfShort;
System.arraycopy(audioBuffer, 0, recordingBuffer, recordingOffset, numberOfShort);
recordingOffset += numberOfShort;
}
record.stop();
record.release();
Recognizing
:runOnUiThread(new Runnable() {
@Override
public void run() {
mButton.setText("Recognizing...");
}
});
Затем ВоляrecordingBuffer
短множествоизменять换дляfloat
множество,同часделатьfloat
множествоиз Каждыйиндивидуальный元белый Всесуществовать -1.0 и 1.0 вне диапазона, потому что мы ожидаем, что существование- будет плавать между 1.0 и 1.0:
float[] floatInputBuffer = new float[RECORDING_LENGTH];
for (int i = 0; i < RECORDING_LENGTH; ++i) {
floatInputBuffer[i] = recordingBuffer[i] / 32767.0f;
}
TensorFlowInferenceInterface
,Затемиспользоватьдваиндивидуальныйвходитьузелизимясказатьиценитьвызов Чтоfeed
метод,Одна индивидуальная частота выборки,另одининдивидуальныйдахранилищесуществоватьfloatInputBuffer
серединаизоригинальный Аудиоданные ] множество:AssetManager assetManager = getAssets();
mInferenceInterface = new TensorFlowInferenceInterface(assetManager, MODEL_FILENAME);
int[] sampleRate = new int[] {SAMPLE_RATE};
mInferenceInterface.feed(INPUT_SAMPLE_RATE_NAME, sampleRate);
mInferenceInterface.feed(INPUT_DATA_NAME, floatInputBuffer, RECORDING_LENGTH, 1);
после,насвызовrun
методсуществовать Модельначальствобегать识Нерассуждение,Затемfetch
выход 10 индивидуальная голосовая команда в каждой индивидуальной команде из выходной доли а также вывод «Неизвестно» и «Тишина»:
String[] outputScoresNames = new String[] {OUTPUT_NODE_NAME};
mInferenceInterface.run(outputScoresNames);
float[] outputScores = new float[mLabels.size()];
mInferenceInterface.fetch(OUTPUT_NODE_NAME, outputScores);
outputScores
множествоиmLabels
список匹配,поэтомунас Можетк轻松попытаться найтиприезжать最высокийпридется分иполучать Что Заказимясказать:float max = outputScores[0];
int idx = 0;
for (int i=1; i<outputScores.length; i++) {
if (outputScores[i] > max) {
max = outputScores[i];
idx = i;
}
}
final String result = mLabels.get(idx);
наконец,нассуществоватьTextView
серединапоказыватьрезультат,и Волякнопка标вопрос Изменять回"Start"
,к便использовать户Можетксноваоткрыть始Записыватьи识Не语音Заказ:
runOnUiThread(new Runnable() {
@Override
public void run() {
mButton.setText("Start");
mTextView.setText(result);
}
});
сейчассуществовать,существоватьтыиз Android оборудованиеначальствобегать Долженприложение. ты Волясмотретьприезжатьнравитьсякартина 5.1 Показан начальный экран:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-wWZgl2Td-1681653027418)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/a321196b-4e44-43ec-94c5-42ee47ea29d9.png)]
изображение 5.1: приложение отображает заставку после запуска
НажмитеSTART
кнопка,Затемоткрыть始说начальстволапшапоказыватьиз 10 индивидуальный Заказ Изодин。 Вы видите, что название кнопки «Приехать» меняется на «Слушать…», а затем на «Распознать…», как на картинке. 5.2 Показано:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-yhAszZku-1681653027418)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/f4eb7e04-1d5f-4c70-a91c-055d8cdcb1c6.png)]
картина 5.2: Мониторинг записанного аудио и идентификация записанного аудио
Результаты распознавания отображаются практически в реальном времени посередине экрана, как на картинке 5.3 Показано:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-CC2hC76Q-1681653027418)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/bc4d09f3-f7d6-47fa-91f5-d0130635da7c.png)]
картина 5.3: Распознавание дисплея по голосовым командам
Весь процесс индивидуального распознавания завершается практически мгновенно.,использовать В识Неизspeech_commands_graph.pb
Модельтолькодля 3.7MB。 Однако он поддерживает только 10 条语音Заказ,Да Прямо сейчасделатьиспользоватьtrain.py
脚книгаиз --wanted_words
параметрилитыссебяизданныенаборподдерживать数十индивидуальный Заказ,Размер не сильно изменится,Как обсуждалось в разделе «Обучение нашего существования», из.
Истинный,здесьизприложение Экранперехватыватьартинаи Неткартинаначальствоодинглавасередина那Образец生двигатьсяиметьинтерес(один张картинакусок价ценитьодин千индивидуальныйодин词),Дараспознавание Речькогда, безусловно, может делать то, чего не могут художники, например, подавать голосовые команды для управления движением робота.
Приложениеиз Полный источниккод Кусочек на Github начальство Должен书изисточниккодхранилище БиблиотекаизCh5/android
папкасередина。 Теперь посмотрим, как использовать модель сборки. iOS приложение, которое предполагает некоторую сложность TensorFlow iOS Сборка библиотеки и этапы подготовки аудиоданных для правильного запуска модели.
Если вы прочитали впередтриглавасерединаиз iOS приложение, то вы можете предпочесть использовать Ручную сборкаиз TensorFlow iOS Библиотекаи Нетда TensorFlow Панель эксперимента, как и в случае с методом «Использовать ручную Библиотеку», у вас больше контроля над тем, что вы можете добавить. TensorFlow работать, чтобы удовлетворить вас из Модель, это тоже да Мы решили сосредоточиться на TensorFlow Mobile вместо первого 1 Глава «Мобильный TensorFlow”из TensorFlow Lite из Одна из причин.
поэтому,хотяты Можетксуществоватьчитатькнига书часпытатьсяиспользовать TensorFlow Модуль для просмотра Pod да Нет обновлено для поддержки модели. виз Местоиметьдействовать,ноотсейчассуществоватьоткрыть始,нас Волявсегдаиспользовать Ручная сборкаиз TensorFlow Библиотека( Видеть iOS приложениесередина Нет. 3 глава,“Обнаружениевернослон及Что Расположение”из“существовать iOS используется в Обнаружение Раздел «моделирование объектов» из шагов 1 и 2)。
Теперь существуют следующие шаги, чтобы создать нового человека iOS Приложение Определите модель с помощью голосовой команды:
AudioToolbox.framework
,AVFoundation.framework
иAccelerate.framework
добавить вприезжать Цельизприносить Библиотекаиз Связь二进制документ.
speech_commands_graph.pb
Модельдокументтащить放приезжатьпроектсередина。
ViewController.m
израсширение Изменятьдляmm
,Затемдобавить в Аудио Записыватьи处理Местоиспользоватьизк Вниззаголовок:
#import <AVFoundation/AVAudioRecorder.h>
#import <AVFoundation/AVAudioSettings.h>
#import <AVFoundation/AVAudioSession.h>
#import <AudioToolbox/AudioToolbox.h>
также добавлено TensorFlow иззаголовок:
#include <fstream>
#include "tensorflow/core/framework/op_kernel.h"
#include "tensorflow/core/framework/tensor.h"
#include "tensorflow/core/public/session.h"
сейчассуществовать,определениеодининдивидуальный АудиоSAMPLE_RATE
постоянный,Индивидуальный ссылается на массив с плавающей запятой К из указателя C.,Массив содержит Волю для отправки моделиз аудиоданных.,насиз关ключaudioRecognition
функция签имяа также два индивидуальных атрибута, которые содержат записи из документа, и один индивидуальный атрибут. iOS AVAudioRecorder
Пример。 насвозвращаться需хотеть让ViewController
выполнитьAudioRecorderDelegate
,Чтобы он знал, когда закончится запись:
const int SAMPLE_RATE = 16000;
float *floatInputBuffer;
std::string audioRecognition(float* floatInputBuffer, int length);
@interface ViewController () <AVAudioRecorderDelegate>
@property (nonatomic, strong) NSString *recorderFilePath;
@property (nonatomic, strong) AVAudioRecorder *recorder;
@end
Для этого мы не будем показывать программное создание двух индивидуальных UI Элемент изкода сегмента: индивидуальная кнопка, при нажатии на кнопку Воля начинает запись 1 Секунды аудио, затем Воля аудио отправляет нам из Модель для идентификации. такжеодининдивидуальный отображает результаты распознавания по тегу. Но да, мы Волясуществовать в следующей части из Swift Покажи что-нибудь в UI Код для проверки.
UIControlEventTouchUpInside
处理устройство内,наспервыйсоздаватьодининдивидуальныйAVAudioSession
Пример,И Воля его рубрика настройкидля записии Воля Что激活:AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err = nil;
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&err];
if(err){
NSLog(@"audioSession: %@", [[err userInfo] description]);
return;
}
[audioSession setActive:YES error:&err];
if(err){
NSLog(@"audioSession: %@", [[err userInfo] description]);
return;
}
Затемсоздаватьодининдивидуальный Записыватьнастраиватьсловарь:
NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];
[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:SAMPLE_RATE] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
[recordSetting setValue :[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];
[recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityMax] forKey:AVEncoderAudioQualityKey];
наконец,существовать нажатие кнопки в процессоре,Определяем сохранение записи из Аудио из Расположение,создаватьAVAudioRecorder
Пример,настройки сдал в эксплуатацию и начал запись 1 Секунды:
self.recorderFilePath = [NSString stringWithFormat:@"%@/recorded_file.wav", [NSHomeDirectory() stringByAppendingPathComponent:@"tmp"]];
NSURL *url = [NSURL fileURLWithPath:_recorderFilePath];
err = nil;
_recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&err];
if(!_recorder){
NSLog(@"recorder: %@", [[err userInfo] description]);
return;
}
[_recorder setDelegate:self];
[_recorder prepareToRecord];
[_recorder recordForDuration:1];
AVAudioRecorderDelegate
,audioRecorderDidFinishRecording
из委托методсередина,насиспользовать Apple из Расширенный сервис аудиодокументов, который используется для чтения и записи сжатия и линейного PCM Аудиодокумент,загрузить запись из аудио,и Воля Чтоизменять换для Модель Необходимый Формат, А аудиоданные Воля считываются в память. нассуществоватьэтотвнутри Нетвстречапоказыватьэтотчастькод,В основном это основано на этом блоге。 существоватьздесь理после,floatInputBuffer
обратитесь к Коригинальный Аудио Образецкнига。 сейчассуществовать,нас Можетк Воляданныепроходить递приезжать工делать线степеньсерединаизaudioRecognition
методсередина,исуществовать UI Результаты отображаются в теме:dispatch_async(dispatch_get_global_queue(0, 0), ^{
std::string command = audioRecognition(floatInputBuffer, totalRead);
delete [] floatInputBuffer;
dispatch_async(dispatch_get_main_queue(), ^{
NSString *cmd = [NSString stringWithCString:command.c_str() encoding:[NSString defaultCStringEncoding]];
[_lbl setText:cmd];
[_btn setTitle:@"Start" forState:UIControlStateNormal];
});
});
audioRecognition
методвнутренний,наспервыйопределениеодининдивидуальный C++ string
множество,Чтосередина Сумка含хотеть识Неиз 10 индивидуальный Заказа такжедваиндивидуальный特殊ценить"_silence_"
и"_unknown_"
:std::string commands[] = {"_silence_", "_unknown_", "yes", "no", "up", "down", "left", "right", "on", "off", "stop", "go"};
существовать Заканчивать标准 TensorFlow Session
,Status
иGraphDef
настраиватьназад(нравитьсянассуществоватьвперед Несколькоглаваиз iOS приложение (как сделано в из), читаем Модельдокумента и пытаемся использовать его, создаём TensorFlow Session
:
NSString* network_path = FilePathForResourceName(@"speech_commands_graph", @"pb");
PortableReadFileToProto([network_path UTF8String], &tensorflow_graph);
tensorflow::Status s = session->Create(tensorflow_graph);
if (!s.ok()) {
LOG(ERROR) << "Could not create TensorFlow Graph: " << s;
return "";
}
Если сессия успешно создана,нодля Модельопределениедваиндивидуальныйвходить Имя узлаиодининдивидуальныйвыход Имя узла:
std::string input_name1 = "decoded_sample_data:0";
std::string input_name2 = "decoded_sample_data:1";
std::string output_name = "labels_softmax";
"decoded_sample_data:0"
,нас需хотеть Воля采Образец率ценитьделатьдля Скалярная отправка(в противном случаесуществоватьвызов TensorFlow Session
изrun
методчасвстреча出错),исуществовать TensorFlow C++ API Тензор определен в как показано ниже:tensorflow::Tensor samplerate_tensor(tensorflow::DT_INT32, tensorflow::TensorShape());
samplerate_tensor.scalar<int>()() = SAMPLE_RATE;
верно В "decoded_sample_data:1"
,需хотеть Воля浮点数серединаиз АудиоданныеотfloatInputBuffer
множествоизменять换для TensorFlow audio_tensor
Тензор,Что方Режимпохожий Ввперед Несколькоглаваизimage_tensor
изопределениеинастраивать方Режим:
tensorflow::Tensor audio_tensor(tensorflow::DT_FLOAT, tensorflow::TensorShape({length, 1}));
auto audio_tensor_mapped = audio_tensor.tensor<float, 2>();
float* out = audio_tensor_mapped.data();
for (int i = 0; i < length; i++) {
out[i] = floatInputBuffer[i];
}
Теперь мы можем ввести Модель проектировать, как и в случае с опережениемпользовать, и получить результат:
std::vector<tensorflow::Tensor> outputScores;
tensorflow::Status run_status = session->Run({{input_name1, audio_tensor}, {input_name2, samplerate_tensor}},{output_name}, {}, &outputScores);
if (!run_status.ok()) {
LOG(ERROR) << "Running model failed: " << run_status;
return "";
}
outputScores
выходруководить Простойизанализировать,Затем返回最высокий分。 outputScores
да TensorFlow Тензор, первый элемент которого содержит 12 индивидуальный Возможно из результатов распознаванияиз 12 индивидуальныйпридется分ценить. Можеткпроходитьflat
метод访问этот 12 индивидуальное значение балла и проверьте максимальный балл:tensorflow::Tensor* output = &outputScores[0];
const Eigen::TensorMap<Eigen::Tensor<float, 1, Eigen::RowMajor>, Eigen::Aligned>& prediction = output->flat<float>();
const long count = prediction.size();
int idx = 0;
float max = prediction(0);
for (int i = 1; i < count; i++) {
const float value = prediction(i);
printf("%d: %f", i, value);
if (value > max) {
max = value;
idx = i;
}
}
return commands[idx];
существующееприложение может записывать любой звук вперед,ты需хотеть做из另один件事дасуществоватьприложениеизInfo.plist
документсерединасоздаватьодининдивидуальныйновыйизКонфиденциальность-Микрофон Использование Описаниесвойство,и Воля Долженсвойствоизценитьнастраиватьдля诸нравиться“слушатьприезжатьи识Не” Вы из голосовой команды».
сейчассуществовать,существовать iOS 模拟устройствоначальствобегать Долженприложение(Если ты Xcode Версия早В 9.2, в то время как iOS Версия эмулятора старше, чем 10.0, возможно, вам придется существоватьактуализировать iOS На устройстве запустите приложение, так как оно может быть недоступно для вас. iOS или iPhone Эмулятор (10.0 Форвардиз Версия), ты, Воля, сначала посмотри приезжать с возможностью Start Кнопка Кусочек посередине начального экрана, Затем Нажмите кнопку и скажите 10 Одна из индивидуальных команд, результат распознавания должен появиться вверху существования. ,нравитьсякартина 5.4 Показано:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-JIQ5O5pu-1681653027418)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/71ef1770-f7c0-4152-bb72-ea7993f5b728.png)]
изображение 5.4: Отображение начального экрана и результатов распознавания
даиз,Результаты распознавания должны появиться,нодействительныйначальство Нетвстреча出сейчас,потому чтодлясуществовать Xcode В области вывода появляется ошибка:
Could not create TensorFlow Graph: Not found: Op type not registered 'DecodeWav' in binary running on XXX's-MacBook-Pro.local. Make sure the Op and Kernel are registered in the binary running in this process.
tf_op_files.txt
ремонт МодельнагрузкаошибкаМы уже видели приезжать в раздел существованиявпередизглава и допустили общеизвестную ошибку.,Если вы не знаете, что это на самом деле означает,в противном случае弄清楚Долженремонтстепеньпоследовательность Может能хотеть花很многочас间。 TensorFlow Операция состоит из двух частей: Кусочек Ю. tensorflow/core/ops
папкасерединаизсказатьдляops
изопределение(этотиметь点令人озадаченный,Потому что действовать может выражать свое определение,Чтовыполнить,также Можетквыражать Чтоопределение)。 iКусочек В tensorflow/core/kernels
папкасерединаизвыполнить(сказатьдля Ядро)。 tensorflow/contrib/makefile
папкасерединаиметьодининдивидуальныйимядляtf_op_files.txt
издокумент,Чтосередина列出Понятносуществовать Ручная сборка Библиотека требует встроенной возможности приезжать TensorFlow iOS Библиотекасерединаиздействоватьизопределениеивыполнить. tf_op_files.txt
документ应Должен Сумка含Местоиметьдействоватьопределениедокумент,нравитьсяПодготовьте модели для мобильного развертывания TensorFlow.,Потому что они занимают очень мало места. Но от TensorFlow 1.4 или 1.5 запускается,tf_op_files.txt
документсерединаи未Сумка含Местоиметьдействоватьиздействоватьопределение。 Итак, когда мы видим ошибку «Незарегистрированный тип действия», нам нужно выяснить, какой индив определение идуальныйдействовать ивыдокумент заполнить несет ответственность за действие. существоватьнасиз情况Вниз,действоватьтипимядляDecodeWav
。 Мы можем запустить следующие два индивидуальных Shell Команда для получения информации:
$ grep 'REGISTER.*"DecodeWav"' tensorflow/core/ops/*.cc
tensorflow/core/ops/audio_ops.cc:REGISTER_OP("DecodeWav")
$ grep 'REGISTER.*"DecodeWav"' tensorflow/core/kernels/*.cc
tensorflow/core/kernels/decode_wav_op.cc:REGISTER_KERNEL_BUILDER(Name("DecodeWav").Device(DEVICE_CPU), DecodeWavOp);
существовать TensorFlow 1.4 из tf_op_files.txt
документсередина,уже经иметьодин ХОРОШО文книгаtensorflow/core/kernels/decode_wav_op.cc
,но Можетк肯定издаtensorflow/core/ops/audio_ops.cc
丢失Понятно。 нас需хотеть做из Сразудасуществоватьtf_op_files.txt
документсерединаизпроизвольный Расположениедобавить водин ХОРОШОtensorflow/core/ops/audio_ops.cc
,икартинасуществовать Нет. 3 глава,“Обнаружениевернослон及Что Расположение”серединаодин Образецбегатьtensorflow/contrib/makefile/build_all_ios.sh
,к重建 TensorFlow iOS Библиотека。 Потом снова проект iOS приложение,и продолжайте нажимать кнопку «Пуск»,Затем произнесите голосовую команду, чтобы выявить недоразумения.,Пока тебе не надоест.
книгаглава Воля重点представлятькакрешатьNot found: Op type not registered
ошибкаизпроцесс,потому чтодля Воля Приходитьсуществоватьдругой TensorFlow Вы можете сэкономить много времени при работе над моделями.
Да,существоватьпродолжатьизучать Внизодинглавасередина Воляпредставлятьииспользовать另одиндобрыйновыйиз TensorFlow AI Модель вперед, давайте ставим лайки, используем обновления из И менее верны, они более крутые из Swift Язык из iOS уделить персоналу некоторые соображения.
нассуществовать Нет. 2 главаиспользуется в TensorFlow Панель создала индивидуална основе Swift из iOS приложение. сейчассуществовать Давайте создадим нового человека Swift приложение,Долженприложениеиспользоватьнассуществоватьначальствоодин节середина Ручная сборкаиз TensorFlow iOS Библиотека,исуществоватьнасиз Swift приложениеиспользуется в голосовой команде Модель:
RunInference
。 Вы увидите окно сообщения «Приехать индивидуально» с вопросом: «Хотите ли вы настроить индивидуального?» Objective-C Соединяющий заголовок? " щелкнуть Создать связующий заголовок. ВолядокументRunInference.m
重命имядляRunInfence.mm
,потому чтодлянас Волясмешиваниеиспользовать C,C++ и Objective-C код для выполнения обработки и распознавания звука после записи. насвсе ещесуществовать Swift приложениеиспользуется в Objective-C,потому чтодляхотетьот Swift вызов TensorFlow C++ код, нам нужен индивидуальный Objective-C класс как C++ кодиз упаковки.RunInference.h
изголовадокумент,и добавьте следующий код:@interface RunInference_Wrapper : NSObject
- (NSString *)run_inference_wrapper:(NSString*)recorderFilePath;
@end
сейчассуществовать,тысуществовать Xcode Среднее изприложение должно быть похоже на картину. 5.5:
[Внешняя ссылка: передача изображения не удалась,сайт поиска может иметь механизм защиты от хотлинков,предположение Волякартина Сохраните фильм напрямуюначальствопроходить(img-MJtM9Z41-1681653027419)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/intel-mobi-proj-tf/img/3febd651-7749-4a23-ba86-ae458ef8cfea.png)]
картина 5.5:на основе Swift из iOS приложениепроект
ViewController.swift
。 существоватьimport UIKit
послеиз顶部добавить вк Внизкод:import AVFoundation
let _lbl = UILabel()
let _btn = UIButton(type: .system)
var _recorderFilePath: String!
ЗатемделатьViewController
смотреть起Приходитькартинаэтот Образец(未показыватьдля_btn
и_lbl
определениеNSLayoutConstraint
ивызовaddConstraint
изкодчасть):
class ViewController: UIViewController, AVAudioRecorderDelegate {
var audioRecorder: AVAudioRecorder!
override func viewDidLoad() {
super.viewDidLoad()
_btn.translatesAutoresizingMaskIntoConstraints = false
_btn.titleLabel?.font = UIFont.systemFont(ofSize:32)
_btn.setTitle("Start", for: .normal)
self.view.addSubview(_btn)
_btn.addTarget(self, action:#selector(btnTapped), for: .touchUpInside)
_lbl.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(_lbl)
@objc func btnTapped() {
_lbl.text = "..."
_btn.setTitle("Listening...", for: .normal)
AVAudioSession.sharedInstance().requestRecordPermission () {
[unowned self] allowed in
if allowed {
print("mic allowed")
} else {
print("denied by user")
return
}
}
ЗатемсоздаватьодининдивидуальныйAudioSession
Пример,И Воля его рубрика настройкидля записи,и Волясостояниенастраиватьдля活двигаться,Сразукартинанассуществовать Objective-C Версия делает то же самое, что и из:
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSessionCategoryRecord)
try audioSession.setActive(true)
} catch {
print("recording exception")
return
}
сейчассуществоватьопределениеAVAudioRecorder
хотетьиспользоватьизнастраивать:
let settings = [
AVFormatIDKey: Int(kAudioFormatLinearPCM),
AVSampleRateKey: 16000,
AVNumberOfChannelsKey: 1,
AVLinearPCMBitDepthKey: 16,
AVLinearPCMIsBigEndianKey: false,
AVLinearPCMIsFloatKey: false,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
] as [String : Any]
настройкадокумента путь для сохранения записи аудио,создаватьAVAudioRecorder
Пример,настройки сдал в эксплуатацию и начал запись 1 Секунды:
do {
_recorderFilePath = NSHomeDirectory().stringByAppendingPathComponent(path: "tmp").stringByAppendingPathComponent(path: "recorded_file.wav")
audioRecorder = try AVAudioRecorder(url: NSURL.fileURL(withPath: _recorderFilePath), settings: settings)
audioRecorder.delegate = self
audioRecorder.record(forDuration: 1)
} catch let error {
print("error:" + error.localizedDescription)
}
ViewController.swift
изконец,добавить в Инструментиметьк ВнизвыполнитьизAVAudioRecorderDelegate
методaudioRecorderDidFinishRecording
,Долженвыполнить主хотетьвызовrun_inference_wrapper
руководить Аудионазад处理и识Не:func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) {
_btn.setTitle("Recognizing...", for: .normal)
if flag {
let result = RunInference_Wrapper().run_inference_wrapper(_recorderFilePath)
_lbl.text = result
}
else {
_lbl.text = "Recording error"
}
_btn.setTitle("Start", for: .normal)
}
существоватьAudioRecognition_Swift-Bridging-Header.h
документсередина,добавить в#include "RunInference.h"
,к便впередлапшаиз Swift кодRunInference_Wrapper().run_inference_wrapper(_recorderFilePath)
起делатьиспользовать。
run_inference_wrapper
метод内изRunInference.mm
середина,от Objective-C AudioRecognition
приложениесерединаизViewController.mm
копироватькод,нравитьсяначальствоодин节изшаг 5-8 Как уже упоминалось, код Воля сохраняет и конвертирует записанный звук в формат. TensorFlow Модельпринимать Модель,Затем Воля Чтои采Образец率один起发送给Моделькполучать识Нерезультат:@implementation RunInference_Wrapper
- (NSString *)run_inference_wrapper:(NSString*)recorderFilePath {
...
}
Если вы действительно хотите, чтобы Воля изкодировал трансплантат, приезжайте как можно больше. Swift,тогда вы можете использовать Swift заменять C серединаиз Аудиодокументизменять换код。 Также имеется неофициальный источник проекта, который представляет собой официальный TensorFlow C++ API из Swift обертка. Но дадля простоты ради простоты и достижения соответствующего баланса, мы, Воля, сохранили TensorFlow Модель вывода, существующая в этом примере, также позволяет сохранять аудиодокументы для чтения и преобразования, а такжесуществовать C++ и Objective-C Средний контроль UI и запись и запуск вызова для обработки и распознавания звука.
это для сборки Использовать распознавание голосовых команд Модель Swift iOS приложение Необходимыйвсесодержание。 сейчассуществовать,ты Можетксуществовать iOS эмулятордействительныйоборудованиеначальствобегатьэто,上смотретьpriezzatii Objective-C Версия полностью идентичен результату.
существоватькнигаглавасередина,наспервыйбыстрый概описывать Понятнораспознавание речиа также Как создавать современные методы глубокого обучения ASR система. Затем мы рассказали, как тренировать TensorFlow Модель распознает простые голосовые команды и объясняет, как их существовать. Android приложениеа такжена основе Objective-C и Swift из iOS приложениеиспользуется в Моделиз шаг за шагом Учебник. Также мы обсудили, как провести поиск пропажи из TensorFlow Обработали документ ядра, добавили его и пересобрали TensorFlow iOS Библиотека, чтобы исправить iOS Распространенные ошибки загрузки в из Модель.
ASR Используется для преобразования речи в текст. Следующим главой, мы Воля, исследуем другой индивидуальный текст Воли, как для вывода из Модель, и текст Воля содержит полные предложения на естественном языке, а не эту главу в виде простых команд. Мы, Воля, рассказываем, как построить Модель для Волякартина, например, мы из старого друга конвертируем для текста, а такжекаксуществоватьдвигатьсяприложениеиспользуется в Должен Модель. Наблюдение и описание вашего контента на естественном языке требует настоящего человеческого интеллекта. Шерлок Холмс — один из лучших людей, справившихся с этой задачей. наскогда然возвращаться Нетнравиться福尔摩斯,Да让нассмотретьсмотретькакоткрыть始。