Эта статья будет не полным сравнением фреймворков глубокого обучения, а скорее списком того, что заставило нас выбрать MXNet по сравнению с другими фреймворками. Полное сравнение фреймворков глубокого обучения не будет точным по разным причинам.

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

Фреймворки конкурируют друг с другом, и в большинстве случаев одни фреймворки копируются или адаптируются другими. Если вы хотите добавить информацию или исправить что-то, не стесняйтесь добавлять комментарий.

Что такое MXNet?

На официальном сайте мы можем найти действительно небольшое описание возможностей MXNet.

Легкое, портативное, гибкое распределенное / мобильное глубокое обучение с динамическим планировщиком развертывания потоков данных с учетом мутаций; для Python, R, Julia, Scala, Go, Javascript и др.

В этом обзоре представлены некоторые из основных технических свойств MXNet, но он не является исчерпывающим. И вам этого тоже может не хватить. Эти свойства охватывают аспекты от новичка до продвинутого использования. Если у вас есть опыт глубокого обучения, они могут оказаться бесполезными, поскольку они не так важны для вас.

Как установить фреймворк глубокого обучения?

Одним из первых препятствий, которые вам придется преодолеть перед использованием фреймворка Deep Learning, является установка. Некоторые из них легче установить, чем другие, а некоторые имеют скудную или отсутствующую документацию. Год назад процесс установки был ужасным. Но с тех пор большинство фреймворков упростили свой процесс.

Например, фреймворки с Python API теперь поддерживают установку через pip, менеджер пакетов для python. Вот небольшой список фреймворков, у которых есть документация по установке.

  • MXNet: пакет pip или компиляция из исходного кода с помощью make.
  • Tensorflow: пакет pip или компиляция из исходников с помощью Bazel. Bazel работает нормально, но это не удобное решение и не очень хорошо документировано. В наших экспериментах мы пытаемся написать код, использующий тензорный поток и opencv на C ++. Импортировать Opencv в bazel или импортировать Tensorflow с cmake - это ужасно и потеря времени. Сейчас для cmake не рекомендуется поддержка, возможно, это может упростить интеграцию tenorflow с другими библиотеками.
  • CNTK: пакет pip или компиляция из исходного кода (мы не тестируем из исходного кода).
  • Caffe: при компиляции из исходных кодов действительно не было ясно, что делать и от чего зависит. У нас было много ошибок, прежде чем мы получили рабочее решение. Сейчас вроде переписали страницу установки и стало понятнее.
  • Chainer: пакет pip или компиляция из исходного кода с настройкой python.
  • Керас: пакет пункта. Поскольку Keras - это только передняя часть, мы также должны установить возможный бэкэнд для использования TensorFlow, CNTK, Theano или MXNet.

Учебники

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

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

В других фреймворках есть более полные руководства. С момента выпуска своего нового императивного API под названием Gluon, MXNet работает над учебниками, которые объясняют большую часть концепции глубокого обучения и переходят к расширенному использованию. Более того, с помощью python API можно написать Python Notebook. Это действительно мощный инструмент для объяснения и иллюстрации кода.

Некоторые примеры…

Опытным пользователям обычно не нужны простые обучающие материалы. В большинстве случаев они ищут полные и полезные примеры. Дополнительные примеры полезны для понимания сложных функций фреймворка в реальном приложении.

Благодаря сообществу можно найти реализацию новых революционных архитектур, таких как ResNet, Faster RCNN, SSD, LSTM. Наиболее часто используемые и популярные фреймворки имеют собственные реализации, а другие могут импортировать сети из Caffe или TensorFlow.

Я работаю в области компьютерного зрения. Поэтому возможность иметь работающую реализацию Faster RCNN, SSD, MTCNN или даже MobileNet - это замечательно.

Есть и аналог: хотя легко найти множество реализаций, некоторые из них не поддерживаются их автором. И они могут быть исключены из последней версии фреймворка. Чтобы избежать этого, MXNet и некоторые другие фреймворки сохраняют в своем основном репозитории часть разрекламированного кода, такого как SSD или Faster RCNN.

TensorFlow использует отдельный репозиторий (Модели), на который Google не очень хорошо ссылался :) Требуется много работы, чтобы поддерживать эти коды в актуальном состоянии и поддерживать их совместимость с каждой новой версией фреймворка.

