主要内容

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

深層学習を使用したイメージ カテゴリの分類

この例では、事前学習済みの畳み込みニューラル ネットワーク (美国有线电视新闻网)を特徴抽出器として使用して、イメージ カテゴリ分類器を学習させる方法を説明します。

概要

畳み込みニューラル ネットワーク (美国有线电视新闻网)は、深層学習の分野の強力な機械学習手法です。有线电视新闻网はさまざまなイメージの大規模なコレクションを使用して学習します。有线电视新闻网は、これらの大規模なコレクションから広範囲のイメージに対する豊富な特徴表現を学習します。これらの特徴表現は、多くの場合、猪、腰背痛または 冲浪などの手作業で作成した特徴より性能が優れています。学習に時間や手間をかけずに 有线电视新闻网の能力を活用する簡単な方法は、事前学習済みの 有线电视新闻网を特徴抽出器として使用することです。

この例では、花卉数据集[5]からのイメージを、そのイメージから抽出した 有线电视新闻网の特徴量で学習されたマルチクラスの線形 支持向量机でカテゴリに分類します。このイメージ カテゴリの分類のアプローチは、イメージから特徴抽出した市販の分類器を学習する標準的な手法に従っています。たとえば、特征袋を使用したイメージ カテゴリの分類の例では、マルチクラス 支持向量机を学習させる 特征袋のフレームワーク内で 冲浪特徴量を使用しています。ここでは 猪や 冲浪などのイメージ特徴を使用する代わりに、有线电视新闻网を使って特徴量を抽出する点が異なります。

メモ:この例には,深度学习工具箱™、统计和机器学习工具箱™および深度学习工具箱™模型ResNet-50网络が必要です。

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

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

カテゴリ分類器は 花卉数据集[5]からのイメージで学習を行います。

%压缩数据集的位置网址='http://download.tensorflow.org/example_images/flower_photos.tgz'%将输出保存在临时文件夹中downloadFolder = tempdir;文件名= fullfile (downloadFolder,“flower_dataset.tgz”);

メモ:データのダウンロードにかかる時間はインターネット接続の速度によって異なります。次の一連のコマンドはMATLABを使用してデータをダウンロードし,MATLABをブロックします。別の方法として、Webブラウザーを使用して,データセットをローカルディスクにまずダウンロードしておくことができます。Webからダウンロードしたファイルを使用するには,上記の変数的outputFolderの値を,ダウンロードしたファイルの場所に変更します。

%未压缩数据集imageFolder=fullfile(下载文件夹,‘花卉照片’);如果~存在(imageFolder“dir”%只下载一次disp('正在下载花卉数据集(218MB)…');websave(文件名、url);解压(文件名,downloadFolder)终止

イメージの読み込み

データを管理しやすいようImageDatastoreを使用してデータセットを読み込みます。ImageDatastoreはイメージファイルの場所で動作するため,イメージを読み取るまでメモリに読み込まれません。したがって,大規模なイメージコレクションを効率的に使用できます。

imd = imageDatastore (imageFolder,“LabelSource”“foldernames”“包含子文件夹”,真正的);

下記では、データセットに含まれる 1.つのカテゴリからのイメージ例を見ることができます。表示されるイメージは、马里奥によるものです。

为每个类别找到图像的第一个实例黛西=找到(imd)。标签= =“黛西”,1);图imshow(读取图像(imds,雏菊))

ここで,変数洛桑国际管理发展学院には,イメージとそれぞれのイメージに関連付けられたカテゴリラベルが含められます。ラベルはイメージファイルのフォルダー名から自動的に割り当てられます。countEachLabelを使用して,カテゴリごとのイメージの数を集計します。

tbl=计数标签(imds)
台=5×2表标签计数__________ _____雏菊633蒲公英898玫瑰641向日葵699郁金香799

上記の洛桑国际管理发展学院ではカテゴリごとに含まれるイメージの数が等しくないため,最初に調整することで,学習セット内のイメージ数のバランスを取ります。

%确定一个类别中图像的最小数量minSetCount = min(台{:2});%限制图像数量以减少所需时间%运行此示例。maxNumImages = 100;minSetCount = min (maxNumImages minSetCount);%使用splitEachLabel方法修剪集合。imds=splitEachLabel(imds,分钟计数,“随机”);%注意,现在每个集合有完全相同的图像数量。计数标签(imds)
ans=5×2表标签数量:100朵蒲公英100朵玫瑰100朵向日葵100朵郁金香100朵

事前学習済みのネットワークの読み込み

