yolov3ObjectDetector

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

Описание

The yolov3ObjectDetector объект создает детектор объектов (YOLO 3 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 из Add-On Explorer. Дополнительные сведения об установке дополнений см. в разделе Получение и управление Дополнений. Чтобы запустить эту функцию, вам потребуется Deep Learning 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-на-2, где M количество якорей в этом слое. Каждая строка в матрице M -by-2 обозначает размер якорного ящика в форме [height width]. Этот аргумент устанавливает AnchorBoxes свойство yolov3ObjectDetector объект.

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

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

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

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

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

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

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

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

Свойства

расширить все

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

YOLO v3 нейронной сети для глубокого обучения для использования для обнаружения объектов, сохраненный как dlnetwork (Deep Learning Toolbox) объект.

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

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

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

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

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

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

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

Для примера, 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 с помощью предварительно обученного SqueezeNet в качестве базовой сети.

Загрузите предварительно обученную сеть SqueezeNet. Сеть SqueezeNet является сверточной нейронной сетью, которую можно использовать в качестве базовой сети для создания детектора объектов 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