主要内容

이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。

YOLO v2意思딥러닝을사용한객체검출

이예제에서는YOLO(你只看一次)V2사물검출기를훈련시키는방법을다룹니다。

딥러닝은강건한사물검출기를훈련시키는데사용할수있는강력한머신러닝기법입니다。更快的R-CNN과YOLO(你只看一次)V2를비롯한다양한객체검출기법이있습니다。이예제에서는trainYOLOv2ObjectDetector함수를사용하여YOLO v2意思차량검출기를훈련시킵니다。자세한내용은항목을참조하십시오。

사전훈련된검출기다운로드하기

훈련이완료될때까지기다릴필요가없도록사전훈련된검출기를다운로드합니다。검출기를직접훈련시키려면doTraining변수를真正로설정하십시오。

dotraining = false;如果~ doTraining & & ~存在('yolov2ResNet50VehicleExample_19b.mat''文件') disp (“下载预训练探测器(98 MB)……”);pretrainedURL =“//www.tatmou.com/金宝appsupportfiles/vision/data/yolov2ResNet50VehicleExample_19b.mat”;WebSave('yolov2ResNet50VehicleExample_19b.mat',pretrainedURL);结束

데이터셋불러오기

이예제에서는295개의영상을포함하는소규모의차량데이터셋을사용합니다。각영상에는차량에대해레이블지정된건수가한건또는두건있습니다。작은데이터셋은YOLO v2意思훈련절차를살펴보기에유용하지만,실전에서강건한검출기를훈련시키려면레이블이지정된영상이더많이필요합니다。차량영상의압축을풀고차량실측데이터를불러옵니다。

解压缩vehicleDatasetImages.zipdata =负载('vehicleDatasetGroundTruth.mat');vehicleDataset = data.vehicleDataset;

차량데이터는2열테이블에저장되어있습니다。첫번째열은영상파일경로를포함하고,두번째열은차량경계상자를포함합니다。

%显示所述数据集的前几行。vehicleDataset (1:4,:)
ans =4×2表映像文件名称车辆_________________________________ ____________ { 'vehicleImages / image_00001.jpg'} {1×4双} { 'vehicleImages / image_00002.jpg'} {1×4双} { 'vehicleImages / image_00003.jpg'} {1×4双} {'vehicleImages / image_00004.jpg'} {1×4双}
%的FULLPATH添加到本地车辆数据的文件夹。vehicleDataset.imageFilename =完整文件(PWD,vehicleDataset.imageFilename);

데이터셋을훈련세트,검증세트,테스트세트로분할합니다。데이터의60%를훈련용으로,데이터의10%를검증용으로,나머지를훈련된검출기의테스트용으로선택합니다。

RNG(0);shuffledIndices = randperm(高度(vehicleDataset));IDX =地板(0.6 *长度(shuffledIndices));trainingIdx = 1:IDX;trainingDataTbl = vehicleDataset(shuffledIndices(trainingIdx),:);validationIdx = IDX + 1:IDX + 1 +地板(0.1 *长度(shuffledIndices));validationDataTbl = vehicleDataset(shuffledIndices(validationIdx),:);testIdx = validationIdx(结束)1:长度(shuffledIndices);testDataTbl = vehicleDataset(shuffledIndices(testIdx),:);

imageageAtastore.boxLabelDatastore를사용하여훈련과평가과정에서영상및레이블데이터를불러오기위한데이터저장소를만듭니다。

imdsTrain = imageDatastore(trainingDataTbl {:,“映像文件名称”});bldsTrain = boxLabelDatastore(trainingDataTbl(:,'车辆'));imdsValidation = imageDatastore (validationDataTbl {:,“映像文件名称”});bldsValidation = boxLabelDatastore(validationDataTbl(:,'车辆'));imdsTest = imageDatastore(testDataTbl {:,“映像文件名称”});bldsTest = boxLabelDatastore (testDataTbl (:,'车辆'));

영상데이터저장소와상자레이블데이터저장소를결합합니다。

