画像判別の交差検証について

13 views (last 30 days)
Kaneko
Kaneko on 8 Jan 2020
Commented: Kenta on 8 May 2020
画像判別の精度の検証で必要なk分割交差検証を行いたいのですが、やり方が分かりません。
画像は二通りでそれぞれフォルダに格納しています。
ここからMATLABに取り入れて、k分割交差検証を行いたいので、そのやり方を教えて頂けますでしょうか。
よろしくお願いします。
  1 Comment
Kenta
Kenta on 8 May 2020
交差検証をしている例はここにありました。参考になれば幸いです。

Sign in to comment.

Accepted Answer

Hiro Yoshino
Hiro Yoshino on 8 Jan 2020
ディープラーニングの場合はあまりやることは有りません。
基本的にデータ数が少ない場合に過学習を抑える目的でやります。DLはデータがそもそも大量に必要なのであまり必要がないのと、確率的勾配法アルゴリズムは言ってみれば、毎回違うデータで学習をやっているようなモノなので過学習に対して有効ということもあると思います。
validationデータを分けておいて、評価することは出来ますし、します:
ディープではない場合は、cvpartionという関数などを使うと簡単にできます。
Classification Learner AppだとGUIでやってくれます。
  1 Comment
Kaneko
Kaneko on 9 Jan 2020
回答ありがとうございます。cvpartionを使ったやり方で,k分割交差検証をして,誤分類率を出したいと考えていますが,例では,アヤメのデータセットを使っています。自分が分類したいと思ってる画像を使って,これと同じk分割交差検証を行いたいと考えているのですが,その場合は,画像をデータセットにしてからではないとできないでしょうか。
もしそうなら,分類したい画像をk分割交差検証で使えるように,データセットにする方法を教えて頂けますでしょうか。
よろしくお願いいたします。

Sign in to comment.

More Answers (3)

Hiro Yoshino
Hiro Yoshino on 9 Jan 2020
あやめデータと同じデータフォーマット(テーブル型)にして、cvpartitionすれば良いのでは?
すみません、疑問点があまり理解できていません…
  1 Comment
Kaneko
Kaneko on 9 Jan 2020
質問が分かりづらくて申し訳ございません...
自分の判別したい画像がフォルダにあるのですが,それを分割交差検証で使えるようにするにはどうしたらいいのかなと思い,フォルダ内の画像を分割交差検証で読み込んで誤分類率を出すには,どうすればいいかと思い質問しました。
cvpartionを使ったやり方を見たら,「アヤメのデータセットを読み込む」とあったのですが,そもそも自分の持ってる画像のデータを分割交差検証に読み込むにはどうしたらよいか,という質問です。
よろしくお願いいたします。

Sign in to comment.


Hiro Yoshino
Hiro Yoshino on 9 Jan 2020
画像であろうが、あやめデータであろうが、全て「数字」を扱います。
画像だから特別な扱いがあるわけでは有りません。そのあたりの理解は大丈夫ですか?
画像をあやめデータと同じデータフォーマットに揃えてあげれば、cvpartitionでできます。もっと言うと、分割交差検証を教科書通りに自分でコードを書いても良いです。
因みに、あやめデータはテーブル状になったデータだと思います。画像を同じように変換してあげれば良いかなと。普通は特徴抽出等をその前に行ってデータを変換してからテーブルデータにします。
ディープラーニングは特徴抽出機能がネットワーク中に有るので、特徴抽出が不要であることと、CNNは画像のピクセル位置の情報(x,y,z)も活かしてくれるので文字通り、ピクセルの値を画像の並びのまま識別器に与えます。
  1 Comment
Kaneko
Kaneko on 9 Jan 2020
回答ありがとうございます。
画像を数字のデータに変換すればcvpartitionで読み込むことができるということですね。
最後に初歩的な質問で申し訳ございませんが,画像をテーブル状データにする方法を具体的に教えて頂けますでしょうか。
あまりMATLABと関係ない質問で申し訳ございませんがよろしくお願いいたします。

Sign in to comment.


Hiro Yoshino
Hiro Yoshino on 9 Jan 2020
いくつか誤解があるようなので、ご助言差し上げます。
(1) まず、画像も数字データです!行列的な形で数字が入っているので、それをベクトルっぽくすればあやめデータのようになります。まず、そのあたりのデータの感じをご自身の目で見て確認すると良いかなと思います。
それとですが、少し基礎的な理解が欠けているかなと思います。MathWorksのonrampのトレーニングコース(無料のモノも有ります)を受講されてはどうかなと?https://matlabacademy.mathworks.com/
基礎をスキップすると、毎回毎回「やり方教えて」になってしまいますので。
機械学習、ディープラーニングあたりをご受講下さい。ディープラーニングは日本語化されていたと思います。
(2) cvpartitionに読み込むというのは間違いで、cvpartitionの引数は「データ数」で、
戻ってくるのは、k-foldになったデータのインデックスです。→意味が分からない場合は、cross-validationの勉強を軽くされると良いかなと https://www.mathworks.com/discovery/cross-validation.html?s_tid=srchtitle
(3) 画像をベクトルに変換 こちらをご覧ください:
再度ですが、MATLAB onramp (無料) をご受講下さい!!基礎をご確認下さい。
  2 Comments
Kaneko
Kaneko on 9 Jan 2020
分かりました。色々と質問すみませんでした。
研究でMATLABを使用していて,急いでたのでとりあえずネットにあるサンプルを使ってやっていたせいで,基礎的な部分が欠けた状態でやってしまっていたかもしれません。
基礎的な部分もやりつつ,自分のデータでやっていこうと思います。
色々と質問に回答して頂き,ありがとうございました。
Hiro Yoshino
Hiro Yoshino on 9 Jan 2020
いえいえ。
忙しい時には直ぐ動けば良いって感じになりがちですが、
基礎をやっておくと、手戻りが少なくて、結果速くことが進むことが多いかなと。
documentationを見ながら勉強してみてください。

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!