よく使われる事前学習済みネットワークはいくつかあります。これらの大半はImageNetデータセットで学習されています。このデータセットには1000個のオブジェクトのカテゴリと120年万枚の学習用イメージが含まれています[1]。“ResNet-50はそうしたモデルの1つであり,神经网络工具箱™の関数resnet50を使用して読み込むことができます。resnet50を使用するには,まずresnet50(深度学习工具箱)をインストールする必要があります。

%负荷预训练网络net=resnet50();

ImageNetで学習されたその他のよく使用されるネットワークにはAlexNet, GoogLeNet, VGG-16およびVGG-19[3]があり,深度学习工具箱™のalexnet水壶vgg16vgg19を使用して読み込むことができます。

ネットワークの可視化には、情节を使用します。これは非常に大規模なネットワークであるため、最初のセクションだけが表示されるように表示ウィンドウを調整します。

可视化网络的第一部分。图-地块(净)标题(“ResNet-50的第一部分”)set(gca,“YLim”,[150 170]);

最初の層は入力の次元を定義します。それぞれのCNNは入力サイズの要件が異なります。この例で使用されるCNNには224 x 224 x 3のイメージ入力が必要です。

%检查第一层net.Layers (1)
ans=ImageInputLayer,具有以下属性:名称:'input_1'InputSize:[224 224 3]超参数数据增强:'none'规格化:'zerocenter'规格化维度:'auto'平均值:[224×224×3 single]

中間層はCNNの大半を占めています。ここには,一連の畳み込み層とその間に正規化線形ユニット(ReLU)と最大プーリング層が不規則に配置されています[2]。これらの層に続いて3つの全結合層があります。

最後の層は分類層で,その特性は分類タスクに依存します。この例では,読み込まれたCNNモデルは1000とおりの分類問題を解決するよう学習されています。したがって,分類層にはImageNetデータセットからの1000個のクラスがあります。

%检查最后一层net.Layers(结束)
ans = ClassificationOutputLayer with properties: Name: 'ClassificationLayer_fc1000' Classes: [1000×1 categorical] OutputSize: 1000 Hyperparameters LossFunction: 'crossentropyex'
% ImageNet分类任务的类名数量元素个数(net.Layers(结束).ClassNames)
ans = 1000

このCNNモデルは,元の分類タスクでは使用できないことに注意してください。これは鲜花数据集上の別の分類タスクを解決することを目的としているためです。

学習用イメージセットとテスト用イメージセットの準備

セットを学習データと検証データに分割します。各セットからイメージの30%を学習データに選択し,残る70%を検証データとします。結果が偏らないようにランダムな方法で分割します。学習セットとテストセットはCNNモデルによって処理されます。

[trainingSet, testSet] = splitachlabel (imds, 0.3,“随机”);

CNN用イメージの前処理

前述のとおり、は224行224列のRGBイメージのみ処理できます。すべてのイメージをこの形式で保存し直すのを避けるために,增强图像数据存储を使用してグレースケールイメージのサイズを変更してRGBに随時変換します。增强图像数据存储は、ネットワークの学習に使用する場合は、追加のデータ拡張にも使用できます。

%从训练和测试集创建增强的dimagedatastore以调整大小%将imds中的图像设置为网络所需的大小。图象尺寸= net.Layers (1) .InputSize;augmentedTrainingSet = augmentedImageDatastore(imageSize, trainingSet,“颜色预处理”“gray2rgb”);augmentedTestSet = augmentedImageDatastore(imageSize, testSet,“颜色预处理”“gray2rgb”);

CNNを使用した学習用特徴の抽出

有线电视新闻网の各層は入力イメージに対する応答またはアクティベーションを生成します。ただし、有线电视新闻网内でイメージの特性抽出に適している層は数層しかありません。ネットワークの始まりにある層が、エッジやブロブのようなイメージの基本的特徴を捉えます。これを確認するには、最初の畳み込み層からネットワーク フィルターの重みを可視化します。これにより、有线电视新闻网から抽出された特徴がイメージの認識タスクでよく機能することが直感的に捉えられるようになります。深層の重みの特徴を可視化するには、深度学习工具箱™ の深梦影像を使用します。

