主要内容

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

猪特徴を使用した数字の分類

この例では,猪特徴およびマルチクラスSVM分類器を使用して数字を分類する方法を説明します。

オブジェクトの分類は,監視,自動車安全性,イメージの検索など,多くのコンピュータービジョンアプリケーションにおいて重要なタスクです。たとえば,自動車安全性アプリケーションでは,近くのオブジェクトを歩行者や車両として分類しなければならないことがあります。分類するオブジェクトのタイプにかかわらず,オブジェクト分類器を作成する基本的な手順は次のようになります。

  • 対象オブジェクトのイメージを含むラベル付きデータセットを取得する。

  • データセットを学習セットとテストセットに分割する。

  • 学習セットから抽出された特徴を使用して分類器に学習を行わせる。

  • テストセットから抽出された特徴を使用して分類器をテストする。

説明のために,この例では猪(勾配方向ヒストグラム)特徴[1]とマルチクラスのSVM(サポートベクターマシン)分類器を使用して数字を分類する方法を示します。このタイプの分類は,多くの光学式文字認識(OCR)アプリケーションでよく使用されます。

この例では、统计和机器学习工具箱™の関数fitcecoc计算机视觉および工具箱™の関数extractHOGFeaturesを使用します。

数字のデータセット

学習には数字の合成イメージが使用されます。各学習用イメージでは,1つの数字が他の数字に囲まれています。これは,複数の数字が通常目にされる状態を模倣したものです。合成イメージを使用すると,さまざまな学習サンプルを作成でき,手作業で集める必要がなくなるので便利です。テストでは手書きの数字のスキャン画像を使用して,学習データとは異なるデータに対する分類器のパフォーマンスを検証します。これは最も典型的なデータセットではありませんが,分類器の学習とテストを行い,この方法の実行可能性を示すうえで十分なデータが含まれています。

使用|imageDatastore|加载训练和测试数据。syntheticDir = fullfile (toolboxdir (“愿景”),“visiondata”“数字”“合成”);handwrittenDir = fullfile (toolboxdir (“愿景”),“visiondata”“数字”“手写”);% |imageDatastore|递归扫描包含%的图像。文件夹名称将自动用作每个图像的标签。trainingSet = imageDatastore (syntheticDir,“IncludeSubfolders”,真的,“LabelSource”“foldernames”);testSet = imageDatastore (handwrittenDir,“IncludeSubfolders”,真的,“LabelSource”“foldernames”);

countEachLabelを使用して,それぞれのラベルに関連付けられているイメージの数を集計します。この例の学習セットは,10個の数字それぞれにつき101枚のイメージで構成されています。テストセットは数字ごとに12枚のイメージで構成されています。

countEachLabel (trainingSet)
ans =10×2表标签数_____ _____ 0 101 1 101 2 101 3 101 4 101 5 101 6 101 7 101 8 101 9 101
countEachLabel (testSet)
ans =10×2表标签数_____ _____ 0 12 1 12 2 12 3 12 4 12 5 12 6 12 7 12 8 12 9 12

一部の学習イメージおよびテストイメージを表示します。

图;次要情节(2、3、1);imshow (trainingSet.Files {102});次要情节(2、3、2);imshow (trainingSet.Files {304});次要情节(2、3、3);imshow (trainingSet.Files {809});次要情节(2、3、4);imshow (testSet.Files {13});次要情节(2、3、5); imshow(testSet.Files{37}); subplot(2,3,6); imshow(testSet.Files{97});

分類器の学習とテストを行う前に,前処理手順を適用してイメージサンプルの収集時に取り込まれたノイズアーティファクトを削除します。これにより,分類器の学習用により適した特徴ベクトルが得られます。

显示预处理结果exTestImage = readimage (testSet, 37);processedImage = imbinarize (im2gray (exTestImage));图;subplot(1,2,1) imshow(exTestImage) subplot(1,2,2) imshow(processediment)

猪特徴の使用