trainingData =结合(imdsTrain bldsTrain);validationData =结合(imdsValidation bldsValidation);testData =结合(imdsTest bldsTest);

상자레이블과함께훈련영상중하나를표시합니다。

数据=读(trainingData);我={1}数据;bbox ={2}数据;annotatedImage = insertShape(I,'长方形', bbox);annotatedImage = imresize (annotatedImage 2);图imshow (annotatedImage)

YOLO v2意思객체검출신경망만들기

YOLO v2意思객체검출신경망은2개의하위신경망으로구성됩니다。하나의특징추출신경망이있고,그뒤에검출신경망이옵니다。특징추출신경망은일반적으로사전훈련된CNN입니다(자세한내용은사전훈련된심층신경망참조)。이예제에서는특징추출에ResNet-50을사용합니다。응용사례의요구사항에따라MobileNet v2나ResNet-18과같은여타사전훈련된신경망도사용할수있습니다。검출하위신경망은특징추출신경망에비해규모가작은CNN으로,몇개의컨벌루션계층과YOLO v2意思전용계층으로구성됩니다。

yolov2Layers(电脑视觉工具箱)함수를사용하여,사전훈련된ResNet-50특징추출신경망이주어졌을때자동으로YOLO v2意思객체검출신경망을만듭니다。yolov2Layers를사용할때는YOLO V2신경망을파라미터화하는다음과같은몇개의입력값을지정해야합니다。

  • 신경망입력크기

  • 앵커상자

  • 특징추출신경망

먼저신경망입력크기와클래스개수를지정합니다。신경망입력크기를선택할때는신경망자체에서요구되는최소크기,훈련영상의크기,그리고선택한크기에서데이터를처리할때발생하는계산비용을고려해야합니다。가능하다면,훈련영상의크기와가깝고신경망에서요구되는입력크기보다큰신경망입력크기를선택하십시오。예제를실행하는데소요되는계산비용을줄이려면신경망을실행하는데필요한최소크기인(224 224 3)으로신경망입력크기를지정하십시오。

inputSize = [224 224 3];

검출할사물클래스의개수를정의합니다。

numClasses =宽度(vehicleDataset) 1;

이예제에서사용되는훈련영상은224×224보다크고크기가다양하므로훈련전전처리단계에서영상을크기조정해야합니다。

다음으로,estimateAnchorBoxes(电脑视觉工具箱)를사용하여훈련데이터의사물크기를기반으로앵커상자를추정합니다。훈련전이루어지는영상크기조정을고려하기위해앵커상자추정에사용하는훈련데이터를크기조정하십시오。转变을사용하여훈련데이터를전처리한후에앵커상자의개수를정의하고앵커상자를추정합니다。지원함수preprocessData를사용하여훈련데이터를신경망의입력영상크기로크기조정합니다。

trainingDataForEstimation =变换(trainingData @(数据)preprocessData(数据、inputSize));numAnchors = 7;[anchorBoxes, meanIoU] = estimateAnchorBoxes(trainingdatafestimation, numAnchors)
anchorBoxes =7×2145 126 91 86 161 132 41 34 67 64 136 111 33 23
meanIoU = 0.8651

앵커상자선택에관한자세한내용은估计锚箱从训练数据(电脑视觉工具箱)(计算机视觉工具箱™)및锚箱物体检测(电脑视觉工具箱)항목을참조하십시오。

이제resnet50을사용하여사전훈련된RESNET-50모델을불러옵니다。

featureExtractionNetwork = resnet50;

“activation_40_relu”뒤에오는계층들을검출하위신경망으로교체할특징추출계층으로“activation_40_relu”를선택합니다。이특징추출계층은16배만큼다운샘플링된특징맵을출력합니다。이정도의다운샘플링은공간분해능과추출된특징의강도사이를적절히절충한값입니다。신경망의더아래쪽에서추출된특징은더강한영상특징을인코딩하나공간분해능이줄어들기때문입니다。최적의특징추출계층을선택하려면경험적분석이필요합니다。

