主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

快R-CNN深層学習を使用したオブジェクトの検出

この例では更快R-CNN与卷积神经网络(地区)オブジェクト検出器を学習させる方法を説明します。

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

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

学習の完了を待たなくて済むように,事前学習済みの検出器をダウンロードします。検出器に学習させる場合は,変数doTrainingAndEvalを真正に設定します。

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

データセットの読み込み

295年この例では個のイメージを含む小さなラベル付きデータセットを使用します。各イメージには1または2個のラベル付けされた車両インスタンスが含まれています。小さなデータセットは更快R-CNNの学習手順を調べるうえで役立ちますが,実際にロバストな検出器を学習させるにはより多くのラベル付けされたイメージが必要になります。車両のイメージを解凍し,車両のグラウンドトゥルースデータを読み込みます。

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

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

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

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

imageDatastoreおよびboxLabelDatastoreを使用して,学習および評価中にイメージとラベルデータを読み込むデータストアを作成します。

imdsTrain = imageDatastore (trainingDataTbl {:,“imageFilename”});bldsTrain = boxLabelDatastore (trainingDataTbl (:,“汽车”));imdsValidation = imageDatastore (validationDataTbl {:,“imageFilename”});bldsValidation = boxLabelDatastore (validationDataTbl (:,“汽车”));imdsTest = imageDatastore (testDataTbl {:,“imageFilename”});bldsTest = boxLabelDatastore (testDataTbl (:,“汽车”));

イメージデータストアとボックスラベルデータストアを組み合わせます。

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

学習イメージとボックスラベルのうちの1つを表示します。

data =阅读(trainingData);我={1}数据;bbox ={2}数据;annotatedImage = insertShape(我“矩形”, bbox);annotatedImage = imresize (annotatedImage 2);图imshow (annotatedImage)

快R-CNN検出ネットワークの作成

快R-CNNオブジェクト検出ネットワークは,特徴抽出ネットワークと,その後に続く2つのサブネットワークによって構成されます。通常,特徴抽出ネットワークは,ResNet-50や初始v3などの事前学習済みのCNNです。特徴抽出ネットワークの後に続く 1 つ目のサブネットワークは、オブジェクト提案 (オブジェクトが存在する可能性が高いイメージ内の領域) を生成するよう学習させた領域提案ネットワーク (RPN) です。2 つ目のサブネットワークは、各オブジェクト提案の実際のクラスを予測するように学習しています。

通常,特徴抽出ネットワークは事前学習済みのCNNです(詳細については事前学習済みの深層ニューラルネットワーク(深度学习工具箱)を参照)。この例では特徴抽出にResNet-50を使用します。用途の要件によって,MobileNet v2やResNet-18など,その他の事前学習済みのネットワークも使用できます。

fasterRCNNLayersを使用して,事前学習済みの特徴抽出ネットワークが自動的に指定された更快R-CNNネットワークを作成します。fasterRCNNLayersでは更快R-CNNネットワークをパラメーター化する以下の複数の入力を指定する必要があります。

  • ネットワーク入力サイズ

  • アンカーボックス

  • 特徴抽出ネットワーク

最初に,ネットワーク入力サイズを指定します。ネットワーク入力サイズを選択する際には、ネットワーク自体の実行に必要な最小サイズ、学習イメージのサイズ、および選択したサイズでデータを処理することによって発生する計算コストを考慮します。可能な場合、学習イメージのサイズに近く、ネットワークに必要な入力サイズより大きいネットワーク入力サイズを選択します。例の実行にかかる計算コストを削減するには、ネットワーク入力サイズをネットワークの実行に必要な最小サイズである [224 224 3] に指定します。

inputSize = [224 224 3];

この例で使用される学習イメージは224行224列より大きいさまざまなサイズを持つため,学習前の前処理手順でイメージのサイズを変更しなければなりません。

次に,estimateAnchorBoxesを使用して,学習データ内のオブジェクトのサイズに基づいてアンカーボックスを推定します。学習前のイメージのサイズ変更を考慮するには,アンカーボックスを推定する学習データのサイズを変更します。变换を使用して学習データの前処理を行い,アンカーボックスの数を定義してアンカーボックスを推定します。

preprocesedtrainingdata = transform(trainingData, @(data)preprocessData(data,inputSize));numAnchors = 3;anchorBoxes = estimateAnchorBoxes (preprocessedTrainingData numAnchors)
anchorBoxes =3×2136 119 55 48 157 128

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

次に,resnet50を使用して事前学習済みのResNet-50モデルを読み込みます。

featureExtractionNetwork = resnet50;

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

featureLayer =“activation_40_relu”

検出するクラスの数を定義します。

numClasses =宽度(vehicleDataset) 1;

快R-CNNオブジェクト検出ネットワークを作成します。

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

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

快R-CNNネットワークアーキテクチャをより詳細に制御する必要がある場合は,ディープネットワークデザイナーを使用して更快R-CNN検出ネットワークを手動で設計します。詳細については,R-CNN、快速R-CNNおよび更快R-CNN入門を参照してください。

データ拡張

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

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

augmentedTrainingData =变换(trainingData @augmentData);

同じイメージを複数回読み取り,拡張された学習データを表示します。

