Овладение оптимизацией и развертыванием искусственного интеллекта с помощью набора инструментов OpenVINO от Intel.
Мастерство оптимизации и развертывания искусственного интеллекта с инструментами OpenVINO от Intel.
Введение
Мы почти ежедневно говорим о искусственном интеллекте из-за его растущего влияния на замену ручного труда человека. Создание программного обеспечения с поддержкой искусственного интеллекта стремительно развивается. Предприятия и бизнесы верят в интеграцию надежного и ответственного искусственного интеллекта в свое приложение для генерации большего дохода. Самой сложной частью интеграции искусственного интеллекта в приложение является вывод модели и использование вычислительных ресурсов при обучении модели. Уже существует множество техник, позволяющих оптимизировать производительность, уменьшая вычислительные ресурсы при выводе модели. Решая эту проблему, Intel представила OpenVINO Toolkit – настоящую революцию. OpenVINO – это открытый набор инструментов для оптимизации и развертывания вывода искусственного интеллекта.
Цели изучения
В этой статье мы:
- Понимаем, что такое OpenVINO Toolkit и его цель в оптимизации и развертывании моделей вывода искусственного интеллекта.
- Исследовываем практические примеры использования OpenVINO, особенно его важность для будущего искусственного интеллекта на ребре.
- Узнаем, как реализовать проект обнаружения текста на изображении с использованием OpenVINO в Google Colab.
- Открываем ключевые возможности и преимущества использования OpenVINO, включая его совместимость с моделями и поддержку аппаратных ускорителей, и как это может повлиять на различные отрасли и приложения.
Эта статья была опубликована в рамках Data Science Blogathon.
Что такое OpenVINO?
- Как создать бизнес по домашнему обслуживанию с оборотом в миллион долларов (заработать 1,3 миллиона долларов за 19 месяцев)
- «Что такое проблема с водяной кувшинки в искусственном интеллекте?»
- 10 лучших конструкторов приложений AI без кода
OpenVINO, что расшифровывается как Open Visual Inference and Neural Network Optimization, является открытым набором инструментов, разработанным командой Intel для улучшения оптимизации моделей глубокого обучения. Визия OpenVINO – повысить эффективность и эффективность вашей нейронной сети и развернуть приложение на месте, устройстве или в облаке.
OpenVINO Toolkit особенно ценен, потому что поддерживает множество фреймворков глубокого обучения, включая популярные, такие как TensorFlow, PyTorch, Onnx и Caffe. Вы можете обучать свои модели с использованием выбранного вами фреймворка, а затем использовать OpenVINO для преобразования и оптимизации их для развертывания на аппаратных ускорителях Intel, таких как процессоры, графические процессоры, программируемые матрицы и векторные процессоры.
В отношении вывода OpenVINO Toolkit предлагает различные инструменты для квантизации и сжатия моделей, что может значительно сократить размер моделей глубокого обучения без потери точности вывода.
Почему использовать OpenVINO?
Безумие по поводу искусственного интеллекта постоянно растет. С этой популярностью очевидно, что будет разрабатываться все больше и больше приложений для запуска искусственного интеллекта на месте и на устройстве. Несколько сложных областей, где OpenVINO превосходит другие, делают его идеальным выбором и объясняют, почему важно использовать OpenVINO:
Модельный зоопарк OpenVINO
OpenVINO предоставляет зоопарк моделей с предварительно обученными моделями глубокого обучения для задач, таких как стабильная диффузия, речь, обнаружение объектов и других. Эти модели могут служить отправной точкой для ваших проектов, экономя время и ресурсы.
Совместимость моделей
OpenVINO поддерживает множество фреймворков глубокого обучения, включая TensorFlow, PyTorch, ONNx и Caffe. Это означает, что вы можете использовать выбранный вами фреймворк для обучения моделей, а затем преобразовывать и оптимизировать их с помощью OpenVINO Toolkit.
Высокая производительность
OpenVINO оптимизирован для быстрого вывода, что делает его подходящим для приложений реального времени, таких как компьютерное зрение, робототехника и устройства интернета вещей. Он использует аппаратное ускорение, такое как программируемые матрицы, графические процессоры и процессоры сопроцессора, для достижения высокой пропускной способности и низкой задержки.
Будущее искусственного интеллекта на ребре с использованием Intel OpenVINO
Искусственный интеллект на краю – это самая сложная задача. Создание оптимизированного решения для преодоления ограничений аппаратного обеспечения больше не является невозможным с помощью OpenVINO. Будущее искусственного интеллекта на краю с этим инструментарием имеет потенциал перевернуть различные отрасли и приложения.
Давайте выясним, как работает OpenVINO, чтобы сделать его подходящим для искусственного интеллекта на краю.
- Первый шаг – построить модель с использованием ваших любимых фреймворков глубокого обучения и преобразовать ее в базовую модель OpenVINO. Одна альтернатива – использование предобученных моделей из зоопарка моделей OpenVINO.
- Как только модель будет обучена, следующим шагом является сжатие. OpenVINO Toolkit предоставляет фреймворк сжатия нейронных сетей (NNCF).
- Model Optimizer преобразует предварительно обученную модель в подходящий формат. Оптимизатор состоит из IR-данных. IR-данные относятся к промежуточному представлению глубокой модели обучения, которые уже оптимизированы и преобразованы для развертывания с OpenVINO. Веса модели находятся в формате .XML и .bin.
- При развертывании модели OpenVINO Inference Engine может загружать и использовать IR-данные на целевом аппаратном обеспечении, обеспечивая быструю и эффективную вывод для различных приложений.
С таким подходом OpenVINO может сыграть важную роль в сфере искусственного интеллекта на краю. Давайте испачкаем руки кодом проекта для реализации обнаружения текста на изображении с использованием инструментария OpenVINO.
Обнаружение текста на изображении с использованием инструментария OpenVINO
В этой реализации проекта мы будем использовать Google Colab в качестве VoAGI для успешного запуска приложения. В этом проекте мы будем использовать модель horizontal-text-detection-0001 из зоопарка моделей OpenVINO. Эта предобученная модель обнаруживает горизонтальный текст на входных изображениях и возвращает блоб данных в формате (x_min, y_min, x_max, y_max, conf).
Шаг за шагом реализация кода
Установка
!pip install openvino
Импорт требуемых библиотек
Давайте импортируем необходимые модули для запуска этого приложения. OpenVINO поддерживает вспомогательные функции utils для загрузки предварительно обученных весов из предоставленного URL исходного кода.
import urllib.requestbase = "https://raw.githubusercontent.com/openvinotoolkit/openvino_notebooks"utils_file = "/main/notebooks/utils/notebook_utils.py"urllib.request.urlretrieve( url= base + utils_file, filename='notebook_utils.py')from notebook_utils import download_file
Вы можете проверить, что notebook_utils успешно загружен, давайте быстро импортируем оставшиеся модули.
import openvinoimport cv2import matplotlib.pyplot as pltimport numpy as npfrom pathlib import Path
Загрузка весов
Инициализируем путь для загрузки файлов весов модели IR данных обнаружения горизонтального текста в форматах .xml и .bin.
base_model_dir = Path("./model").expanduser()model_name = "horizontal-text-detection-0001"model_xml_name = f'{model_name}.xml'model_bin_name = f'{model_name}.bin'model_xml_path = base_model_dir / model_xml_namemodel_bin_path = base_model_dir / model_bin_name
В следующем фрагменте кода мы используем три переменные для упрощения пути, где существуют предварительно обученные веса модели.
model_zoo = "https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.3/models_bin/1/"algo = "horizontal-text-detection-0001/FP32/"xml_url = "horizontal-text-detection-0001.xml"bin_url = "horizontal-text-detection-0001.bin"model_xml_url = model_zoo+algo+xml_urlmodel_bin_url = model_zoo+algo+bin_urldownload_file(model_xml_url, model_xml_name, base_model_dir)download_file(model_bin_url, model_bin_name, base_model_dir)
Загрузка модели
OpenVINO предоставляет класс Core для взаимодействия с пакетом инструментов OpenVINO. Класс Core предоставляет различные методы и функции для работы с моделями и выполнения вывода. Используйте метод read_model и передайте путь к файлу model_xml_path. После чтения модели, скомпилируйте ее для определенного устройства.
core = Core()
model = core.read_model(model=model_xml_path)
compiled_model = core.compile_model(model=model, device_name="CPU")
input_layer_ir = compiled_model.input(0)
output_layer_ir = compiled_model.output("boxes")
В вышеприведенном сниппете кода, скомпилированная модель возвращает форму входного изображения (704,704,3), RGB-изображение, но в формате PyTorch (1,3,704,704), где 1 – размер пакета, 3 – количество каналов, 704 – высота и ширина. Выход возвращает (x_min, y_min, x_max, y_max, conf). Давайте загрузим входное изображение.
Загрузка изображения
Вес модели [1,3,704,704]. Следовательно, входное изображение нужно изменить размер, чтобы соответствовать этой форме. В Google Colab или редакторе кода вы можете загрузить входное изображение, и в нашем случае файл изображения называется sample_image.jpg.
image = cv2.imread("sample_image.jpg")# N,C,H,W = размер пакета, количество каналов, высота, ширина.N, C, H, W = input_layer_ir.shape# Изменяем размер изображения в соответствии с ожидаемыми размерами сети.resized_image = cv2.resize(image, (W, H))# Преобразуем форму в формат ввода сети.input_image = np.expand_dims(resized_image.transpose(2, 0, 1), 0)print("Форма весов модели:")
print(input_layer_ir.shape)
print("Изображение после изменения размера:")
print(input_image.shape)
Отобразите входное изображение.
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))plt.axis("off")
Движок вывода
Ранее мы использовали веса модели для компиляции модели. Используйте компилированную модель в контексте входного изображения.
# Создаем запрос вывода.boxes = compiled_model([input_image])[output_layer_ir]# Удаляем нулевые боксы.boxes = boxes[~np.all(boxes == 0, axis=1)]
Прогнозирование
Компилированная модель возвращает боксы с координатами ограничивающей рамки. Мы используем модуль cv2 для создания прямоугольника и функцию putText для добавления уверенности над обнаруженным текстом.
def detect_text(bgr_image, resized_image, boxes, threshold=0.3, conf_labels=True): # Получаем размеры изображений для расчета соотношения. (real_y, real_x), (resized_y, resized_x) = bgr_image.shape[:2], resized_image.shape[:2] ratio_x, ratio_y = real_x / resized_x, real_y / resized_y # Преобразуем изображение из формата BGR в RGB. rgb_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2RGB) # Перебираем ненулевые боксы. for box in boxes: # Берем значение уверенности из последнего элемента массива. conf = box[-1] if conf > threshold: (x_min, y_min, x_max, y_max) = [ int(max(corner_position * ratio_y, 10)) if idx % 2 else int(corner_position * ratio_x) for idx, corner_position in enumerate(box[:-1]) ] # Рисуем прямоугольник на основе позиции, параметры в функции rectangle: # image, start_point, end_point, color, thickness. rgb_image = cv2.rectangle(rgb_image, (x_min, y_min), (x_max, y_max),(0,255, 0), 10) # Добавляем текст на изображение на основе позиции и уверенности. if conf_labels: rgb_image = cv2.putText( rgb_image, f"{conf:.2f}", (x_min, y_min - 10), cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 0, 0), 8, cv2.LINE_AA, ) return rgb_image
Отображение выходного изображения
plt.imshow(detect_text(image, resized_image, boxes));plt.axis("off")
Вывод
В заключение, мы успешно создали проект обнаружения текста на изображении с использованием OpenVINO Toolkit. Команда Intel продолжает улучшать Toolkit. OpenVINO также поддерживает предварительно обученные модели генеративного ИИ, такие как Stable Diffusion, ControlNet, преобразование речи в текст и другие.
Основные моменты
- OpenVINO – это инструмент с открытым исходным кодом, который меняет правила игры и повышает эффективность моделей глубокого обучения AI и развертывание приложения на сервере, на устройстве или в облаке.
- Основная цель OpenVINO – оптимизировать глубокие модели с помощью квантизации и сжатия моделей, что значительно сокращает размер моделей глубокого обучения без потери точности вывода.
- Данный Toolkit также поддерживает развертывание AI-приложений на аппаратных ускорителях, таких как GPU, FPGA, ASIC, TPU и др.
- Различные отрасли могут использовать OpenVINO и воспользоваться его потенциалом для воздействия на AI на ребре.
- Использование моделей, предварительно обученных в Model Zoo, просто, поскольку мы реализовали обнаружение текста на изображениях всего за несколько строк кода.
Часто задаваемые вопросы
Размещенные в этой статье медиафайлы не принадлежат Analytics Vidhya и используются по усмотрению автора.