Как Youdao Cloud Notes использует TensorFlow Lite?

машинное обучение искусственный интеллект TensorFlow

Текст / Техническая команда Youdao

В последние годы техническая группа Youdao проделала большую исследовательскую и прикладную работу по изучению возможностей искусственного интеллекта в реальном времени на мобильных терминалах. После того, как Google выпустил TensorFlow Lite (TFLlite) в ноябре 2017 года, техническая команда Youdao впервые использовала платформу TFLite и вскоре использовала ее в продуктах Youdao Cloud Note.В этой статье мы расскажем, как мы используем TFLite в работе по распознаванию документов в Youdao Cloud Notes, и какие функции есть у Tflite.

Введение в работу по распознаванию документов

1. Определение распознавания документов

Распознавание документов изначально было проблемой, с которой столкнулись при разработке функции сканирования документов в Youdao Cloud Notes. Функция сканирования документа надеется определить область, где находится документ на фотографии, сделанной пользователем, растянуть (восстановить масштаб), идентифицировать в нем текст и, наконец, получить чистую картинку или текстовую версию с форматом примечаний. Для достижения этой функциональности необходимо выполнить следующие шаги:

  1. Определите область документа:Найдите документ на фоне и определите четыре угла документа;

  2. Растяните область документа, чтобы восстановить соотношение сторон:По координатам четырех углов документа и принципу перспективы вычисляется исходное соотношение сторон документа, а область документа растягивается и восстанавливается до прямоугольника;

  3. Улучшение цвета:В зависимости от типа документа выберите различные методы улучшения цвета, чтобы сделать цвет изображения документа более чистым;

  4. Распознавание макета:Разбираться в расположении изображений документов и находить текстовую часть документа;

  5. Распознавание:Распознавать «текст» в виде картинок как закодированный текст;

  6. Создание заметок:Создает форматированные заметки из результатов OCR на основе макета изображений документа.

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

2. Роль распознавания документов в технологической матрице Youdao AI

В последние годы компания Youdao выполнила ряд работ по обработке и пониманию естественного языка, изображений, голоса и других мультимедийных данных на основе алгоритмов глубоких нейронных сетей, а также произвела многоязычный перевод на основе нейронных сетей, OCR (оптическое распознавание символов), технология распознавания голоса. Благодаря сочетанию этих технологий наши продукты позволяют пользователям записывать контент наиболее естественным и удобным способом, использовать технологии для понимания этого контента и преобразовывать его в текст для дальнейшей обработки. С этой точки зрения, наши различные технологии образуют сетевую структуру, основанную на естественном языке и преобразующую различные медиаформы друг в друга.

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

3. Введение в алгоритмы распознавания документов

Наш алгоритм распознавания документов основан на FCNN (Fully Convolutional Neural Network), представляющей собой специальную CNN (Convolutional Neural Network), которая характеризуется тем, что для каждого пикселя входного изображения существует выходное (относительное, обычное). состоит в том, что каждое входное изображение соответствует выходному). Следовательно, мы можем пометить набор изображений, содержащих документы, пометить пиксели рядом с краем документа как положительные образцы, а другие части пометить как подвыборки. Во время обучения изображение используется в качестве входных данных FCNN, а выходное значение сравнивается с помеченным значением, чтобы получить штраф за обучение, чтобы тренироваться. Для получения более подробной информации об алгоритме распознавания документов, пожалуйста, обратитесь к технической команде Youdao "Сканирование документов: практика глубоких нейронных сетей на мобильных устройствах"Эта статья.

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

4. Распознавание документов и TensorFlow

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

  1. Операторы, предоставляемые TensorFlow, обширны и многочисленны, и создавать новые операторы самостоятельно несложно. На ранней стадии разработки алгоритма необходимо опробовать различные модели сетевых структур и использовать различные странные операторы. В настоящее время структура, предоставляющая комплексных операторов, может сэкономить много энергии;

  2. TensorFlow может лучше охватывать несколько платформ, таких как серверная часть, сторона Android, сторона iOS и т. д., и имеет полную поддержку оператора на каждой платформе;

  3. TensorFlow — более распространенный выбор, а это означает, что, когда вы застряли, проще найти готовые решения в Интернете.

