このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,深層学習ワークフローの一環として,MATLAB®および图像处理工具箱™が一般的な種類のイメージ拡張をどのように実行できるかを示します。
图像处理工具箱関数により,一般的なスタイルのイメージ拡張の実装が可能になります。この例では,5種類の一般的な変換を示します。
その後,この例では,複数の種類の変換を組み合わせて,デタストア内のメジデタに対する拡張の適用を実行する方法を示します。
拡張した学習デ,タを使用してネットワ,クに学習させることができます。拡張した▪▪メ▪▪ジを使用してネットワ▪クに学習させる例に▪▪いては图片对图片回帰用のデ,タストアの準備を参照してください。
サンプル▪▪メ▪▪ジを読み取って表示します。各種メジ拡張の効果を比較するために,各変換において同じ入力メジを使用します。
imOriginal = imread(“kobi.png”);imshow (imOriginal)
関数randomAffine2d
(图像处理工具箱)は,回転,平行移動,スケーリング(サイズ変更),反転,せん断を組み合わせてランダムな2次元アフィン変換を作成します。含める変換,および変換パラメ,タ,の範囲を指定できます。範囲を2要素の数値ベクトルとして指定する場合,randomAffine2d
は,指定された間隔の一様な確率分布からパラメ,タ,の値を選択します。パラメ,タ,値の範囲をより細かく制御するには,関数ハンドルを使用して範囲を指定できます。
関数affineOutputView
(图像处理工具箱)を使用して,imwarp
(图像处理工具箱)によって作成されたワプ済みメジの空間範囲と空間分解能を制御します。
(-45年,45)度の範囲でランダムに選択した角度によって入力イメージを回転する,ランダムな回転変換を作成します。
tform = randomAffine2d(“旋转”45, [-45]);outputView = affineOutputView(size(imOriginal),tform);imAugmented = imwarp(imOriginal,tform,“OutputView”, outputView);imshow (imAugmented)
(-50年,50)ピクセルの範囲からランダムに選択した距離によって入力イメージを水平および垂直にシフトする,平行移動変換を作成します。
tform = randomAffine2d(“XTranslation”50 [-50],“YTranslation”, 50 [-50]);outputView = affineOutputView(size(imOriginal),tform);imAugmented = imwarp(imOriginal,tform,“OutputView”, outputView);imshow (imAugmented)
[1.2, 1.5]の範囲でランダムに選択したスケール係数を使用して入力イメージのサイズを変更する,スケール変換を作成します。この変換は,水平方向と垂直方向に同じ係数を使用して@ @ @ジのサ@ @ @ @ @ @ @
tform = randomAffine2d(“规模”[1.2, 1.5]);outputView = affineOutputView(size(imOriginal),tform);imAugmented = imwarp(imOriginal,tform,“OutputView”, outputView);imshow (imAugmented)
各次元において50%の確率で入力メジを反転する,鏡映変換を作成します。
tform = randomAffine2d(“XReflection”,真的,“YReflection”,真正的);outputView = affineOutputView(size(imOriginal),tform);imAugmented = imwarp(imOriginal,tform,“OutputView”, outputView);imshow (imAugmented)
[- 30,30]の範囲からランダムに選択したせん断角度で,水平方向のせん断変換を作成します。
tform = randomAffine2d(“XShear”[-30] 30日);outputView = affineOutputView(size(imOriginal),tform);imAugmented = imwarp(imOriginal,tform,“OutputView”, outputView);imshow (imAugmented)
上記の変換では,変換パラメ,タ,の範囲を2要素の数値ベクトルによって指定しました。変換パラメ,タ,の範囲をより細かく制御するには,数値ベクトルの代わりに関数ハンドルを指定できます。関数ハンドルは入力引数を取らず,各パラメ,タ,に有効な値を提供します。
たとえば,次のコ,ドは,回転角度90度の離散セットから回転角度を選択します。
角度= 0:90:270;tform = randomAffine2d(“旋转”@()角度(randi (4)));outputView = affineOutputView(size(imOriginal),tform);imAugmented = imwarp(imOriginal,tform,“OutputView”, outputView);imshow (imAugmented)
幾何学的変換を使用してイメージをワープする場合,出力イメージのピクセルは,入力イメージの境界外の位置にマッピングされることがあります。その場合,imwarp
は,出力ぶしの値を割り当てます。既定では,imwarp
は塗りぶしの値に黒を選択します。“FillValues”
で名前と値のペアの引数を指定して,塗りぶしの値を変更できます。
ランダムな回転変換を作成し,その変換を適用して塗りぶしの値にグレを指定します。
tform = randomAffine2d(“旋转”45, [-45]);outputView = affineOutputView(size(imOriginal),tform);imAugmented = imwarp(imOriginal,tform,“OutputView”outputView,“FillValues”,[128 128 128]);imshow (imAugmented)
目的のサ▪▪ズの出力▪▪メ▪ジを作成するには,関数randomWindow2d
(图像处理工具箱)と関数centerCropWindow2d
(图像处理工具箱)を使用します。メ,ジ内の目的の内容が含まれるように注意してウィンドウを選択してください。
トリミングした領域の目的のサ电子邮箱ズを,[高さ,幅]の形式の2要素ベクトルとして指定します。
targetSize = [200,100];
。
win = centerCropWindow2d(size(imOriginal),targetSize);imCenterCrop = imcrop(imOriginal,win);imshow (imCenterCrop)
。
win = randomWindow2d(size(imOriginal),targetSize);imRandomCrop = imcrop(imOriginal,win);imshow (imRandomCrop)
関数jitterColorHSV
(图像处理工具箱)を使用することにより,カラーイメージの色相,彩度,明度,およびコントラストをランダムに調整できます。含める色変換,および変換パラメ,タ,の範囲を指定できます。
基本的な算術演算を使用することにより,グレースケールイメージの明度とコントラストをランダムに調整できます。
色相は,色の陰影,またはカラ,ホ。色相が0から1まで変化するにつれて,色は赤から黄,緑,シアン,青,紫,マゼンタ,黒と変わり赤に戻ります。色相ジッタ,は;
[0.05, 0.15]の範囲でランダムに選択した小さな正のオフセットにより,入力イメージの色相を調整します。たとえば,赤だった場所がオレンジまたは黄に近づいて見え,オレンジだった場所が黄または緑に見えます。
imjitter = jitterColorHSV(imOriginal,“颜色”[0.05 - 0.15]);蒙太奇({imOriginal, imJittered})
彩度は色の純度です。彩度が0から1まで変化するにつれて,色相はグレー(すべての色の混合を示す)から単一の純色に変化します。彩度ジッタ,は,色の暗さまたは鮮やかさをシフトします。
[-0.4, -0.1]の範囲でランダムに選択したオフセットにより,入力イメージの彩度を調整します。彩度が下がると,予期したとおり出力。
imjitter = jitterColorHSV(imOriginal,“饱和”[-0.4 - -0.1]);蒙太奇({imOriginal, imJittered})
明度は,色相の量です。明度が0から1まで変化するにれて,色は黒から白に変化します。明度ジッタ,は,入力,メ,ジの暗さと明るさをシフトします。
[-0.3, -0.1]の範囲でランダムに選択したオフセットにより,入力イメージの明度を調整します。明度が下がると,予期したとおり。
imjitter = jitterColorHSV(imOriginal,“亮度”[-0.3 - -0.1]);蒙太奇({imOriginal, imJittered})
コントラストジッタ,は,入力,メ,ジの最も暗い領域と最も明るい領域の差異をランダムに調整します。
[1.2, 1.4]の範囲でランダムに選択したスケール係数により,入力イメージのコントラストを調整します。コントラストが強まると,影はより暗くなり,ハ。
imjitter = jitterColorHSV(imOriginal,“对比”[1.2 - 1.4]);蒙太奇({imOriginal, imJittered})
基本的な算術演算を使用することにより,ランダムな明度ジッターとコントラストジッターをグレースケールイメージに適用できます。
サンプルメジをグレスケルに変換します。ランダムなコントラストスケール係数を[0.8,1]の範囲で指定し,ランダムな明度オフセットを[-0.15,0.15]の範囲で指定します。。
imGray = rgb2gray(im2double(imOriginal));对比因子= 1-0.2*rand;brightnessOffset = 0.3*(rand-0.5);imJittered = imGray。*对比度因子+ brightnessOffset;imjitter = im2uint8(imjitter);蒙太奇({imGray, imJittered})
色拡張の1タイプでは,ネットワークに必要なチャネル数を保持しながら,RGBイメージから色情報をランダムに破棄します。次のコ,ドは"ランダムグレ,スケ,ル"変換を示します。ここではRGBイメージが80%の確率で3チャネルの出力イメージ(R = = G = = B)にランダムに変換されます。
概率= 0.8;如果rand <= desiredProbability imjitter = repmat(rgb2gray(imOriginal),[1 1 3]);结束imshow (imJittered)
関数变换
を使用して、图像处理工具箱関数の任意の組み合わせを入力イメージに適用します。ノイズとぼかしの追加は,深層学習アプリケーションで使用される一般的なイメージ処理演算のうちの2つです。
合成ノ▪▪ズを入力▪▪メ▪ジに適用するには,関数imnoise
(图像处理工具箱)を使用します。ガウスノイズ,ポアソンノイズ,ごま塩ノイズ,乗法性ノイズなど,使用するノイズモデルを指定できます。ノ@ @ズの強度を指定することもできます。
imSaltAndPepperNoise = imnoise(imOriginal,“盐和胡椒”, 0.1);imGaussianNoise = imnoise(imOriginal,“高斯”);蒙太奇({imSaltAndPepperNoise, imGaussianNoise})
ランダムなガウスぼかしをimgaussfilt
(图像处理工具箱)を使用します。平滑化の量を指定できます。
Sigma = 1+5*rand;imblur = imgaussfilt(imOriginal,sigma);imshow (imBlurred)
実用的な深層学習の問題においては,通常,。デ,タストアは;
デ,タストアは;例のこのセクションでは、イメージ分類およびイメージ回帰の問題のための学習のコンテキストでデータストアを拡張する、データ拡張パイプラインの定義方法を示します。
まず,未処理のimageDatastore
を作成します。この例のメジデタストアには,ラベル付きの数字のメジが含まれています。
digitDatasetPath = fullfile(matlabroot,“工具箱”,“nnet”,...“nndemos”,“nndatasets”,“DigitDataset”);imds = imageDatastore(digitDatasetPath,...“IncludeSubfolders”,真的,...“LabelSource”,“foldernames”);洛桑国际管理发展学院。ReadSize = 6;
イメージ分類では,イメージにランダムな変更が加えられていても,これが依然として同じイメージクラスを表していることを分類器が学習しなければなりません。イメージ分類のためにデータを拡張するには,対応するカテゴリカルラベルに変更を加えずに入力イメージを拡張するだけで十分です。
ランダムなガウスぼかし,ごま塩ノイズ,およびランダムなスケーリングと回転を使用して,初期状態のイメージデータストア内のイメージを拡張します。これらの演算は,この例の終わりにある補助関数classificationAugmentationPipeline
で定義されます。関数变换
を使用して,学習デ,タにデ,タ拡張を適用します。
dsTrain = transform(imds,@classificationAugmentationPipeline,“IncludeInfo”,真正的);
拡張されたパ▪▪プラ▪▪ンからの出力のサンプルを可視化します。
dataPreview =预览(dsTrain);蒙太奇(dataPreview(: 1)标题(用于图像分类的增强图像)
image-to-image回帰のイメージ拡張は入力イメージと応答イメージに対して同一の幾何学的変換を適用しなければならないため,さらに複雑です。関数结合
。関数变换
を使用して,各ペアの一方または両方の。
イメージデータストア洛桑国际管理发展学院
の同一な2のコピを結合します。結合したデータストアからデータを読み取ると,イメージデータが2列の细胞配列で返されます。ここで最初の列はネットワークの入力イメージを表し,2番目の列にはネットワークの応答が格納されます。
dsCombined = combine(imds,imds);蒙太奇(预览(dsCombined) ',“大小”,[6 2])增强前的组合输入和响应对)
一連のメジ処理演算を使用して,学習メジの各ペアを拡張します。
入力ズを32 × 32ピクセルに変更。
入力▪▪メ▪▪ジにのみごま塩ノ▪▪ズを付加。
スケ,ルと回転をランダムに行う変換を作成。
入力メジと応答メジに同じ変換を適用。
これらの演算は,この例の終わりにある補助関数imageRegressionAugmentationPipeline
で定義されます。関数变换
を使用して,学習デ,タにデ,タ拡張を適用します。
dsTrain = transform(dsCombined,@imageRegressionAugmentationPipeline);蒙太奇(预览(dsTrain) ',“大小”,[6 2])“增强后的组合输入和响应对”)
图片对图片回帰ネットワ,クの学習と評価に関する詳細な例に,いては,图片对图片回帰用のデ,タストアの準備を参照してください。
補助関数classificationAugmentationPipeline
は,分類用に。dataIn
とdataOut
は2要素の细胞配列で,最初の要素がネットワークの入力イメージ,2番目の要素がカテゴリカルラベルです。
函数[dataOut,info] = classificationAugmentationPipeline(dataIn,info) dataOut = cell([size(dataIn,1),2]);为idx = 1:size(dataIn,1) temp = dataIn{idx};添加随机高斯模糊Temp = imgaussfilt(Temp,1.5*rand);添加盐和胡椒的噪音Temp = imnoise(Temp,“盐和胡椒”);添加随机旋转和缩放tform = randomAffine2d(“规模”[0.95, 1.05],“旋转”[-30] 30日);outputView = affineOutputView(大小(temp),tform);Temp = imwarp(Temp,tform,“OutputView”, outputView);trainNetwork期望的第二列是期望的响应,%在这种情况下的分类标签dataOut(idx,:) = {temp,info.Label(idx)};结束结束
補助関数imageRegressionAugmentationPipeline
は,image-to-image回帰用にメジを拡張します。dataIn
とdataOut
は2要素のcell配列です。配列の最初の要素はネットワクの入力メジで,2番目の要素はネットワクの応答メジです。
函数dataOut = imageRegressionAugmentationPipeline(dataIn) dataOut = cell([size(dataIn,1),2]);为idx = 1:size(dataIn,1)将图像大小调整为32x32像素,并转换为数据类型单一inputImage = im2single(imresize(dataIn{idx,1},[32 32]));targetImage = im2single(imresize(dataIn{idx,2},[32 32]));添加盐和胡椒的噪音inputImage = imnoise(inputImage“盐和胡椒”);添加随机旋转和缩放tform = randomAffine2d(“规模”[0.9, 1.1],“旋转”[-30] 30日);outputView = affineOutputView(size(inputImage),tform);使用imwarp和相同的tform和outputView来增强两个图像%同样的inputImage = imwarp(inputImage,tform,“OutputView”, outputView);targetImage = imwarp(targetImage,tform,“OutputView”, outputView);dataOut(idx,:) = {inputImage,targetImage};结束结束