グレースケール画像を​ResNet50で分​類すると,画像データ​の与え方でスコアが異​なるのはなぜでしょう​か?

9 ビュー (過去 30 日間)
正樹 長谷川
正樹 長谷川 2021 年 7 月 16 日
回答済み: Kenta 2021 年 7 月 20 日
グレースケール画像(testimagesフォルダに格納)を,ResNet50による分類のために以下の二つの方法で与えたとき,スコアが異なりました。
1)拡張データストアでRGB化した場合の
imdsTest=imageDatastore('testimages')
audsTest=augmentedImageDatastore([224 224],imdsTest,"ColorPreprocessing","gray2rgb");
[PredTest, scoresTest]=classify(net,audsTest);
この結果で1番目の画像に対する予測結果の各クラスのスコア(scoresTest)の値と,
2)プログラムで画像をグレースケールからRGB化した時の
imdsTest=imageDatastore("testimages");
fileNumber=1;
img=readimage(imdsTest,fileNumber);
[xrow,xcol]=size(img);
img2rgb=zeros(xrow,xcol,3);
for i=1:3
img2rgb(:,:,i)=img2;
end
img2rgb=imresize(img2rgb,[224 224]);
[PredTest, scoresTest]=classify(net,img2rgb);
この結果での各クラスのスコア(scoresTest)の値
とが,同じでないのですが何故でしょうか?画像によってはPredTestの結果が異なってしまうケースもあります。
ご存じの方がいらしたら,ご教示お願いします。
  4 件のコメント
Kenta
Kenta 2021 年 7 月 16 日
audsIm=read(audsTest);
audsImCell=audsIm.input;
audsIm=audsImCell{1};
read関数で読みだせます。imgがimg2になっていて、ちがう画像を参照している、などではないでしょうか?
もしかしたら、uint8(img2rgb)とするとよいかもしれません。試してもらえると嬉しいです。
正樹 長谷川
正樹 長谷川 2021 年 7 月 19 日
教えてくださった方法で,画像データの中身を確認したところ,
1)では整数値の画像データでしたが,2)ではimresizeのところで画像データが実数値になっておりました。
classifyのscore値が,似た様な数字でも微妙に違う結果になってしまった原因がやっと判りました。
どうもありがとうございました。本当に勉強になりました。

サインインしてコメントする。

採用された回答

Kenta
Kenta 2021 年 7 月 20 日
コメントのほう、ありがとうございました。解決したようでよかったです。念のため、回答欄に転記させてください。
audsIm=read(audsTest);
audsImCell=audsIm.input;
audsIm=audsImCell{1};
このように、データストアからはread関数で画像を読みだせます。imgがimg2になっていて、ちがう画像を参照している、などではないでしょうか?
もしかしたら、uint8(img2rgb)とするとよいかもしれません。こちらで試したところ、一方はdouble,もう一方は整数のuint8型で呼び出されていて、そこで小さな違いが生じたのかもしれません。
試してもらえると嬉しいです。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeImage Processing Toolbox についてさらに検索

製品


リリース

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!