Упростите компьютерное зрение с помощью Monk, библиотеки глубокого обучения с низким кодом и унифицированной оболочки для компьютерного зрения.
Введение :
Обнаружение объектов - это компьютерная технология, связанная с компьютерным зрением и обработкой изображений, которая занимается обнаружением экземпляров семантических объектов определенного класса (таких как люди, здания или автомобили) на цифровых изображениях и видео. Написание кода для обнаружения объектов с нуля может быть очень утомительным процессом и трудным для новичка в этой области. Именно здесь на помощь приходит ИИ-монах. С ИИ-монахом можно создать рабочую модель обнаружения объектов и решить другие подобные задачи компьютерного зрения с помощью очень небольшого количества строк кода.
Задача :
Использование ИИ-монаха для обнаружения объектов можно проиллюстрировать с помощью следующего примера. Задача - обнаружить объекты в датасете еды Октоберфеста. Ссылка на набор данных и описание набора данных можно найти ниже.
Набор данных: Набор данных Oktoberfest Food можно найти здесь [1]
dataset
содержит наборы данных для поездов и тестов, включая метки- метки можно найти в
files.txt
(стиль OpenCV) <filename> <number of objects> <classid1> <x1> <y1> <w1> <h1> <classid2> <x2> <y2> <w2> <h2> ...
models
содержит наши предварительно обученные модели TensorFlowvideo_data_zipped
содержит необработанные видео, из которых был извлечен набор данных
Набор данных содержит 15 помеченных объектов с Октоберфеста. Классы следующие:
- Bier
- Bier Mass
- Weissbier
- Кола
- Вассер
- Карри-Вурст
- Weisswein
- A-Schorle
- Егермейстер
- Pommes
- Бургер
- Williamsbirne
- Альм-Брезе
- Brotzeitkorb
- Kaesespaetzl
Монах AI:
Monk object detection [2] - это сборник всех библиотек обнаружения объектов. Для каждого конвейера преследуется двоякая цель - сделать установку совместимой с несколькими ОС, версиями Cuda и версиями python, а во-вторых, сделать ее небольшим кодом со стандартизованным потоком вещей. Обнаружение объектов Monk позволяет пользователю решить проблему компьютерного зрения с помощью очень небольшого количества строк кода. В этом примере мы будем использовать конвейер gluonCV с Monk AI. Вот тетрадь colab [3] для кода в этом руководстве.
Настройка Monk:
# Importing libraries import os import sys import pandas as pd import cv2 import matplotlib.pyplot as plt from matplotlib.patches import Rectangle # Cloning the Monk Object Detection repository !git clone 'https://github.com/Tessellate-Imaging/Monk_Object_Detection.git' # Installing requirements ! cd Monk_Object_Detection/1_gluoncv_finetune/installation && cat requirements_colab.txt | xargs -n 1 -L 1 pip install
При загрузке набора данных по вышеупомянутой ссылке структура каталогов набора данных должна выглядеть примерно так:
Parent_Directory (root) | — — — — — -train (img_dir) | | | | — — — — — — — — — img1.jpg | | — — — — — — — — — img2.jpg | | — — — — — — — — — ………(and so on) | | _ _ _ _ _ _ _ _ _ files.txt | _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _
Преобразование аннотаций в желаемый формат:
Аннотации должны быть преобразованы в формат PASCAL VOC. Пример желаемого формата выглядит следующим образом:
| Id ………………. | Этикетки ……………………………………. |
| img1.jpg ………. | x1 y1 x2 y2 label1 x1 y1 x2 y2 label2… .. |
Ярлыки: x1 y1 x2 y2 label
x1, y1 - верхний левый угол ограничивающей рамки
x2, y2 - нижний правый угол ограничивающей рамки
Код для этого приведен ниже:
f = open("/content/dataset/train/files.txt", "r") ids = [] annotations = [] for x in f: cnt = 2 line_content = x.split() image_id = line_content[0] no_of_annotations = line_content[1] temp = [] for _ in range(int(no_of_annotations)): image_annotation = line_content[cnt:cnt+5] class_id = image_annotation[0] x_center = image_annotation[1] y_center = image_annotation[2] width = image_annotation[3] height = image_annotation[4] x_min = int(x_center) y_min = int(y_center) x_max = int(x_center) + int(int(width)) y_max = int(y_center) + int(int(height)) temp.append(x_min) temp.append(y_min) temp.append(x_max) temp.append(y_max) temp.append(class_id) cnt = cnt + 5 ids.append(image_id) anno_string = "" for elem in temp: anno_string += str(elem) anno_string += " " annotations.append(anno_string) f.close() df = pd.DataFrame({"ID":ids,"Label":annotations}) df.to_csv('/content/dataset/annotations.csv',index=False)
Выбор модели и обучение:
В этом примере мы будем использовать SSD (детектор одиночного выстрела). Код для инициализации детектора, настройки гиперпараметров и обучения приведен ниже:
# Initialising detector from detector_prototype import Detector gtf = Detector(); # Loading the dataset gtf.Dataset(root='/',img_dir= 'content/dataset/train/', anno_file='content/dataset/annotations.csv', batch_size=4); # Defining training parameters pretrained = True; gpu=True; model_name = "ssd_512_resnet50_v1_coco"; # Initialising Model gtf.Model(model_name, use_pretrained=pretrained, use_gpu=gpu); # Setting model parameters gtf.Set_Learning_Rate(0.001); epochs=10; params_file = "saved_model.h5"; # Training gtf.Train(epochs, params_file);
Первые 5 строк выше инициализируют детектор и загружают набор данных из каталога. Строки 6–15 определяют параметры обучения и инициализируют модель с заданными гиперпараметрами. Строки 16-17 используются для начала тренировочного процесса.
Дождитесь окончания тренировочного процесса и переходите к выводам.
Выполнение логического вывода:
# Setting into inference mode from inference_prototype import Infer # Loading details of saved model model_name = "ssd_512_resnet50_v1_coco" params_file = "saved_model.h5" # class_list contains the list of classes in the dataset class_list = ['Bier','Bier Mass','Weissbier','Cola','Wasser','Curry-Wurst','Weisswein','A-Schorle','Jaegermeister ','Pommes','Burger','Williamsbirne','Alm-Breze','Brotzeitkorb','Kaesespaetzle'] # Initialising inference gtf = Infer(model_name, params_file, class_list, use_gpu=True); # Getting predictions for a test image img_name = '/content/dataset/test/1526744530681_45.jpg'; visualize = True; thresh = 0.7; output = gtf.run(img_name, visualize=visualize, thresh=thresh);
Таким образом, мы видим, что смогли создать собственный детектор объектов с очень небольшим количеством строк кода. Еще одно преимущество Monk заключается в том, что он не только прост, но и предлагает множество конвейеров и моделей для обучения, которые можно выбрать в соответствии с потребностями пользователей. В заключение, Monk AI - отличная библиотека, которая упрощает решение большинства задач компьютерного зрения просто и эффективно.
Использованная литература :
[1] Набор данных о продуктах питания Октоберфест: https://github.com/a1302z/OktoberfestFoodDataset
[2] Репозиторий Github по обнаружению объектов Monk: https://github.com/Tessellate-Imaging/Monk_Object_Detection
[3] Блокнот Colab для этого руководства: https://colab.research.google.com/drive/1flH7GBr-yM3A__eNF2e6XbUIjzcKVAI2