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. classes и aboxes значения, используемые для того, чтобы обучить сеть.

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

Необходимо обучить детектор на обучающем наборе данных прежде, чем выполнить обнаружение объектов. Для получения информации о том, как обучить детектор объектов YOLO v3, смотрите, Предварительно обрабатывают Обучающие данные и Обучают разделы Модели в Обнаружении объектов Используя пример 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-by-2 матрица, где M является количеством привязки, окружает тот слой. Каждая строка в M-by-2 матрица обозначает, что размер привязки окружает форму [height width].

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

Этот аргумент устанавливает 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-2. Каждая строка в матрице M-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