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

OSCHINA-MIRROR/NVIDIA_Developer_Community-DIGITS

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
API.md 12 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 22:05 0b96df5

Использование REST API DIGITS

Содержание:

  • Введение;
  • Классификация изображений;
    • Создание набора данных для классификации;
    • Создание модели классификации;
    • Классификация;
    • Удаление задания;
  • Регрессия;
    • Создание регрессионного набора данных;
    • Создание регрессионной модели;
    • Вывод.

Введение

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

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

ПРИМЕЧАНИЕ: это не исчерпывающее руководство по REST API DIGITS. Если у вас есть сомнения относительно указанной функции, обратитесь к коду.

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

Предполагается, что DIGITS работает на localhost. Если DIGITS работает на другом хосте/порту, пожалуйста, соответствующим образом скорректируйте командные строки.

Классификация изображений

Это ещё один способ запуска учебника «Начало работы» (GettingStarted.md). Если вы ещё не прошли этот учебник, сделайте это сейчас.

Создание классификационного набора данных

Чтобы создать набор данных, сначала необходимо войти в систему. Следующая команда зарегистрирует нас как пользователя fred:

$ curl localhost/login -c digits.cookie -XPOST -F username=fred
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to target URL: <a href="/">/</a>.  If not click the link.(venv)

Обратите внимание на флаг -c digits.cookie, который указывает curl сохранить файл cookie сеанса в digits.cookie. DIGITS требует от пользователей входа в систему перед созданием заданий. Задание может быть отредактировано или удалено только пользователем, создавшим его. Файл cookie сеанса необходим для всех команд, которые создают или изменяют задания. Для этих команд мы будем использовать -b digits.cookie в командной строке curl, чтобы передать файл cookie сеанса DIGITS.

ПРИМЕЧАНИЕ: если вы предпочитаете не хранить файлы cookie, вы можете использовать скрытое поле формы имени пользователя напрямую. Это можно сделать, заменив -b digits.cookie на -F username=fred в командах, требующих аутентификации. Однако использование файлов cookie будет более устойчивым к будущим изменениям схемы аутентификации.

В приведённой выше команде /login называется «маршрут». Каждый маршрут в DIGITS имеет свою функцию. Обратитесь к /digits/webapp.py для получения списка точек входа маршрута.

Если вы уже загрузили набор данных MNIST, как описано в учебнике «Начало работы», вы можете создать набор данных с именем mnist_dataset, выполнив эту команду:

$ export MNIST_PATH=/path/to/mnist
$ curl localhost/datasets/images/classification.json -b digits.cookie -XPOST -F folder_train=$MNIST_PATH/train -F encoding=png -F resize_channels=1 -F resize_width=28 -F resize_height=28 -F method=folder -F dataset_name=mnist_dataset
{
  "id": "20160809-103210-ccbf",
  "name": "mnist_dataset",
  "status": "Initialized"
}

Здесь вы видите, как мы устанавливаем значение различных полей в форме создания набора данных. Все поля формы можно указать с помощью REST API. Полный список доступных полей формы см. в коде на digits/dataset/images/classification/forms.py и соответствующих родительских классах. Ответ:

Полученный от DIGITS идентификатор задания для этого набора данных классификации напечатан как 20160809-103210-ccbf. Теперь мы можем проверить статус этого задания, выполнив:

$ curl localhost/datasets/20160809-103210-ccbf/status
{"status": "Done", "type": "Image Classification Dataset", "name": "mnist_dataset", "error": null}

Приведённый выше вывод указывает на то, что задание выполнено. Теперь мы можем получить более подробную информацию о задании, выполнив:

$ curl localhost/datasets/20160809-103210-ccbf.json
{
  "CreateDbTasks": [
    {
      "backend": "lmdb",
      "compression": "none",
      "encoding": "png",
      "entries": 45002,
      "image_channels": 1,
      "image_height": 28,
      "image_width": 28,
      "name": "Create DB (train)"
    },
    {
      "backend": "lmdb",
      "compression": "none",
      "encoding": "png",
      "entries": 14998,
      "image_channels": 1,
      "image_height": 28,
      "image_width": 28,
      "name": "Create DB (val)"
    }
  ],
  "ParseFolderTasks": [
    {
      "label_count": 10,
      "name": "Parse Folder (train/val)",
      "test_count": 0,
      "train_count": 45002,
      "val_count": 14998
    }
  ],
  "directory": "/home/greg/ws/digits/digits/jobs/20160809-103210-ccbf",
  "id": "20160809-103210-ccbf",
  "name": "mnist_dataset",
  "status": "Done"
}

