主要内容

。

YOLO v2意思深層学習を使用したオブジェクトの検出

この例では,你只看一次(YOLO)意思v2オブジェクト検出器に学習させる方法を説明します。

深層学習は,ロバストなオブジェクト検出器に学習させるために使用できる強力な機械学習手法です。オブジェクト検出の方法は,快R-CNNや你只看一次(YOLO)意思v2など複数あります。この例では,関数Trainyolov2ObjectDetector.を使用して,YOLO v2意思車両検出器に学習させます。詳細については,深層学習を使用したオブジェクトの検出を参照してください。

事前学習済みの検出器のダウンロード

学习の完了を待たなくてように,事前学习済み済み検出をダウンロードます。doTrainingを真实に设定し。

doTraining = false;如果〜存在dotraining &&〜存在(“yolov2ResNet50VehicleExample_19b.mat”“文件”)disp('下载掠夺探测器(98 MB)......');pretrowsurl =“//www.tatmou.com/金宝appsupportfiles/vision/data/yolov2ResNet50VehicleExample_19b.mat”;websave (“yolov2ResNet50VehicleExample_19b.mat”, pretrainedURL);结尾

データセットの読み込み

この例では,295枚のイメージを含ん小さな车両データセットをしますますます。各イメージには,1または2个のラベル付けれ车载インスタンス含まれていい。小さなデータセットyolo v2 v2 v学刊手顺を调べるうえで役立ちますが,実际にロバストな検出器に学习させるにはラベル付けされたイメージがより多く必要になります。车両のイメージを解冻し,车両のグラウンドトゥルースデータを読み込みます。

解压缩vevicledatasetimages.zip.data = load(“vehicleDatasetGroundTruth.mat”);vevicledataset = data.vehicledataset;

车辆両は2列ののの保存保存保存れいますます.1列目にはイメージファイルパスがれ,2列目には车両境界ボックス含まれていの境界がれています。

%显示数据集的前几行。车辆驾驶仪(1:4,:)
ans =.4×2表imageFilename车辆  _________________________________ ____________ {' vehicleImages / image_00001.jpg '}{1×4双}{' vehicleImages / image_00002.jpg '}{1×4双}{' vehicleImages / image_00003.jpg '}{1×4双}{' vehicleImages / image_00004.jpg '}{1×4双}
%将完整路径添加到本地车辆数据文件夹。vehicleDataset。vehicleDataset.imageFilename imageFilename = fullfile (pwd);

データセットは学習,検証,テスト用のセットに分割します。データの60%を学習用に,10%を検証用に,残りを学習済みの検出器のテスト用に選択します。

rng (0);shuffledIndices = randperm(高度(vehicleDataset));idx = floor(0.6 * length(shuffledinices));trainingIdx = 1: idx;trainingDataTbl = vehicleDataset (shuffledIndices (trainingIdx):);validationIdx = idx+1: idx+1 + floor(0.1 * length(shuffledinices));validationDataTbl = vehicleDataset (shuffledIndices (validationIdx):);testdx = validationIdx(end)+1: length(shuffledinices);testDataTbl = vehicleDataset (shuffledIndices (testIdx):);

imageDatastoreおよびboxLabelDatastoreをを使し,学院および评価中にとラベルデータを読み込むデータをを

imdsTrain = imageDatastore (trainingDataTbl {:,“imageFilename”});bldsTrain = boxLabelDatastore (trainingDataTbl (:,“汽车”));imdsvalidation = imageageataStore(ValidationDatatbl {:,“imageFilename”});bldsValidation = boxLabelDatastore (validationDataTbl (:,“汽车”));imdsTest = imageDatastore (testDataTbl {:,“imageFilename”});Bldstest = boxlabeldataStore(testdatatbl(:,“汽车”));

イメージイメージデータストアとボックスボックスデータストアをを组みわせわせ

trainingdata =联合(Imdstrain,Bldstrain);ValidationData = Combine(IMDSValidation,BLDSvalidation);testdata =组合(IMDSTEST,BLDSTEST);

学习イメージとボックスラベルののの1つつ表示しし。

data =阅读(trainingData);我={1}数据;bbox ={2}数据;annotatedImage = insertShape(我'长方形',bbox);AnnotatedImage = IMResize(AnnotatedImage,2);图imshow(AnnotatedImage)

