PyTorch определение модели с помощью ONNX and Caffe2

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


После выхода PyTorch в октябре 2016 года он быстро завоевал популярность среди разработчиков Facebook. Он отлично подходит для исследований и оперативного создания прототипов. Отладка вашего кода и изменение архитектуры модели может быть сделано в PyTorch за два клика.

Когда дело дошло до выхода на рынок, Tensorflow от Google все равно оказался впереди. С Tensorflow Serving было очень легко внедрять модели машинного обучения.

Это изменилось в мае 2018 года, когда в PyTorch был интегрирован Caffe2, получив полный производственный конвейер. Этот конвейер используется в Facebook. Они обучают модель, используя PyTorch, и разворачивают ее, используя Caffe2.

Примечание: Caffe2 не следует путать с Caffe. Это две совершенно разные рамки. Caffe была очень популярна 5 лет назад.

Deep Learning конвейер от Facebook

Для разработчиков и инженеров, важна быстрая работа с запросами, а также использовании среды разработки на знакомом языке, с которым легко работать. PyTorch соответствует этим требованиям.

Однако в Facebook нужно работать в невообразимых масштабах. Вычислительная эффективность и производительность, а не счастье разработчика - цели в таких средах. Ответ Facebook на проблему с производительностью был Caffe2 - невероятно быстрый фреймворк, написанный на C ++.

Caffe2 был представлен Facebook в апреле 2017 года. Он универсален, и модели Caffe2 могут быть развернуты на многих платформах, включая мобильные. Приложения Facebook с Caffe2 были развернуты на более чем миллиарде мобильных устройств на iOS и Android.

Facebook поддерживает взаимодействие между PyTorch и Caffe2.

Недавно, в мае 2019 года, с выпуском PyTorch 1.1 была добавлена поддержка TensorBoard, что очень полезно для визуализации и отладки.

Open Neural Network Exchange (ONNX)

Open Neural Network Exchange (ONNX) - это открытый формат, который позволяет пользователям перемещать модели глубокого обучения между различными фреймворками. Этот формат был первоначально предложен Facebook и Microsoft, а в настоящее время это принятый отраслевой стандарт.

Для развертывания моделей PyTorch в Caffe2 нужно преобразовать их в формат ONNX, а затем развернуть экспортированную модель ONNX с использованием Caffe2.

В нашем последнем посте мы описали, как обучить классификатор изображений и сделать вывод в PyTorch. Модели PyTorch сохраняются в виде файлов .pt или .pth. В этом посте мы объясним, как мы можем преобразовать обученную модель PyTorch в модель ONNX и сделать вывод в Caffe2.

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

Мы также рассмотрим сходства и различия в результатах вывода с использованием модели PyTorch и модели ONNX.

Для этой работы мы используем PyTorch 1.1.0 и ONNX 1.5.0 с Python3.7.

Настройка окружения

Вам нужно будет установить conda. Затем мы настроим нашу виртуальную среду, выполнив следующую команду.

conda env create -f environment.yml

Это позволит установить необходимые пакеты в виртуальную среду под названием pytorch_inference. Затем мы активируем его с помощью следующей команды.

conda activate pytorch_inference

Модель Pytorch, с которой мы будем работать, можно скачать здесь. Модель была обучена с использованием PyTorch 1.1.0, и наша текущая виртуальная среда для вывода также имеет PyTorch 1.1.0. Теперь мы можем запустить jupiter, чтобы преобразовать модель PyTorch в ONNX и сделать вывод, используя модель ONNX в Caffe2.

PyTorch и ONNX

Давайте посмотрим, как экспортировать модель PyTorch. pt в ONNX. Ниже приведен фрагмент, делающий это.

Поскольку мы будем считать это всё CPU с использованием Caffe2, мы устанавливаем для устройства значение «cpu» и загружаем модель PyTorch, отображающую тензоры в CPU. Затем нам нужно сделать фиктивный ввод, который будет соответствовать вводу структуры сети. Наконец, функция экспорта - это один слой, который принимает модель PyTorch, фиктивный ввод и целевой файл ONNX.

Обратите внимание, что для установки Caffe2 в настоящее время доступны готовые двоичные файлы без поддержки CUDA для Mac, Ubuntu и CentOS. Все остальные платформы или поддержка CUDA требуют компиляции из исходного кода. В этом примере мы протестировали процессорный вывод в MacOS Mojave и Ubuntu 18.04. Если вы хотите использовать свои модели ONNX с CUDA, вам нужно собрать Caffe2 из исходного кода.

Вывод в Caffe2 с использованием ONNX

Далее, Теперь мы можем развернуть нашу модель ONNX в различных устройствах и сделать вывод в Caffe2.

Сначала убедитесь, что вы создали желаемую среду с Caffe2 для запуска модели ONNX, и вы можете импортировать caffe2.python.onnx.backend. Далее вы можете скачать нашу модель ONNX отсюда. Он экспортируется с помощью PyTorch 1.1.0. Или, если вы можете успешно экспортировать свою собственную модель ONNX, не стесняйтесь использовать ее. Затем мы запускаем код ниже, чтобы сделать вывод.

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

Затем мы можем прочитать входное тестовое изображение, изменить его размер таким образом, чтобы меньший размер составлял 224, сохраняя соотношение сторон при изменении размера. Центр 224 ? 224 изображения обрезается и преобразуется в тензор. Этот шаг преобразует значения в диапазон 0-1. Затем он нормализуется относительно цветового кластера ImageNet с использованием среднего значения ImageNet и стандартного отклонения. Это делается как input[channel] =(input[channel] – mean[channel]) / std[channel].

Затем тензор изображения делается похожим на пакет из 1 изображения, поскольку сетевая архитектура вводит пакеты изображений.

Затем тензор преобразуется в массив с плавающей точкой Float32 и проходит через загруженную модель в Caffe2.

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

Мы печатаем оценки для всех 10 классов в порядке убывания, чтобы можно было сравнить оценки, вычисленные при выполнении логического вывода с использованием моделей PyTorch (как в нашем предыдущем посте), с результатами, вычисленными с помощью логического вывода с использованием модели ONNX в Caffe2.

Вот результаты вывода в PyTorch с использованием модели PyTorch .pt и вывода в Caffe2 с использованием .model onnx:

Время работы на CPU

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

В качестве теста мы измерили время вывода на 407 тестовых изображениях в двух разных сценариях.

Случай 1: Вывод с использованием модели PyTorch 1.1.0 .pt в PyTorch 1.1.0.
Случай 2: Вывод с использованием экспортированных моделей ONNX в Caffe2
Оба вышеуказанных теста были запущены в CPU в Ubuntu 18.04.

Среднее время вывода изображения на 407 тестовых изображениях составило 0,173 секунды при использовании модели PyTorch 1.1.0 и 0,131 секунды при использовании модели ONNX в Caffe2. Таким образом, хотя Caffe2 уже доказал свои возможности кроссплатформенного развертывания и высокую производительность, PyTorch постепенно приближается к Caffe2 в отношении производительности.

Оригинал


Источник: m.vk.com

Комментарии: