exponenta event banner

yolov3ObjectDetector

Создать детектор объектов YOLO v3

Описание

yolov3ObjectDetector объект создает искомый только один детектор объектов версии 3 (YOLO v3) для обнаружения объектов в изображении. Используя этот объект, можно:

  • Создайте предварительно обученный детектор объектов YOLO v3 с помощью сетей глубокого обучения YOLO v3, обученных набору данных COCO.

  • Создайте пользовательский детектор объектов YOLO v3 с помощью любой предварительно обученной или необученной сети глубокого обучения YOLO v3.

Создание

Описание

Предварительно обученный детектор объектов YOLO v3

пример

detector = yolov3ObjectDetector(name) создает предварительно обученный детектор объектов YOLO v3 с помощью сетей глубокого обучения YOLO v3, обученных на наборе данных COCO.

Пользовательский детектор объектов YOLO v3

detector = yolov3ObjectDetector(name,classes,aboxes) создает предварительно обученный детектор объектов YOLO v3 и настраивает его для выполнения обучения передаче с использованием заданного набора классов объектов и полей привязки. Для получения оптимальных результатов перед выполнением обнаружения необходимо обучить детектор новым тренировочным изображениям.

detector = yolov3ObjectDetector(net,classes,aboxes) создает детектор объектов с помощью сети глубокого обучения net.

Если net является предварительно обученной сетью глубокого обучения YOLO v3, функция создает детектор объектов YOLO v3 и настраивает его для выполнения обучения передаче с заданными классами объектов и ящиками привязки.

Если net является необученной сетью глубокого обучения YOLO v3, функция создает детектор объектов YOLO v3 и настраивает его для обнаружения объектов. classes и aboxes укажите классы объектов и поля привязки, соответственно, для обучения сети YOLO v3.

Прежде чем выполнять обнаружение объектов, необходимо обучить детектор набору учебных данных.

пример

detector = yolov3ObjectDetector(baseNet,classes,aboxes,'DetectionNetworkSource',layer) создает детектор объектов YOLO v3 путем добавления головок обнаружения в базовую сеть, baseNet.

Функция добавляет головки обнаружения к указанным слоям извлечения элементов layer в базовой сети. Чтобы указать имена слоев извлечения элемента, используйте аргумент имя-значение 'DetectionNetworkSource',layer.

Если baseNet является заранее обученной сетью глубокого обучения, функция создает детектор объектов YOLO v3 и настраивает его для выполнения обучения передачи с заданными классами объектов и ящиками привязки.

Если baseNet является необученной сетью глубокого обучения, функция создает детектор объектов YOLO v3 и настраивает его для обнаружения объектов. classes и aboxes укажите классы объектов и поля привязки, соответственно, для обучения сети YOLO v3.

Прежде чем выполнять обнаружение объектов, необходимо обучить детектор набору учебных данных.

detector = yolov3ObjectDetector(___,Name,Value) устанавливает InputSize и ModelName свойства детектора объекта с использованием аргументов пары имя-значение. Name - имя свойства и Value - соответствующее значение. Необходимо заключить каждое имя свойства в кавычки.

Примечание

Для этой функции требуется модель Computer Vision Toolbox™ для обнаружения объектов YOLO v3. Модель панели инструментов Computer Vision Toolbox для обнаружения объектов YOLO v3 можно установить из проводника надстроек. Дополнительные сведения об установке надстроек см. в разделе Получение надстроек и управление ими. Для выполнения этой функции потребуется Toolbox™ глубокого обучения.

Входные аргументы

развернуть все

Название предварительно обученной сети глубокого обучения YOLO v3, указанное как одно из следующих:

  • 'darknet53-coco' - подготовленная сеть глубокого обучения YOLO v3, созданная с использованием DarkNet-53 в качестве базовой сети и обученная набору данных COCO.

  • 'tiny-yolov3-coco' - подготовленная сеть глубокого обучения YOLO v3, созданная с использованием небольшой базовой сети и обученная набору данных COCO.

Типы данных: string

Имена классов объектов для обучения детектора, заданные как строковый вектор, массив ячеек символьных векторов или категориальный вектор. Этот аргумент задает ClassNames имущества yolov3ObjectDetector объект.

Типы данных: char | string | categorical

Якорные ящики для обучения детектора объекта, заданного как массив ячеек N-by-1. N - количество выходных уровней в сети глубокого обучения YOLO v3. Каждая ячейка содержит матрицу M-by-2, где M - количество полей привязки в этом слое. Каждая строка в матрице M-by-2 обозначает размер поля привязки в виде [ширина высоты ]. Этот аргумент задает AnchorBoxes имущества yolov3ObjectDetector объект.

Типы данных: cell

Сеть глубокого обучения YOLO v3, указанная как dlnetwork(Панель инструментов глубокого обучения). Входная сеть может быть либо необученной, либо заранее обученной сетью глубокого обучения.

Базовая сеть для создания сети глубокого обучения YOLO v3, указанная как dlnetwork(Панель инструментов глубокого обучения) или DAGNetwork(Панель инструментов глубокого обучения). Сеть может быть либо необученной, либо заранее обученной сетью глубокого обучения.

Имена слоев извлечения элементов в базовой сети, заданные как массив ячеек символьных векторов или строковый массив.

Функция создает сеть YOLO v3, добавляя уровни головок обнаружения к выходам слоев извлечения элементов в базовой сети. Уровни извлечения элементов должны указываться в порядке, в котором они отображаются в сетевой архитектуре. Например, учитывая базовую сеть с четырьмя слоями извлечения элементов, необходимо добавить первую головку обнаружения к четвертому слою извлечения элементов, вторую головку обнаружения к третьему слою извлечения элементов и так далее.

