目次
画像原理
畳み込みニューラルネットワークCNNとは何ですか?
1.コンボリューション(Convolution)
2.パディング
5.Shape
6. 活性化関数
CNNの全体構造
CNNの利点
ホームページ テクノロジー周辺機器 AI 基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

Jun 04, 2024 pm 08:19 PM
ai ニューラルネットワーク

著者と同じようにテクノロジーが大好きでAIに強い関心を持っている友人は、畳み込みニューラルネットワークには馴染みがあり、そのような「高度な」名前に長い間混乱していたと思います。著者は今日から畳み込みニューラルネットワークの世界にゼロから入ります〜それをみんなと共有しましょう!

畳み込みニューラル ネットワークに入る前に、まず画像の原理を見てみましょう。

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

画像原理

コンピュータでは、画像は数値 (0 ~ 255) で表され、各数値は画像内のピクセルの明るさまたは色の情報を表します。その中には:

  • 白黒画像: 各ピクセルには値が 1 つだけあり、この値は 0 (黒) から 255 (白) の間で変化します。

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

  • カラー画像: 各ピクセルには 3 つの値が含まれており、最も一般的なのは RGB (赤-緑-青) モデルです。つまり、赤、緑、青の光が異なる強度で結合されてさまざまな色が生成されます。各カラー チャネルには 0 ~ 255 の 256 レベルの明るさがあるため、各色は 8 ビットの 2 進数で表現できます。たとえば、(255,0,0) は赤を表し、(0,255,0) は緑を表し、( 0) ,0,255) は青を表し、その他の組み合わせでさまざまな色に対応します。コンピューターでは、カラー画像のデータ構造は通常、(幅、高さ、深さ) の形状を持つ 3 次元配列またはテンソルです。深さはチャネルの数であり、RGB 画像の場合、深さは 3 です。これは、ピクセル位置ごとに、赤、緑、青の 3 つのチャネルの明るさを表す 3 つの値があることを意味します。たとえば、100*100 ピクセルの RGB 画像は 100x100x3 バイトのメモリを占有します。

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

「ここでの「8 ビット 2 進数」はどうやって理解できますか?」

RGB カラー モデルでは、各カラー チャネル (赤、緑、青) は 256 の異なる輝度レベルを持つことができ、各チャネル8 ビット 2 進数の最大値は 11111111 (10 進数に変換すると 255)、最小値は 00000000 (10 進数に変換すると 0) です。

畳み込みニューラルネットワークCNNとは何ですか?

CNN は、CV でよく知られているアプリケーション シナリオを報告しました。元の画像サイズを 10x10 とすると、下図に示すように、左半分はピクセル値が大きく明るい領域、右半分はピクセル値が小さく奥行きのある領域になります。中央の分割線が検出対象のエッジです。

「では、エッジを検出するにはどうすればよいでしょうか?」 このとき、下の図に示すように、カーネルのサイズは 3x3 です。

フィルターは入力画像上をスライドし、各領域で一瞬停止し、対応する要素を乗算して加算し、その後他の領域にスライドして元の画像の最後の領域にスライドするまで計算を続けます。この処理を「畳み込み」といいます

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

上の図から分かるように、出力結果は中央が明るい色、両側が暗い色になっており、元の画像の境界が修正されたことがわかります。反映されました。 「したがって、エッジ検出は入力画像と対応するフィルターの畳み込み演算を通じて認識されると結論付けることができます。」 さらに、ここでのスライディングには、上記の例では「ストライド」という基本概念も含まれます。ストライド 1 は、1 フレームをスライドするたびに合計 8x8 の領域にとどまることを意味するため、最終的な出力結果は 8x8 の行列になります。

「それで、畳み込みニューラル ネットワークとは一体何ですか?」

エッジ検出の特定のターゲット検出シナリオを上記で分析した後、CNN (畳み込みニューラル ネットワーク) がさまざまなフィルターを継続的に使用することを理解するのは難しくありません。局所的なものから全体的なものまで画像の特徴を抽出し、ターゲットを特定します。

ニューラル ネットワークでは、これらのフィルターの各数値がパラメーターであり、大量のデータを使用したトレーニング (つまり、深層学習のプロセス) を通じて取得できます。

CNNの基本概念

