主要内容

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

R-CNN深层学习ををしたた仪器の学习

このこの例で,深层学习とr-cnn(带卷积神经网络的地区)をを用し,オブジェクト検出器を学位さをを明します。

概要

この例では,一時停止標識を検出するためにR-CNNオブジェクト検出器を学習させる方法を説明します。R-CNNはオブジェクト検出フレームワークで,畳み込みニューラルネットワーク(CNN)を使用してイメージ内のイメージ領域を分類します[1]。R-CNNでは,スライディングウィンドウを使用して領域が1つずつ分類されるのではなく,オブジェクトが含まれる可能性が高い領域のみが処理されます。これによりCNNの実行時に発生する計算コストが大幅に減少します。

r-cnnの一时停止停止を习ささ方法开始点れますます解决されますイメージ徴を习は既にの特徴ををしの特徴ををしの特ををはイメージの特种を点既にの特种をを习イメージ特种ををはしの特徴をを既にイメージ特种ををはイメージの习习ネットワーク既にイメージ特种ををが既にの特徴をを既にイメージイメージ特种をており,これらの特价をなイメージ内容はです。つまり,元元タスクで学习习の特色

転移学习には,学校に必要なイメージイメージ少なく少なく済み,学习时间が短缩さとメリットについてがありますためににについて说ありするために,この例で転移転移习のワークフロー使転移転移しワーク标识検出器を学习させますま。ず,50000枚の学习イメージが含まれるCIFAR-10データセットを使用して,CNNに事前学习させます。その后,学习イメージを41枚だけ使用して,この事前学习済みのCNNを一时停止标识検出用に微调整します。事前学习済みのCNNを使用しない场合,より多くのイメージを使用して一时停止标识検出器を学习させる必要があります。

メモ:このこのにに,计算机视觉工具箱™,图像处理工具箱™,深学习工具箱™统计和机器学习工具箱™が必要です。

この例を実行するには,CUDA対応NVIDIA GPU™の使用が強く推奨されます。GPUを使用するには并行计算工具箱™が必要です。サポートされる计算能力の詳細については,リリース別のGPUサポート(并行计算工具箱)を参照してください。

cifar-10イメージデータのダウンロード

CIFAR-10データセット[3]をダウンロードします。このデータセットには,CNNを学習させるために使用する50000枚の学習イメージが含まれています。

CIFAR-10データを一時ディレクトリにダウンロードします。

cifar10data = tempdir;URL =.“https://www.cs.toronto.edu/ ~ kriz / cifar-10-matlab.tar.gz”;Helpercifar10data.download(URL,Cifar10data);

Cifar-10学院データデータとテストををます。

[trainingImages, trainingLabels testImages testLabels] = helperCIFAR10Data.load (cifar10Data);

それぞれのイメージは32 x32 RGBイメージで,50000枚の学習サンプルがあります。

大小(培训码)
ANS =.1×432 32 3 50000

CIFAR-10には10個のイメージカテゴリがあります。イメージカテゴリを一覧表示します。

NumimageCategories = 10;类别(培训标签)
ANS =.10×1细胞{'airplane'} {'automobile'} {'bird'} {'cat'} {'deer'} {'do'} {'frog'} {'horse'} {'horse'} {'true'} {'track'} {'卡车'}

次のコードを使用すると,いくつかの学习イメージを表示できます。

图Thumbnails =培训剪辑(:,::,1:100);蒙太奇(缩略图)

畳み込み畳み込みニューラル(CNN)の作物

CNNは一連の層で構成されています。各層では特定の計算が定義されます。深度学习工具箱™は,CNNを層単位で簡単に設計する機能を提供します。この例では,次の層を使用してCNNを作成します。

  • imageInputlayer.(深度学习工具箱)- イメージイメージ力层

  • Convolution2Dlayer.(深度学习工具箱)——畳み込みニューラルネットワーク用の2次元畳み込み層

  • 剥离(深度学习工具箱)- 正规化纤ユニット(Relu)层

  • maxpooling2dlayer.(深度学习工具箱)- 最大プーリング层

  • 全康无经(深度学习工具箱)- 全全合

  • softmaxLayer(深度学习工具箱)- ソフトマックス层

  • classificationLayer(深度学习工具箱)——ニューラルネットワーク用の分類出力層