featureLayer =“activation_40_relu”;

YOLO V2객체검출신경망을만듭니다。

lgraph = yolov2Layers (inputSize numClasses、anchorBoxes featureExtractionNetwork, featureLayer);

analyzeNetwork또는深度学习工具箱™의심층신경망디자이너를사용하여신경망을시각화할수있습니다。

YOLO V2신경망아키텍처를더욱세부적으로제어해야하는경우에는심층신경망디자이너를사용하여YOLO V2검출신경망을직접설계하십시오。자세한내용은设计YOLO v2检测网络(电脑视觉工具箱)항목을참조하십시오。

데이터증대

데이터증대는훈련중에원본데이터를무작위로변환함으로써신경망정확도를개선하는데사용됩니다。데이터증대를사용하면레이블이지정된훈련샘플의개수를늘리지않고도훈련데이터에다양성을더할수있습니다。

转变을사용하여영상과영상에해당하는상자레이블을가로방향으로무작위로뒤집어서훈련데이터를증대합니다。테스트데이터와검증데이터에는데이터증대가적용되지않는다는것에유의하십시오。이상적인경우라면테스트데이터와검증데이터가원본데이터를대표해야하므로편향되지않은평가를위해수정되지않은상태로남겨두는것이좋습니다。

augmentedTrainingData =变换(trainingData,@ augmentData);

동일한영상을여러차례읽어들이고증대된훈련데이터를표시합니다。

%可视化增强的图像。augmentedData =细胞(4,1);k = 1:4 data = read(augmentedTrainingData);augmentedData {k} = insertShape(数据{1},'长方形'、数据{2});重置(augmentedTrainingData);结束图蒙太奇(augmentedData,'BorderSize',10)

훈련데이터전처리하기

증대된훈련데이터와검증데이터를전처리하여훈련에사용할수있도록준비합니다。

preprocessedTrainingData =变换(augmentedTrainingData,@(数据)preprocessData(数据,inputSize));preprocessedValidationData =变换(validationData,@(数据)preprocessData(数据,inputSize));

전처리된훈련데이터를읽어들입니다。

data =阅读(preprocessedTrainingData);

영상과경계상자를표시합니다。

我={1}数据;bbox ={2}数据;annotatedImage = insertShape(I,'长方形', bbox);annotatedImage = imresize (annotatedImage 2);图imshow (annotatedImage)

YOLO V2사물검출기훈련시키기

培训选项를사용하여신경망훈련옵션을지정합니다。“ValidationData”를전처리된검증데이터로설정합니다。“CheckpointPath”를임시위치로설정합니다。이렇게하면훈련과정도중에부분적으로훈련된검출기를저장할수있습니다。정전이나시스템장애등으로인해훈련이중단될경우,저장된검사지점에서훈련을재개할수있습니다。

选项= trainingOptions(“个”......“MiniBatchSize”, 16岁,......“InitialLearnRate”,1E-3,......'maxepochs'20,......“CheckpointPath”,TEMPDIR,......“ValidationData”, preprocessedValidationData);

doTraining이真正인경우,trainYOLOv2ObjectDetector(电脑视觉工具箱)함수를사용하여YOLO V2사물검출기를훈련시키십시오。그렇지않은경우에는사전훈련된신경망을불러오십시오。

如果doTraining%△是YOLO v2的检测器。[检测器,信息] = trainYOLOv2ObjectDetector(preprocessedTrainingData,lgraph,选项);其他的%负载预训练检测器为例。预训练=负载('yolov2ResNet50VehicleExample_19b.mat');检测器= pretrained.detector;结束

12 gb의이예제는메모리가탑재된NVIDIA™泰坦X GPU에서검증되었습니다。GPU메모리가이보다적으면메모리부족이발생할수있습니다。메모리부족이발생할경우培训选项함수를사용하여“MiniBatchSize”를줄이십시오。이설정을사용하여이신경망을훈련시키는데약7분이걸렸습니다。훈련시간은사용하는하드웨어에따라달라집니다。

