質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Neural Network Console

Neural Network Consoleは、ソニー社が開発したディープラーニング・ツール。ニューラルネットワークを視覚的に設計することが可能で、学習や評価をスムーズに実現できます。また、ニューラルネットワークを自動的に構築する機能も備わっています。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Q&A

解決済

1回答

1821閲覧

Resnet18の学習曲線の挙動を理解したい

ruki0529

総合スコア2

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Neural Network Console

Neural Network Consoleは、ソニー社が開発したディープラーニング・ツール。ニューラルネットワークを視覚的に設計することが可能で、学習や評価をスムーズに実現できます。また、ニューラルネットワークを自動的に構築する機能も備わっています。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

0グッド

0クリップ

投稿2022/11/17 15:33

前提

 私は2022年11月から機械学習の勉強を始めた者です。

 現在私はキャッサバの葉の画像から病害を判定する画像分類モデルをNeural_Network_Consoleを用いて作成しようとしています。(https://www.kaggle.com/c/cassava-leaf-disease-classification
↑のURLのコンペで使われたものだと思われるんですが違うかもしれません)

 neural_network_consoleのYoutubeの解説動画等を参考にして高精度化に努めましたがなかなか成果が出ない状況にあり、自分が試した方法が正しいものなのかを確認したいです。

【与えられたデータセット】
約2万枚の葉のデータセット。ラベル(病害)は
0: Cassava Bacterial Blight (CBB)
1: Cassava Brown Streak Disease (CBSD)
2: Cassava Green Mottle (CGM)
3: Cassava Mosaic Disease (CMD)
4: Healthy
であり、フォルダ分けされています。画像数はそれぞれ
0:931枚
1:1876枚
2:2045枚
3:11279枚
4:2209枚
です。葉っぱ以外しか映っていない画像や作業員がピースしているだけなどの画像も含まれてます。