YOLO v2意思オブジェクト検出ネットワークの作成

YOLO v2オブジェクトの検出はは2つのサブネットワークで成されますネットワークが続き続き続き続き続き続き続き続き続きます続き続き続き続き事前ののののです(详细のです事前学习済みの深层深层ネットワークネットワーク(深度学习工具箱)を参照)。このこのでは特徴に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 =宽度(车辆达到)-1;

この例で使使使使イメージはは224行224列より大厦なサイズ持つため,学校习前前处手顺イメージサイズを変更しばなりませんしなりません。

次に,estimateAnchorBoxesを使使てて,学校データ内のオブジェクトのにててアンカーを推定ますますます推定しのサイズ変更をするのにははするするにはは习ボックスボックスにするする习のボックスを推定するし习ののをを変更し变换サポート使しし习を,アンカーボックスの数号しアンカーボックスを推定しますアンカーボックスをします。preprocessDataを使用して,学習データのサイズをネットワークの入力イメージサイズに変更します。

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

アンカーボックスの選択の詳細は,学習データからのアンカーボックスの推定(电脑Vision Toolbox™)およびアンカーボックスによるオブジェクトの検出を参照してください。

次に,resnet50をを使ててて习のresnet-50モデルを読み込みます。

featureExtractionNetwork = resnet50;

“activation_40_relu”を特徴抽出層として選択して,“activation_40_relu”の後の層を検出サブネットワークに置き換えます。この特徴抽出層は,係数16でダウンサンプリングされる特徴マップを出力します。このダウンサンプリングの量は,空間分解能と抽出される特徴の強度との適切なトレードオフです(ネットワークでさらに抽出された特徴により,より強力なイメージの特徴が符号化されますが,空間分解能は低下します)。最適な特徴抽出層を選択するには経験的解析が必要です。

featureLayer =“activation_40_relu”

yolo v2オブジェクト検出ネットワークを作用成し。

lgraph = yolov2layers(输入,numcrasses,anchorboxes,featureextractionnetwork,featureLayer);

深度学习工具箱™から分析またはディープネットワークデザイナーを使してネットワーク可化ます。

yolo v2ネットワークアーキテクチャに対してより细かいが必要なななしvをししvで设计ししをについてについてはははについてYOLO v2意思検出ネットワークの設計を参照してください。

データ拡張

データ拡張は,学習中に元のデータをランダムに変換してネットワークの精度を高めるために使用されます。データ拡張を使用すると、ラベル付き学習サンプルの数を実際に増やす必要なく、学習データの種類を増やすことができます。

变换を使用して,イメージと関連するボックスラベルを水平方向にランダムに反転させることによって学習データを拡張します。データ拡張は,テストデータと検証データには適用されないことに注意してください。理想的には,テストデータと検証データは元のデータを代表するもので,バイアスのない評価を行うために変更なしで使用されなければなりません。

augmentedTrainingData =变换(trainingData @augmentData);

同じ拡イメージを回読み取り,拡张された学习习を表示します。

%可视化增强图像。augmentedData =细胞(4,1);k = 1:4数据=读取(AugmentedTrainingData);AugmentedData {k} = insertshape(数据{1},'长方形',数据{2});重置(AugmentedTrainingData);结尾图蒙太奇(AugmentedData,“BorderSize”, 10)

学習データの前処理

拡张された学习データと検证データををし习习习にます。

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

前処理された学習データを読み取ります。

数据=读取(PreprocessedTrainingData);

イメージイメージと境界ボックスボックスを表示しし

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

YOLO v2オブジェクト検出器材に习させる

trainingOptionsを使用してネットワーク学習オプションを指定します。前処理済みの検証データに'vightationdata'を設定します。'checkpoinspath',学校,学院プロセス中にに习习さます検出保存できますでをできやますで习が中间断れた习,保存保存しされたた,保存断断たたた,保存保存断さたた,保存したれたた,保存保存たを再开できます。

选项=培训选项('sgdm'...“MiniBatchSize”16,...'italllearnrate'1 e - 3,...“MaxEpochs”, 20岁,...'checkpoinspath'tempdir,...'vightationdata',预处理vidalidationdata);