5. Почему вы хотите использовать TFLite для распознавания документов

До выпуска TFLite функция распознавания документов в Youdao Cloud Notes основывалась на мобильной библиотеке TensorFlow (TensorFlow Mobile). Когда TFLite будет выпущен, мы надеемся перейти на TFLite. Основной движущей силой нашей миграции был размер связанной библиотеки.

После сжатия размер динамической библиотеки TensorFlow на Android составляет около 4,5 МБ. Если вы хотите соответствовать различным процессорным архитектурам под платформу Android, вам может понадобиться запаковать около 4-х динамических библиотек, что в сумме дает объем около 18М; при этом объем библиотеки tflite составляет около 600К, даже если упаковать по ссылке библиотека под 4 платформы, она также должна занимать только объем около 2,5М. Это имеет большое значение для мобильного приложения, где земля дорогая.

Введение в TFLite

1. Что такое TFLite

TFLite — это мобильная и встроенная вычислительная среда нейронных сетей, запущенная Google I/O 2017. Она была выпущена в качестве предварительной версии для разработчиков 5 ноября 2017 года. По сравнению с TensorFlow он имеет следующие преимущества:

  • Легкий.Как упоминалось выше, библиотека ссылок, созданная TFLite, очень мала;

  • Не слишком много зависимостей.Компиляция TensorFlow Mobile зависит от таких библиотек, как protobuf, в то время как tflite не требует большой библиотеки зависимостей;

  • Вы можете использовать мобильное аппаратное ускорение.TFLite можно аппаратно ускорить с помощью Android Neural Networks API (NNAPI).Если чип ускорения поддерживает NNAPI, он может ускорить TFLite. Но в настоящее время на большинстве телефонов Android Tflite по-прежнему работает на процессоре.

2. Структура кода TFLite

Как пользователь TFLite, мы также изучили структуру кода TFLite и поделились ею здесь.

В настоящее время код для TFLite находится в папке «tensorflow/contrib/lite» в проекте TensorFlow. В папке есть несколько заголовочных/исходных файлов и несколько подпапок.

Среди них некоторые из наиболее важных заголовочных файлов:

  • model.h: Некоторые классы и методы, связанные с файлами модели. Класс FlatBufferModel используется для чтения и хранения содержимого модели, а InterpreterBuilder может анализировать содержимое модели;

  • Interpreter.h: Предоставляет класс Interpreter для вывода, с которым мы имеем дело чаще всего;

  • context.h:Предоставляет структуру TfLiteContext, в которой хранятся тензоры и некоторое состояние. В реальном использовании он обычно обернут в Interpreter;

Кроме того, есть еще несколько важных подпапок:

  • kernels: Именно здесь определяются и реализуются операторы. Файл regester.cc определяет, какие операторы поддерживаются, какие можно настроить.

  • downloads: Некоторые сторонние библиотеки, в основном в том числе:

  • спуск: расширение Google к стандартной библиотеке C++;

  • eigen: библиотека матричных операций;

  • farmhash: библиотека для хеширования;

  • flatbuffers: библиотека для формата модели FlatBuffers, используемого TFLite;

  • gemmlowp: библиотека операций с матрицами низкой точности, открытый исходный код Google;

  • neon_2_sse: сопоставьте инструкцию neon на руке с соответствующей инструкцией sse.

  • java: В основном некоторый код, относящийся к платформе Android;

  • nnapi: Предоставляет вызывающий интерфейс nnapi. Если вы хотите реализовать nnapi самостоятельно, вы можете посмотреть;

  • schema:Конкретное определение формата модели FlatBuffers, используемого TFLite;

  • toco: Соответствующий код для преобразования модели protobuf в формат модели FlatBuffers.

Как мы используем TFLite?

1. Сборка TFLite

TFLite может работать на Android и iOS, а официальный сайт предлагает различные процессы компиляции.

