畳み込みニューラルネットワークの概要

畳み込み神経ネットワークは、要約し続けます:

再版部分:https//blog.csdn.net/qq_42156420/article/details/81291482


上の写真は、3×3フィルターを使用した畳み込みを示しています。上の写真では、マトリックスに適用されているスライディングウィンドウは緑で、スライディングウィンドウマトリックスは赤です。出力は畳み込み特徴行列です。
下の図は、2つの長方形パルス(青と赤)の畳み込み演算とその結果を示しています。


これを大文字の「A」の画像に拡張してみましょう。画像がピクセルで構成されていることはわかっています。したがって、入力マトリックスは「A」です。選択するスライディングウィンドウ方程式はランダム行列gです。次の図は、このマトリックスドット積の畳み込み出力を示しています。

 

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

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

フィルタまたはカーネル関数:RiverTrailの次の画像に示すように、フィルタまたはカーネル関数は画像の各位置にスライドして新しいピクセルを計算します。このピクセルの値はその値です。すべてのピクセルの加重和。上記のスプレッドシートの例では、フィルターはgであり、fの入力行列を通過します。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

出典: http //intellabs.github.io/RiverTrail/tutorial/

畳み込み層:入力行列とフィルターのドット積によって形成される新しい行列は、畳み込み行列または畳み込み層と呼ばれます。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

出典: https //docs.gimp.org/en/plug-in-convmatrix.html

次のURLには、塗りつぶし、ストライド、転置がどのように機能するかを説明する優れた視覚的な図があります。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

σ(x)= 1 /(1 + exp(−x))

双曲線正接関数:間隔(-1、1)に入力された実際の値を絞ります

tanh(x)=2σ(2x)-1

履歴書

ReLUはRectifiedLinearUnitの略です。これは、畳み込み画像の行列など、入力がxである最大値関数(x、0)です。次に、ReLUは行列xのすべての負の値をゼロに設定し、他のすべての値を変更せずに保持します。ReLUは畳み込み後に計算されるため、双曲線正接や双曲線関数などの非線形アクティベーション関数があります。Geoff Hintonは、彼のネイチャーペーパーでこの問題について最初に議論しました。

ELU

指数線形ユニットは、平均アクティベーションをゼロに近づけようとします。これにより、学習をスピードアップできます。ELUは、正の値によって消える勾配の出現を回避することもできます。調査によると、ELUはReLUよりも分類精度が高いことがわかっています。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

ここで、aiは間隔(1、正の無限大)の固定パラメーターです。

パラメトリック補正リニアユニット(PReLU)

PReLUは、リークのあるReLUのバリアントと見なすことができます。PReLUでは、負の部分の傾きは、事前定義ではなく、データから学習されます。PReLUの作成者は、ImageNet分類(Russakovsky et al。、2015)タスクで(マシン)が人間レベルを超えることが重要な要因であると主張しています。これは基本的にリークのあるReLUと同じですが、唯一の違いはaiが逆伝播トレーニングを通じて学習されることです。

ランダムリーク補正リニアユニット(RReLU)

ランダムリーク単調線形ユニット(RReLU)も、リークReLUの変形です。RReLUでは、負の部分の傾きが特定のトレーニング範囲内でランダムに選択され、テストで固定されます。RReLUの最も重要な機能は、トレーニングプロセス中に、ajiが均一な分布U(l、u)からサンプリングされたランダムな数値であることです。正式な数式は次のとおりです。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

以下に、ReLU、リーキーReLU、PReLU、およびReLUの比較を示します。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

出典: https //arxiv.org/pdf/1505.00853.pdf。ReLU、リークのあるReLU、PReLU、およびReLU、PReLUの場合はaiが学習され、リークのあるReLUの場合はaiが修正されます。RReLUの場合、ajiは特定の間隔でサンプリングされたランダム変数であり、テスト中は一定のままです。

ノイズ活性化機能

これらは、ガウスノイズ(ガウスノイズ)を含むように拡張されたアクティベーション関数です。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

出典:ウィキペディア

プーリング層

プーリング層の目標は、マトリックスのサイズを徐々に小さくして、ネットワーク内のパラメーターの数と計算を減らし、オーバーフィットを制御することです。プーリングレイヤーは、入力の各深度スライスで独立して動作し、最大化および平均化操作を使用してその空間サイズをリセットします。最も一般的な形式であるストライド2、サイズ2x2フィルターを備えたプーリングレイヤーは、入力の各深度スライスを幅と高さに沿って振幅2でダウンサンプリングし、アクティベーション値の75%を破棄します。 。この場合、各最大操作は最大4つの数値を取ります(一部の深度スライスの小さな2x2領域)。深さの寸法は変更されません。より一般的には、プーリング層は次のとおりです。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

出典:  http //cs231n.github.io/convolutional-networks/#pool

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