【データセットに対して行ったこと】
与えられたデータセットのデータクレンジング(葉の模様が確認できる画像以外を除去)を行い、各ラベルは
0:913枚
1:1767枚
2:2001枚
3:11040枚
4:2094枚
となりました。ここからテスト用に各ラベル100枚ずつ別フォルダに保存しました。
残りの画像にAugmentor(https://hacknote.jp/archives/40200/)
を用いて水増しした、①各ラベル5000枚のデータセットと②各ラベル11000枚のデータセットを作成しました。なお画像サイズは224*224としました。

【学習モデルの検討】
neural_network_consoleのYoutubeにて紹介されてResNet18を使おうと思い、https://support.dl.sony.com/wp-content/uploads/sites/2/2020/01/17052647/starter_guide_Image_classification.pdf
を参考にして、neural_network_console内のResnet18のサンプルモデルに①と②のデータセットを用いて学習を行いました。学習モデルと①と②の学習曲線、①と②の評価における混合行列を以下に示します。
学習モデル
↑学習モデル(サンプルにあったResnet18)
①訓練画像各5000枚の学習曲線
↑①訓練画像各5000枚の学習曲線
②訓練画像各11000枚の学習曲線
↑②訓練画像各11000枚の学習曲線
①訓練画像各5000枚の混合行列
↑①訓練画像各5000枚の混合行列
②訓練画像各11000枚の混合行列
↑②訓練画像各11000枚の混合行列

質問したいこと

(1)上記に示した学習曲線ではTRAIN ERRORが表示されていないが、これは正常な動作なのか

(2)上記に示した混合行列を見ると、各ラベルの画像数が少ないほうがaccuracyが高いことがわかる。訓練画像データを増やしても、必ずしも精度が上がる訳ではないのか。またその場合、訓練画像データの水増しはどの程度まで行うのが効果的なのか。(元画像1枚につき〇枚の水増しを行うと良い等)

(3)今回のようにVALIDATION ERRORが振動する理由とその対策について

(4)Resnet18を使うという条件のもとで行える精度向上手法はどのようなものがあるか。(データセット拡張やResnet18に別の手法を組み合わせる等)

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ara_ara

2022/11/18 07:48

>訓練画像データを増やしても、必ずしも精度が上がる訳ではないのか。 データセットが良質であれば上がるものと思ってよいです. 当該コンペ(Cassava Leaf Disease Classification)はkaggle2021年開催コンペの中でも1,2を争うほど酷いコンペでデータセットの質が非常に悪いことで知られています.
jbpb0

2022/11/18 11:24

trainのエラーは、初回からずっと0なのでしょうか? trainのエラーが0になってしまったら、それ以上は学習のやりようがないと思うので、validのエラーが減っていくのは変な気がします trainのエラーを表示させる設定が間違ってる、ということは無いでしょうか?
ruki0529

2022/11/19 01:37

@ara_ara様 データセットの質の悪さは感じておりましたがそこまでとは…。上位入賞者はこのデータセットでも90%は出しているので自分も頑張ろうと思います。 @jbpb0様 質問に添付した画像のtrain_errorはずっと0となっています。理由を調べたところ、NNCのResnet18はデフォルトで表示するtrain_errorがTop5errorの値となっておりこれは「予測確率の高かったクラスから上位5つのうちに正解ラベルが入っていれば正解とする」というものです。今回はラベル数が5つなので常に正解判定を受けていたということでしょう。混乱させてすみませんでした。
jbpb0

2022/11/19 03:17

> NNCのResnet18はデフォルトで表示するtrain_errorがTop5errorの値 その情報は、質問を編集して追記した方がいいと思います オプティマイザーが参照してる(小さくしようと努力する)値も表示しないと、「学習」曲線としては不完全な気がします
guest

回答1

0

ベストアンサー

(1)上記に示した学習曲線ではTRAIN ERRORが表示されていないが、これは正常な動作なのか

下部のログ欄では0になっているので表示されていないと思います.Costは通常,Lossに正則化項を加えた値として知られていますが,今回はTrain Lossが0で,正則化項のみ値があったという解釈になるのではないでしょうか.

(2)上記に示した混合行列を見ると、各ラベルの画像数が少ないほうがaccuracyが高いことがわかる。訓練画像データを増やしても、必ずしも精度が上がる訳ではないのか。またその場合、訓練画像データの水増しはどの程度まで行うのが効果的なのか。(元画像1枚につき〇枚の水増しを行うと良い等)

必ずしも精度が上がるわけではないですね,Data Augmentationによって決定境界の拡張につながるものの,検証用データがそれに収まるかと言われれば,必ずしもそうではないのが現状です.
各ラベルの画像が多いと外れ値が多分に含まれ,誤差が増大した可能性があります.データクレンジングの過程で葉の認識できない画像は除去されたようですが,ここからさらにクレンジングを実施する必要を提唱します.例えば,画像サイズを224x224にされたようですが,縦横比が変化してしまっている場合は致命的であったり,葉を認識できる画像であったとしても,余計な領域は削ぎ落とす必要があるなど,といった具合です.

(3)今回のようにVALIDATION ERRORが振動する理由とその対策について

Solver(Optimizer)が不明ですが,訓練画像各5000枚のときと同じであれば,振動する理由は一般的に学習率が高いことが原因です.学習率を下げるか,weight decayの設定をすると抑えられると思います.もしくは学習率の低くて良いOptimizerを利用するなど,ですね.

(4)Resnet18を使うという条件のもとで行える精度向上手法はどのようなものがあるか。(データセット拡張やResnet18に別の手法を組み合わせる等)

簡単に精度向上を目的とするなら,活性化関数の変更が挙げられます.ReLUは標準的で良いですが,近年出たSwishやMishも利用可能ですので使ってみると良いでしょう.ReLUはx=0で不連続な関数ですがSwishやMishは両者共に連続関数なので良いとされています.

img

論文の主張からすると,ReLUを使うより精度が良くなるそうです.また,Optimizerの変更も精度向上に繋がります.Discussionを見る限りAdam系統が多いように見えます.

Image Augmentationに関しては,AugmentorにはないCutoutやCutmix,GridShuffleなどを取り入れた人もいるので,参考にすると良いでしょう.

他にもLabel Smoothingを取り入れた人などもいますが,NNCで可能なオプションか不明でした.要検証ですね.

そもそも論,ResNetは画像全体の特徴を捉えるのに長けているので,そこを活かし切れる課題かと聞かれればそうではないように思います.現に上位記録者の投稿にはEfficientNetやViTなどの利用が目立ちます.もし使われるとしてもアンサンブルの1部だと思います.

投稿2022/11/17 20:19

PondVillege

総合スコア1579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruki0529

2022/11/18 00:52

迅速な回答とても助かります。 頂いた回答をもとにこれからの高精度化の検討を進めようと思います。 データクレンジングについて追加で質問したいです。 (1)1回目のデータクレンジングを行ったデータセットでは、「葉が1枚~3枚アップで写っている画像」と「葉が10枚以上写っている少し引きで撮影された画像(人間から見て一応葉の模様がわかる)」ものを含むようにしました。「葉が1枚~3枚アップで写っている画像」のみにした方が誤差の増大を抑えられると考えられますか? (2)余計な領域をそぎ落とす方法として訓練画像の背景除去などを検討しました。1度remove.bghttps://tech.fusic.co.jp/posts/2020-01-20-remove-background/)を用いて背景除去を行おうとしましたがうまくいかず(200/900くらいがうまく背景除去できたが残り700枚は真っ黒い画像となった)、断念しました。余計な領域をそぎ落とす方法として具体的にはどのような方法が挙げられますでしょうか?(全画像手作業はなしでお願いします) 以上2点についてご迷惑でなければご教授願いたいです。
PondVillege

2022/11/18 20:41

(1): ResNetならアップ画像が好ましいと考えます. (2): 背景除去がうまくいかないなら仕方ないと思います.代わりに,背景が映らないぐらいアップにしてやるなどの案が考えられます.
ruki0529

2022/11/19 01:31

返信ありがとうございます。大変参考になりました。でーたのクレンジングから再度始めてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問