На Android мы можем использовать инструмент сборки bazel для компиляции. Установка и настройка инструмента bazel повторно описываться не будут, и студенты, имеющие опыт компиляции TensorFlow, должны быть с ним знакомы. Согласно официальной документации, целью, скомпилированной bazel, является «//tensorflow/contrib/lite/java/demo/app/src/main:TfLiteCameraDemo», что приводит к созданию демо-приложения. Если вы просто хотите скомпилировать файлы библиотеки, вы можете скомпилировать "//tensorflow/contrib/lite/java:tensorflowlite" Эта цель получает библиотеку libtensorflowlite_jni.so и соответствующий интерфейс уровня Java.

Смотрите официальную документацию для более подробной информации:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/docs_src/mobile/tflite/demo_android.md

В iOS вам нужно использовать Makefile для компиляции. Запуск build_ios_universal_lib.sh на платформе Mac приведет к компиляции и созданию файла библиотеки tensorflow/contrib/lite/gen/lib/libtensorflow-lite.a. Это толстая библиотека, которая упаковывает библиотеки для платформ x86_64, i386, armv7, armv7s, arm64.

Смотрите официальную документацию для более подробной информации:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/docs_src/mobile/tflite/demo_ios.md

Интерфейс вызова библиотеки TFLite на двух платформах также отличается: интерфейс вызова уровня Java предоставляется на Android, а интерфейс вызова уровня C++ предоставляется на iOS.

Конечно, структура проекта TFLite относительно проста.Если вы знакомы со структурой TFLite, вы также можете использовать знакомые инструменты компиляции для компиляции TFLite.

2. Преобразование модели

TFLite больше не использует старый формат protobuf (вероятно, чтобы уменьшить зависимости библиотек) и вместо этого использует FlatBuffers. Поэтому необходимо преобразовать обученный файл модели protobuf в формат FlatBuffers.

TensorFlow официально дает рекомендации по преобразованию моделей. Во-первых, так как TFLite поддерживает относительно немного операторов и не поддерживает операторов, связанных с обучением, необходимо заранее удалить из модели ненужные операторы, а именно Freeze Graph, после чего формат модели можно преобразовать, используя инструмент tensorflow. токо. Эти два инструмента также скомпилированы bazel.

Смотрите официальную документацию для более подробной информации:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/docs_src/mobile/tflite/devguide.md

3. Отсутствующие операторы

В настоящее время TFLite предоставляет только ограниченное количество операторов, в основном операторы, используемые в CNN, такие как свертка, объединение и т. д. Наша модель является полностью сверточной нейронной сетью, и большинство операторов предоставляются TFLite, но оператор conv2d_transpose (обратная свертка) не предоставляется. К счастью, оператор появляется в конце сетевой модели, поэтому мы можем вынести результат расчета перед обратной сверткой и реализовать обратную свертку на C++ для вычисления конечного результата. Поскольку количество операций обратной свертки невелико, на скорость работы это практически не влияет.

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

Смотрите официальную документацию для более подробной информации:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/custom_operators.md

Преимущества и недостатки TFLite

Преимущества: найти баланс между размером библиотеки, простотой разработки, кроссплатформенностью и производительностью.

Для сравнения техническая группа Youdao выбрала некоторые другие мобильные платформы глубокого обучения для анализа их производительности по четырем аспектам: «удобство разработки, кросс-платформенность, размер библиотеки и производительность»:

  • TensorFlow Mobile, поскольку это тот же набор кода, что и TensorFlow на сервере, может напрямую использовать модель, обученную на сервере, что очень удобно для разработки; он может поддерживать Android, iOS и кроссплатформенность; упоминалось выше, размер библиотеки сравнивается с Большой, производительность мейнстрим.

  • caffe2 легко конвертирует модель, обученную caffe, в caffe2, но в ней отсутствуют некоторые операторы, а удобство разработки среднее, есть поддержка Android, iOS, в кроссплатформенности проблем нет, скомпилированная библиотека относительно большая, но это статическая библиотека, сжатие, производительность.

  • Mental/Accelerate, оба являются фреймворками для iOS. Он относительно низкоуровневый, требует преобразования модели и самостоятельного написания кода вывода, что более болезненно в разработке; поддерживает только iOS; библиотека встроена в систему и не требует размера библиотеки; скорость очень высокая.

  • CoreML — это фреймворк для iOS 11, выпущенный на WWDC17. Есть некоторые инструменты конвертации модели.Разрабатывать не больно, когда задействованы только общие операторы, но сложно, когда задействованы пользовательские операторы, поддерживается только iOS 11 и выше, библиотека встроена в систему и не работает. не требует размера библиотеки, скорость очень высокая.