%得到第二层卷积层的网络权值w1=净层(2)重量;%缩放权重并调整其大小以实现可视化w1 = mat2gray (w1);w1 = imresize (w1, 5);%显示网络权重的蒙太奇。有96组独立的%第一层中的权重。图蒙太奇(w1)标题(“第一个卷积层权重”

ネットワークの最初の層が,ブロブとエッジの特徴を捉えるためにどのようにフィルターを学習するのかに注意してください。これらの“未熟な”特徴はネットワークのより深い層で処理され,初期の特徴と組み合わせてより高度なイメージ特徴を形成します。これらの高度な特徴は,すべての未熟な特徴をより豊富な1つのイメージ表現に組み合わせたものであるため,認識タスクにより適しています[4]。

激活メソッドを使用して,深層の1つから特徴を簡単に抽出できます。深層のうちどれを選択するかは設計上の選択ですが,通常は分類層の直前の層が適切な開始点となります。ではこの層に‘fc1000という名前が付けられています。この層を使用して学習用特徴を抽出します。

featureLayer =“fc1000”;培训功能=激活(净、增强培训集、功能层、,...“MiniBatchSize”32岁的“输出”“列”);

アクティベーション関数では,GPUが利用可能な場合には自動的にGPUを使用して処理が行われ,GPUが利用できない場合にはCPUが使用されます。

上記のコードでは,CNNおよびイメージデータが必ずGPUメモリに収まるよう‘MiniBatchSizeは32に設定されます。GPUがメモリ不足となる場合は‘MiniBatchSizeの値を小さくする必要があります。また,アクティベーションの出力は列として並んでいます。これにより,その後のマルチクラス線形SVMの学習が高速化されます。

CNN特徴量を使用したマルチクラスSVM分類器の学習

次に,CNNのイメージ特徴を使用してマルチクラスSVM分類器を学習させます。関数fitcecocの“学习者”パラメーターを“线性”に設定することで,高速の確率的勾配降下法ソルバーを学習に使用します。これにより,高次のCNN特徴量のベクトルで作業する際に,学習を高速化できます。

%从培训集获取培训标签培训标签=培训设置标签;%使用快速线性解算器训练多类SVM分类器,并设置% 'ObservationsIn'到'columns'以匹配用于培训的安排%的特性。trainingFeatures, trainingLabels,...“学习者”“线性”“编码”“onevsall”“ObservationsIn”“列”);

分類器の評価

ここまでに使用した手順を繰り返して,测试集からイメージの特徴を抽出します。その後、テスト用の特徴を分類器に渡し、学習済み分類器の精度を測定します。

%使用CNN提取测试特征testFeatures =激活(net, augmentedTestSet, featureLayer,...“MiniBatchSize”32岁的“输出”“列”);%将CNN图像特征传递到训练的分类器predictedLabels=预测(分类器、测试功能、,“ObservationsIn”“列”);%获取已知标签testLabels = testSet.Labels;%使用混淆矩阵将结果制成表格。confMat=confusionmat(测试标签、预测标签);%将混淆矩阵转换为百分比形式confMat = bsxfun (@rdivide confMat, sum (confMat, 2))
confMat =5×50.8571 0.0286 0.0286 0.0714 0.0143 0.0571 0.8286 0 0.0571 0.0571 0.0143 0 0.7714 0.0714 0.1429 0.0286 0.0571 0.0571 0.8000 0.0571 0 0 0.2000 0.0286 0.7714
%显示平均精度平均值(diag(confMat))
ans = 0.8057

学習した分類器の 1.つのテスト イメージに対する適用

学習を行った分類器を適用して新しいイメージを分類します。「デイジー」テスト イメージの 1.つを読み込みます。

testImage = readimage (testSet, 1);testLabel = testSet.Labels (1)
testLabel =明确的雏菊

有线电视新闻网を使用してイメージの特徴を抽出します。

%创建AugmenteImage数据存储,以便在%使用激活提取图像特征。ds=增强图像数据存储(图像大小、测试图像、,“颜色预处理”“gray2rgb”);%使用CNN提取图像特征imageFeatures =激活(net, ds, featureLayer,“输出”“列”);

分類器を使用して予測を行います。

%使用分类器进行预测predictedLabel = predict(分类器,imageFeatures,“ObservationsIn”“列”
predictedLabel =明确的雏菊

参考文献

邓贾,等。Imagenet:一个大规模的分级图像数据库。计算机视觉与模式识别,2009。CVPR 2009。IEEE会议。IEEE 2009。

[2] 克里哲夫斯基、亚历克斯、伊利亚·萨茨基和杰弗里·E·辛顿。“深卷积神经网络的图像网络分类”,《神经信息处理系统的进展》。2012

[3] Simonyan、Karen和Andrew Zisserman。“用于大规模图像识别的非常深的卷积网络”,《arXiv预印本arXiv:1409.1556》(2014)。

多纳休,杰夫等。Decaf:一种用于通用视觉识别的深度卷积激活特征>,arXiv预印本arXiv:1310.1531(2013)。

[5] Tensorflow:如何为新类别重新训练图像分类器

参考

(深度学习工具箱)||(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(统计学和机器学习工具箱)|(统计学和机器学习工具箱)

関連するトピック