Использование 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 )