Вы также можете использовать маршрут /index.json, чтобы вывести список всех существующих заданий:

$ curl localhost/index.json
{
  "datasets": [
    {
      "id": "20160809-103957-6d37",
      "name": "mnist_dataset",
      "status": "Done"
    }
  ],
  "models": [
  ],
  "version": "4.1-dev"
}
### Создание модели классификации

Теперь, когда у нас есть набор данных, мы можем создать модель:

```sh
$  curl localhost/models/images/classification.json -b digits.cookie -XPOST -F method=standard -F standard_networks=lenet -F train_epochs=30 -F framework=caffe -F model_name=lnet_mnist -F dataset=20160809-103957-6d37
{
  "caffe flavor": "NVIDIA",
  "caffe version": "0.15.9",
  "creation time": "2016-08-09 11:24:14.853354",
  "dataset_id": "20160809-103957-6d37",
  "deploy file": "deploy.prototxt",
  "digits version": "4.1-dev",
  "framework": "caffe",
  "id": "20160809-112414-0296",
  "image dimensions": [
    28,
    28,
    1
  ],
  "image resize mode": "squash",
  "job id": "20160809-112414-0296",
  "labels file": "labels.txt",
  "mean file": "mean.binaryproto",
  "name": "lenet_mnist",
  "network file": "original.prototxt",
  "snapshot file": "no snapshots",
  "solver file": "solver.prototxt",
  "status": "Initialized",
  "train_val file": "train_val.prototxt",
  "username": "fred"
}

Для получения дополнительной информации о параметрах формы создания модели обратитесь к коду в digits/model/images/classification/forms.py и соответствующим родительским классам.

Пока модель обучается, мы можем запросить её статус:

$ curl localhost/models/20160809-112414-0296.json
{
  "caffe flavor": "NVIDIA",
  "caffe version": "0.15.9",
  "creation time": "2016-08-09 11:24:14.853354",
  "dataset_id": "20160809-103957-6d37",
  "deploy file": "deploy.prototxt",
  "digits version": "4.1-dev",
  "directory": "/home/greg/ws/digits/digits/jobs/20160809-112414-0296",
  "framework": "caffe",
  "id": "20160809-112414-0296",
  "image dimensions": [
    28,
    28,
    1
  ],
  "image resize mode": "squash",
  "job id": "20160809-112414-0296",
  "labels file": "labels.txt",
  "mean file": "mean.binaryproto",
  "name": "lenet_mnist",
  "network file": "original.prototxt",
  "snapshot file": "snapshot_iter_15488.caffemodel",
  "snapshots": [
    1,
    ...
    22
  ],
  "solver file": "solver.prototxt",
  "status": "Running",
  "train_val file": "train_val.prototxt",
  "username": "fred"
}
### Классификация

Теперь, когда у нас обученная модель, мы можем классифицировать изображение с помощью маршрута `/models/images/classification/classify_one.json`:

```sh
$ curl localhost/models/images/classification/classify_one.json -XPOST -F job_id=20160809-112414-0296 -F image_file=@$MNIST_PATH/test/0/00003.png
{
  "predictions": [
    [
      "0",
      100.0
    ],
    [
      "6",
``` ```
"username": "fred"
}

Для получения дополнительной информации о параметрах универсальной формы создания модели изображения обратитесь к коду в digits/model/images/generic/forms.py и соответствующим родительским классам.

Вывод

Теперь, когда у нас есть модель, мы можем извлечь функции из тестового изображения с помощью маршрута /models/images/generic/infer_one.json:

$ curl localhost/models/images/generic/infer_one.json -XPOST -F job_id=20160809-121939-ab6f -F image_file=@/home/greg/ws/digits/examples/regression/test.png
{
  "outputs": {
    "output": [
      [
        0.50042861700058,
        0.50376439094543
      ]
    ]
  }
}

Также можно выполнить вывод для нескольких изображений, используя маршрут /models/images/generic/infer_many.json. Это оставлено читателю в качестве упражнения.

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/NVIDIA_Developer_Community-DIGITS.git
git@api.gitlife.ru:oschina-mirror/NVIDIA_Developer_Community-DIGITS.git
oschina-mirror
NVIDIA_Developer_Community-DIGITS
NVIDIA_Developer_Community-DIGITS
master