1.コンボリューション(Convolution)

(1)コンボリューション計算

コンボリューションは、画像処理で使用される数学的解析における積分変換手法であり、コンボリューションの離散形式です。畳み込みニューラル ネットワーク CNN では、畳み込み層の実装の本質は数学で定義される相互相関計算 (相互相関) です。具体的な計算過程を下図に示します。

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!その中には:

図 (a): 左側の図のサイズは 3×3 で、入力データが 3×3 の次元の 2 次元配列であることを示します。中央の図のサイズは 2×2 で、2 次元であることを示します。 -次元 2×2 の次元配列。「コンボリューション カーネル」とも呼ばれます。コンボリューション カーネルの左上隅は入力データの左上隅 (0,0) と位置合わせされ、2 つの対応する位置データが乗算されてから加算されて、コンボリューション出力 25 の最初の結果が得られます。

類推すると、図 (b)、(c)、(d) はそれぞれ畳み込み出力の 2 番目、3 番目、4 番目の出力結果です。

(2) 画像の畳み込み演算

では、画像の畳み込み演算とは一体何でしょうか?以下の図に示すように、カラー画像の畳み込みプロセスが示されています。

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

カラー画像のチャンネル 1 (赤)、チャンネル 2 (緑)、チャンネル 3 (青) には、それぞれ Kernel1、Kernel2、Kernel3 を使用します。各コンボリューション カーネルは、対応するモノクロ画像上をスライドし、各位置の小さな領域 (カーネル サイズ) 内のピクセル値とコンボリューション カーネルの対応する要素に対してポイントごとの乗算演算を実行し、これらの積を加算します。価値。次に、各チャネルから取得した値を加算し、全体のバイアスを加算して、対応する特徴マップの値を取得します。

3 次元効果を以下の図に示します。

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

2.パディング

上記のエッジ検出の例では、元の画像サイズが 10x10 で、フィルター処理後は 10x10 であることがわかります。 8×8。もう一度畳み込み演算を行うと、6x6 になります... この場合、次の 2 つの欠点があります:

  • 畳み込み演算を行うたびに、出力画像サイズが小さくなります
  • 隅のピクセルが少なくなる
エッジ領域が出力に使用されるため、画像のエッジ位置に関する多くの情報が失われやすくなります。

下の図に示すように、左上隅の赤い影は 1 つの出力によってのみ触れられますが、中央のピクセル (紫色のボックスでマークされている) には多くの 3x3 の領域が重なっています。したがって、コーナーまたはエッジ領域のピクセルは出力であまり使用されず、画像のエッジ位置に関する多くの情報が失われやすくなります。

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

この問題を解決するには、通常、畳み込み演算の前に、元の画像のエッジをピクセルのレイヤーで塗りつぶします。たとえば、10x10 の画像をピクセルのレイヤーで塗りつぶします。サイズは 12x12、体積は 8x8 で、元の画像と同じサイズになります。 これにより、元の画像のエッジ領域のピクセルを複数回使用できます。

    塗り潰すピクセル数を選択します。通常は 2 つのオプションがあります:
  • 同じ畳み込み: 前述したように、塗りつぶしと畳み込み後の画像のサイズは元の画像と同じです。
有効な畳み込み: 充填操作なし、直接畳み込み。

3.ストライド

ストライドの概念は序論で述べましたが、これは元の画像におけるフィルターの各スライドの水平方向と垂直方向の長さを表し、ステップ長とも呼ばれます。

s がストライド長、p がパディング長、元の画像サイズが nxn、フィルター サイズが fxf であると仮定すると、畳み込み画像サイズは次のようになります。 基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

4 の本質。プーリング 次元削減です。

畳み込みネットワークにおけるプーリング層の役割: 特徴マップのパラメータ量を減らし、計算速度を上げ、ダウンサンプリング操作である受容野を増やします。

オブジェクト検出で一般的に使用されるプーリング:最大プーリングと平均プーリング。

(1) Max pooling

とは、畳み込み演算を行わずにフィルタのスライディング領域内の最大値を取得することを意味します。数値が大きいということは、特定の特徴が検出され、他の値が無視される可能性があることを意味し、ノイズの影響が軽減され、モデルの堅牢性が向上します。 「さらに、Max poolingに必要なハイパーパラメータはフィルタサイズfとストライド長sだけです。他のパラメータを学習させる必要がなく、計算量が少ないです

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

(2) Average pooling

つまり、フィルター内でフィルターの摺動領域内の平均値を計算します。

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

5.Shape

多次元データ、特に画像データを扱う場合、Tensorflow と Pytorch データの Shape には違いがあります。

  • TensorFlow:(batch_size、高さ、幅、in_channels)
  • Pytorch:(batch_size、in_channels、高さ、幅)

ここで:

  • batch_size: バッチで処理されるサンプルの数。
  • in_channels: 入力画像のチャネル数。カラー画像の場合は通常 3 (赤、緑、青)。
  • 高さと幅はそれぞれ画像の高さと幅です。

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

上の図に示すように:

  • 入力画像の形状: [高さ、幅、チャネル]、つまり [8,8,3]、3 チャネル (R、 G、B)。
  • コンボリューション カーネルの形状: [kernel_height, kernel_width, in_channels, out_channels]、つまり [3,3,3,5]、3 つのチャネル (R、G、B)、出力チャネルを持つ 3x3 コンボリューション カーネルを示します。番号は5.
  • 出力画像の形状: [高さ、幅、out_channels]、つまり [6,6,5]、5 チャンネル (R、G、B) を持つ 6x6 出力画像を示します。
りー

8x8 画像と 3x3 コンボリューション カーネルの場合、出力サイズは (8 - 3 + 1) / 1 = 6 となるため、出力形状は [6, 6, 5] となり、5 つの出力チャネルを持つ 6x6 特徴マップを示します。 。

コンボリューションカーネルの入力チャンネル数 (in_channels) は、入力画像のチャンネル数によって決まります。例: RGB 形式の画像の入力チャンネル数は 3 です。

出力行列 (out_channels) のチャネル数は、コンボリューション カーネルの出力チャネル数、つまりコンボリューション カーネルが持つ異なるフィルターの数によって決まります。この例では、コンボリューション カーネルに 5 つのフィルターがあるため、出力には 5 つのチャネルがあります。

6. 活性化関数

すべてのマッピング関係が線形関係で正確に表現できるわけではありません。したがって、非線形マッピングを表現するには活性化関数が必要です。

活性化関数も非線形マッピングです。ニューラルネットワークを線形演算だけで積み重ねると複雑な表現空間を形成できず、高度な意味情報を抽出することが困難になるため、非線形のマッピング関係を追加する必要があります。

(1) シグモイド関数

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

シグモイド関数は、特徴を (0,1) 区間に圧縮します。0 端は抑制状態、1 端は活性化状態、中央部の勾配が最も大きい。

(2) Relu関数

整流線形単位(ReLU)。通常、勾配消失現象を軽減するために使用されます。

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

0未満の部分では、値と勾配は0、0より大きい導関数は1となり、シグモイド関数の勾配が0に近いことによって引き起こされる勾配消失の問題を回避します。

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

(3) Softmax 関数

複数のオブジェクト カテゴリに対してより一般的に使用される分類子は、Softmax 関数です。

特定の分類タスクでは、多くの場合、Softmax 関数の入力は複数のカテゴリのスコアであり、出力は各カテゴリに対応する確率です。すべてのカテゴリの確率値は 0 から 1 の間であり、合計は 1 です。

ソフトマックス関数の式は次のとおりです:

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

ここで、Vi は i 番目のカテゴリのスコアを表し、C は分類されたカテゴリの総数を表し、出力 Si は i 番目のカテゴリの確率を表します。

CNNの全体構造

畳み込みニューラルネットワークCNNは、入力層、畳み込み層、Relu、プーリング層、全結合層、出力層で構成されます。

下の図に示すように、畳み込みネットワークの最初の層は畳み込み層であり、その後に他の畳み込み層またはプーリング層が続き、最後の層は全結合層です。後のレイヤーは画像の大部分を識別し、前のレイヤーは通常、単純な特徴 (色やエッジなど) に焦点を当てます。画像データが CNN のレイヤーを進むにつれて、オブジェクトのより大きな要素や形状の識別が開始され、最終的に目的のオブジェクトが識別されます。

基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!

その中には:

  • 入力層: ネットワークへの入力として元の画像データを受け取ります。
  • 畳み込み層: フィルターと活性化関数で構成され、その主な機能はサンプルの特徴を抽出することです。これは、入力データ、フィルター (またはコンボリューション カーネル)、および特徴マップで構成されます。入力データが RGB 画像の場合、入力には高さ、幅、奥行きの 3 つの次元があることを意味します。フィルターの本質は 2 次元の重み行列であり、画像の受容野内を移動して特徴が存在するかどうかを確認します。畳み込み演算処理については上述した通りである。畳み込み層に一般的に設定されるハイパーパラメータには、フィルターの数、ストライド、パディング方法 (有効または同一)、活性化関数などが含まれます。
  • プーリング層: 本質は、画像の局所相関の原理を使用して、有用な情報を保持しながらデータ処理量を削減することです。
  • 全結合層: この層の各ノードは、前の層のすべてのノードに接続されており、以前に抽出された特徴を合成するために使用されます。通常、完全に接続された層には最も多くのパラメータがあります。
  • 出力層: 全結合層の情報に基づいて最も高い確率で結果を取得します。

CNNの利点

従来のニューラルネットワークと比較して、CNNにはローカル接続、重み共有などの利点があり、学習するパラメータの量が大幅に削減され、ネットワークの収束が速くなります。

  • 部分的に接続: 特徴マップの各出力値は入力画像のすべてのピクセル値に接続する必要はなく、適用されたフィルターの受容野にのみ接続する必要があるため、畳み込み層はしばしば「部分的に接続された層」、この特性はローカル接続とも呼ばれます。
  • ウェイト共有: コンボリューションカーネルが画像上を移動しても、そのウェイトは変更されません。それが体重共有です。

以上が基礎ゼロでも畳み込みニューラルネットワークの原理が理解できる!超詳しい!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CでDMA操作を理解する方法は? CでDMA操作を理解する方法は? Apr 28, 2025 pm 10:09 PM

CのDMAとは、直接メモリアクセステクノロジーであるDirectMemoryAccessを指し、ハードウェアデバイスがCPU介入なしでメモリに直接データを送信できるようにします。 1)DMA操作は、ハードウェアデバイスとドライバーに大きく依存しており、実装方法はシステムごとに異なります。 2)メモリへの直接アクセスは、セキュリティリスクをもたらす可能性があり、コードの正確性とセキュリティを確保する必要があります。 3)DMAはパフォーマンスを改善できますが、不適切な使用はシステムのパフォーマンスの低下につながる可能性があります。実践と学習を通じて、DMAを使用するスキルを習得し、高速データ送信やリアルタイム信号処理などのシナリオでその効果を最大化できます。

CでChronoライブラリを使用する方法は? CでChronoライブラリを使用する方法は? Apr 28, 2025 pm 10:18 PM

CでChronoライブラリを使用すると、時間と時間の間隔をより正確に制御できます。このライブラリの魅力を探りましょう。 CのChronoライブラリは、時間と時間の間隔に対処するための最新の方法を提供する標準ライブラリの一部です。 Time.HとCtimeに苦しんでいるプログラマーにとって、Chronoは間違いなく恩恵です。コードの読みやすさと保守性を向上させるだけでなく、より高い精度と柔軟性も提供します。基本から始めましょう。 Chronoライブラリには、主に次の重要なコンポーネントが含まれています。STD:: Chrono :: System_Clock:現在の時間を取得するために使用されるシステムクロックを表します。 STD :: Chron

定量的交換ランキング2025デジタル通貨のトップ10の推奨事項定量取引アプリ 定量的交換ランキング2025デジタル通貨のトップ10の推奨事項定量取引アプリ Apr 30, 2025 pm 07:24 PM

交換に組み込まれた量子化ツールには、1。Binance:Binance先物の定量的モジュール、低い取り扱い手数料を提供し、AIアシストトランザクションをサポートします。 2。OKX(OUYI):マルチアカウント管理とインテリジェントな注文ルーティングをサポートし、制度レベルのリスク制御を提供します。独立した定量的戦略プラットフォームには、3。3Commas:ドラッグアンドドロップ戦略ジェネレーター、マルチプラットフォームヘッジアービトラージに適しています。 4。Quadency:カスタマイズされたリスクしきい値をサポートするプロフェッショナルレベルのアルゴリズム戦略ライブラリ。 5。Pionex:組み込み16のプリセット戦略、低い取引手数料。垂直ドメインツールには、6。cryptohopper:クラウドベースの定量的プラットフォーム、150の技術指標をサポートします。 7。BITSGAP:

