更快R-CNN深層学習を使用したオブジェクトの検出
この例では更快R-CNN与卷积神经网络(地区)オブジェクト検出器を学習させる方法を説明します。
深層学習は,ロバストなオブジェクト検出器に学習させるために使用できる強力な機械学習手法です。オブジェクト検出の深層学習手法には,快R-CNNや你只看一次(YOLO)意思v2などの複数の手法が存在します。この例では,関数trainFasterRCNNObjectDetector
を使用して,Faster R-CNN車両検出器を学習させます。詳細にいては,オブジェクトの検出を参照してください。
事前学習済みの検出器のダウンロ,ド
学習の完了を待たなくて済むように,事前学習済みの検出器をダウンロ,ドします。検出器に学習させる場合は,変数doTraining
を真实に設定します。
doTraining = false;如果~doTraining && ~exist(“fasterRCNNResNet50EndToEndVehicleExample.mat”,“文件”) disp (“下载预训练的检测器(118 MB)…”);pretrainedURL =“//www.tatmou.com/金宝appsupportfiles/vision/data/fasterRCNNResNet50EndToEndVehicleExample.mat”;websave (“fasterRCNNResNet50EndToEndVehicleExample.mat”, pretrainedURL);结束
デ,タセットの読み込み
この例では,295個の。これらのイメージの多くは,加州理工学院の汽车1999データセットおよび汽车2001データセットからのものですの(加州理工学院计算愿景网站サ通讯录トで入手可能)。彼得罗·佩罗纳氏によって作成されたもので,許可を得て使用しています。各メジには,1または2個のラベル付けされた車両ンスタンスが含まれています。小さなデータセットは更快R-CNNの学習手順を調べるうえで役立ちますが,実際にロバストな検出器を学習させるにはより多くのラベル付けされたイメージが必要になります。車両のメジを解凍し,車両のグラウンドトゥルスデタを読み込みます。
解压缩vehicleDatasetImages.zip数据=负载(“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 = combine(imdsTrain,bldsTrain);validationData = combine(imdsValidation,bldsValidation);testData = combine(imdsTest,bldsTest);
学習▪▪メ▪ジとボックスラベルのう▪の1▪▪を表示します。
data = read(trainingData);I =数据{1};Bbox =数据{2};annotatedImage = insertShape(I,“矩形”, 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
を使用して、学習デ、タ内のオブジェクトのサ、ズに基づいてアンカ、ボックスを推定します。学習前のイメージのサイズ変更を考慮するには,アンカーボックスを推定する学習データのサイズを変更します。变换
を使用して学習データの前処理を行い,アンカーボックスの数を定義してアンカーボックスを推定します。
preprocessedTrainingData = transform(trainingData, @(data)preprocessData(data,inputSize));numAnchors = 3;锚定箱= estimateAnchorBoxes(preprocsedtrainingdata,numAnchors)
anchorBoxes =3×229 17 46 39 136 116
アンカ,ボックスの選択の詳細は,学習デ,タからのアンカ,ボックスの推定(计算机视觉工具箱™)およびアンカ,ボックスによるオブジェクトの検出を参照してください。
次に,resnet50
を使用して事前学習済みのResNet-50モデルを読み込みます。
featureextracactionnetwork = resnet50;
特徴抽出層として“activation_40_relu”
を選択します。この特徴抽出層は,係数16でダウンサンプリングされる特徴マップを出力します。このダウンサンプリングの量は,空間分解能と抽出される特徴の強度との適切なトレードオフです(ネットワークでさらに抽出された特徴により,より強力なイメージの特徴が符号化されますが,空間分解能は低下します)。最適な特徴抽出層を選択するには経験的解析が必要です。analyzeNetwork
を使用すると,ネットワ,ク内に存在する可能性がある他の特徴抽出層の名前を検索できます。
featureLayer =“activation_40_relu”;
検出するクラスの数を定義します。
numClasses = width(vehicleDataset)-1;
更快R-CNNオブジェクト検出ネットワ,クを作成します。
lgraph = fastrcnnlayers (inputSize,numClasses,anchorBoxes, featureextracactionnetwork,featureLayer);
深度学习工具箱™からanalyzeNetwork
またはディプネットワクデザナを使用してネットワクを可視化できます。
快R-CNNネットワークアーキテクチャをより詳細に制御する必要がある場合は,ディープネットワークデザイナーを使用して更快R-CNN検出ネットワークを手動で設計します。詳細にいては,R-CNN,快R-CNNおよび快R-CNN入門を参照してください。
デ,タ拡張
デ,タ拡張は,学習中に元のデ,タをランダムに変換してネットワ,クの精度を高めるために使用されます。デ,タ拡張を使用すると、ラベル付き学習サンプルの数を実際に増やさずに、学習データをさらに多様化させることができます。
变换
を使用して,イメージと関連するボックスラベルを水平方向にランダムに反転させることによって学習データを拡張します。デ,タ拡張は,テストデ,タと検証デ,タには適用されないことに注意してください。理想的には,テストデータと検証データは元のデータを代表するもので,バイアスのない評価を行うために変更なしで使用されます。
augmentedTrainingData = transform(trainingData,@augmentData);
同じメジを複数回読み取り,拡張された学習デタを表示します。
augmentedData = cell(4,1);为k = 1:4 data = read(augmentedTrainingData);augmentedData{k} = insertShape(数据{1},“矩形”、数据{2});重置(augmentedTrainingData);结束图蒙太奇(augmentedData,“BorderSize”, 10)
学習デ,タの前処理
拡張された学習デ,タと検証デ,タを前処理して学習用に準備します。
trainingData = transform(augmentedTrainingData,@(data)preprocessData(data,inputSize));validationData = transform(validationData,@(data)preprocessData(data,inputSize));
前処理済みのデ,タを読み取ります。
data = read(trainingData);
メ,ジとボックスの境界ボックスを表示します。
I =数据{1};Bbox =数据{2};annotatedImage = insertShape(I,“矩形”, 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);
doTraining
が真实の場合,trainFasterRCNNObjectDetector
を使用して更快的R-CNNオブジェクト検出器に学習させます。そうでない場合は,事前学習済みのネットワ,クを読み込みます。
如果doTraining训练更快的R-CNN检测器。% *调整负重叠范围和正重叠范围以确保训练样本与实际情况紧密重叠。。[detector, info] = trainfastrcnnobjectdetector (trainingData,lgraph,options,...“NegativeOverlapRange”, 0.3 [0],...“PositiveOverlapRange”(0.6 - 1));其他的为示例加载预训练的检测器。预训练=负荷(“fasterRCNNResNet50EndToEndVehicleExample.mat”);检测器=预训练的。结束
この例は,12 GBメモリ搭載のNvidia(TM) Titan X GPUで検証済みです。ネットワクの学習には約20分かかりました。学習時間は使用するハ,ドウェアによって異なります。
簡単なチェックとして,1のテスト。@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
I = imread(testDataTbl.imageFilename{3});I = imresize(I,inputSize(1:2));[bboxes,scores] = detect(检测器,I);
結果を表示します。
I = insertObjectAnnotation(I,“矩形”bboxes,分数);图imshow(我)
テストセットを使用した検出器の評価
大規模なメジセットで学習済みのオブジェクト検出器を評価し,パフォマンスを測定します。计算机视觉工具箱™には,平均適合率(evaluateDetectionPrecision
)や対数平均ミス率(evaluateDetectionMissRate
)などの一般的なメトリクスを測定するオブジェクト検出器の評価関数が用意されています。この例では,平均適合率メトリクスを使用してパフォ,マンスを評価します。平均適合率は,検出器が正しい分類を実行できること(適合率)と検出器がすべての関連オブジェクトを検出できること(再現率)を示す単一の数値です。
学習デ,タと同じ前処理変換をテストデ,タに適用します。
testData = transform(testData,@(data)preprocessData(data,inputSize));
すべてのテスト▪▪メ▪▪ジに対して検出器を実行します。
detectionResults = detect(检测器,testData,“MinibatchSize”4);
平均適合率メトリクスを使用してオブジェクト検出器を評価します。
[ap, recall, precision] = evaluateDetectionPrecision(detectionResults,testData);
適合率/再現率(pr)の曲線は,さまざまなレベルの再現率における検出器の適合率を示しています。すべてのレベルの再現率で適合率が1になるのが理想的です。より多くのデ,タを使用すると平均適合率を向上できますが,学習に必要な時間が長くなる場合があります。Pr曲線をプロットします。
图(召回率,精度)“回忆”) ylabel (“精度”网格)在标题(sprintf ('平均精度= %.2f'据美联社)),
サポ,ト関数
函数数据= augmentData(数据)随机水平翻转图像和包围框。tform = randomAffine2d(“XReflection”,真正的);Sz = size(数据{1});rout = affineOutputView(sz,tform);数据{1}= imwarp(数据{1},tform,“OutputView”,溃败);如果需要,消毒盒子数据。%data{2} = helperSanitizeBoxes(data{2}, sz);%变形盒。数据{2}= bboxwarp(数据{2},tform,rout);结束函数data = preprocessData(data,targetSize)将图像和包围框的大小调整为targetSize。Sz = size(data{1},[1 2]);scale = targetSize(1:2)./sz;数据{1}= imresize(数据{1},targetSize(1:2));如果需要,消毒盒子数据。%data{2} = helperSanitizeBoxes(data{2}, sz);%调整盒子大小。数据{2}= bboxresize(数据{2},规模);结束
参考文献
[1] Ren, S., K. He, R. Gershick, J. Sun。更快的R-CNN:使用区域提议网络实现实时目标检测IEEE模式分析与机器智能汇刊.第39卷,第6期,2017年6月,第1137-1149页。
格什克,R.多纳休,T.达雷尔和J.马利克。“用于精确目标检测和语义分割的丰富特征层次。”2014年IEEE计算机视觉与模式识别会议论文集.俄亥俄州哥伦布市,2014年6月,第580-587页。
[3]格什克,R。“快速R-CNN。”2015年IEEE计算机视觉国际会议论文集.智利圣地亚哥,2015年12月,第1440-1448页。
齐特尼克,c.l., P. Dollar。边框:从边定位对象建议。欧洲计算机视觉会议.瑞士苏黎世,2014年9月,第391-405页。
[5]伊吉林斯,J. R. R., K. E. A.范·德·桑德,T.格弗斯和A. W. M.斯莫尔德。对象识别的选择性搜索国际计算机视觉杂志.Vol。104,第2期,2013年9月,第154-171页。
参考
rcnnObjectDetector
|trainingOptions
(深度学习工具箱)|trainNetwork
(深度学习工具箱)|trainRCNNObjectDetector
|fastRCNNObjectDetector
|fasterRCNNObjectDetector
|trainFastRCNNObjectDetector
|trainFasterRCNNObjectDetector
|检测
|insertObjectAnnotation
|evaluateDetectionMissRate
|evaluateDetectionPrecision
関連するトピック
- R-cnn深層学習を使用したオブジェクト検出器の学習
- Matlabによる深層学習(深度学习工具箱)