ここで定義するネットワークは,[4]で説明されているネットワークと同様に,imageInputlayer.から始まります。入力层は,CNNが处理できるデータのタイプとサイズを定义します。この例では,CNNを使用してCIFAR-10イメージ(32×32 RGBイメージ)を处理します。

%为32x32x3 cifar-10图像创建图像输入层。[高度,宽度,NumChannels,〜] =尺寸(培训剪辑);图像= [高度宽度NumChannels];InputLayer = ImageInputLayer(图像化)
InputLayer =具有属性的ImageInputLayer:name:''输入:[32 32 3] HyperParameters DataAugmentation:'无'归一化:'Zerocenter'标准化Dimension:'Auto'均值:[]

次に,ネットワークの中間層を定義します。中間層は,畳み込み層,ReLU(正規化線形ユニット)およびプーリング層のブロックの繰り返しで構成されています。これら3つの層が,畳み込みニューラルネットワークの中核となる基本ブロックを形成します。畳み込み層は,ネットワークの学習中に更新されるフィルターの一連の重みを定義します。ReLU層は,ネットワークに非線形性を追加します。これにより,ネットワークでイメージピクセルをイメージのセマンティクスコンテンツにマッピングする非線形関数を近似できます。プーリング層は,ネットワークを流れるデータをダウンサンプリングします。多数の層があるネットワークでは,ネットワークでのデータのダウンサンプリングが早くなりすぎないように,プーリング層を慎重に使用してください。

%卷积层参数filtersize = [5 5];numfilters = 32;middlelayers = [%第一卷积层具有32个5x5x3过滤器的银行。一种% 2像素的对称填充被添加,以确保图像边界%包含在处理中。这是避免的重要边境的%信息被冲走太早% 网络。convolution2dLayer (filterSize numFilters,“填充”, 2)%注意,滤波器的第三维度可以省略,因为它基于网络的连接自动推断%。在这个案例的%,因为这层图层遵循图像层,第三层%维度必须为3,以匹配输入中的通道数量%的形象。%接下来添加ReLU层:Rululayer()%遵循它的最大池层,具有3x3空间池池区域%和2个像素的步幅。这对数据尺寸下降了%32x32至15x15。maxpooling2dlayer(3,'走吧', 2)%重复3个核心层以完成网络的中间部分。convolution2dLayer (filterSize numFilters,“填充”,2)rululayer()maxpooling2dlayer(3,'走吧',2)卷积2dlayer(过滤,2 * numfilters,“填充”,2)rululayer()maxpooling2dlayer(3,'走吧',2)]
middleelayers = 9x1 Layer array with layers:1”卷积32 5 x5旋转步[1]和填充2 2 2 2 2”ReLU ReLU 3”麦克斯池3 x3马克斯池步(2 - 2)和填充(0 0 0 0)4”卷积32 5 x5旋转步[1]和填充(2 2 2 2)5”ReLU ReLU 6”马克斯池3 x3马克斯池步(2 - 2)和填充[0 0 0 0]7“卷积64maxpooling 3x3 Max Pooling with stride [2 2] and padding [0 0 0 0]

これら3つの基本层を缲り返すで,より深いネットワークをを减らし,データプーリング层で减らしてことをでで。と,学校に役立つイメージイメージがされます。

CNNの最終層は,通常,全結合層とソフトマックス損失層で構成されます。

finallayers = [%添加完全连接的层,具有64个输出神经元。输出大小这一层将是一个长度为64的数组。fullyConnectedLayer (64)%添加Relu非线性。剥离%添加最后一个完全连接的层。此时,网络必须%产生10个信号,可用于测量输入图像是否正确%属于一个类别或另一个类别。使用该测量%随后的损失层。全康联系(NumimageCategories)%增加softmax loss层和分类层。最后的图层使用%输出的全连接层计算的范畴%概率分布在图像类上。在培训期间%进程,调整所有网络权重以最小化损耗%分类分布。SoftMaxLayer分类层]
FINALLAYERS = 5x1层阵列带图层:1''完全连接64完全连接的层2''Relu Relu 3''完全连接的10完全连接的第4层''Softmax Softmax 5''分类输出CrossentRopyex