出典: https //ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/

注:ここでは、2 x 2ウィンドウを2つのセル(ストライドとも呼ばれます)だけスライドさせ、各領域の最大値を取得します。

バッチ正規化レイヤー:

バッチ正規化は、各中間層の重量と活性化機能を正規化する効果的な方法です。バッチ正規化には、2つの主な利点があります。

1.モデルにバッチ正規化を追加すると、トレーニング速度が10倍以上向上します。

2.正規化は、リモートで入力する小さな数値がトレーニングに過度に影響を与える能力を大幅に低下させるため、オーバーフィットを減らすこともできます。

完全に接続されたレイヤー:

完全に接続されたレイヤーは、出力レイヤーでSoftmax関数を使用する従来のマルチレイヤーパーセプトロンです。「完全に接続された」という用語は、前の層と次の層のすべてのニューロンが接続されていることを意味します。Softmax関数は、ロジスティック関数の一般化であり、値間隔が任意の実数であるK次元ベクトルを、値間隔が(0,1)で合計が1であるKに「圧縮」します。次元ベクトル。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

出典:ウィキペディア

Sofxmaxアクティベーションは通常、完全に接続された最終レイヤーで使用され、その値が0から1の間で変化し続けるため、確率が取得されます。

これで、CNNのさまざまなレベルの特定の概念ができました。この知識を使用して、肺がんの検出に必要な深層学習アルゴリズムを開発できます。

第三部

最後のパートでは、畳み込みニューラルネットワークを介した深層学習の基本的な知識について説明します。この記事では、KerasとTheanoを使用した基本的な詳細な学習に焦点を当てます。基本的な予測分析にKerasを使用した例と、VGGを使用した画像分析の簡単な例の2つの例を示します。

私はこのトピックの幅と深さを認識しており、解釈するにはさらに多くの記事が必要です。次の記事では、医療画像フォーマットにおけるDICOMとNIFTIの違いについて説明し、学習範囲をさ​​らに拡大して、2次元肺セグメンテーション分析にディープラーニングを使用する方法について説明します。次に、3D肺セグメンテーションに移動します。また、深層学習の前に医療画像分析を実行する方法と、現在それを実行する方法についても説明します。これをまとめてくれた新しいパートナー、Flavio Trolese(4Quantのパートナー)、Kevin Mader(4Quantの共同創設者)、Cyriac Joshy(ETHチューリッヒ、スイスの講師)にとても満足しています。

この記事では、Kerasについて説明し、2つの例を使用して、単純な予測分析タスクと画像分析にKerasを使用する方法を示します。

ケラスとは何ですか?

これがKerasのWebサイトで紹介されている方法です。KerasはTheanoとTensorFlowのディープラーニングライブラリです。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

Keras APIは、TheanoとTensorFlowの上で実行されます

Kerasは高度なニューラルネットワークAPIであり、Pythonで記述され、TensorFlowとTheano上で実行されます。その開発の目的は、迅速な実験を可能にすることです。

TheanoとTensorFlowとは何ですか?

Scipy2010でJamesBergstra博士らによってリリースされたTheanoは、CPUおよびGPU数式コンパイラです。これは、多次元配列を含む数式を効率的に定義、最適化、および評価できるようにするPythonライブラリです。Theanoは、YoshuaBengioやMontrealInstitute of Learning Algorithms(MILA)などの上級研究者によって共同で完成されました。Scipy2010に関する素晴らしいTheanoチュートリアル。次の図は、2010年現在のTheanoGPUおよびCPUと他のツールとの比較を示しています。結果は、もともと記事「Theano:PythonのCPUおよびGPU数学コンパイラ」で公開されました。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

Pylearn2とGroundHog(MILAによって開発された)、Lasagne、Blocks、Fuelなど、Theano上に構築された他のライブラリがあります。

TensorFlowは、GoogleBrainチームの研究者とエンジニアによって開発されました。機械学習やディープニューラルネットワーク研究用に開発されましたが、他の分野にも適しています。そのウェブサイトで説明されているように、TensorFlowはデータフローグラフを使用した数値計算のためのオープンソースソフトウェアライブラリです。グラフのノードは数学演算を表し、グラフのエッジはノード間で渡される多次元データ配列(テンサー)を表します。コードの視覚化を次の図に示します。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

TensorFlow:異種分散システムでの大規模な機械学習

ケラスを使用した予測分析の例

この例では、UCI WebサイトのSonarデータセットを使用して、単純な予測モデルを構築します。以下のコードでは、UCI Webサイトから直接データを取得し、60:40の比率でトレーニングセットとテストセットに分割します。予測モデルではKerasを使用し、ラベルエンコーディングではsklearnを使用します。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

次のコードでは、データセットを読み取り、上記で定義した関数を使用してデータを表示します。データセットを出力し、コーディングする必要のある従属変数を見つけます。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