分類器の学習に使用するデータは,学習イメージから抽出した猪特徴ベクトルです。したがって,猪特徴ベクトルではオブジェクトに関する適量の情報を必ずエンコードすることが重要です。関数extractHOGFeaturesは可视化出力を返しますが,これは,“適量の情報”の意味を大まかに把握する助けとなります。猪のセルサイズパラメーターを変化させて結果を可視化すると,特徴ベクトルにエンコードされる形状情報の量に対する,セルサイズパラメーターの影響を見ることができます。

img = readimage(trainingSet, 206);提取HOG特征和HOG可视化[hog2x2, vis2x2] = extracthgfeatures (img,“CellSize”(2 - 2));[hog_4x4, vis4x4] = extracthgfeatures (img,“CellSize”4 [4]);[hog_8x8, vis8x8] =“CellSize”[8]);%显示原始图像图;次要情节(2、3、1:3);imshow (img);可视化HOG功能次要情节(2、3、4);情节(vis2x2);标题({'CellSize = [2 2]';(的长度= 'num2str(长度(hog_2x2))]});次要情节(2、3、5);情节(vis4x4);标题({'CellSize = [4 4]';(的长度= 'num2str(长度(hog_4x4))]});次要情节(2、3、6);情节(vis8x8);标题({'CellSize = [8 8]';(的长度= 'num2str(长度(hog_8x8))]});

可視化から,[8]のセルサイズでは形状情報があまりエンコードされず,[2 2]のセルサイズでは大量の形状情報がエンコードされるものの猪特徴ベクトルの次元が大幅に増えることがわかります。適切な妥協点は4行4列のセルサイズとなります。このサイズ設定では,数字の形状を視覚的に特定する十分な空間情報をエンコードできると同時に,猪特徴ベクトルの次元数を抑えて学習速度を上げることができます。実際には,猪パラメーターを変化させながら分類器の学習とテストを繰り返して,最適なパラメーター設定を見つけます。

cellSize = [4 4];hogFeatureSize =长度(hog_4x4);

数字分類器の学習

数字の分類はマルチクラス分類の問題であり,あるイメージを,10個のとりうる数字のクラスのうち1つに分類しなければなりません。この例では统计和机器学习工具箱™の関数fitcecocを使用して,バイナリSVMを用いたマルチクラス分類器を作成します。

はじめに,学習セットから猪特徴を抽出します。これらの特徴は分類器の学習に使用されます。

%循环训练集并从每幅图像中提取HOG特征。一个将使用类似的过程从testSet中提取特征。numImages =元素个数(trainingSet.Files);trainingFeatures = 0 (numImages hogFeatureSize,“单一”);i = 1:numImages img = readimage(trainingSet,i);img = im2gray (img);%应用预处理步骤img = imbinarize (img);training (i,:) = extractHOGFeatures(img,“CellSize”, cellSize);结束为每个图像获取标签。trainingLabels = trainingSet.Labels;

次に,抽出した特徴を使用して分類器を学習させます。

% fitcecoc使用SVM学习器和“一vs一”编码方案。classifier = fitcecoc(trainingFeatures, trainingLabels);

数字分類器の評価

テストセットからのイメージを使用して数字分類器を評価し,分類器の精度を定量化する混同行列を生成します。

学習手順と同じように,まずテストイメージから猪特徴を抽出します。これらの特徴は,学習済みの分類器を使用して予測を行うのに使用されます。

%从测试集中提取HOG特征。程序是类似什么%已在前面显示过,并被封装为一个辅助函数以方便使用。[testFeatures, testLabels] = helperExtractHOGFeaturesFromImageSet(testSet, hogFeatureSize, cellSize);%使用测试特性进行类预测。predictedLabels = predict(分类器,testFeatures);用混淆矩阵将结果制成表格。confMat = confconfmat (testLabels, predictedLabels);helperDisplayConfusionMatrix (confMat)
数字| 0 1 2 3 4 5 6 7 8 9  --------------------------------------------------------------------------------------------------- 0 | 0.25 0.00 0.08 0.00 0.00 0.00 0.58 0.00 0.08 0.00 1 | 0.00 0.75 0.00 0.00 0.08 0.00 0.00 0.08 0.08 0.00 - 2 | 0.00 0.00 0.67 0.17 0.00 0.00 0.08 0.00 0.00 0.08 - 3 | 0.00 0.00 0.00 0.58 0.00 0.00 0.33 0.00 0.00 0.08 - 4 |0.00 0.08 0.00 0.17 0.75 0.00 0.00 0.00 0.00 0.00 - 5 | 0.00 0.00 0.00 0.00 0.00 0.33 0.58 0.00 0.08 0.00 6 | 0.00 0.00 0.00 0.00 0.25 0.00 0.67 0.00 0.08 0.00 7 | 0.00 0.08 0.08 0.33 0.00 0.00 0.17 0.25 0.00 0.08 8 | 0.00 0.00 0.00 0.08 0.00 0.00 0.00 0.08 0.67 0.17 9 | 0.00 0.08 0.00 0.25 0.17 0.00 0.08 0.00 0.00 0.42

この表は混同行列をパーセンテージ形式で示しています。行列の各列は予測されたラベルを表し,各行は既知のラベルを表します。このテストセットでは数字0が誤って6として分類されることが多く,これは形状の類似が原因であると推測されます。9と3の場合にも同様のエラーが見られます。MNIST[2]やSVHN[3]のように何千という手書きの文字を含む,より典型的なデータセットを使って学習させれば,この合成データセットを使って作成されたものより優れた分類器が作成される可能性は高くなります。

まとめ

この例では,计算机视觉工具箱の関数extractHOGfeaturesおよび统计和机器学习工具箱™の関数fitcecocを使用してマルチクラスのオブジェクト分類器を作成する基本的な手順について説明しました。ここでは猪特徴とECOC分類器を使用しましたが,他の特徴や機械学習アルゴリズムを同じように使用することも可能です。たとえば,分類器の学習に異なる特徴タイプを使って調べたり,统计和机器学习工具箱™で利用できるk近傍法のような他の機械学習アルゴリズムを使用した場合の効果を確認することができます。

サポート関数

函数helperDisplayConfusionMatrix (confMat)%在格式化的表格中显示混淆矩阵。将混淆矩阵转换为百分比形式confMat = bsxfun (@rdivide confMat, sum (confMat, 2));数字=' 0 '“9”;colHeadings = arrayfun (@ (x) sprintf (' % d ', 0:9 x)“UniformOutput”、假);格式= repmat (' % 9 s '1、11);头= sprintf(格式,“数字|”, colHeadings {:});流(' \ n % s \ n % s \ n”头,repmat ('-'、大小(头)));Idx = 1:num(数字)fprintf(' % 9 s ',(数字(idx)“|”]);流(' % -9.2 f 'confMat (idx:));流(' \ n '结束结束
函数[features, setLabels] = helperExtractHOGFeaturesFromImageSet(imds, hogFeatureSize, cellSize)%从imageDatastore提取HOG特性。setLabels = imds.Labels;numImages =元素个数(imds.Files);特点= 0 (numImages hogFeatureSize,“单一”);%处理每个图像并提取特征j = 1:numImages img = readimage(imds,j);img = im2gray (img);%应用预处理步骤img = imbinarize (img);= extractHOGFeatures(img,“CellSize”, cellSize);结束结束

参考文献

[1] N. Dalal和B. Triggs,“面向人脸检测的直方图”,计算机视觉与模式识别,vol. 1, pp. 886-893, 2005。

[2] LeCun, Y., botou, L., Bengio, Y., and Haffner, P.(1998)。梯度学习在文档识别中的应用。IEEE学报,86,2278-2324。

[3] Y. Netzer, T. Wang, A. Coates, A. Bissacco, B. Wu, A.Y. Ng,基于无监督特征学习的自然图像数字阅读技术NIPS Workshop on Deep Learning and Unsupervised Feature Learning 2011。