入力层,中间层,最终层を组み合。

图层= [InputLayer Middlayers FinAllayers]
图层数组:1”的形象输入32 x32x3图像zerocenter正常化2”卷积32 5 x5旋转步[1]和填充(2 2 2 2)3”ReLU ReLU 4”马克斯池3 x3马克斯池步(2 - 2)和填充[0 0 0 0]5“卷积32 5 x5的隆起与步幅[1]和填充(2 2 2 2)6”ReLU ReLU 7”麦克斯池3 x3马克斯池步(2 - 2)和填充[0 0 0 0]8“卷积64 5 x5旋转步[1]和填充2 2 2 2 9”ReLU ReLU 10“马克斯池3 x3 Max池步(2 - 2)和填充(0 0 0 0)11”完全连接64完全连接层12“ReLU ReLU 13”完全连接10完全连接层14“Softmax Softmax 15"分类输出交叉

标准偏差0.0001の正规分布分数使しし,最初のます。

层(2)。权重= 0.0001 * randn([filterSize numChannels numFilters]);

CIFAR-10データを使用したCNNの学習

ネットワーク,CiFar-10学校データデータのでして学习さことができます。まず,关联培训选项(深度学习工具箱)を使用してネットワーク学習アルゴリズムを設定します。ネットワーク学習アルゴリズムは,初期学習率0.001をとしたモーメンタム項付き確率的勾配降下法(个)を使用します。学習中8エポックごとに初期学習率が減少します(1エポックは,学習データセット全体の処理1回と定義されます)。学習アルゴリズムは40エポック実行されます。

学习アルゴリズムではミニバッチサイズの128枚のイメージが使されるににしてください。gpuのののため,学校习gpuを使するには,このははするするがあるがサイズありありする必要ある场サイズありあり

%设置网络培训选项选择= trainingOptions (“个”...'势头',0.9,...'italllearnrate',0.001,...“LearnRateSchedule”'分段'...'学习ropfactor',0.1,...'学习ropperiod'8...“L2Regularization”,0.004,...'maxepochs',40,...“MiniBatchSize”,128,...“详细”, 真的);

关节有关部Trainnetwork.(深度学习工具箱)を使用してネットワークを学習させます。これは計算能力を必要とするプロセスのため,完了するのに20 ~ 30分かかります。この例の実行时间を节约するに,事前学习済みのネットワークをから読み込みます。ネットワークを自分で习。偶然を真实に设定し。

学習には,CUDA対応NVIDIA GPU™の使用が強く推奨されます。

%培训的网络从磁盘加载以在运行时节省时间%的例子。设置该标志为true来训练网络。dotraining = false;如果偶然%训练网络。cifar10Net = trainNetwork(trainingImages, trainingLabels, layers, opts);别的%载荷预先训练的探测器。加载('rcnnstopsigns.mat''cifar10net'的)结尾

CiFar-10ネットワークの学习习検证

ネットワークの学習が終わったら,検証を行って学習が成功していることを確認します。まず,最初の畳み込み層のフィルターの重みの簡易検証を行うことで,学習に明らかな問題があるかどうかを特定できます。

%提取第一卷积层权重w = cifar10net.layers(2).weights;%重新缩放权重到范围[0,1]以更好地显示w =重新调节(w);图蒙太奇(w)

最初最初なな构造がなければなりませんませませませませませはは必要に追を习い必要であることことを示しいい必要であることを示してい必要であることを习习になりであることを习にになりであることを习にににませことませを习ににますであることをを习にますますであることをませにますますであるであることなませにますますであるであることな构造にますますますであるまだランダムなませになりますます必要まだ确なませませなりなりなりなりなりなりなりなりはは最初ははははははははははなりませませませませませませませませませませなりませ追追习习が必要であることをを示してい必要であることを示してい必要であることを示し习いであるであることことを习习ますますであることを习习ますますであることことようようますます记ことをよう最初の层のフィルターがCIFAR-10学习データからエッジのような特徴を学习しています。

学習の結果を完全に検証するには,CIFAR-10テストデータを使用してネットワークの分類精度を測定します。精度のスコアが低い場合,追加学習または追加の学習データが必要であることを意味します。この例の目的は,テストセットで100%の精度を達成することではなく,オブジェクト検出器の学習に使用するのに十分なネットワークの学習を行うことです。

