畳み込みニューラル ネットワークは、ディープ ニューラル ネットワークの中で非常に人気のあるネットワークと言えます。この記事では基礎から始め、畳み込みネットワークとその他の関連技術の基本原理を紹介し、畳み込みネットワークを使用して、参考例として簡単なプロジェクトを作成します。 CNNをゲットしたい友達は見逃さないでくださいね〜
まず、次の写真を見てみましょう。
画像ソース: Pix2PixHD これは実際の写真ではありません。新しいウィンドウで開いて拡大するとモザイクが見られます。 実はこの写真はAIによって生成されたものなんです。すごくリアルに見えませんか? Alex Krizhevsky 氏とその友人たちが ImageNet を通じてこの技術を発表してから、わずか 7 年が経ちました。 ImageNet は、アラスカン・マラミュートからトイレットペーパーの用途に至るまで、1,000 を超えるカテゴリを識別するために毎年開催される大規模な画像認識コンテストです。その後、彼らはAlexNetを作成し、ImageNetコンペティションで2位を大きく引き離して優勝しました。 この技術は畳み込みニューラルネットワークと呼ばれます。これは、特に画像に適したディープ ニューラル ネットワークの分野です。 画像出典: ImageNet 上のグラフは、ImageNet チャレンジで長年にわたり優勝したソフトウェアによって生成されたエラー率を示しています。 2016年にはエラー率が5%まで低下し、人間のレベルを超えたことがわかります。 ディープラーニングの導入は、ルールを変えるというよりも、ルールを破ることを意味します。 畳み込みニューラルネットワークアーキテクチャ では、畳み込みニューラル ネットワークはどのように機能するのか、という疑問が生じます。
畳み込みニューラル ネットワークが他のディープ ニューラル ネットワークよりも優れている理由は、その特殊な演算にあります。 CNN は、画像内の 1 つのピクセルを一度に計算するのではなく、複数のピクセルからの情報 (たとえば、上の図では 3 x 3 ピクセルが計算されています) を組み合わせて、時間的なパターンを理解できるようにします。 さらに、CNN はピクセルのグループが直線または曲線を形成することを「認識」できます。ディープ ニューラル ネットワークは通常、複数の畳み込み層で積み重ねられているため、前の層で直線または曲線を取得した後、次の層ではピクセルを結合するのではなく、線を図形に結合し、完全な画像が形成されるまで層ごとに処理を進めます。 Mynepalli の深層畳み込みニューラル ネットワークの画像 CNN を深く理解するには、カーネルとは何か、プーリング層とは何かなど、多くの基礎知識を学ぶ必要があります。しかし、今では優れたオープンソース プロジェクトが数多く存在し、それらに基づいて直接学習したり使用したりすることができます。 これにより、転移学習という別のテクノロジーが導入されます。 転移学習 転移学習では、トレーニング済みのディープラーニング モデルを使用して特定のタスクを学習します。 たとえば、電車の運行会社で働いている場合、人員を増やさずに電車が遅れるかどうかを予測したいとします。 2015 年の優勝者である ResNet などの畳み込みニューラル ネットワーク モデルを ImageNet で確実に使用できます。トレーニング画像を使用してネットワークを再トレーニングします。結果はきっと期待を裏切りません。 転移学習には主に 2 つの利点があります。
画像分類から画像生成まで 転移学習によって、多くの興味深いアイデアが生まれました。私たちは画像を処理してその中の情報を認識できるのだから、なぜ自分で画像を生成しないのでしょうか? 腹立たしいスティング! 生成的敵対ネットワークが誕生しました。
Zhu Junyanらが提案したCycleGAN この技術は、何らかの入力を与えると、対応する画像を生成できます。 上の図に示すように、CycleGAN は絵画に基づいて対応する実際の写真の生成、スケッチに基づいてバックパックの写真の生成、さらには超解像度再構成を行うことができます。
超解像生成敵対ネットワーク すごいですよね? もちろん、これらのネットワークを構築する方法を学ぶこともできます。しかし、どうやって始めればいいのでしょうか? 畳み込みニューラルネットワークチュートリアル まず、始めるのは簡単ですが、習得するのはそれほど簡単ではないことを知っておく必要があります。 まずは基本から始めましょう。
画像出典: Thomas Verbruggen on Unsplash 空中サボテンの識別 これは Kaggle の学習プロジェクトです。あなたの課題は、航空写真に円柱状のサボテンがあるかどうかを識別することです。 とてもシンプルに見えますね。 Kaggle は 17,500 枚の画像を提供しており、そのうち 4,000 枚はテスト セットとしてラベル付けされていません。モデルが 4,000 枚の画像に正しくラベルを付けることができれば、満点のスコア 1、つまり 100% を獲得します。 長い間探していたのですが、ついに初心者に非常に適した次のプロジェクトを見つけました。 カクタス この画像は上の画像と似ています。サイズは 32 x 32 で、円柱状のサボテンが含まれている場合と含まれていない場合があります。航空写真なので、様々な角度からの写真が収められています。 それで、何が必要ですか? Python で畳み込みニューラル ネットワークを構築する はい、ディープラーニングで最も人気のある言語は Python です。ディープラーニング フレームワークに関しては、多くの選択肢があり、1 つずつ試すことができます。
このチュートリアルでは、私のお気に入りの Pytorch と FastAI を使用します。 始める前に、Python をインストールする必要があります。 Python の公式 Web サイトにアクセスし、必要なバージョンをダウンロードします。必ずバージョン 3.6 以上を使用する必要があります。そうしないと、必要なライブラリの一部がサポートされなくなります。 次に、コマンド ラインまたはターミナルを開き、次のライブラリをインストールします。
入力画像の保存には Numpy を使用し、CSV ファイルの処理には pandas を使用し、コーディングには Jupyter ノートブックを使用します。 次に、Pytorch の公式サイトにアクセスして必要なバージョンをダウンロードします。トレーニングを高速化したい場合は、CUDA バージョンの Pytorch をインストールします。バージョンは少なくとも 1.0 である必要があります。 上記を完了したら、torchvision と FastAI をインストールします。
Jupyter ノートブック コマンドを実行して Jupyter を開くと、ブラウザ ウィンドウが開きます。 必要な環境が設定されたので、始めましょう。 データを準備する 必要なコードをインポートします。
ほとんどすべてのタスクには Numpy と Pandas が必要です。 FastAI と Torch はディープラーニング ライブラリです。 Matplotlib Inline はグラフを表示するために使用されます。 Kaggleコンペティション公式サイトからデータをダウンロードできるようになりました。 zip ファイルを解凍し、Jupyter ノートブック フォルダーに配置します。 ノートブックの名前が Cacti であると仮定します。フォルダ構造は次のようになります。 Train フォルダーにはすべてのトレーニング イメージが含まれています。 テスト フォルダーは、送信されたテスト画像用です。 トレーニング CSV ドキュメントには、トレーニング データに関する情報が含まれており、画像名が列 has_cactus にマッピングされています。列に cactus が含まれている場合、値は 1 になり、含まれていない場合は 0 になります。 サンプル送信 CSV は送信に必要な形式になっています。ファイル名は、Test フォルダー内の画像に対応しています。
トレーニング CSV ドキュメントをデータフレームに読み込みます。
ImageList from_df メソッドを使用して読み込みジェネレーターを作成し、train_df データフレームを train フォルダー内の画像にマッピングします。 データ拡張 これは、既存のデータからさらに多くのデータを作成する手法です。猫の写真を水平に反転しても、それは猫の写真のままです。しかし、これを行うことで、データを 2 倍、4 倍、さらには 16 倍に増やすことができます。 データ量が少ない場合は、この方法を試すことができます。
FastAI はこれを実行するための get_transform 関数を提供します。データを水平反転、垂直反転、回転、拡大、明るさ/輝度の増加、アフィン変換の適用などにより拡張できます。 上記で指定したパラメータを使用して、画像がどのように見えるか試すことができます。または、公式ドキュメントを詳しく読むこともできます。 次に、画像シーケンスに対して上記の前処理を実行します。
パラメータ サイズは、使用するニューラル ネットワークに合わせて入力を拡大または縮小するために使用されます。私が使用するネットワークは、ImageNet 2017 Best Paper Award の成果である DenseNet であり、入力画像サイズは 128*128 です。 トレーニングの準備 データの読み取り後、ディープラーニングで最も重要なステップであるトレーニングに進みます。このプロセスは、ディープラーニングにおける学習の起源でもあります。ネットワークはデータから学習し、データに対してより良い結果が得られるまで、学習した結果に基づいてパラメータを調整します。
トレーニング ステップでは、トレーニング データの小さな部分を検証セットに分割する必要があります。このデータは検証にのみ使用されるため、トレーニングには使用できません。畳み込みニューラル ネットワークが検証セットで良好なパフォーマンスを発揮すると、テスト セットでも良い結果が得られる可能性が高くなります。 FastAI は、上記の操作を簡単に実行できる split_by_rand_pct 関数を提供します。 databunch関数はバッチ処理を実行できます。 GPU メモリの制限により、バッチ サイズは 64 になります。 GPU がない場合は、デバイス パラメータを無視します。 その後、事前トレーニング済みのネットワークを使用しているため、正規化関数を使用して画像を正規化します。 imagenet_stats 関数は、ImageNet 事前トレーニング済みモデルのトレーニング方法に応じて入力画像を正規化します。 テスト データをトレーニング データ リストに追加すると、前処理を再度実行する必要がなくなり、後で予測が容易になります。これらの画像はトレーニングにも検証にも使用できないことに注意してください。これは、トレーニング画像とテスト画像がまったく同じ方法で前処理されることを保証するためです。
これでデータの準備は完了です。次に、cnn_leaner を使用してトレーナーを作成します。前述のように、事前トレーニング済みネットワークとして DenseNet を使用しましたが、TorchVision が提供する他のネットワークを選択することもできます。 シングルサイクルテクノロジー これでトレーニングを開始できます。しかし、畳み込みニューラル ネットワークを含むディープラーニングのトレーニングにおける最大の課題の 1 つは、適切な学習率を選択する方法です。学習率は、勾配降下中にパラメータを更新することでエラーがどれだけ削減されるかを決定します。
上の図に示すように、学習率が大きいほどトレーニング プロセスは速くなりますが、エラー境界を逃したり、制御可能な範囲から外れて収束に失敗する可能性が高くなります。ただし、わずかに小さい学習率を使用すると、トレーニング プロセスは遅くなりますが、発散は起こりません。 したがって、適切な学習率を選択することが非常に重要です。私たちが見つけたいのは、十分に大きいがトレーニングが発散しない学習率です。 しかし、言うのは簡単ですが、実行するのは難しいのです。 そこで、レスリー・スミスという男が単一期間戦略を考案しました。 簡単に言えば、まず複数の異なる学習率を力ずくで検索し、次に最小エラーに最も近いがまだ改善の余地がある学習率を選択します。コードは次のとおりです。
次のような出力が得られます。 最小誤差は 10^-1 なので、3*10^-2 など、この値よりわずかに小さい学習率を使用できます。
いくつかのエポック (ここでは 5 を選択しましたが、大きすぎず小さすぎず) をトレーニングしてから、結果を確認します。 ちょっと、何が起こっているの? 検証セットの精度は 100% に達しました。トレーニング プロセスは実際には非常に効率的で、わずか 6 分しかかかりませんでした。なんて幸運なのでしょう! 実際には、適切なアルゴリズムを見つけるには、数回の反復が必要になる場合があります。 提出するのが待ちきれません!ハハ。それでは、テスト セットの結果を予測して送信しましょう。
テスト画像は以前にトレーニング画像リストに追加されているため、テスト画像を前処理する必要はありません。
上記のコード行は、4000 個のテスト画像の名前と、各画像にサボテンが含まれているかどうかのラベルを含む CSV ファイルを作成します。 提出しようとしたとき、以前は気づかなかったのですが、CSV を Kaggle カーネル経由で提出する必要があることがわかりました。 画像出典: Kaggle 幸いなことに、カーネル操作は Jupyter ノートブックと非常に似ています。作成した内容をノートブックにコピーして貼り付け、送信するだけです。 それでは、ドゥアン〜完了! なんと!スコアは0.9999で、とても良いです。もちろん、最初の試みでこれほど良いスコアを取れたのであれば、改善の余地があるはずです。 そこで、ネットワーク構造を微調整して再度試してみました。 スコア1!できました!! あなたにもできますよ、実はそんなに難しくないんです。 (また、このランキングは4月13日時点のものなので、現在は順位が下がっているかもしれません…) 私が学んだこと このプロジェクトはシンプルで、タスクを解決する際に奇妙な課題に遭遇することはないので、始めるのに最適です。 また、すでに満点を取った人も多いので、主催者は提出用のテストセットをもう 1 つ作成し、より難しいものにすべきだと思います。 とにかく、このプロジェクトを始めるのに基本的に難しいことはありません。すぐに試して高得点を獲得できます。
画像ソース: Mario Mrad on Unsplash 畳み込みニューラル ネットワークは、画像認識から画像生成まで、さまざまなタスクに効果的です。画像の分析は以前ほど難しくありません。もちろん、努力すればできますよ。 したがって、適切な畳み込みニューラル ネットワーク プロジェクトを選択し、高品質のデータを準備して、開始してください。 オリジナルリンク: https://medium.freecodecamp.org/everything-you-need-to-know-to-master-convolutional-neural-networks-ef98ca3c7655 [この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です] この著者の他の記事を読むにはここをクリックしてください |
<<: オープンソース! Gartner の 100 ページの機械学習ブックが無料でダウンロードできるようになりました。
2023年までに、AIは複数の業界で広く採用されるようになります。 2024 年までに、ソフトウェア...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
今朝(8日)、第13期全国人民代表大会第5回会議第二回全体会議が開催され、最高人民法院と最高人民検察...
モバイルインターネット時代の始まり以来、スマートフォンへのソフトウェアの適応は常にソフトウェア業界の...
[[319653]]新型コロナウイルスは、ウイルス自体の急速な拡散という点だけでなく、ますます多く...
クラウド コンピューティングは、集中性、効率性、弾力性、ビジネスの俊敏性をもたらしましたが、クラウド...
まず、タイトルには、検索構造ではなく、ルーティング項目の配置構造と書かれています。つまり、この構造を...
[51CTO.com クイック翻訳] AlphaBeta Consulting Company が最...
「データマイニングのアルゴリズムは、線形代数、確率論、情報理論に基づいています。それらを深く掘り下げ...
[[267801]] AI システムがどのように意思決定を行うかを人々が理解できるようにする説明可能...
近年、技術が成熟するにつれ、我が国の民間ドローン産業は急速な発展を遂げてきました。 「2019年中国...