セマンティックセグメンテーションに使用するデータセットについて
2 次查看(过去 30 天)
显示 更早的评论
2つのデータセットを組み合わせたセマンティックセグメンテーションについて質問があります。
「深層学習を使用したセマンティックセグメンテーション」
において使用されているCamVidデータセットからランダムに200枚を選択、そして貴社のアドオンアプリのグランドトゥルースラベラーを用いて作成した200枚程度のオリジナル画像を合わせた、合計400枚程のデータでセマンティックセグメンテーションを行いました。
グランドトゥルースラベラーで作成したオリジナルピクセルラベルイメージデータはグレースケールになっており、ビット深さが8のチャンネル数が1になっています。
pixelLabelDatastoreを使用してピクセルラベルイメージデータを読み込む際、そのピクセルラベルイメージデータのビット深さ(チャンネル数)が共通でないとエラーが出てしまう為、作成したピクセルラベルイメージデータのビット深さを、CamVidデータセットのピクセルラベルイメージと同様に24ビット(3チャンネル)に再作成しました。以下がその時使用したコードです。
rootFile = fullfile('C:\','Users','yohu-','OneDrive','デスクトップ');
imDir = fullfile(rootFile,'imageLabel');
imds = imageDatastore(imDir);%グレースケール画像データストア
for v = 1:1:173 %画像枚数
Y = readimage(imds,v); %イメージ読み込み
Y2 = imresize(Y,[720,960]);
[G] = imsplit(Y2); %グレースケールのピクセル値を取得
Y2 = cat(3,G,G,G); %ピクセル値を3次元行列として連結
s = num2str(v); %インクリメント変数Vを文字列に変換
str = [s,'.png']; %変換した文字列と拡張子文字列を連結
newstr = join(str);
imwrite(Y2,newstr); %指定した文字列のイメージファイルの保存
end
そして、学習時に参照させるクラスをCamVidデータセットとオリジナルデータセットで分けたかったので、CamVidデータセットからはSky,Pole,Pavement,Tree,SignSymbol,Fence,Car,Pedestrian,Bicyclistクラスを参照し、グランドトゥルースラベラーで作成したデータセットからBuilding,Roadクラスを参照するようにしました。
参照方法は「深層学習を使用したセマンティックセグメンテーション」で用いられた方法と同様に、ピクセルラベルIDをRGBカラー値に対応させた方法を行いました。
以下がそのピクセルラベルIDです。
function labelIDs = camvidPixelLabelIDs()
labelIDs = { ...
% "Sky"
[
128 128 128; ... % "Sky"
]
% "Building"
[
002 002 002;
]
% "Pole"
[
192 192 128; ... % "Column_Pole"
000 000 064; ... % "TrafficCone"
]
% Road
[
004 004 004;
]
% "Pavement"
[
000 000 192; ... % "Sidewalk"
064 192 128; ... % "ParkingBlock"
128 128 192; ... % "RoadShoulder"
]
% "Tree"
[
128 128 000; ... % "Tree"
192 192 000; ... % "VegetationMisc"
]
% "SignSymbol"
[
192 128 128; ... % "SignSymbol"
128 128 064; ... % "Misc_Text"
000 064 064; ... % "TrafficLight"
]
% "Fence"
[
064 064 128; ... % "Fence"
]
% "Car"
[
064 000 128; ... % "Car"
064 128 192; ... % "SUVPickupTruck"
192 128 192; ... % "Truck_Bus"
192 064 128; ... % "Train"
128 064 064; ... % "OtherMoving"
]
% "Pedestrian"
[
064 064 000; ... % "Pedestrian"
192 128 064; ... % "Child"
064 000 192; ... % "CartLuggagePram"
064 128 064; ... % "Animal"
]
% "Bicyclist"
[
000 128 192; ... % "Bicyclist"
192 000 192; ... % "MotorcycleScooter"
]
};
end
グランドトゥルースラベラーで作成した時、ピクセルラベルイメージのBuildingとRoadのグレースケール値がそれぞれ2と4だったので、それに合わせてピクセルラベルでも参照できるようにBuildingとRoadクラスだけデフォルトから変更しています。
上記URL「深層学習を使用したセマンティックセグメンテーション」のソースコードとほぼ同様に作成していたので、このピクセルラベル参照設定と、imageDatastoreとpixelDatastoreの参照先しかソースコードには変更を加えていません。
しかし、学習を実行してみると精度が45%程度からほぼ横ばいに停滞してしまい、学習精度が上がりませんでした。
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/306247/image.jpeg)
ピクセルラベルの参照方法やデータストアのソート順に問題があるのでしょうか。
そもそもピクセルラベルイメージ仕様が異なるデータを合わせた学習自体が不可能なのでしょうか。
ご教授お願い致します。
0 个评论
采纳的回答
Kenta
2020-6-18
こんにちは、セマンティックセグメンテーションはいろいろと手続きが必要で、複雑ですよね。さっと思い当たるのは、1)スパイクが結構多いので、SGDなら初期学習率、ADAMならベースの学習率が大きいので小さくしてみてはどうか?
2)おそらくクラス間で重みづけをしているようで、クラス間のバランス(cost sensitive learningのようなもの)を解除して、均一な重みづけで学習してはどうか?
3)RGBラベルでやっているようですが、そこで何らかのエラーがあるのかもしれません。ラベルIDでも可能なのでそちらでやってみてもいいかもしれません。わかりにくいかもしれませんが、一応ここにラベルIDでやったコードを公開しています。参考になればうれしいです。
2 个评论
Kenta
2020-6-21
ご報告ありがとうございます。精度が上昇への取り組み、お疲れ様でした。また10枚ほどでも添付いただけたらこちらでも見ておきます。IDの割り当てなど予期せぬ間違いがあるのかもしれません。
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!