Узнайте, как использовать веб-перехватчики, аннотации V7 и серверы REST для разделения карт, аэрофотоснимков и медицинских изображений на фрагменты.

Эта статья изначально была опубликована на сайте V7 (Как использовать рабочие процессы V7 для разделения больших изображений на патчи)

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

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

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

Итак, что вы можете сделать, чтобы упростить работу с большими изображениями?

Есть две основные стратегии для разных вариантов использования:

  • Мозаика изображения. Это хорошо, если вы хотите взаимодействовать со всем изображением сразу. Мозаика позволяет просматривать и работать с большими изображениями в режиме аннотаций без сбоев в работе браузера. Он используется такими приложениями, как Google Maps.
  • Создание фрагментов изображения. Разбиение изображения на более мелкие части отлично подходит, если вам нужно уменьшить размер изображения без потери экземпляров. Это также может снизить когнитивную нагрузку при аннотировании большого количества экземпляров.

V7 поддерживает оба варианта.

Вот как выглядит мозаичное изображение (обратите внимание, как детали отображаются постепенно после увеличения):

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

Однако в некоторых случаях вам не нужно работать с этим 2-гигабайтным файлом. И если вы не можете съесть слона целиком за один укус, лучше разделить его на более мелкие кусочки.

Здесь пригодится второй метод — патчи изображений.

В этом руководстве мы сосредоточимся на использовании существующих функций в V7 для разделения больших изображений на патчи и сохранения их в новом наборе данных.

Мы будем использовать пример сервера Flask с репозиторием Python V7 darwin-py для создания исправлений из больших изображений и загрузки их в новый набор данных.

Это может показаться пугающим, но все сводится к 3 шагам:

  1. Настройка локального REST-сервера
  2. Добавление веб-перехватчика в рабочий процесс набора данных в V7
  3. Использование аннотаций для выбора области обрезки

Давайте пройдемся по ним один за другим.

Шаг 1. Настройте локальный сервер REST.

Серверы REST позволяют обмениваться данными между несколькими системами с помощью веб-протоколов (например, HTTP). В контексте этого руководства это означает, что мы можем настроить рабочий процесс с помощью Darwin V7 и использовать веб-перехватчики для подключения его к серверу REST, который будет нарезать изображения на патчи.

Почему мы так поступаем?

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

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

Сейчас-

Для настройки сервера вам необходимо:

Убедитесь, что у вас установлены Python, pip, Git, make и Docker. Вам также необходимо настроить V7 Darwin Python SDK и аутентифицировать его с помощью ключа API.

После того, как ваша среда и все зависимости настроены, вам нужно будет клонировать репозиторий для сервера с GitHub.

Откройте терминал и клонируйте репозиторий Webhook Patch Server с помощью следующей команды:

git clone https://github.com/v7labs/webhook-patch-server

Затем вам нужно перейти в каталог сервера и выполнить следующую команду для сборки и запуска сервера:

С помощью терминала перейдите во вновь созданную папку (по умолчанию это /Users/[ваше имя]/webhook-patch-server/) и введите:

make build

Затем нам нужно настроить переменную с нашим ключом API.

Для типа Windows:

set V7_KEY="[type in your V7 Darwin API key here]"

Если вы используете Linux/Mac, напишите:

export V7_KEY="[type in your V7 Darwin API key here]"

И вот последняя команда. Чтобы запустить сервер, введите:

make run_server

Ваш сервер REST запущен и готов к нарезке. Он также должен отображать IP-адрес и порт. Они понадобятся нам для настройки нашего вебхука.

Шаг 2. Настройте рабочий процесс и конечную точку веб-перехватчика.

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

Сейчас-

Вы можете удалить этап проверки и добавить на его место этап веб-перехватчика.

Чтобы настроить вебхук, вам нужно добавить URL-адрес (IP-адрес сервера) с параметром «цель» (в данном случае имя нашего набора данных). Если мы хотим использовать локальный сервер, это означает добавление чего-то вроде:

https://[The IP address of the server]:[Port]/webhook?target=[Name of your dataset]

Обратите внимание, что имя должно совпадать с именем вашего набора данных. В нашем примере это Patches.

Через этот веб-перехватчик V7 Darwin будет отправлять HTTP-запрос на конечную точку (URL-адрес сервера REST) ​​всякий раз, когда изображение переходит на следующий этап. Сервер REST возьмет образ и разрежет его на патчи.

OK—

Но как сервер узнает, как обрезать и разделить изображение?

Ну, это последняя часть — мы можем использовать аннотации, чтобы указать это.

Шаг 3. Добавьте аннотации ограничительной рамки

Сервер настроен на обрезку изображений в виде фрагментов вдоль областей, разграниченных аннотациями. Мы можем сделать это с помощью инструмента аннотации Ограничивающая рамка.

Теперь важная деталь: имя вашего класса должно быть либо patch, либо crop, чтобы все работало.

Используйте ограничивающую рамку, чтобы выбрать область обрезки.

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

Вы можете изменить название своих аннотаций на вкладке Классы в представлении набора данных.

Вот и все!

Вы можете нажать кнопку Отправить в Webhook.

Изображение было разделено на 8 фрагментов, которые были автоматически добавлены в новый набор данных.

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

Настроив локальный сервер REST и подключив его к рабочему процессу V7 Darwin с помощью веб-перехватчиков, вы можете добавить к конвейеру настраиваемое поведение. Это простой и эффективный способ расширить функциональность V7 и автоматизировать задачи, которые в противном случае потребовали бы ручного труда.

Вы можете узнать больше об использовании веб-хуков на наших страницах документации: