翻訳者 | 朱 仙中 校正:孫淑娟 1. 畳み込みニューラル ネットワーク (CNN) とは何ですか?一般的に、畳み込みニューラル ネットワークは、画像データから固有の画像特徴を抽出する機能を備えた特殊なタイプのニューラル ネットワークです。たとえば、畳み込みニューラル ネットワークは、画像データ内の複雑な特徴を識別するのに非常に役立つため、顔の検出と認識に広く使用されています。 2. 畳み込みニューラルネットワークはどのように機能しますか?他の種類のニューラル ネットワークと同様に、CNN は数値データを処理します。したがって、これらのネットワークに送られる画像は、まずデジタル表現に変換する必要があります。画像はピクセルで構成されているため、CNN に渡される前にデジタル形式に変換されます。 次のセクションで説明するように、デジタル表現層全体がネットワークに渡されるわけではありません。これがどのように機能するかを理解するために、CNN をトレーニングする手順をいくつか見てみましょう。 畳み込み CNN に送信されるデジタル表現のサイズは、畳み込み演算によって縮小されます。このプロセスは、画像分類に重要な特徴のみがニューラル ネットワークに送信されるようにするために重要です。これにより、ネットワークの精度が向上するだけでなく、ネットワークのトレーニング時に最小限の計算リソースが使用されることも保証されます。 畳み込み演算の結果は、特徴マップ、畳み込み特徴、または活性化マップと呼ばれます。特徴検出器を適用すると、特徴マップを生成できます。特徴検出器は、カーネルやフィルターなどとも呼ばれます。 カーネルは通常 3x3 行列です。カーネルは入力画像と要素ごとに乗算され、合計されて特徴マップを出力します。これは、カーネルを入力画像上でスライドさせることによって実現されます。このスライドは段階的に発生します。もちろん、CNN を作成するときに、カーネルのストライドとサイズを手動で設定することもできます。 典型的な3X3畳み込み演算 たとえば、5X5 の入力が与えられた場合、3X3 カーネルは 3X3 の出力特徴マップを出力します。 パディング 上記の操作では、畳み込み演算を適用する過程で、特徴マップのサイズが縮小されることがわかります。では、特徴マップを入力画像と同じサイズにしたい場合はどうすればよいでしょうか?これはパディングによって実現されます。 パディング操作とは、画像をゼロで「埋める」ことによって入力画像のサイズを増やすことを指します。したがって、このようなフィルターを画像に適用すると、入力画像と同じサイズの特徴マップが生成されます。 網掛けされていない部分は塗りつぶされた部分を表します パディング操作は、畳み込み操作で失われる情報の量を減らすだけでなく、畳み込み操作中に画像のエッジがより頻繁に区切られるようにします。 CNN を構築するときに、必要なパディングの種類を定義するか、パディングをまったく定義しないかを選択できます。ここでの一般的なオプションには、valid または same が含まれます。このうち、valid はパディングが適用されないことを意味し、same は特徴マップのサイズが入力画像のサイズと同じになるようにパディングが適用されることを意味します。 3×3カーネルは5×5の入力を3×3の出力に縮小する。 下の図は、上で説明した特徴マップとフィルターの要素ごとの乗算がどのようになるかを示しています。 活性化関数 非線形性を保証するために、各畳み込み演算の後に ReLU (Rerectified Linear Unit) 変換が適用されます。 ReLU は現在最も人気のある活性化関数ですが、選択できる活性化関数は他にもあります。 変換後、ゼロ未満の値はすべてゼロに戻されますが、他の値は変更されません。 ReLu 関数図 プーリング プーリング操作では、特徴マップのサイズがさらに縮小されます。現在、さまざまなプーリング方法が利用可能です。 一般的な方法は最大プーリングです。プーリング フィルターのサイズは通常 2×2 行列です。最大プーリング法では、2×2 フィルターが特徴マップ上をスライドし、指定された範囲の長方形のボックス内の最大値を選択します。この操作により、プールされた特徴マップが生成されます。 2×2プーリングフィルタを4×4特徴マップに適用する プーリングにより、ニューラル ネットワークは、画像内の主要な特徴の位置を考慮することなく、主要な特徴を識別するようになります。さらに、画像サイズが小さくなると、ネットワークのトレーニングも少し速くなります。 ドロップアウト正規化 ドロップアウト正規化を適用することは、CNN では一般的な方法です。これには、バックプロパゲーション中に更新されないように、特定のネットワーク レイヤー内の一部のノードをランダムに削除することが含まれます。これにより、過剰適合が防止されます。 フラット フラット化の主なタスクは、プールされた特徴マップを単一の列に変換し、それを完全に接続されたレイヤーに渡すことです。これは、畳み込み層から完全接続層への移行時によく行われる手法です。 完全接続層 次に、平坦化された特徴マップが完全接続レイヤーに渡されます。特定の問題とネットワークの種類に応じて、完全に接続されたレイヤーが複数存在する場合があります。このうち、最後の完全接続層は予測結果を出力する役割を担います。 問題の種類に応じて、最後の層で活性化関数が使用されます。その中で、シグモイド活性化関数は主にバイナリ分類に使用され、ソフトマックス活性化関数は通常、マルチカテゴリ画像分類に使用されます。 完全接続畳み込みニューラルネットワーク 3. 畳み込みニューラル ネットワークが従来のフィードフォワード ニューラル ネットワークよりも優れているのはなぜですか?CNN について学んだ後、なぜ通常のニューラル ネットワークを使用して画像の問題を解決できないのか疑問に思うかもしれません。主な理由は、通常のニューラル ネットワークでは CNN のように画像から複雑な特徴を抽出できないためです。 CNN はフィルターを適用することで画像から追加の特徴を抽出できるため、画像の問題の処理に適しています。さらに、フィードフォワードニューラルネットワークに画像を直接取り込むと、計算コストが高くなる可能性があります。 4. 畳み込みニューラルネットワークアーキテクチャCNN をゼロから設計することも、公開されて開発およびリリースされている多数の CNN アーキテクチャを活用することもできます。これらの CNN ネットワークの一部には、独自の使用要件に簡単に適応できる事前トレーニング済みのモデルが付属していることも注目に値します。選択できる一般的な CNN アーキテクチャをいくつか紹介します。
これらのアーキテクチャは、Keras アプリケーションを通じて使い始めることができます。たとえば、次のコードは、VGG19 フレームワークを使用してフレームワークを開発する方法の例を示しています。 tensorflow .keras .applications .vgg19 からVGG19 をインポートします 5. TensorFlow における畳み込みニューラル ネットワーク (CNN) の応用それでは、食品データセットを使用して食品分類 CNN を構築してみましょう。データセットには、101 のカテゴリに分類された 100,000 枚を超える画像が含まれています。 画像の読み込み 最初のステップは、データをダウンロードして抽出することです。 ! wget --no-check-certificate \ データセット内の画像の 1 つを見てみましょう。 plt .imshow (画像.open ( "food-101/images/beignets/2802124.jpg" ) ) tf.data.Dataset を生成する 次に、画像を TensorFlow データセットに読み込みます。データの 20% をテストに使用し、残りをトレーニングに使用します。したがって、トレーニング セットとテスト セット用の画像データのコレクションを作成する必要があります (トレーニング セット ジェネレーター関数 ImageDataGenerator を呼び出すことによって)。 トレーニング セット ジェネレーター関数では、画像のスケーリングや反転など、いくつかの画像拡張手法も指定する必要があります。注目すべき点の 1 つは、拡張によってネットワークの過剰適合を防ぐことができることです。 base_dir = 'food-101/images' 画像セット ジェネレーターを作成したら、次のタスクは、それらを使用してベース ディレクトリの場所から食品画像を読み込むことです。画像を読み込むときは、画像のターゲット サイズを指定する必要があります。すべての画像は指定されたサイズに変更されます。 画像サイズ= ( 200 , 200 ) 画像を読み込むときには、次のことも指定する必要があることに注意してください。
validation_set = validation_gen.flow_from_directory ( base_dir 、 モデル定義 次のステップは、CNN モデルを定義することです。ニューラル ネットワークのアーキテクチャは、前述の「畳み込みニューラル ネットワークの仕組み」セクションで説明した手順と似ています。ネットワークを定義するには、Keras ネットワーク フレームワークの Sequential API を使用します。このうち、CNN部分はConv2Dレイヤーを使用して定義されます。 モデル=シーケンシャル( [ Conv2D レイヤーには次の期待があります。
上記のネットワークでは、プーリングに 2X2 フィルターを使用し、過剰適合を防ぐためにドロップアウト レイヤーを適用します。最後のレイヤーには、食品カテゴリが 101 個あるため、101 個のユニットがあります。複数カテゴリの画像分類問題を解決しているため、使用される活性化関数はソフトマックス関数です。 CNNモデルのコンパイル 次に、複数のクラスが関係するため、分類損失アルゴリズムと正確なアルゴリズムを使用してネットワークをコンパイルします。 モデル.compile (オプティマイザ= 'adam' 、 CNNモデルのトレーニング 次に、CNN モデルのトレーニングを開始します。 それでは、CNN モデルのトレーニングを始めましょう。トレーニング プロセス中に、EarlyStopping コールバック関数を適用します。この目的は、モデルが一定回数反復しても改善されない場合、トレーニングを停止することです。この場合、3 つのトレーニング エポックが使用されました。 コールバック= EarlyStopping (モニター= 'loss' 、忍耐力= 3 ) この場合、扱う画像データセットが非常に大きいため、このモデルをトレーニングするには GPU を使用する必要があります。モデルのトレーニングには、LayerのWebサイト([翻訳者注]残念ながらこのWebサイトは開くことができません。読者はアイデアを知るだけでいいのです。実際、市場にはすでにAI学習用の無料オンラインGPUサービスが数多く存在しています)が提供する無料のGPUを使用しましょう。これを実現するには、上記で開発したすべてのコードを 1 つの関数に「バンドル」する必要があります。この関数はモデルを返す必要があります。この場合、TensorFlow モデルが返されます。 GPU を使用してモデルをトレーニングするには、ファブリック デコレータ (https://docs.app.layer.ai/docs/reference/fabrics) を使用して指定される GPU 環境パラメータで関数を装飾するだけです。 #pip レイヤーをインストール- SDK - qqq モデルをトレーニングするタスクは、トレーニング関数を「layer.run」関数に渡すことによって実行されます。ローカル インフラストラクチャでモデルをトレーニングする場合は、「train()」関数を呼び出すことでトレーニングできます。 レイヤー.run ( [列車] ) 予測する モデルの準備ができたら、次の手順に従って新しい画像に対する予測を行うことができます。
keras .p reprocessing から画像をインポート これはマルチクラス ネットワークなので、結果を解釈するには softmax 関数を使用します。この関数は、ロジットを各カテゴリの確率に変換します。 クラス名= os .listdir (ベースディレクトリ) 6. まとめこの記事では、畳み込みニューラルネットワークについて詳しく説明しました。具体的には、この記事では以下の内容を取り上げます。
オリジナルリンク: https://www.kdnuggets.com/2022/05/image-classification-convolutional-neural-networks-cnns.html 翻訳者紹介 Zhu Xianzhong 氏は、51CTO のコミュニティ エディターであり、51CTO の専門ブロガー兼講師であり、濰坊の大学のコンピューター教師であり、フリーランス プログラミング コミュニティのベテランです。初期にはさまざまな Microsoft テクノロジに注力し (ASP.NET AJX および Cocos 2d-X に関連する 3 冊の技術書を編纂)、オープンソースの世界に 10 年近く携わってきました (人気のフルスタック Web 開発テクノロジに精通)。OneNet/AliOS+Arduino/ESP32/Raspberry Pi をベースとした IoT 開発テクノロジや、Scala+Hadoop+Spark+Flink などのビッグデータ開発テクノロジを理解しています。 |
<<: 古典的な論文を実装するための60行のコード:ポアソンディスクサンプリングを完了するのに0.7秒、Numpyよりも100倍高速
>>: Google 研究者: AI が優秀すぎて「ラインを落とした」
[[409282]]この記事では、特に仕事の方法について取り上げます。エンジニアの中には非常に頭の...
長い間、感情があるかどうかは、人間と機械を区別する重要な基準の一つでした。つまり、機械が感情を持って...
今では、ほとんどの人が人工知能の概念をよく知っています。 AI は今日最も人気のあるテクノロジーの ...
10月31日午前、杭州雲棲鎮で2023年雲棲会議が開幕した。アリババグループのジョセフ・ツァイ会長は...
LEONARDO は、カリフォルニア工科大学の航空宇宙ロボット工学および制御研究所の言語の天才たちの...
[[328065]] 2020年2月7日、第34回アメリカ人工知能学会年次会議(AAAI 2020...
1 枚の画像を生成するのに 10 ミリ秒かかり、1 分間に 6,000 枚の画像を生成します。これ...
この記事の主な対象読者は、機械学習の愛好家やデータサイエンスの初心者、そして機械学習アルゴリズムを学...
[[327668]]コンピュータービジョンを研究している大学院生 985 人が卒業後に就職できない...
TensorFlow は Python ベースの機械学習フレームワークです。 Coursera でロ...
次に購入する電話はなぜ携帯電話であるべきなのでしょうか?ご覧のとおり、首輪にクリップするこの小さなガ...
ここ数年、世界的な自動運転はまだ発展途上であったとすれば、各国の政策の推進により、自動運転に関する最...
同国初の大規模医療モデルはすでに患者を「診察」している。最近、病院内の AI 医師の実際の監視データ...
最近、ChatGPT/GPT-4シリーズの製品は世界的な注目と議論を集めており、それらに代表される大...