%在测试集中运行网络。YTest =分类(cifar10Net, testestimages);%计算准确性。精度= SUM(YTEST == TESTLABELS)/ NUMEL(testLabels)
精度= 0.7456.

追加学習を行うと精度が向上しますが,R-CNNオブジェクト検出器の学習という目的には必要ありません。

学習データの読み込み

ネットワークがcifar-10の分类タスクに対して适切に机能するようなったので,転移学习习の手をして,一时代検出のためにを微検出の。

最初に,一时停止标识のグラウンドトゥルースデータを読み込みます。

%加载地面真理数据data = load(“stopSignsAndCars.mat”“stopSignsAndCars”);stopsignsandcars = data.stopsignsandcars;%更新图像文件的路径以匹配本地文件系统VisionData = fullfile(toolboxdir('想象'),“visiondata”);stopsignsandcars.imagefilename = fullfile(VisionData,stopsignsandcars.ImageFilename);%显示地面真实数据的总结摘要(STOPSIGNSANDCARS)
变量:ImageFileName:41×1个字符向量阵列停止:41×1细胞:41×1细胞滤网:41×1个细胞

学習データは,一時停止標識,車体前部および後部のイメージファイル名とROIラベルが含まれるテーブル内に格納されています。各ROIラベルは,イメージ内で関心のあるオブジェクトの周りの境界ボックスです。一時停止標識検出器の学習には,一時停止標識のROIラベルのみが必要です。車体前部および後部のROIラベルは削除しなければなりません。

%只保留图像文件名和停止标志ROI标签stopSigns = stopSignsAndCars(:, {)'imagefilename''停止标志'});%显示一个训练图像和地面真相边界框i = imread(stopsigns.imagefilename {1});i = InsertObjectAnnotation(i,'长方形', stopSigns.stopSign {1},'停止标志'“线宽”8);图imshow(我)

このデータセットには41枚の学习イメージしかないに注意してください。高级一时代検出検出を生成することはできませんんんんんんん。,はるかに小さいデータセットをすることが可になりなり。

R-CNN一時停止標識検出器の学習

最後に,trainrcnnobjectdetectorを实用してr-cnnオブジェクトオブジェクトオブジェクト検出を习さますます。このこのにですですトゥルースにです。このテーブルには,ラベル付きには,ラベル付き済みの停止标识,事前学习済みのcifar-10ネットワークネットワーク习习が含まれています。学学有关部は,イメージイメージ10个カテゴリににされて元のののされ元元元のますににににののネットワークネットワーク変更しししししししししますますますますますますます停止停止停止标识标识标识标识と泛用背景クラスの2つのクラスにイメージを分类できます。

学习中,グラウンドトゥルースデータから抽出さたイメージパッチパッチ使使使てネットワークネットワークの重みささますの'が微调整され.'positiveoverlaprange's .'positoverlaprange'パラメーター'负极的游侠'パラメーターによって,学校习使用されるイメージパッチ制御さます。ポジティブサンプルは,境界境界の交叉口联盟メトリクスで测定したたにに,グラウンドトゥルースボックスののラップがが0.5〜1.0のです。学习のネガティブサンプル,オーバーラップが0〜0.3のサンプル。パラメーターの最适な値は,学习済みの検出器を検证セットでテストすることによって选択します。

r-cnnの学习のの合书,学习时间时间を短缩短缩するためにmatlabワーカーの并列プールのが强く推奨れますますtrainrcnnobjectdetector並列基本設定の設定値に基因て并列を自动的にますししします。

この例の実行时间を节约するに,事前学习済みのネットワークをから読み込みます。ネットワークを自分で习。偶然を真实に设定し。

学習には,CUDA対応NVIDIA GPU™の使用が強く推奨されます。

