1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/huiwei13-MNN

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Введение

MNN — это высокоэффективный и лёгкий фреймворк глубокого обучения. Он поддерживает вывод и обучение моделей глубокого обучения, а также обеспечивает лучшую в отрасли производительность для вывода и обучения на устройстве. В настоящее время MNN интегрирован более чем в 20 приложений Alibaba Inc., таких как Taobao, Tmall, Youku, Dingtalk, Xianyu и др., охватывая более 70 сценариев использования, таких как прямая трансляция, съёмка коротких видео, поиск рекомендаций, поиск товаров по изображению, интерактивный маркетинг, распределение акций, контроль рисков безопасности. Кроме того, MNN также используется на встраиваемых устройствах, таких как IoT.

Принципы проектирования и данные о производительности MNN были опубликованы в статье MLSys 2020 здесь. Пожалуйста, цитируйте MNN в своих публикациях, если это поможет вашему исследованию:

@inproceedings{alibaba2020mnn,
  author = {Jiang, Xiaotang and Wang, Huan and Chen, Yiliu and Wu, Ziqi and Wang, Lichuan and Zou, Bin and Yang, Yafeng and Cui, Zongyang and Cai, Yu and Yu, Tianhang and Lv, Chengfei and Wu, Zhihua},
  title = {MNN: A Universal and Efficient Inference Engine},
  booktitle = {MLSys},
  year = {2020}
}

Документация и инструменты

Документация MNN размещена здесь в документации Yuque.

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

Основные функции

Высокая производительность

  • Реализует основные вычисления с большим количеством оптимизированного ассемблерного кода, чтобы в полной мере использовать ARM CPU.
  • Для iOS доступно ускорение GPU (Metal), которое работает быстрее, чем собственный CoreML от Apple.
  • Для Android доступны OpenCL, Vulkan и OpenGL, которые глубоко настроены для основных графических процессоров (Adreno и Mali).
  • Алгоритмы свёртки и транспонированной свёртки эффективны и стабильны. Алгоритм свёртки Винограда широко используется для улучшения симметричных свёрток, таких как 3x3 -> 7x7.
  • Увеличение скорости в два раза для новой архитектуры ARM v8.2 с поддержкой вычислений с половинной точностью FP16.

Лёгкий вес

  • Оптимизирован для устройств, не имеет зависимостей, может быть легко развёрнут на мобильных устройствах и различных встраиваемых устройствах.
  • Платформа iOS: размер статической библиотеки для платформ armv7+arm64 составляет около 5 МБ, увеличение размера связанных исполняемых файлов составляет около 620 КБ, а файл metallib — около 600 КБ.
  • Платформа Android: основной размер so составляет около 400 КБ, OpenCL so — около 400 КБ, Vulkan so — около 400 КБ.

Универсальность

  • Поддерживает Tensorflow, Caffe, ONNX и поддерживает распространённые нейронные сети, такие как CNN, RNN, GAN.
  • Конвертер моделей MNN поддерживает 149 операций Tensorflow, 58 операций TFLite, 47 операций Caffe и 74 операции ONNX; количество операций для разных аппаратных бэкендов MNN: 111 для CPU, 6 для ARM V8.2, 55 для Metal, 43 для OpenCL и 32 для Vulkan.
  • Поддерживает iOS 8.0+, Android 4.3+ и встраиваемые устройства с интерфейсом POSIX.
  • Поддерживает гибридные вычисления на нескольких устройствах. В настоящее время поддерживает CPU и GPU.

Простота использования

  • Эффективный модуль обработки изображений, ускоряющий аффинное преобразование и преобразование цветового пространства без libyuv или opencv.
  • Предоставляет обратные вызовы на протяжении всего рабочего процесса для извлечения данных или точного управления выполнением.
  • Предлагает варианты выбора ветви вывода и параллельного выполнения ветвей на CPU и GPU.
  • (BETA) MNN Python API помогает инженерам машинного обучения легко использовать MNN для создания модели, её обучения и квантования без необходимости вникать в код C++.

Архитектура

architecture

MNN можно разделить на две части: конвертер и интерпретатор.

Конвертер состоит из фронтендов и оптимизации графов. Первые отвечают за поддержку различных обучающих фреймворков. В настоящее время MNN поддерживает Tensorflow, Tensorflow Lite, Caffe и ONNX (PyTorch/MXNet); вторые оптимизируют графы с помощью слияния операторов, замены операторов и корректировки компоновки.

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

В Engine и Backends MNN применяет различные схемы оптимизации, такие как:

  • применение алгоритма Винограда в свёртке и развёрстке;
  • применение алгоритма Штрассена в матричном умножении;
  • низкоточные вычисления;
  • оптимизация Neon;
  • рукописная сборка;
  • многопоточная оптимизация;
  • повторное использование памяти;
  • гетерогенные вычисления и др.

Как обсуждать и получать помощь от сообщества MNN

Сканируйте следующие QR-коды, чтобы присоединиться к группе обсуждения Dingtalk. Групповые обсуждения преимущественно ведутся на китайском языке. Но мы приветствуем англоговорящих участников и готовы помочь им.

Группа №1 (полная):

Группа №2 (полная):

Группа №3:

Лицензия

Apache 2.0

Благодарность

Участники MNN: отдел технологий Taobao, команда инженеров по поиску, команда DAMO, Youku и другие сотрудники Alibaba Group.

MNN ссылается на следующие проекты:

  • Caffe;
  • flatbuffer;
  • gemmlowp;
  • Google Vulkan demo;
  • Halide;
  • Mace;
  • ONNX;
  • protobuffer;
  • skia;
  • Tensorflow;
  • ncnn;
  • paddle-mobile;
  • stb;
  • rapidjson;
  • pybind11;
  • pytorch;
  • bolt;
  • libyuv.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

MNN — это облегчённый движок для логического вывода в глубоких нейронных сетях. Он загружает модели глубоких нейронных сетей на стороне клиента для логического вывода и прогнозирования. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/huiwei13-MNN.git
git@api.gitlife.ru:oschina-mirror/huiwei13-MNN.git
oschina-mirror
huiwei13-MNN
huiwei13-MNN
master