。
この例では,深层学习とR-CNN(与卷积神经网络的地区)を使用して,オブジェクト検出器を学习させる方法を说明します。
この例では,一时代标识を検出するにr-cnnオブジェクトオブジェクト検出を习习せる方法をを明します.r-cnnはオブジェクト検出フレームで,畳み込みニューラル(cnn)ををニューラルてイメージ内のイメージ领域を分类します[1] .r-cnnでは,スライディングウィンドウを使使し领域领域ががつずつつずつれるのではなく,オブジェクトが含ま可性がこれ领域CNNの実行时に生长する计算コスト大厦に减少します。
R-CNNの一時停止標識検出器を学習させる方法を説明するために,この例では,深層学習の用途でよく使用される転移学習のワークフローに沿っています。転移学習では,ImageNet[2]などの大規模なイメージコレクションで学習済みのネットワークが,新しい分類タスクや検出タスクを解決するための開始点として使用されます。この方法の利点は,事前学習済みネットワークが既にイメージの特徴を十分学習しており,これらの特徴をさまざまなイメージに適用できることです。この学習内容は,ネットワークを微調整することによって新しいタスクに転用できます。ネットワークの微調整は,重みを少し調整することによって行います。つまり,元のタスクで学習済みの特徴表現を新しいタスクに合わせてわずかに調整します。
転移学習には,学習に必要なイメージの数が少なくて済み,学習時間が短縮されるというメリットがあります。これらのメリットについて説明するために,この例では転移学習のワークフローを使用して一時停止標識検出器を学習させます。まず50000枚の学習イメージが含まれるCIFAR-10データセットを使用して,CNNに事前学習させます。その後,学習イメージを41枚だけ使用して,この事前学習済みのCNNを一時停止標識検出用に微調整します。事前学習済みのCNNを使用しない場合,より多くのイメージを使用して一時停止標識検出器を学習させる必要があります。
メモ:この例には,计算机视觉工具箱™,图像处理工具箱™,深度学习工具箱™および统计和机器学习工具箱™が必要です。
この例を実行するには,以3.0计算能力上のCUDA対応NVIDIA GPU™の使用が強く推奨されます。GPUを使用するには并行计算工具箱™が必要です。
cifar -10データセット[3]ををします。このデータセットには,cnnを学习させるため使するする50,000枚の习习が含まれいます。
Cifar-10データを一时代ディレクトリダウンロードします。
cifar10Data = tempdir;url ='https://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz';helperCIFAR10Data.download (url, cifar10Data);
CIFAR-10学习データとテストデータを読み込みます。
[培训剪辑,培训标签,testimages,testlabels] = Helpercifar10data.load(cifar10data);
それぞれのイメージは32x32 rgbイメージで,50,000枚の学习サンプルがます。
大小(trainingImages)
ans =1×432 32 3 50000
Cifar-10には10个のイメージカテゴリがあり。
numImageCategories = 10;类别(trainingLabels)
ans =10×1个细胞{ '飞机'} { '汽车'} { '鸟'} { '猫'} { '鹿'} { '狗'} { '青蛙'} { '马'} { '船'} { '卡车'}
次のコードを使用すると,いくつかの学习イメージを表示できます。
图缩略图= trainingImages(:,:,:,1:100);蒙太奇(缩略图)
CNNは一般の层で成されてますい层では定の计算がされれます.deep学习工具箱™は,cnnを层単位単単にする能を提供し。使用してcnnを作物成し。
imageInputLayer
(深度学习工具箱)——イメージ入力層
convolution2dLayer
(深度学习工具箱)- 畳み込みニューラルネットワーク用の2次元畳み込み层
reluLayer
(深度学习工具箱)——正規化線形ユニット層(ReLU)
maxPooling2dLayer
(深度学习工具箱)——最大プーリング層
fullyConnectedLayer
(深度学习工具箱)- 全結合層
softmaxlayer.
(深度学习工具箱)- ソフトマックス层
分类层
(深度学习工具箱)- ニューラルネットワーク用の分类类力层
ここここで定义するネットワークネットワーク,[4]でで明されいるネットワークと同様に,imageInputLayer
から始まります。入力层は,CNNが处理できるデータのタイプとサイズを定义します。この例では,CNNを使用してCIFAR-10イメージ(32×32 RGBイメージ)を处理します。
%为32x32x3 CIFAR-10图像创建图像输入层。[高度,宽度,numChannels,〜] =尺寸(trainingImages);IMAGESIZE = [高度宽度numChannels];inputLayer = imageInputLayer(IMAGESIZE)
inputLayer = ImageInputLayer与属性:名称: '' InputSize:[32 32 3]超参数DataAugmentation: '无' 归一化: 'zerocenter' NormalizationDimension: '自动' 平均数:[]
次に,ネットワークの中间层を定义し。中间层,畳み込み层,relu(正规化纤ユニット)およびおよびプーリング层ののの缲り返しでこれらさ层れていいでこれらつの层がいますますます层层ががます构ニューラル层ががいとなる基本ブロックをを成します畳み込みは,ネットワークネットワーク学习中に更新されるののの层定义ます。rこれによりに非非これをによりに非非これによりによりにますししますででででこれででででででこれでででピクセルをイメージのセマンティクスにマッピング非非形プーリング近似できます。多数の层あるネットワークで,ネットワークでがあるで,ネットワークでがのダウンサンプリングがなりすぎようよう,プーリングプーリングを慎重に使てください。
%卷积层参数filterSize = [5 5];numFilters = 32;middleLayers = [%第一卷积层具有32个5x5x3滤波器组。一种添加了2个像素的%对称填充,以确保图像边框%包含在处理中。这是必须避免的在边界%的信息在被冲走太早%网络。Convolution2Dlayer(过滤,NumFilters,'填充'2)%注意,过滤器的第三个维度可以省略,因为它%是根据网络连通性自动推导出来的。在%这种情况下,因为这个层跟随图像层,第三%维度必须是3以匹配输入中的通道数% 图片。%next添加Relu层:reluLayer ()%遵循它的最大池层,具有3x3空间池区域%和2个像素的步幅。这个下采样从数据尺寸32×32%到15×15。maxPooling2dLayer(3,“步”2)%重复3个核心层以完成网络中间。Convolution2Dlayer(过滤,NumFilters,'填充', 2) reluLayer () maxPooling2dLayer (3“步”,2)convolution2dLayer(filterSize,2个* numFilters,'填充', 2) reluLayer () maxPooling2dLayer (3“步”2)]
Middlayers = 9x1层阵列,层数:1''卷积32 5x5带脚的卷曲[11]和填充[2 2 2 2] 2''Relu Relu 3''Max汇集3x3 max池与步幅[2 2]和填充[0 0 0 0] 4''卷积32 5x5卷绕升温[11]和填充[2 2 2 2] 5''Relu Relu 6''Max汇集3x3 max汇集步进[2 2]和填充[00 0 0] 7''卷积64 5x5带脚步的卷曲[11]和填充[2 2 2 2] 8''relu Relu 9''最大池池3x3 max汇集步进[2 2]和填充[0 0 00]
これら3つの基本層を繰り返すことで,より深いネットワークを作成できます。ただし,プーリング層の数を減らして,データが途中でダウンサンプリングされることを防いでください。ネットワークでダウンサンプリングが早く行われると,学習に役立つイメージ情報が破棄されます。
CNNの最终层は,通常,全全合层ソフトソフトマックス损失层ででれれれれ
finalLayers = [%添加一个具有64个输出神经元的完全连接层。的输出大小%该层将是长度为64的阵列。全康统计(64)添加一个ReLU非线性。reluLayer%添加最后完全连接的图层。此时,网络必须%产生10个信号,可用于测量输入图像是否%属于一个类别或另一个。该测量是使用由%后续损耗层。fullyConnectedLayer (numImageCategories)%添加Softmax丢失层和分类层。最终的层次使用%连接层的输出来计算分类图像类上的概率分布。在培训期间%过程中,所有网络权值都被调优,以最小化由此造成的损失%分类分布。softmaxLayer classificationLayer]
FINALLAYERS = 5x1层阵列带图层:1''完全连接64个完全连接的第2层''Relu Relu 3''完全连接的10完全连接的第4层''Softmax Softmax 5''分类输出CrossentRopyex
入力層,中間層,最終層を組み合わせます。
[inputLayer middleLayers finalLayers]
图层= 15x1层阵列,带有图层:1''图像输入32x32x3图像与“Zerocenter”归一化2''''卷积32 5x5卷绕卷曲[1 1]和填充[2 2 2 2] 3''relu Relu 4''max汇集3x3 max汇集步进[2 2]并填充[0 0 0] 5''卷积32 5x5带脚步的卷曲[1 1]和填充[2 2 2 2] 6'relu Relu 7''最大池3x3最大汇集步幅[2 2]和填充[0 0 0 0] 8''卷积64 5x5卷曲与步幅[1 1]和填充[2 2 2 2] 9''relu Relu 10''最大池池3x3 max池梯长[2]和填充[0 0 0 0] 11''完全连接64个完全连接的层12''Relu Relu 13''完全连接的10完全连接的层14''Softmax Softmax 15''分类输出CrossentRopyex
标准偏差0.0001の正规分布乱数を使用して,最初の畳み込み层の重みを初期化します。これにより,学习の收束性が向上します。
层(2).weights = 0.0001 * Randn([过滤NumChannels NumFilters]);
ネットワークアーキテクチャが定義されたので,CIFAR-10学習データを使用して学習させることができます。まず,関数trainingOptions
(深度学习工具箱)をを用ししネットワーク习アルゴリズムを设定しますネットワーク习习は,初习习は,初习率を0.001とした项付き确率降下法(SGDM)をを使。学校中,8次。が减少します(1エポックは,学校データセット全体のの回定义されます。
学習アルゴリズムではミニバッチサイズの128枚のイメージが使用されることに注意してください。GPUのメモリ制約のため,学習にGPUを使用するときには,このサイズを小さくする必要がある場合があります。
%设置网络训练选项选择=培训选项('sgdm',......“动量”,0.9%,......“InitialLearnRate”0.001,......'shownrateschedule',“分段”,......“LearnRateDropFactor”, 0.1,......'LearnRateDropPeriod',8,......'L2Regularization',0.004,......'MaxEpochs'40,......'minibatchsize', 128,......'verbose', 真的);
関数trainNetwork
(深度学习工具箱)を의使してネットワークを习させます。これは计算计算ををとするプロセスのため,完了するのに20〜30分钟ますます例実行时间をするためにににににににディスクから読み込みます。ネットワークネットワーク自分で学习习せるせる合,以下の数doTraining
を真正に設定します。
学校には,计算能力3.0以上のcuda対応nvidia™gpuののの使の推奨れます。
%从磁盘加载经过训练的网络,以节省运行时的时间% 例子。将此标志设置为true以培训网络。doTraining = FALSE;如果doTraining训练网络。Cifar10Net = Trainnetwork(StrafterImages,培训标签,层,选择);其他的%加载预训练检测器为例。加载(“rcnnStopSigns.mat”,'cifar10Net')结束
ネットワークの学习ががたら,検证検证行って习が成功ていることをしますますまずししますフィルターのの易易検证うことで,学校,学校に明なながかどうかを特价できます。
%提取第一个卷积层重量W = cifar10Net.Layers(2).Weights;%将权重到范围[0,1]重新归类,以便更好地可视化w = Rescale(W);图蒙太奇(W)
最初の層の重みには,明確な構造がなければなりません。重みがまだランダムな場合は,ネットワークに追加学習が必要であることを示しています。この例の場合,上記のように,最初の層のフィルターがCIFAR-10学習データからエッジのような特徴を学習しています。
学科の结果を完全に検证には,cifar-10テストデータを使しネットワークの分类精密を测定しますます度度を测定ししはことのの习データが必要であるであるををを习习习データが必要必要であるをを
%在测试集上运行网络。ytest =分类(cifar10net,testimages);%计算的准确性。= sum(YTest == testLabels)/numel(testLabels)
精度= 0.7456
加加学院を行う精锐精选がが上します,r-cnnオブジェクト検出検出の习という目に必要必要ません。
ネットワークがCIFAR-10の分類タスクに対して適切に機能するようになったので,転移学習の手法を使用して,一時停止標識検出のためにネットワークを微調整できます。
最初に,一时停止标识のグラウンドトゥルースデータを読み込みます。
%加载地面真实数据data =负载('stopsignsandcars.mat','stopsignsandcars');stopSignsAndCars = data.stopSignsAndCars;%更新映像文件的路径以匹配本地文件系统visiondata =完整文件(toolboxdir(“愿景”),'VisionData');stopSignsAndCars。imageFilename = fullfile(visiondata, stopSignsAndCars.imageFilename);%显示地面真实数据的摘要摘要(stopSignsAndCars)
变量:映像文件名称:字符向量stopSign的41×1单元阵列:41×1个细胞carRear:41×1个细胞carFront:41×1个细胞
学科データは,一时代,车体前部前部后部のファイルととラベルと各い内に纳纳各いいラベルラベルラベルはますますますラベルはますますラベルラベルラベルラベルは内内ででで内内内内内で内内内内内境界内各一时代,习には,一时代标识ののラベルのみがです。车辆前部およびののののはは削除ししばなりなりませませませませませませませ
%只保留图像文件名和停止标志ROI标签stopsigns = stopsignsandcars(:, {“imageFilename”,'停止标志'});%显示一个训练图像和地面真实边界框我= imread (stopSigns.imageFilename {1});我= insertObjectAnnotation (,'长方形',stopsigns.stopsign {1},“停车标志”,'行宽',8);图imshow(i)
このデータセットには41枚の学习イメージしかないことに注意してください0.41枚のイメージだけを使用してR-CNNオブジェクト検出器の学习をゼロから行うのは実用的でなく,信頼性の高い一时停止标识検出器を生成することはできません。大きなデータセット(CIFAR-10に含まれる学习イメージは50000枚)で事前学习済みのネットワークを微调整して一时停止标识検出器の学习を行うため,はるかに小さいデータセットを使用することが可能になります。
最后に,trainRCNNObjectDetector
を使用してR-CNNオブジェクト検出器を学習させます。この関数への入力はグラウンドトゥルーステーブルです。このテーブルには,ラベル付きの一時停止標識イメージ,事前学習済みのCIFAR-10ネットワークおよび学習オプションが含まれています。学習関数は,イメージが10個のカテゴリに分類されている元のCIFAR-10ネットワークを,自動的に1つのネットワークに変更します。変更後のネットワークでは,一時停止標識クラスと汎用背景クラスの2つのクラスにイメージを分類できます。
学习中,グラウンドトゥルースデータから抽出されたイメージパッチを使用して入力ネットワークの重みが微调整されます.'PositiveOverlapRange”および 'NegativeOverlapRange' パラメーターによって,学习に使用されるイメージパッチが制御されます。学习のポジティブサンプルは,境界ボックスの交叉口超过联盟メトリクスで测定した场合に,グラウンドトゥルースボックスとのオーバーラップが0.5〜1.0のサンプルです。学习のネガティブサンプルは,オーバーラップが0〜0.3のサンプルです。これらのパラメーターの最适な値は,学习済みの検出器を検证セットでテストすることによって选択します。
r-cnnの学习のの合,学习时间を短缩するためにMATLABワーカーの并列プールの使用が强く推奨されます。trainRCNNObjectDetector
は,并列基本设定の设定値に基づいて并列プールを自动的に作成して使用します。学习の前に并列プールの使用が有效になっていることを确认します。
この例の実行时间を节约するために,事前学习済みのネットワークをディスクから読み込みます。ネットワークを自分で学习させる场合は,以下の変数doTraining
を真正に設定します。
学校には,计算能力3.0以上のcuda対応nvidia™gpuののの使の推奨れます。
%训练有素的检测器从磁盘加载,以节省时间时,运行% 例子。将此标志设置为true以培训探测器。doTraining = FALSE;如果doTraining%设置培训选项选项= trainingOptions('sgdm',......'minibatchsize', 128,......“InitialLearnRate”,1e-3,......'shownrateschedule',“分段”,......“LearnRateDropFactor”, 0.1,......'LearnRateDropPeriod',100,......'MaxEpochs',100,......'verbose', 真的);训练R-CNN对象检测器。这需要几分钟。rcnn = trainRCNNObjectDetector(stopSigns, cifar10Net, options,......“NegativeOverlapRange”,[0 0.3],“PositiveOverlapRange”(0.5 - 1))其他的%为示例加载预训练网络。加载(“rcnnStopSigns.mat”,'rcnn')结束
R-CNNオブジェクト検出器を使用してイメージ内の一時停止標識を検出できるようになりました。テストイメージで試してみます。
%读取测试图像testImage = imread('stopsigntest.jpg');%检测停止标志[bboxes,分数,标签]=检测(rcnn testImage,'minibatchsize', 128)
Bboxes =.1×4419 147 31 20
分数=单身的0.9955
标签=分类分类停止标志
R-CNNオブジェクトの探测
メソッドは,オブジェクトの境界ボックス,検出スコアおよび各検出のクラスラベルを返します。ラベルは,一时停止标识,対向车优先标识,速度制限标识など,复数のオブジェクトを検出する场合に役立ちます0.0〜1で表されるスコアは検出の信頼度を示し,これを使用して低スコアの検出を无视することができます。
%显示检测结果[得分,Idx] = Max(得分);bbox = bboxes(idx,:);注释= sprintf('%s:(置信度= %f)',标签(IDX),得分);Opersimage = InsertObjectAnnotation(testimage,'长方形'bbox,注释);图imshow (outputImage)
R-CNN検出器内で使用されるネットワークは,テストイメージ全体の处理にも使用できます。ネットワークの入力サイズより大きい,イメージ全体を直接处理することで,分类スコアの2次元ヒートマップを生成できます。これは,ネットワークを混乱させているイメージ内の项目を特定して学习を改善する手挂かりを与えてくれる,便利なデバッグツールになります。
%培训的网络存储在R-CNN检测器内rcnn.network.
ANS = SeriesNetwork与属性:层:[15×1 nnet.cnn.layer.Layer]
ネットワークの14番目の层であるソフトマックス层から激活
(深度学习工具箱)を抽出します。これは,ネットワークがイメージをスキャンするときに生成される分类スコアです。
featureMap =激活(rcnn.Network,testImage,14);%SoftMax激活存储在3-D阵列中。大小(featureMap)
ans =1×343 78 2
featureMapの3番目の次元はオブジェクトクラスに対応します。
rcnn.classnames.
ans =2×1个细胞{ 'stopSign'} { '背景'}
一時停止標識の特徴マップは,最初のチャネルに保存されています。
stopSignMap = featureMap(:,:, 1);
アクティベーションのの力量のは,ネットワークでのダウンサンプリング操作用によってによってイメージ小さくなります。可以性を向向するは,stopSignMap
のサイズを入力イメージのサイズに変更します。これはアクティベーションをイメージピクセルにマッピングする非常に大まかな近似であり,図示のみを目的として使用します。
%调整stopSignMap大小以实现可视化[高度,宽度,〜] =尺寸(testimage);stopsignmap = imresize(stopsignmap,[高度,宽度]);%形象化的特征地图叠加试验图像上。featuremaponimage = imfuse(testimage,stopsignmap);图imshow(featuremaponimage)
テストイメージ内の一时停止标识は,ネットワークアクティベーションの最大ピークにうまく対応しています。これにより,R-CNN検出器内で使用されているCNNが実际に一时停止标识を特定できるようになったことを确认できます。他のピークがある场合,误検知を防ぐため,学习に追加のネガティブデータが必要になることがあります。このような场合には,trainingOptionsで 'MaxEpochs' の値を大きくして再学习を行います。
この例では,CIFAR-10データで学習済みのネットワークを使用してR-CNN一時停止標識オブジェクト検出器を学習させる方法を説明しました。深層学習を使用して他のオブジェクト検出器の学習を行う際にも,同様の手順に従ってください。
[1] Girshick,R.,J.多纳,T.达雷尔,和J.马立克。“丰富的功能层次结构的精确物体检测及语义分割。”2014年IEEE计算机视觉和模式识别会议的诉讼程序.哥伦布,哦,2014年6月,第580-587页。
[2]邓,J.,W. Dong,R. Socher,L.-J。李,李,李,李飞飞。“想象:一个大规模的分层图像数据库。”2009年IEEE计算机愿景和模式识别会议的诉讼程序.佛罗里达州迈阿密,2009年6月,第248-255页。
[3] Krizhevsky,A.,和G.欣顿。“学习从微小的图像特征多层。”硕士论文。多伦多,加拿大多伦多,2009年大学。
[4] https://code.google.com/p/cuda-convnet/
探测
|fasterrcnnobjectdetector.
|fastRCNNObjectDetector
|rcnobjectdetector
|TRATHFASTERRCNNOOBJECTDETECTOR.
|trainfastrcnnobjectdetector.
|trainRCNNObjectDetector
|激活
(深度学习工具箱)|分类
(深度学习工具箱)|trainingOptions
(深度学习工具箱)|trainNetwork
(深度学习工具箱)