%培训的探测器从磁盘加载以节省运行时的时间%的例子。将此标志设置为true以训练检测器。dotraining = false;如果偶然%设置培训选项选项=培训选项(“个”...“MiniBatchSize”,128,...'italllearnrate'1 e - 3,...“LearnRateSchedule”'分段'...'学习ropfactor',0.1,...'学习ropperiod', 100,...'maxepochs', 100,...“详细”, 真的);%训练R-CNN对象检测器。这需要几分钟。rcnn = thathrcnnobjectdetector(stopsigns,cifar10net,选项,...'负极源极化',[0 0.3],'积极透过的',[0.5 1])别的%加载预先训练的网络,以实现示例。加载('rcnnstopsigns.mat'“rcnn”的)结尾

R-CNN一時停止標識検出器のテスト

r-cnnオブジェクト検出器材をしてをできるようましたたたましたた。

读取测试图像testimage = imread(“stopSignTest.jpg”);%发现停车标志[bboxes,score,label] =检测(rcnn,testimage,“MiniBatchSize”,128)
bboxes =1×4419 147 31 20
得分=0.9955.
标签=明确的分类stopSign

r-cnnオブジェクトの检测メソッドは,オブジェクトの境界ボックス,検出検出スコアおよび各検出のクラスラベル返し返し返し返し返し停止标识标识返し停止,対対车优先,速度速度制标识など,复数のオブジェクトなど検出するにます.0〜1。

%显示检测结果[score, idx] = max(score);Bbox = bboxes(idx,:);注释= sprintf ('%s :(信心=%f)'标签(idx),得分);outputImage = insertObjectAnnotation (testImage,'长方形',bbox,注释);图imshow(OutputImage)

デバッグのヒント

r-cnn検出器材内ででれるネットワークは,テストイメージ全体ののはにものサイズますますますイメージイメージのをより大厦,イメージ全体をを定理,イメージ全をを直接するで,分享到のででで生成できます。これは,ネットワークを混乱させいるイメージ内のををして习を改善するを与えてくれるくれる改善するを与えてくれるなりなり手挂かり手挂かりを与えてくれるになり

%训练后的网络存储在R-CNN检测器中rcnn。网络
ANS =具有属性的系列网络:图层:[15×1 nnet.cnn.layer.Layer]

ネットワークの14番目の层であるソフト层から激活(深度学习工具箱)これ抽出し。

featuremap =激活(rcnn.network,testimage,14);% softmax激活被存储在一个三维数组中。大小(特色)
ANS =.1×343 78 2

Featuremapの3番目の次元はクラスに対応します。

rcnn。一会
ANS =.2×1细胞{'stopsign'} {'背景'}

最初のチャネルにされててますいいいますていいいい。

stopsignmap = featuremap(:,:,1);

アクティベーションの出力のサイズは,ネットワークでのダウンサンプリング操作によって入力イメージより小さくなります。可視性を向上するには,stopsignmap.のサイズを入力イメージのサイズに変更します。これはアクティベーションをイメージピクセルにマッピングする非常に大まかな近似であり,図示のみを目的として使用します。

%调整stopsignmap的大小进行可视化[height, width, ~] = size(testestimate);stopSignMap = imresize(stopSignMap, [height, width]);%可视化叠加在测试图像上的特征图。featureMapOnImage = imfuse(testage, stopSignMap); / /停止信号图imshow (featureMapOnImage)

ことこと确认できます。他他のピークがあるある场场ネガティブにに防ぐためのデータが必要になることがありが必要必要ににことありありが必要必要ににありありありが必要ににはありありあります必要ににはありありが必要にににl。て再学习を行ます。

まとめ

この例では,cifar-10データで学习済みのネットワークを使使しr-cnn一时代てを习习さたを明しました。深层医学しした。际にも,同様の手顺に従っください。

参考文献

[1] Girshick,R.,J. Donahue,T. Darrell和J. Malik。“丰富的特征层次结构,用于准确对象检测和语义细分。”2014 IEEE计算机视觉与模式识别会议论文集.Columbus, OH, June 2014, pp. 580-587。

邓娇,董伟,索切尔,吕丽君。Li, K. Li和L. Fei-Fei。ImageNet:一个大规模的分级图像数据库。2009年IEEE计算机视觉与模式识别会议论文集.迈阿密,FL,2009年6月,第248-255页。

[3] Krizhevsky,A.和G. Hinton。“从小图像学习多层特征。”硕士论文。多伦多大学,加拿大多伦多,2009。

[4] https://code.google.com/p/cuda-convnet/

参考

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

关键词する