CでハイDPIディスプレイを処理する方法は? CでハイDPIディスプレイを処理する方法は? Apr 28, 2025 pm 09:57 PM

CでのハイDPIディスプレイの取り扱いは、次の手順で達成できます。1)DPIを理解してスケーリングし、オペレーティングシステムAPIを使用してDPI情報を取得し、グラフィックスの出力を調整します。 2)クロスプラットフォームの互換性を処理し、SDLやQTなどのクロスプラットフォームグラフィックライブラリを使用します。 3)パフォーマンスの最適化を実行し、キャッシュ、ハードウェアアクセラレーション、および詳細レベルの動的調整によりパフォーマンスを改善します。 4)ぼやけたテキストやインターフェイス要素などの一般的な問題を解決し、DPIスケーリングを正しく適用することで解決します。

Cのリアルタイムオペレーティングシステムプログラミングとは何ですか? Cのリアルタイムオペレーティングシステムプログラミングとは何ですか? Apr 28, 2025 pm 10:15 PM

Cは、リアルタイムオペレーティングシステム(RTOS)プログラミングでうまく機能し、効率的な実行効率と正確な時間管理を提供します。 1)Cハードウェアリソースの直接的な動作と効率的なメモリ管理を通じて、RTOのニーズを満たします。 2)オブジェクト指向の機能を使用して、Cは柔軟なタスクスケジューリングシステムを設計できます。 3)Cは効率的な割り込み処理をサポートしますが、リアルタイムを確保するには、動的メモリの割り当てと例外処理を避ける必要があります。 4)テンプレートプログラミングとインライン関数は、パフォーマンスの最適化に役立ちます。 5)実際のアプリケーションでは、Cを使用して効率的なロギングシステムを実装できます。

Cのスレッドパフォーマンスを測定する方法は? Cのスレッドパフォーマンスを測定する方法は? Apr 28, 2025 pm 10:21 PM

Cのスレッドパフォーマンスの測定は、標準ライブラリのタイミングツール、パフォーマンス分析ツール、およびカスタムタイマーを使用できます。 1.ライブラリを使用して、実行時間を測定します。 2。パフォーマンス分析にはGPROFを使用します。手順には、コンピレーション中に-pgオプションを追加し、プログラムを実行してGmon.outファイルを生成し、パフォーマンスレポートの生成が含まれます。 3. ValgrindのCallGrindモジュールを使用して、より詳細な分析を実行します。手順には、プログラムを実行してCallGrind.outファイルを生成し、Kcachegrindを使用して結果を表示することが含まれます。 4.カスタムタイマーは、特定のコードセグメントの実行時間を柔軟に測定できます。これらの方法は、スレッドのパフォーマンスを完全に理解し、コードを最適化するのに役立ちます。

Cで文字列ストリームを使用する方法は? Cで文字列ストリームを使用する方法は? Apr 28, 2025 pm 09:12 PM

Cで文字列ストリームを使用するための主な手順と予防策は次のとおりです。1。出力文字列ストリームを作成し、整数を文字列に変換するなどのデータを変換します。 2。ベクトルを文字列に変換するなど、複雑なデータ構造のシリアル化に適用します。 3.パフォーマンスの問題に注意を払い、大量のデータを処理するときに文字列ストリームを頻繁に使用することを避けます。 std :: stringの追加方法を使用することを検討できます。 4.メモリ管理に注意を払い、ストリングストリームオブジェクトの頻繁な作成と破壊を避けます。 std :: stringstreamを再利用または使用できます。

MySQLにデータを挿入する効率的な方法 MySQLにデータを挿入する効率的な方法 Apr 29, 2025 pm 04:18 PM

MySQLでデータを挿入するための効率的な方法には、次のものが含まれます。1。insertInto ...値構文、2。LoadDatainFileコマンドの使用、3。トランザクション処理の使用、4。バッチサイズの調整、5。Insurtignoreまたは挿入の使用...

See all articles