Что такое зоопарк?

Если вы хотите обучить сеть новым данным, обычно используют предварительно обученную сеть. Это позволяет сократить время тренировки, глобально снизить чрезмерную подгонку и повысить производительность.

Эти сети обучаются на очень больших базах данных, таких как ImageNet. Но время обучения и вычислительные мощности для получения такой сети доступны далеко не всем.

Чтобы предоставить доступ к таким предварительно обученным сетям для своих пользователей, фреймворки либо обучили эти модели, либо разработали конвертер из других фреймворков. Эти репозитории с предварительно обученными моделями называются Zoo.

Легко использовать, легко понять!

Это действительно личный критерий. Но простой в использовании и понятный API сократит время обучения и поможет вашей команде или новому члену эффективно работать с ним.

Есть API низкого уровня и API высокого уровня. TensorFlow - это относительно низкий уровень, Keras - высокий уровень, а MXNet - смесь высокого и низкого уровня. В настоящее время MXNet имеет несколько API-интерфейсов: Symbol API для определения и запуска сети, NDArray (низкий уровень) и Gluon (высокий уровень) API для определения сети по запуску. Одним из преимуществ наличия такого набора API является то, что если у нас есть вопросы, нам не нужно искать или задавать их несколько раз на разных платформах.

TensorFlow API непрост в использовании, поэтому сообщество создает множество API более высокого уровня, таких как TF learn, TF slim, Sonnet, Keras,… Эти API более высокого уровня являются проще в использовании, но они не всегда так хорошо документированы и поддерживаются, как основной TensorFlow. Я надеюсь, что это изменится с официальной интеграцией Keras в TensorFlow.

Keras - действительно хороший API. Это API поверх серверной части. А Keras можно использовать с TensorFlow, Theano, CNTK и даже MXNet. Keras позволяют действительно быстро создавать прототипы, создавать сложные нейронные архитектуры несложно.

Однако, поскольку у него есть отдельный бэкэнд, выполнять операции низкого уровня может быть сложно. Например, управление несколькими GPU. В этом случае нам нужно напрямую использовать бэкэнд (также известный как TensorFlow / Theano / CNTK / MXNet).

Активность, эволюция и реактивность сообщества

Благодаря активности Deep Learning новые архитектуры выпускаются каждый месяц, а новые прорывные сети - каждые 6 месяцев. Фреймворки глубокого обучения должны быть действительно активными.

В качестве недавнего примера можно привести выпуск Mobilenet, разработанный Google. В этой сети используется нерегулярный слой, называемый разделимой по глубине сверткой. Итак, чтобы реализовать эту сеть с полной производительностью обучения, нам нужно либо реализовать этот уровень, либо дождаться, пока обслуживающий персонал его реализует.

К сожалению, эти современные алгоритмы создают поток пользователей между фреймворками.

О Multi GPU / Multi Computer

MXNet известен своим управлением графическим процессором. Это просто и производительно по сравнению с Tensorflow или Keras.

Поскольку Keras можно использовать с бэкэндом MXNet, Keras в этой конкретной конфигурации можно легко масштабировать на нескольких GPU (Keras с бэкэндом MXNet).

Работа на встроенных устройствах

Если вы работаете на интеллектуальных устройствах, встраивание сети может стать проблемой. Не все фреймворки можно использовать на мобильных платформах или платформах с низкой производительностью.

MXNet решает эту проблему с помощью процесса объединения. Этот сценарий объединяет функциональные возможности MXNet в небольшой API C ++. Этот интерфейс может использовать только прогнозы, но почти не имеет зависимости (только Openblas). Этот API-интерфейс реализован на многих языках Java, JS, Scala,… и может быть встроен во многие платформы iOS, Android и браузеры.

А как насчет скорости?

Доступно множество тестов. Но, к сожалению, поскольку фреймворки действительно активны, тесты не всегда актуальны.

Ознакомьтесь с активным тестом Deep Learning.

В заключении …

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

Вам интересно разработать проект глубокого обучения с помощью MXNet? Также ознакомьтесь со статьей ниже:



Хотите узнать больше о Васса?

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

Найти нас на: