回帰用のCNNアーキテクチャ?


32

入力が画像で、ラベルが80から350の間の連続値である回帰問題に取り組んでいます。画像は、反応が起こった後のいくつかの化学物質のものです。判明する色は、残りの別の化学物質の濃度を示し、それがモデルが出力するものです-その化学物質の濃度。画像は回転、反転、ミラー化できますが、期待される出力は同じままです。この種の分析は実際のラボで行われます(このモデルをトレーニングするのと同じように、非常に特殊な機械が色分析を使用して化学物質の濃度を出力します)。

これまでのところ、おおよそVGG(conv-conv-conv-poolブロックの複数のシーケンス)に基づいたモデルで実験したことがあります。より最近のアーキテクチャ(Inception、ResNetなど)を試す前に、画像を使用した回帰でより一般的に使用される他のアーキテクチャがあるかどうかを調査したいと思いました。

データセットは次のようになります。

ここに画像の説明を入力してください

データセットには約5,000の250x250のサンプルが含まれていますが、64x64にサイズ変更したため、トレーニングが簡単になりました。有望なアーキテクチャを見つけたら、より大きな解像度の画像で実験します。

これまでのところ、私の最良のモデルでは、トレーニングセットと検証セットの両方で約0.3の平均二乗誤差があり、これは私のユースケースでは受け入れられません。

これまでの私の最高のモデルは次のようになります。

// pseudo code
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])

x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])

x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])

x = dropout()->conv2d(x, filters=128, kernel=[1, 1])->batch_norm()->relu()
x = dropout()->conv2d(x, filters=32, kernel=[1, 1])->batch_norm()->relu()

y = dense(x, units=1)

// loss = mean_squared_error(y, labels)

質問

画像入力からの回帰出力に適したアーキテクチャは何ですか?

編集

私は説明を言い換え、正確性に関する言及を削除しました。

編集2

私は私の質問を再構成したので、うまくいけば、私が何を求めているかが明確になる


4
精度は、回帰問題に直接適用できる尺度ではありません。精度が30%であると言うとき、どういう意味ですか?精度は実際には分類タスクにのみ適用され、回帰には適用されません。
原子力王

1
「時間の30%を正しく予測する」とはどういう意味ですか?本当にリグレッションをしていますか?
Firebug

1
なぜこの問題を回帰と呼ぶのですか?ラベルに分類しようとしていますか?ラベルは枢機areですか?
アクサカル

2
vggとまったく同じものは必要ありません。私はvggのようなことをしています。つまり、一連のconvに続いて最大プーリングが行われ、続いて完全に接続されています。画像を操作するための一般的なアプローチのようです。しかし、もう一度、それは私の元の質問の全体的なポイントです。これらすべてのコメントのように思えますが、私には洞察力がありますが、そもそも私が尋ねていることのポイントを完全に見逃しています。
ロドリゴシルベイラ

1
また、問題のより良い説明を提供した場合、より良いヘルプを提供できる場合があります。1)画像は何ですか?彼らの解像度は何ですか?画像やあなたの応答の間にどのような関係がある?この関係は回転不変です。つまり、円形画像を任意の角度θだけ回転させた場合、yが変化すると予想されますか?2)VGG-netアーキテクチャをトレーニングするための5000個の画像が悲惨であることをご存知ですか?アーキテクチャのパラメーターの数を計算しましたか?もっと画像を取得する方法はありますか?できない場合は、おそらく必要ですy[80350]θy
...-DeltaIV

回答:


42

まず最初に、一般的な提案:よく知らないトピックについて実験を始める前に、文献検索を行ってください。時間を大幅に節約できます。

この場合、既存の論文を見ると、

  1. CNNは回帰に複数回使用されています。これは古典的なものですが、古いものです(はい、DLでは3年です)。最新の論文では、このタスクにAlexNetを使用しなかったでしょう。これは最近のものですが、それは非常に複雑な問題(3D回転)のためであり、とにかく私はそれをよく知りません。
  2. CNNでの回帰は些細な問題ではありません。最初の論文をもう一度見ると、基本的に無限のデータを生成できるという問題があることがわかります。彼らの目的は、2D画像を修正するために必要な回転角度を予測することです。つまり、基本的にトレーニングセットを取得し、各画像を任意の角度で回転させることで強化でき、有効な、より大きなトレーニングセットを取得できます。したがって、ディープラーニングの問題に関する限り、問題は比較的単純に思えます。ところで、彼らが使用する他のデータ増大のトリックに注意してください:

    変換(画像幅の最大5%)、範囲[-0.2、0.2]での輝度調整、γε[-0.5、0.1]でのガンマ調整、および範囲[0での標準偏差を持つガウスピクセルノイズを使用します。 、0.02]。

    k

    yバツα=atan2yバツ>11可能な最大エラーの。直列に2つのネットワークを使用することでわずかに改善しました。最初のネットワークは分類を実行します(角度がまたはクラス)の場合、最初のネットワークで予測された量だけ回転した画像が別のニューラルネットワークに送られ(今回は回帰用)、最終的な追加の回転が予測されますの範囲。[180°90°][90°0°][0°90°][90°180°][45°45°]

    はるかに単純な(回転したMNIST)問題では、より良い結果を得ることができますが、それでも可能な最大エラーのであるRMSEエラーを下回ることはありません。2.6

それで、これから何を学ぶことができますか?まず、5000個の画像はタスクの小さなデータセットです。最初の論文では、回帰タスクを学習したいものと同様の画像で事前にトレーニングされたネットワークを使用しました:アーキテクチャが設計されたタスク(分類)とは異なるタスクを学習する必要があるだけでなく、トレーニングセットも学習しますこれらのネットワークが通常トレーニングされるトレーニングセット(CIFAR-10 / 100またはImageNet)のように見えるものは一切ありません。ですから、おそらく転移学習から利益を得ることはないでしょう。MATLABの例には5000枚の画像がありましたが、それらは白黒であり、意味的にはすべて非常に似ていました(これもあなたの場合です)。

