画像分類を始めたいが、どこから始めればよいか分からない。どの事前トレーニング済みネットワークを使用すればよいでしょうか? ニーズに合わせてネットワークを変更するにはどうすればよいでしょうか? ネットワークには 20 層と 100 層のどちらを含めるべきですか? 最も高速で正確なのはどれでしょうか? これらは、画像分類に最適な CNN を選択する際に直面する多くの質問です。 画像分類に CNN を選択する場合、最適化すべき非常に重要な指標が 3 つあります。精度、速度、メモリ消費です。これらのメトリックのパフォーマンスは、選択した CNN とそれに加えた変更によって異なります。異なるネットワーク (VGG、Inception、ResNet など) では、これらの指標に関して異なるトレードオフがあります。さらに、一部のレイヤーを削除したり、レイヤーを追加したり、ネットワーク内で拡張畳み込みを使用したり、さまざまなネットワーク トレーニング手法を使用したりすることで、これらのネットワーク構造を変更できます。 この記事は、特定の分類タスク用の CNN を設計するためのガイダンスを提供する設計ガイドとして役立ちます。特に、精度、速度、メモリ使用量という 3 つの主要な指標に焦点を当てます。さまざまな分類 CNN を研究し、これら 3 つのメトリックに関する特性を調べます。また、これらの基本的な CNN に対する可能な変更と、これらの変更がこれらのメトリックにどのように影響するかについても学習します。最後に、特定の画像分類タスクに対して CNN を最適に設計する方法を調査します。 ネットワークタイプ ネットワーク タイプとこれら 3 つのメトリックの間には明確なトレードオフがあります。まず、Inception または ResNet タイプの設計を使用する必要があります。これらは VGGNet や AlexNet よりも新しいもので、速度と精度の間のトレードオフがより優れています (上の画像を参照)。スタンフォード大学の Justin Johnson 氏は、これらのいくつかをベンチマークする素晴らしい仕事をしました (https://github.com/jcjohnson/cnn-benchmarks)。 Inception と ResNet の選択は、実際には速度と精度のトレードオフです。精度が必要な場合は超深層 ResNet を使用し、速度が必要な場合は Inception を使用します。 巧妙な畳み込み設計を使用して実行時間とメモリ使用量を削減します CNN の一般的な設計における最近の進歩により、精度をあまり損なうことなく CNN を高速化し、メモリ消費を削減できる非常に興味深い代替手段がいくつか生まれました。これらの方法はすべて、前述のどのタイプの畳み込みニューラル ネットワークにも簡単に統合できます。
ネットワークの深さ これは簡単です。一般的に、レイヤーを追加すると、速度とメモリを犠牲にして精度が向上します。しかし、私たちが気づいたのは、このトレードオフは限界効果の影響を受けるということです。つまり、レイヤーを追加すればするほど、追加するレイヤーごとに得られる精度の向上は小さくなります。 活性化関数 最近、活性化関数に関して多くの論争がありました。ただし、経験則としては、ReLU から始めるのが良いでしょう。 ReLU を使用すると、通常は開始してすぐに良い結果が得られます。 ELU、PReLU、LeakyReLU とは異なり、面倒な調整は必要ありません。設計が ReLU を使用して良好な結果を達成できることを確認したら、他の部分を調整し、そのパラメータを調整して、最終的な精度の向上を図ることができます。 畳み込みカーネルのサイズ カーネル サイズを大きくすると、速度とメモリを犠牲にして常に最高の精度が得られると考えるかもしれません。ただし、これは常に当てはまるわけではありません。研究では、より大きな畳み込みカーネルを使用すると、ネットワークが発散しにくくなることが何度もわかっています。より小さいカーネル (例: 3×3) を使用する方が適切です。 ResNet と VGGNet はどちらもこの点を非常に包括的に示しています。これら 2 つの論文に示されているように、1×1 カーネルを使用して特徴の数を減らすこともできます。 膨張畳み込み 中心から遠いピクセルを使用するために、Dilated Convolution は畳み込みカーネルの重み間のスペースを使用します。これにより、ネットワークはパラメータの数を増やすことなく受容野を指数関数的に拡張することができ、メモリ消費量はまったく増加しません。拡張畳み込みは、わずかな速度のトレードオフでネットワークの精度を向上できることが示されています。 データ拡張 常にデータ拡張を行う必要があります。より多くのデータを使用すると、たとえデータが制限されている場合でも、パフォーマンスが継続的に向上することがわかっています。 (https://arxiv.org/pdf/1707.02968.pdf)。データ拡張により、より多くのデータを無料で入手できます。拡張機能のタイプはアプリケーションによって異なります。たとえば、自動運転車のアプリケーションを開発している場合、道路上に車、木、建物などが存在する可能性があるため、画像を垂直に反転しても意味がありません。ただし、天候の変化やシーンの変化により照明が変化することは避けられないため、照明を変更したり水平方向に反転したりしてデータを拡張することは理にかなっています。このデータ拡張ライブラリ (https://github.com/aleju/imgaug) をご覧ください。 トレーニングオプティマイザー 最終的にネットワークをトレーニングするときには、いくつかの最適化アルゴリズムから選択できます。多くの人が、精度の点では SGD が最良の結果をもたらすと言いますが、私の経験ではこれは正しいです。ただし、学習率の設定とパラメータを調整するのは面倒で困難です。一方、適応学習率 (Adam、Adagrad、Adadelta など) を使用するとより簡単かつ高速になりますが、SGD と同じ最適な精度が得られない可能性があります。 オプティマイザーをアクティベーション関数と同じ「スタイル」に従わせるのが最善です。まず最も単純なものを使用して、それが機能するかどうかを確認し、次により複雑なものを使用して調整および最適化します。個人的には、経験上最も使いやすい Adam から始めることをお勧めします。学習率をあまり高く設定せず、通常はデフォルトの 0.0001 に設定すると、非常に良い結果が得られます。その後、SGD を最初から使用することも、Adam から始めて SGD で微調整することもできます。実際、この記事では、Adam を使用して途中で SGD に切り替えると、最も簡単な方法で最高の精度を達成できることがわかりました。新聞に掲載されたこの写真を見てください。 カテゴリーバランス 特に実際のアプリケーションでは、不均衡なデータに遭遇するケースが多くあります。実際の簡単な例を見てみましょう。セキュリティ上の理由から、入力ビデオ内の人物が致死的な武器を持っているかどうかを予測するディープ ネットワークをトレーニングするとします。しかし、トレーニング データには、武器を持っている人のビデオが 50 本しかなく、武器を持っていない人のビデオが 1,000 本しかありません。このデータですぐにネットワークをトレーニングすると、モデルは間違いなく、誰かが武器を持っていないと予測する傾向が強くなります。 クラスの不均衡の問題を解決するには、次の方法を使用できます。
転移学習の最適化 ほとんどのアプリケーションでは、ネットワークを最初からトレーニングするよりも、転移学習を使用する方が適切です。ただし、破棄するレイヤーと保持するレイヤーを選択する必要があります。これはデータに大きく依存します。データが、事前トレーニング済みのネットワーク (通常は ImageNet でトレーニング) で使用されるデータに類似しているほど、再トレーニングが必要なレイヤーの数は少なくなり、その逆も同様です。たとえば、画像にブドウが含まれているかどうかを分類するようにネットワークをトレーニングするとします。そのためには、ブドウが含まれている画像とブドウが含まれていない画像が大量に必要になります。これらの画像は ImageNet で使用される画像と非常に似ているため、最後のいくつかのレイヤー、おそらく完全に接続されたレイヤーだけを再トレーニングする必要があります。ただし、宇宙の画像に惑星が含まれているかどうかを分類する場合、データは ImageNet のデータとは大きく異なるため、後続の畳み込み層も再トレーニングする必要があります。つまり、次の原則に従う必要があります。 要約する この記事では、画像分類アプリケーション用の CNN を設計するための包括的なガイドを示します。この記事を楽しんで読んでいただき、何か新しくて役に立つことを学んでいただければ幸いです。 オリジナルリンク: https://hackernoon.com/a-comprehensive-design-guide-for-image-classification-cnns-46091260fb92 [この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です] この著者の他の記事を読むにはここをクリックしてください |
<<: 人工知能AIが創り出す素晴らしい「世界」を見に来てください
>>: Microsoft AI の面接の質問はどれくらい難しいですか?サンプルロールはこちら
[[415242]]この記事はWeChatの公開アカウント「roseduanの執筆場所」から転載した...
人類はもはや人工知能(AI)の波から逃れることはできない。彼らが行くところすべてで、最新の AI ソ...
テクノロジーが急速に進歩するにつれ、人工知能プログラミングはますます成熟しつつあります。その開発は、...
AIの応用が広まるにつれ、ディープラーニングは現在のAI研究と応用の主流の方法となっています。膨大...
昨夜、「ChatGPTはすでに意識を持っているかもしれない」という話題がWeiboで人気検索となった...
「すべての人にAI」の時代を迎え、多くの人が機械学習(ML)に何らかの形で触れるようになりました。...
Linux SNMP を十分に学習したい場合は、いくつかのモジュールに精通している必要があります。そ...
自動化はテクノロジーを利用して、人間がより多くのタスクを完了できるようにします。物流の自動化をあらゆ...