짧게테스트해보려면하나의테스트영상에대해검출기를실행하십시오。훈련영상의크기와같게영상을크기조정하는것을잊지마십시오。

我= imread (“highway.png”);I = imresize(I,inputSize(1:2));[bboxes,分数] =检测(检测器,I);

결과를표시합니다。

I = insertObjectAnnotation(I,“矩形”bboxes,分数);图imshow(我)

테스트세트를사용하여검출기평가하기

훈련된사물검출기를대규모영상세트를대상으로평가하여성능을측정합니다。计算机视觉工具箱™에는평균정밀도(evaluateDetectionPrecision),로그——평균미검출율(evaluateDetectionMissRate)과같은통상적인메트릭을측정해주는사물검출기평가함수가있습니다。이예제에서는평균정밀도를메트릭으로사용하여성능을평가합니다。평균정밀도는검출기가올바른분류를수행하는능력(정밀도)과모든관련사물을찾는능력(재현율)을통합하여하나의수치로나타냅니다。

훈련데이터와동일한전처리변환을테스트데이터에적용합니다。테스트데이터에는데이터증대가적용되지않는다는것에유의하십시오。테스트데이터는원본데이터를대표해야하므로편향되지않은평가를위해수정되지않은상태로남겨둡니다。

preprocessedTestData =变换(TESTDATA,@(数据)preprocessData(数据,inputSize));

모든테스트영상에대해검출기를실행합니다。

detectionResults =检测(检测器,preprocessedTestData);

평균정밀도를메트릭으로사용하여사물검출기를평가합니다。

[AP,召回,精密] = evaluateDetectionPrecision(detectionResults,preprocessedTestData);

정밀도/재현율(PR)곡선은각기다른재현율수준에서의검출기의정밀도를나타냅니다。이상적인정밀도는모든재현율수준에서1입니다。더많은데이터를사용하면평균정밀도를개선하는데도움이될수있으나더많은훈련시간이필요할수있습니다。PR곡선을플로팅합니다。

图图(召回,精度)xlabel('记起')ylabel('精确'网格)标题(sprintf ('平均精密=%.2f'据美联社)),

코드생성

검출기의훈련과평가를마친후에는GPU编码器™를사용하여yolov2ObjectDetector에대한코드를생성할수있습니다。자세한내용은代码生成物体检测利用YOLO V2(GPU编码器)예제를참조하십시오。

지원함수

功能B = augmentData(A)%应用随机水平翻转和随机X / Y轴缩放。的箱子,GET如果重叠为高于0.25%的范围以外缩放被限幅。还,抖动图像颜色。B =细胞(大小(A));I = A {1};SZ =尺寸(I);如果numel(sz)==3 && sz(3) ==3 I = jitterColorHSV(I,......'对比',0.2,......“颜色”0,......'饱和',0.1,......'亮度', 0.2);结束%随机翻转和缩放图像。TForm的= randomAffine2d('XReflection',真的,“规模”[1 1.1]);击溃= affineOutputView(SZ,TForm的,“BoundsStyle”'CenterOutput');B {1} = imwarp (tform,我“OutputView”,击溃);对方框应用相同的转换。[B {2},指数] = bboxwarp(A {2},TForm的,击溃,'OverlapThreshold',0.25);B {3} = A {3}(索引);%收益只有当翘曲被删除所有箱子的原始数据。如果isempty(indices) B = A;结束结束功能数据= preprocessData(数据,的targetSize)%调整图像和包围框的大小为targetSize。规模= targetSize(1:2)。{1} /大小(数据,[1 - 2]);{1} = imresize数据(数据{1},targetSize (1:2));{2} = bboxresize数据(数据{2},规模);结束

참고문헌

雷蒙德,约瑟夫和阿里·法哈迪。“YOLO9000:更好、更快、更强。”2017 IEEE计算机视觉与模式识别会议(CVPR)。IEEE 2017。