“早く私を襲ったことの一つは、あなたが出てくるだろうものを写真に入れ または、その逆に、出てくるものはあなたが入れたものではありません。”
-Diane Arbus
誰かがあなたを持っているかもしれない写真を投稿したという通知がお気に入りのソーシャルネットワークにポッそれは正しいです。
それは正しいです。
それは今まであなたの最悪の写真です。
それはあなたの最悪の写真です。
DIV>
それはどうなったのですか?
画像分類!
畳み込みニューラルネットワーク(CNN)は、深層学習ニューラルネットワークのクラスです。 Cnnは、画像認識における大きなブレークスルーを表しています。 これらは、視覚的な画像を分析するために最も一般的に使用され、画像分類の舞台裏で頻繁に使用されています。 彼らは、Facebookの写真のタグ付けから自動運転車に至るまで、すべての中核にあります。 彼らは、医療からセキュリティまでのすべての舞台裏で懸命に働いています。彼らは速く、効率的です。
しかし、彼らはどのように動作しますか?
画像分類は、入力(画像のような)を取得し、クラス(”猫”のような)または入力が特定のクラスである確率(”この入力が猫である確率は90%です”)を出力するプ あなたは絵を見て、あなた自身の顔のひどいショットを見ていることを知ることができますが、どのようにコンピュータがそれを行うことを学ぶこ
畳み込みニューラルネットワークで!
CNNには
- 畳み込み層
- ReLU層
- プーリング層
- 完全に接続された層
古典的なCNNアーキテクチャは次のようになります:
Input ->Convolution ->ReLU ->Convolution ->ReLU ->Pooling ->
ReLU ->Convolution ->ReLU ->Pooling ->Fully Connected
A CNN convolves (not convolutes…) learned features with input data and uses 2D convolutional layers. This means that this type of network is ideal for processing 2D images. 他の画像分類アルゴリズムと比較して、Cnnは実際にはほとんど前処理を使用しません。 これは、彼らが他のアルゴリズムで手作りする必要があるフィルタを学ぶことができることを意味します。 CNNは、画像およびビデオ認識、画像分類、および推奨システムから自然言語処理および医用画像解析まで、数多くのアプリケーションで使用できます。
Cnnは生物学的プロセスに触発されています。 彼らは猫やサルのビジョンに関する60年代にHubelとWieselによって行われたいくつかのクールな研究に基づいています。 CNNにおける接続のパターンは、視覚野の組織に関する彼らの研究から来ています。 哺乳動物の眼では、個々のニューロンは、制限された領域である受容野においてのみ視覚刺激に応答する。 異なる領域の受容野は部分的に重なり合っており、視野全体が覆われています。 これはCNNが動作する方法です!p>

cnnは、入力層、出力層、および隠された層を持っています。 隠れ層は、通常、畳み込み層、ReLU層、プーリング層、および完全に接続された層で構成されます。
- たたみ込み層は、たたみ込み演算を入力に適用します。 これにより、次のレイヤーに情報が渡されます。
- プーリングは、ニューロンのクラスターの出力を次の層の単一のニューロンに結合します。
- 完全に接続された層は、ある層のすべてのニューロンを次の層のすべてのニューロンに接続します。
畳み込み層では、ニューロンは前の層のサブエリアからの入力のみを受信します。 完全に接続された層では、各ニューロンは前の層のすべての要素から入力を受け取ります。CNNは、画像から特徴を抽出することによって動作します。
これにより、手動で特徴を抽出する必要がなくなります。 機能は訓練されていません! ネットワークが一連の画像を訓練している間に学習されます。 これにより、深層学習モデルはコンピュータビジョンタスクに対して非常に正確になります。 CNNは、数十または数百の隠れ層を介して特徴検出を学習します。 各レイヤーは、学習されたフィーチャの複雑さを増加させます。
CNN
- 入力画像で始まります
- フィーチャマップを作成するために、それに多くの異な非線形性を高める関数
- 各フィーチャマップにプーリングレイヤーを適用します
- プールされた画像を一つの長いベクトルに平坦化します。
- ベクトルを完全に接続された人工ニューラルネットワークに入力します。
- は、ネットワークを介してフィーチャを処理します。 最終的な完全に接続された層は、私たちが後にしているクラスの”投票”を提供します。
- は、多くの、多くのエポックのための前方伝播と逆伝播を介して訓練します。 これは、訓練された重みと特徴検出器を備えた明確に定義されたニューラルネットワークが得られるまで繰り返されます。
だからそれはどういう意味ですか?
このプロセスの最初に、入力画像がピクセルに分割されます。
白黒画像の場合、それらのピクセルは2D配列(たとえば、2×2ピクセル)として解釈されます。 すべてのピクセルの値は0~255です。 (ゼロは完全に黒で、255は完全に白です。 これらの数字の間にグレースケールが存在します。)その情報に基づいて、コンピュータはデータの作業を開始することができます。カラー画像の場合、これは青色のレイヤー、緑色のレイヤー、および赤色のレイヤーを持つ3D配列です。 これらの色のそれぞれには、0から255の間の独自の値があります。 色は、3つのレイヤーのそれぞれの値を組み合わせることで見つけることができます。
畳み込み
畳み込みステップの主な目的は、入力画像から特徴を抽出することです。 畳み込み層は常にCNNの最初のステップです。
入力画像、フィーチャディテクタ、およびフィーチャマップがあります。 フィルタを取得し、ピクセルブロックごとにピクセルブロックを入力画像に適用します。 これは、行列の乗算によって行います。懐中電灯とバブルラップのシートがあるとしましょう。
あなたは懐中電灯とバブルラップのシートがあるとしましょう。
あなたの懐中電灯は、5バブル×5バブルエリアを照らします。 シート全体を見るには、すべての泡が見えるまで、各5×5の正方形を横切って懐中電灯をスライドさせます。p>