ラベルのエンコードにはscikit-learnのLabelEncoderを使用し、RとMを0と1の数字に隠します。このような操作は、ワンホットエンコーディングと呼ばれます。ワンホットエンコーディングは、分類機能をよりアルゴリズムに適した形式に変換できます。この例では、「R」値と「M」値を使用してY変数を分類します。タグエンコーダーを使用して、それぞれ「1」と「0」に変換されます。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

scikit-learn中的LabelEncoder

次に、Kerasを使用してモデルを作成します。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

前処理なしの単純なモデルの精度は81.64%です

ケラスを使用した画像分析の例

Kerasを使用した画像処理について説明するために、Kaggleコンペティション(犬と猫)のデータを使用します(https://www.kaggle.com/c/dogs-vs-cats)。コンテストの目的は、画像に犬と猫のどちらが含まれているかを区別するアルゴリズムを開発することです。この作業は人、犬、猫にとっては簡単ですが、コンピューターでは実行が困難です。このチャレンジでは、タグ付けされた犬と猫の写真が25,000枚あり、テストセットには12,500枚あります。チャレンジでは、タグ付けを試みる必要があります。KaggleのWebサイトによると、競争が始まったとき(2013年末):

現在の最良:現在の文献は、機械分類器がこのタスクで80%を超える精度を達成できることを示しています。したがって、80%を超えることができれば、2013年に最前線に立つことになります。「」

Fast.aiのMOOCを見て、次のステップと深層学習の最先端の研究について学ぶことを強くお勧めします。私は次のコードでfast.aiを引用しました。これは良い出発点です、リンク:http://www.fast.ai/

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

ステップ1:セットアップ

KaggleのWebサイトから犬と猫のデータをダウンロードし、ラップトップに保存します。この記事の例はすべてMacで実行されます。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

基本設定

Jeremy Howardは、基本的な機能をカプセル化するのに役立つ便利なPythonファイルをクラスで提供しました。最初の部分では、この便利なファイルを使用します。クリックしてダウンロード:https://github.com/fastai/courses/blob/master/deeplearning1/nbs/utils.py。詳細については、ファイルを解凍して、その背後にあるコンテンツを確認します。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

ステップ2:VGGを使用する

最初のステップは、私たちのために作成されたモデルを使用することです。このモデルは、多くのカテゴリ(1,000種類)の画像を認識できます。2014年のImageNetコンペティションで優勝した非常にシンプルな作成と理解のモデルである「VGG」を使用します。VGG ImageNetチームは、より大きく、より遅く、わずかに正確なモデル(VGG 19)と、より小さく、より速いモデル(VGG 16)を作成しました。VGG 19のパフォーマンスの低下は、精度のわずかな向上と同じではないため、VGG16を使用します。

PythonクラスVgg16を作成しました。これにより、VGG16モデルの使用が非常に簡単になります。Vgg 16は、fast.aiのGitHubからも入手できます:https://github.com/fastai/courses/blob/master/deeplearning1/nbs/vgg16.py

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

ステップ3:VGGをインスタンス化する

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

Vgg16はKeras上に構築されています(後で詳しく説明します)。Kerasは柔軟で使いやすい深層学習ライブラリであり、TheanoまたはTensorflowに基づく深層学習フレームワークです。Kerasは、固定ディレクトリ構造を使用して、画像とラベルグループをバッチで読み取ります。各カテゴリの画像は、別々のフォルダに配置する必要があります。

トレーニングフォルダからバッチデータを取得します。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

ステップ4:犬と猫を予測する

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

ステップ5:ファイルを要約してエンコードする

この記事を要約すると、私が犬と猫に推奨する分類方法は次のとおりです。

Pythonは医学でも使用できます! これは私のチタン合金の目を明るくしました! 深い学習

 

総括する

読者がこのステップに進むと、記事の前の部分で説明した理論が実際に実現され、実際のプログラミング作業がいくつか実行されます。読者が上記の手順に従ってこれら2つのケースを実装すると、Kerasを使用した最初の予測モデルが完成し、画像分析も最初に実装されます。コードの長さのため、ここでは詳細については説明せず、リンクのみを示します。リンクの表示について質問がある場合は、fast.aiにお問い合わせください。

これまでのところ、データベースの初期インストールから医療画像データ形式の解釈まで、医療画像処理の基本的な知識を持っています。次に、畳み込みの定義からCNNの詳細な構造と原理まで、さらなる実践のための理論的基礎の蓄積を完了しました。最後の部分では、以前の理論的知識を実践し、このエキサイティングなモデルをPythonで実装します。したがって、読者がこの段階的なプロセスで医療画像処理の喜びを本当に感じることができることを願っています。

おすすめ

転載: blog.csdn.net/luoyir1997/article/details/109014581