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

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

Подготовка данных

Набор данных был создан путем извлечения текста из документов и сбора образцов подписей из разных документов. Данные состоят из двух классов: подписи (метка класса 0) и текста (метка класса 1).

Данные текстовых изображений содержат изображения независимых слов с разным фоном, высотой, шириной и толщиной штриха. Изображения текста не ограничиваются одним единственным языком, но также включают многоязычный текст. Данные содержат около 2000 различных изображений.

Данные изображений подписей содержат около 1300 различных изображений подписей с разным фоном, высотой, шириной и толщиной штриха.

Данные хранятся в Google Cloud Storage. Предварительный этап очистки данных включал удаление размытых изображений и выравнивание текста с соответствующими отступами и полями. Чтобы увеличить размер данных, были выполнены некоторые изменения данных во время выполнения, такие как вращение, изменение масштаба и манипуляции с масштабированием. Набор данных разделен на 70% для обучения и 30% для проверки. Помимо этого, существует отдельный невидимый набор данных, на котором модель проверяется на точность.

Блог организован как:

Часть I: независимая модель классификации, которую можно использовать в отдельной системе.

Часть II: публикация модели путем развертывания модели в GCP ML-Engine.

I. Классификационная модель

Нейронная сеть с глубокой сверткой построена с использованием последовательной модели. Есть три сверточных слоя, а также полностью связанный слой, за которым следует выходной слой. Параметры CNN, такие как максимальный размер пула, установлены на (2, 2), а размер ядра - на (3, 3). Первоначально количество фильтров установлено равным 32. Количество фильтров удваивается в последующем сверточном слое.

Используемая функция активации - ReLU, а функция активации последнего слоя - Sigmoid. Слой выпадения добавляется с вероятностью выпадения 0,5. Архитектура модели следующая:

Сводка модели дает подробную картину каждого слоя с общим количеством параметров в каждом слое. Краткое описание модели приведено ниже:

Затем модель компилируется с метрикой оценки, такой как точность и потери, как binary_crossentropy, и оптимизатором как оптимизатор Адама.

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

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

Окончательная точность теста после добавления увеличивающего изображения и выпадающего слоя составляет 94,29%. Точность изображений подписи составляет 96,55%, а точность воспроизведения - 97,22%. Приведенная ниже таблица дает представление об улучшении результатов за счет добавления дополнений и слоя исключения.

II. Обучение и развертывание модели в Google Cloud ML Engine

Cloud ML Engine помогает обучать ваши модели машинного обучения в масштабе, размещать обученную модель в облаке и использовать модель для прогнозирования новых данных.

Данные

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

Упаковка модели

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

а) setup.py

Файл setup.py содержит зависимости вместе с версиями, которые необходимо установить для модели для работы в облачном движке машинного обучения. Движок Cloud ML имеет встроенную поддержку тензорного потока. Все остальные требования необходимо установить.

б) task.py

Файл task.py - это точка входа в модель. Он содержит список аргументов, которые необходимо проанализировать при запуске модели. Он также вызывает модель и другие зависимые файлы, если они есть. Обученная модель сохраняется в формате .hdf5. Код для файла task.py изображен здесь:

Примечание. Сохраненная модель имеет формат .hdf5. Для развертывания модели нам понадобится формат модели .pb. Для этого нам нужно экспортировать модель с обслуживанием TensorFlow.

в) model.py

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

г) utils.py

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

Обучение модели

а) Обучение на месте

Обучить модель на локальной машине можно двумя способами: с помощью команды python и с помощью команды gcloud.

$ export JOB_DIR=/path/to/job/dir
$ export TRAIN_DIR=/path/to/training/data/dir   #either local or GCS
#Train using python
python -m trainer.task \
 --train-dir=$TRAIN_DIR \
 --job-dir=$JOB_DIR
#Train using gcloud command line tool
$ gcloud ml-engine local train --module-name=trainer.task \
   --package-path=trainer/ \
   --train-dir=$TRAIN_DIR \
   --job-dir=$JOB_DIR

б) Отправка задания в Google Cloud

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

$ export BUCKET_NAME="your GCS bucket name"
$ export JOB_NAME="name of your job"
$ export OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
$ export TRAIN_DATA=/path/to/dataset
#gcloud command line
$ gcloud ml-engine jobs submit training $JOB_NAME \
    --job-dir $OUTPUT_PATH \
    --runtime-version 1.10 \
    --module-name trainer.task \
    --package-path trainer/ \
    --region $REGION \
    -- \
    --train-dir $TRAIN_DATA \
    --verbosity DEBUG

Журналы можно проверить на панели управления движком Google Cloud ML. После успешной отправки задания вы можете найти экспорт папки в OUTPUT_PATH вашей корзины GCS.

Развертывание модели

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

Шаг 1 → Создание модели

Команда gcloud для создания модели приведена ниже.

$ export MODEL_NAME=<Name of the model>
$ export MODEL_PATH=/gcs/path/to/the/model
#CREATE MODEL
$ gcloud ml-engine models create $MODEL_NAME

Шаг 2 → Создание версии для только что созданной модели

Выполните приведенную ниже команду, чтобы создать версию version_1 модели.

$ gcloud ml-engine versions create "version_1" --model $MODEL_NAME \ --origin $MODEL_PATH \
--python-version 3.5 --runtime-version 1.10

Шаг 3 → Обслуживание модели для прогнозов

Запрос на прогноз модели можно отправить как test.json. Для этого вам необходимо преобразовать ваше изображение в запрос формата .json, как показано ниже.

Онлайн-прогноз можно сделать с помощью следующей команды gcloud.

$ gcloud ml-engine predict — model $MODEL_NAME — version version_3 — json-instances test_data.json

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

Первоначально опубликовано на medium.com 9 января 2019 г.