フィルターの深さは入力の深さと同じでなければならないので、カラー画像を見ていると深さは3になります。 これにより、このフィルタの寸法は5x5x3になります。 各位置で、フィルターはフィルター内の値をピクセル内の元の値と乗算します。 これは要素ごとの乗算です。 乗算が合計され、単一の数値が作成されます。 バブルラップの左上隅から開始した場合、この番号は左上隅を表します。 今、あなたは次の位置にフィルタを移動し、すべてのバブルラップの周りのプロセスを繰り返します。 あなたが終わる配列は、フィーチャマップまたは活性化マップと呼ばれます! 複数のフィルターを使用すると、空間的な関係を維持するのにより良い仕事をすることができます。P>
フィルタの数、フィルタサイズ、ネットワークのアーキテクチャなどのパラメータを指定します。 CNNは、トレーニングプロセス中に独自にフィルタの値を学習します。 あなたはあなたの仕事のために最高の画像分類器を可能にするためにあなたが働くことができる多くのオプションを持っています。 入力イメージ行列の境界要素にフィルターを適用するには、入力行列にゼロをパディング(ゼロパディング)することを選択できます。 これにより、フィーチャマップのサイズを制御することもできます。 ゼロパディングを追加すると、広い畳み込みです。 ゼロパディングを追加しないことは狭い畳み込みです。
これは基本的に画像を検出する方法です! 私たちは、画像のすべての単一のピクセルを見ていません。 私たちは、帽子、赤いドレス、入れ墨などの機能を参照してください。 私たちの目には常に多くの情報が入っているので、そのすべてのピクセルに対処することはできませんでした。 私たちはモデルに同じことをさせています。
この結果は、畳み込みフィーチャマップです。 元の入力画像よりも小さいです。 これにより、対処がより簡単かつ迅速になります。 私たちは情報を失うのですか? いくつか、はい。 しかし、同時に、特徴検出器の目的は、特徴を検出することであり、これはまさにこれが行うことである。
最初の畳み込みレイヤーを取得するために、多くのフィーチャマップを作成します。 これは私達がプログラムが学ぶのに使用できる多くの異なった特徴を識別することを可能にする。
特徴検出器は、異なる結果を得るために異なる値で設定することができます。 例えば、画像を鮮明にして焦点を合わせたり、画像をぼかすことができるフィルタを適用することができる。 それはすべての値に等しい重要性を与えるでしょう。 エッジ強調、エッジ検出などを行うことができます。 これを行うには、異なるフィーチャディテクタを適用して異なるフィーチャマップを作成します。 コンピュータは、どのフィルタが最も理にかなっているかを判断し、それらを適用することができます。ここでの主な目的は、画像内のフィーチャを見つけてフィーチャマップに入れ、ピクセル間の空間的関係を維持することです。
ピクセルがすべてごちゃ混ぜ取得しないように、それは重要です。
このようなものを視覚化してみましょう!
言こんにちはに僕は友達が少ない:

We’re going to use this guy for our input image.
We’ll make him black and white

Let’s define and visualize our filters
import numpy as npfilter_vals = np.array(, , , ])print('Filter shape: ', filter_vals.shape)
Filter shape: (4,4)
そして、我々が参照してください:
Filter 1:
]
ここで私たちの四つのフィルタの可視化です

畳み込みレイヤーを定義しましょう(私は今pytorchを愛しているので、ここで使用しています。)
私たちは見ていきます
Net(
(conv): Conv2d(1, 4, kernel_size=(4, 4), stride=(1, 1), bias=False)
)
もう少しコードを追加
その後、もう少し
そして、ReLu活性化関数が適用される前に畳み込み層の出力/div>エッジ検出フィルタとしてsobel演算子を使用してカスタムカーネルを作成します。 Sobelフィルタは、エッジ検出に非常に一般的に使用されます。 これは、画像内の強度のパターンを見つけるのは良い仕事をしていません。 画像にSobelフィルターを適用すると、画像の導関数をx方向またはy方向に別々に近似することができます。
私たちは、フィルタリングのために私たちの小さな男をグレースケールに変換します
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)plt.imshow(gray, cmap='gray')

ここで私たちは行きます!ianxin Wuによる畳み込みニューラルネットワークの紹介を見てみましょう
ReLU層
ReLU(整流線形単位)層は、畳み込み層のもう一つのステップです。 アクティブ化機能をフィーチャマップに適用して、ネットワークの非線形性を向上させています。 これは、画像自体が非常に非線形であるためです! ゼロに設定することで、アクティベーションマップから負の値を削除します。畳み込みは、要素ごとの行列の乗算や加算のような線形演算です。 CNNに学習させたい実世界のデータは非線形になります。 私たちはそれをReLUのような操作で説明できます。 Tanhやsigmoidなどの他の操作を使用できます。 しかし、ReLUは、一般化の精度に大きなペナルティを与えることなく、ネットワークをより速く訓練することができるため、一般的な選択です。
C.-C.Jay Kuo数学モデルを使った畳み込みニューラルネットワークの理解をチェックしてください。
もっと深く掘り下げたいですか?
などを試してみてください。 整流器に深く掘り下げる:ImageNetの分類の人間レベルの性能を越える。あなたは活性化機能の絶対的な基本についてもう少し情報が必要な場合は、ここでそれを見つけることができます!
私たちの小さなバディがReLU活性化関数を見ていると、すべての負のピクセル値が黒になります
viz_layer(activated_layer)