Пример: layer = {'conv10','fire9-concat','fire8-concat'}

Пример: layer = ["conv10","fire9-concat","fire8-concat"]

Типы данных: char | string | cell

Свойства

развернуть все

Это свойство доступно только для чтения.

Сеть глубокого обучения YOLO v3 для использования при обнаружении объектов, сохраненная как dlnetwork(Панель инструментов глубокого обучения).

Это свойство доступно только для чтения.

Имена обнаруживаемых классов объектов, хранящихся в виде категориального вектора. Это свойство можно задать с помощью входного аргумента classes.

Это свойство доступно только для чтения.

Набор полей привязки, хранящихся в виде массива N-by-1 ячеек. Каждый элемент в ячейке является M-by-2 матрицей. Каждая строка в матрице M-by-2 обозначает размер якорного ящика в виде [ширины высоты ]. M обозначает число анкерных ящиков. N - количество выходных уровней в сети глубокого обучения YOLO v3, для которых определены ящики привязки.

Это свойство можно задать с помощью входного аргумента aboxes.

Это свойство доступно только для чтения.

Набор размеров изображений, используемых для обучения, хранящихся в виде матрицы M-by-2 типа double. Каждая строка имеет вид [ширина высоты ]. Чтобы задать это свойство, укажите его при создании объекта.

Например, detector = yolov3ObjectDetector(net,classes,aboxes,'InputSize',[220 220; 440 440]).

Имя детектора объекта, хранящегося в виде вектора символа или скаляра строки. Чтобы задать это свойство, укажите его при создании объекта.

Например, yolov3ObjectDetector(net,classes,aboxes,'ModelName','customDetector') задает имя детектора объекта, равное 'customDetector'.

Функции объекта

detectОбнаружение объектов с помощью детектора объектов YOLO v3
preprocessПредварительное обучение и тестовые изображения
forwardВычислите выход сети глубокого обучения YOLO v3 для обучения
predictВычислите выходные данные сети глубокого обучения YOLO v3 для вывода

Примеры

свернуть все

Укажите имя предварительно обученной сети глубокого обучения YOLO v3.

name = 'tiny-yolov3-coco';

Создайте детектор объектов YOLO v3 с помощью предварительно обученной сети YOLO v3.

detector = yolov3ObjectDetector(name);

Отображение и проверка свойств детектора объектов YOLO v3.

disp(detector)
  yolov3ObjectDetector with properties:

        Network: [1×1 dlnetwork]
    AnchorBoxes: {2×1 cell}
     ClassNames: [1×80 categorical]
      InputSize: [416 416]
     Learnables: [48×3 table]
          State: [22×3 table]
      ModelName: 'tiny-yolov3-coco'

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

analyzeNetwork(detector.Network)

Обнаружение объектов в неизвестном изображении с помощью предварительно обученного детектора объектов YOLO v3.

img = imread('sherlock.jpg');
img = preprocess(detector,img);
[bboxes,scores,labels] = detect(detector,img,'DetectionPreprocessing','none');

Просмотрите результаты обнаружения.

detectedImg = insertObjectAnnotation(img,'Rectangle',bboxes,labels);
figure
imshow(detectedImg)

В этом примере показано, как создать пользовательский детектор объектов YOLO v3 с использованием предварительно обученного SqueeNet в качестве базовой сети.

Загрузите предварительно обученную сеть SqueeEcNet. Сеть SqueeExNet - это сверточная нейронная сеть, которую можно использовать в качестве базовой сети для создания детектора объектов YOLO v3.

net = squeezenet
net = 
  DAGNetwork with properties:

         Layers: [68×1 nnet.cnn.layer.Layer]
    Connections: [75×2 table]
     InputNames: {'data'}
    OutputNames: {'ClassificationLayer_predictions'}

Проверка архитектуры базовой сети с помощью analyzeNetwork (Deep Learning Toolbox).

analyzeNetwork(net)

Укажите поля привязки и классы, используемые для обучения сети YOLO v3.

aboxes = {[150,127;97,90;68,67];[38,42;41,29;31,23]};
classes = {'Car','Truck'};

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

layer = {'fire9-concat','fire8-concat'};

Создайте пользовательский детектор объектов YOLO v3, добавив головки обнаружения в слои извлечения элементов базовой сети. Укажите имя модели, классы и поля привязки.

detector = yolov3ObjectDetector(net,classes,aboxes,'ModelName','Custom YOLO v3','DetectionNetworkSource',layer);

Проверка архитектуры сети глубокого обучения YOLO v3 с помощью analyzeNetwork (Deep Learning Toolbox).

analyzeNetwork(detector.Network)

Проверьте свойства детектора объектов YOLO v3. Теперь можно обучить детектор объектов YOLO v3 пользовательскому набору учебных данных и выполнить обнаружение объектов.

disp(detector)
  yolov3ObjectDetector with properties:

        Network: [1×1 dlnetwork]
    AnchorBoxes: {2×1 cell}
     ClassNames: [Car    Truck]
      InputSize: [227 227]
     Learnables: [66×3 table]
          State: [6×3 table]
      ModelName: 'Custom YOLO v3'

Сведения о подготовке детектора объектов YOLO v3 см. в примере «Обнаружение объектов с помощью глубокого обучения YOLO v3».

Представлен в R2021a