doTrainingが真正の場合,関数Trainyolov2ObjectDetector.ををvててv v,そうでないそうでないは,事前学习,事前习,事前v,事前学。

如果doTraining%训练YOLO v2检测器。[探测器,信息]= trainYOLOv2ObjectDetector (preprocessedTrainingData、lgraph选项);别的为示例的%负载净化探测器。pretry = load(“yolov2ResNet50VehicleExample_19b.mat”);探测器= pretrained.detector;结尾

このこのは,12 gbメモリ搭载のnvidia™titan x gpuで検证済みですです済み済みです済みで少ない少ないののますするより性がありますます性があります。trainingOptionsをを用して“MiniBatchSize”を減らします。この設定を使用してこのネットワークに学習させるのに約7分かかりました。学習所要時間は使用するハードウェアによって異なります。

迅速なテストとして,1つのテストイメージ上で検出器を実行します。イメージのサイズを変更して学習イメージと同じサイズにします。

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

結果を表示します。

我= insertObjectAnnotation (,'长方形',bboxes,得分);图imshow(i)

テストセットを使用した検出器の評価

大规模なイメージセットで习済みのオブジェクト検出検出をし,パフォーマンスを测定ます。计算机vision toolbox™にに,平台综合率(评估要求)や対数平均ミス率(评估法律)などの一般的なメトリクスを測定するオブジェクト検出器の評価関数が用意されています。この例では,平均適合率メトリクスを使用してパフォーマンスを評価します。平均適合率は,検出器が正しい分類を実行できること(適合率)と検出器がすべての関連オブジェクトを検出できること(再現率)を示す単一の数値です。

学習データと同じ前処理変換をテストデータに適用します。データ拡張はテスト データには適用されないことに注意してください。テスト データは元のデータを代表するもので、バイアスのない評価を行うために変更なしで使用されなければなりません。

preprocessedTestData =变换(testData @(数据)preprocessData(数据、inputSize));

すべてのテストイメージに対して検出器を実行します。

detectionResults = detect(detector, preprocestestdata);

平均適合率メトリクスを使用してオブジェクト検出器を評価します。

[ap,recall,precision] = evaluateDetectionPrecision(detectionResults, preprocestestdata);

结合率/再现率(pr)のの曲は,さまざまなレベルの再现率検出の适率率をています。すべてのレベルの率ででますます。より多くがががががががががががががががのデータを使使使均适适率率をでき必要が率长くなるなるがます.pr曲曲をプロットし。

图绘制(召回、精密)包含(“回忆”) ylabel (“精度”) 网格标题(sprintf ('平均精度= %.2f',ap))

コード生成

検出器に学習させて評価したら,GPU编码器™を使用してyolov2ObjectDetectorのコードを生成できます。詳細については,YOLO v2を使使使用したオブジェクト検出のコード生成(GPU编码器)の例を参照しくださいください。

サポート関数

功能B = augmentData (A)%应用随机水平翻转,随机X/Y缩放。盒子,如果重叠大于0.25,则缩放到边界外的%将被剪切。同时,%抖动图像颜色。B =细胞(大小(A));我= {1};深圳=大小(I);如果numel(sz)== 3 && sz(3)== 3 i = jittercolorhsv(i,...“对比”, 0.2,...“颜色”,0,...“饱和”,0.1,...“亮度”, 0.2);结尾%随机翻转和缩放图像。tform = randomAffine2d (“XReflection”,真的,'规模'1.1 [1]);tform溃败= affineOutputView(深圳,'裸机'“CenterOutput”);b {1} = imwarp(i,tform,'OutputView',溃败);%对框应用相同的变换。[B{2},指数]= bboxwarp ({2}, tform溃败,“OverlapThreshold”, 0.25);B{3} ={3}(指标);%仅当所有框被扭曲移除时才返回原始数据。如果isempty(索引)b = a;结尾结尾功能targetSize data = preprocessData(数据)%将图像大小调整为targetsize。scale = targetsize(1:2)./大小(数据{1},[1 2]);数据{1} = IMResize(数据{1},targetsize(1:2));数据{2} = bboxresize(数据{2},比例);结尾

参考文献

[1] Redmon,Joseph和Ali Farhadi。“YOLO9000:更好,更快,更强。”2017年电脑视觉和模式识别(CVPR)会议。IEEE,2017年。