И, наконец, TFLite:

  • TFLite, его модель можно конвертировать из модели, обученной TensorFlow, но в нем отсутствуют некоторые операторы, а удобство разработки среднее, поддерживает Android, iOS, кроссплатформенность не проблема, библиотека собрана очень мало, по к нашим экспериментам, что немного быстрее, чем TensorFlow.

Видно, что TensorFlow Mobile прост в разработке и обладает хорошей универсальностью, но библиотека ссылок велика, а производительность является основной (мобильные версии других фреймворков нейронных сетей на стороне сервера также имеют аналогичные характеристики); относительно низкоуровневый такие библиотеки, как Mental/Accelerate, очень быстрые, однако они не могут быть кроссплатформенными, а разработка более болезненной; нейросетевые фреймворки, такие как caffe2 и TFLite, оптимизированные для мобильных терминалов, относительно сбалансированы, хотя могут быть и неполные операторы в начале, пока команда, стоящая за ними, продолжает поддерживать и продвигать разработку фреймворка, эта проблема будет решена в будущем.

Плюсы: Относительно легко масштабируется

Поскольку код TFLite (по сравнению с TensorFlow) относительно прост, а структура относительно проста для понимания, ее можно относительно легко расширить. Если вы хотите добавить оператор, которого нет в TFLite, но есть в TensorFlow, вы можете добавить собственный класс; если вы хотите добавить оператор, которого нет в TensorFlow, вы также можете напрямую изменить файл модели FlatBuffers.

Недостаток: ops недостаточно исчерпывающий

Как упоминалось ранее, TFLite в настоящее время в основном поддерживает операторов, связанных с CNN, и не имеет хорошей поддержки операторов в других сетях. Поэтому, если вы хотите перенести модели rnn на мобильные устройства, TFLite в настоящее время не подходит.

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

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

Хотя TFLite основан на NNAPI, теоретически он может использовать различные вычислительные чипы, но вычислительных чипов, поддерживающих NNAPI, немного. Ожидается, что в будущем TFLite сможет поддерживать больше вычислительных чипов, ведь существует верхний предел оптимизации скорости работы нейросетей на ЦП, а использование нестандартных чипов — это дверь в новый мир.

Суммировать

За последние два года кажется, что на мобильных устройствах наблюдается волна искусственного интеллекта в реальном времени. Техническая команда Youdao также предприняла множество попыток исследования алгоритмов мобильного ИИ и запустила автономный перевод нейронной сети (оффлайн NMT), автономное распознавание текста (оффлайн OCR), автономное сканирование документов и другие возможности мобильного ИИ в реальном времени. Youdao Dictionary, Youdao Translator и Youdao Cloud Notes. Поскольку мобильный ИИ все еще находится в стадии активной разработки, различные фреймворки и вычислительные платформы еще не совершенны.

Здесь мы рассмотрим функцию распознавания документов в автономном режиме в Youdao Cloud Notes в качестве практического примера и увидим, что TFLite, как превосходная мобильная среда искусственного интеллекта, может помочь разработчикам с относительной легкостью внедрить обычные нейронные сети на мобильных устройствах. В будущем мы также предоставим вам больше технической команды Youdao в сочетании с техническими исследованиями TFLite и практическими приложениями продуктов в мобильном ИИ в реальном времени.

Чтобы узнать больше о статьях по технической практике технической команды Youdao, обратите внимание на общедоступный аккаунт «Техническая команда Youdao».

Be a Tensorflower