それでは、0.3よりも優れているのはどれほど現実的でしょうか?まず、平均損失0.3を意味します。RMSEエラーが0.3であることを意味しますか、

1N=1Nhバツy2

ここで、はトレーニングセットのサイズ(したがって、)、はイメージ CNNの出力、は対応する化学物質の濃度ですか?以来、そしてあなたが80と350の間であなたのCNNの予測をクリップ(またはあなたがちょうど彼らがその区間に収まるようにするためにロジットを使用)と仮定して、あなたは以下取得しているエラーを。真剣に、あなたは何を期待していますか?私にはまったく大きなエラーではないようです。NN<5000hバツバツyy[80350]0.12

また、ネットワーク内のパラメータの数を計算してみてください:私は急いでいて、愚かな間違いを犯しsummaryている可能性があるので、使用しているフレームワークの関数で計算を必ずダブルチェックしてください。しかし、大体私はあなたが持っていると言うでしょう

9×3×32+2×32×32+32×64+2×64×64+64×128+2×128×128+128×128+128×32+32×32×32=533344

(注意:バッチ標準レイヤーのパラメーターはスキップしましたが、レイヤーのパラメーターは4つしかないため、違いはありません)。50万のパラメーターと5000の例があります...あなたは何を期待しますか?確かに、パラメータの数はニューラルネットワークの容量を示す良い指標ではありません(識別不可能なモデルです)、それでも...これよりもはるかに良いことはできないと思いますが、いくつかのこと:

  • すべての入力を正規化(たとえば、-1から1の間で各ピクセルのRGB強度を再スケーリングするか、標準化を使用)およびすべての出力。これは、収束の問題がある場合に特に役立ちます。
  • グレースケールに移動します。これにより、入力チャネルが3から1に減少します。すべての画像は(私の非常に訓練されていない目には)比較的似た色に見えます。を予測するのに必要なのは色であり、暗い領域や明るい領域の存在ではないのですか?たぶんあなたは確信しています(私は専門家ではありません):この場合、この提案をスキップしてください。y
  • データの増強:あなたは任意の角度で回転したり、画像が同じ出力になるはずであるミラーリング、その反転を言っているので、あなたのデータのサイズを設定増やすことができます多くのことを。データセットが大きくなると、トレーニングセットのエラーが大きくなります。ここで探しているのは、トレーニングセットの損失とテストセットの損失のギャップが小さいことです。また、トレーニングセットの損失が大幅に増加する場合、これは朗報かもしれません。つまり、オーバーフィットのリスクなしに、この大きなトレーニングセットでより深いネットワークをトレーニングできるということです。レイヤーを追加してみて、トレーニングセットが少なくなり、テストセットが失われるかどうかを確認してください。最後に、アプリケーションのコンテキストで意味がある場合は、上記で引用した他のデータ拡張のトリックも試してみてください。
  • 分類後回帰の使用します。最初のネットワークは、がなどのように、たとえば10個のビンのいずれかにあるかどうかを判断するだけです。次に、2番目のネットワークが補正を計算します。ここでもセンタリングと正規化が役立つ場合があります。試行せずに言うことはできません。y[8097][97124][027]
  • ビンテージのアーキテクチャではなく、最新のアーキテクチャ(InceptionまたはResNet)を使用してみてください。ResNetには、実際にはVGG-netよりも少ないパラメーターがあります。もちろん、ここで小さなResNetを使用したい-5000の画像データセットでResNet-101が役立つとは思わない。ただし、データセットを大幅に拡張できます。
  • 出力は回転に対して不変であるため、別の素晴らしいアイデアは、出力(分類子として使用される場合)が離散回転に対して不変であるグループ同変CNN、または操縦可能なCNNを使用することです。その出力は連続回転に対して不変です。不変性のプロパティを使用すると、データの増加を最小限に抑えて良い結果を得ることができます。理想的にはまったくありません(回転に関係するため、もちろん他の種類のdaが必要です)。グループの等価なCNNは、実装の観点から操作可能なCNNよりも成熟しているため、最初にグループCNNを試します。分類部分にG-CNNを使用して、分類後回帰を試すか、純粋な回帰アプローチを試すことができます。それに応じて最上層を変更することを忘れないでください。
  • バッチサイズを試してみてください(はい、はい、ハイパーパラメーターハッキングはクールではありませんが、これは限られた時間枠で無料で提供できる最高の方法です:-)
  • 最後に、小さなデータセットで正確な予測を行うために特に開発されたアーキテクチャがあります。それらのほとんどは拡張畳み込みを使用しました。1つの有名な例は、混合スケールの密な畳み込みニューラルネットワークです。ただし、実装は簡単ではありません。

3
詳細な回答ありがとうございます。私はすでに重要なデータ増強を行っていました。開始モデルのバリエーションをいくつか試しました(バリエーションとは、フィルターの数がモデル全体で均等にスケーリングされることを意味します)。信じられないほどの改善を見ました。まだ方法があります。あなたの提案をいくつか試してみます。再度、感謝します。
ロドリゴシルベイラ

@ rodrigo-silveiraどういたしまして、どうなるか教えてください。結果が出たらチャットで話すことができるかもしれません。
DeltaIV

1
素晴らしい答え、もっと値するに値する^
ジリー

1
非常によく構成されています!
カルティクティアガラジャン

1
可能であれば、これに対して1万ポイントを差し上げます。驚くべき答え
Boppity Bop
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.