augmentedData =细胞(4,1);k = 1:4 data = read(augmentedTrainingData);augmentedData {k} = insertShape(数据{1},“矩形”、数据{2});重置(augmentedTrainingData);结束图蒙太奇(augmentedData,“BorderSize”, 10)

学習データの前処理

拡張された学習データと検証データを前処理して学習用に準備します。

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

前処理済みのデータを読み取ります。

data =阅读(trainingData);

イメージとボックスの境界ボックスを表示します。

我={1}数据;bbox ={2}数据;annotatedImage = insertShape(我“矩形”, bbox);annotatedImage = imresize (annotatedImage 2);图imshow (annotatedImage)

快R-CNNの学習

trainingOptionsを使用してネットワーク学習オプションを指定します。前処理済みの検証データに“ValidationData”を設定します。“CheckpointPath”を一時的な場所に設定します。これにより,学習プロセス中に部分的に学習させた検出器を保存できます。停電やシステム障害などで学習が中断された場合に,保存したチェックポイントから学習を再開できます。

选择= trainingOptions (“个”...“MaxEpochs”10...“MiniBatchSize”2,...“InitialLearnRate”1 e - 3,...“CheckpointPath”tempdir,...“ValidationData”, validationData);

doTrainingAndEvalが真正の場合,trainFasterRCNNObjectDetectorを使用して更快R-CNNオブジェクト検出器を学習させます。そうでない場合は,事前学習済みのネットワークを読み込みます。

如果doTrainingAndEval%训练更快的R-CNN检测器。% *调整负重叠范围和正重叠范围,以确保%表示训练样本与ground truth紧密重叠。[检测器,信息]= trainFasterRCNNObjectDetector(trainingData,lgraph,options,...“NegativeOverlapRange”, 0.3 [0],...“PositiveOverlapRange”(0.6 - 1));其他的%负载预训练检测器为例。pretrained =负载(“fasterRCNNResNet50EndToEndVehicleExample.mat”);探测器= pretrained.detector;结束

この例は12 GBメモリ搭載のNvidia GPU (TM)泰坦Xで検証済みです。ネットワークの学習には約20分かかりました。学習時間は使用するハードウェアによって異なります。

簡単なチェックとして,1つのテストイメージに対して検出器を実行します。イメージのサイズを変更して学習イメージと同じサイズにします。

我= imread (testDataTbl.imageFilename {1});我= imresize(我inputSize (1:2));[bboxes,分数]=检测(探测器,I);

結果を表示します。

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

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

大規模なイメージセットで学習済みのオブジェクト検出器を評価し,パフォーマンスを測定します。计算机视觉工具箱™には,平均適合率(evaluateDetectionPrecision)や対数平均ミス率(evaluateDetectionMissRate)などの一般的なメトリクスを測定するオブジェクト検出器の評価関数が用意されています。この例では,平均適合率メトリクスを使用してパフォーマンスを評価します。平均適合率は,検出器が正しい分類を実行できること(適合率)と検出器がすべての関連オブジェクトを検出できること(再現率)を示す単一の数値です。

学習データと同じ前処理変換をテストデータに適用します。

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

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

如果doTrainingAndEval detectionResults = detect(检测器,testData,“MinibatchSize”4);其他的%负载预训练检测器为例。pretrained =负载(“fasterRCNNResNet50EndToEndVehicleExample.mat”);detectionResults = pretrained.detectionResults;结束

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

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

適合率/再現率(PR)の曲線は,さまざまなレベルの再現率における検出器の適合率を示しています。すべてのレベルの再現率で適合率が1になるのが理想的です。より多くのデータを使用すると平均適合率を向上できますが,学習に必要な時間が長くなる場合があります。公关曲線をプロットします。

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

サポート関数

函数data = augmentData(数据)水平随机翻转图像和边框。tform = randomAffine2d (“XReflection”,真正的);溃败= affineOutputView(尺寸(数据{1}),tform);{1} = imwarp数据(数据{1}、tform“OutputView”,溃败);{2} = bboxwarp数据(数据{2}、tform溃败);结束函数targetSize data = preprocessData(数据)%调整图像和包围框的大小为targetSize。规模= targetSize(1:2)。{1} /大小(数据,[1 - 2]);{1} = imresize数据(数据{1},targetSize (1:2));{2} = bboxresize数据(数据{2},规模);结束

参考文献

Ren, S., K. He, R. Gershick, J. Sun。更快的R-CNN:面向区域提议网络的实时目标检测模式分析与机器智能学报.第39卷第6期,2017年6月,第1137-1149页。

R.格希克、J.多纳休、T.达雷尔和J.马利克。精确目标检测和语义分割的丰富特征层次2014 IEEE计算机视觉与模式识别会议论文集.Columbus, OH, June 2014, pp. 580-587。

[3] Girshick, R。“快速R-CNN。”2015 IEEE计算机视觉国际会议论文集.智利圣地亚哥,2015年12月,第1440-1448页。

C. L.齐特尼克和P. Dollar。"边缘框:从边缘定位对象"欧洲计算机视觉会议.瑞士苏黎世,2014年9月,第391-405页。

J. R. R., K. E. A. van de Sande, T. Gevers, and A. W. M. Smeulders。"物体识别的选择性搜索"国际计算机视觉杂志.Vol。104,第2页,2013年9月,第154-171页。

参考

||||||||||(深度学习工具箱)|(深度学习工具箱)

関連するトピック