Winograd、GEMMアルゴリズムの概要(CNNでの効率的な畳み込みの実装)(パート2)

 

 

               CNNの高効率畳み込み実装アルゴリズムとアプリケーションの概要(以下)

紙の分析

1.畳み込みニューラルネットワークの高速アルゴリズム

分析された最初の記事は16年ぶりのCVPRでした。CVPRにWinogradアルゴリズムが導入されたのは初めてだったため、Winogradアルゴリズムの原理、行列の操作と変換を最適化せずに紹介し、行列式に従って直接操作しました。 。これはFFTと比較されます。現在、高速で高いFLOPSインジケーターを追求する中で、同じタスクを完了するMACC操作が少ないほど、効率が高くなるようです。これは、CNNのネットワークプルーニングにおける重要な指標です。同時に、目的のためにFLOPSとネットワークパラメータサイズを増やします。FFTは支配的ではありません。著者は、cuDNNのTFLOPSとWinogradアルゴリズムを比較します。その中で、WinogradアルゴリズムF(2x2,3x3)は、前回のレビューで理論を詳細に分析しました。理解できない場合は、前回の総説効率的な畳み込み実装アルゴリズムとアプリケーションの概要(上))を確認してくださいhttps://blog.csdn.net/qq_32998593/article/details/86177151

処理速度とTFLOPSの比較
処理時間とTFLOPSの比較

上記の表から、WinogradアルゴリズムのTFLOPSはcuDNNよりも計算パフォーマンスが高く、同じネットワークの処理時間は短いことがわかります。

上の図からわかるように、Winogradアルゴリズムは、cuDNNのGEMMアルゴリズムよりも高い計算能力と少ない操作数を備えています。

 

2.  FPGAでの畳み込みニューラルネットワークのための高速アルゴリズムの評価

以下は、17年間にFCCMで発表された論文であるShangtangでのWinogradアルゴリズムのFPGA実装です

乗算の代わりにさらに加算を使用します。従来の畳み込みの実装には6層のループが必要ですが、Winogradアルゴリズムを使用すると、4層のループのみが必要になります。

元の畳み込み演算を使用するには、6層のforループ演算が必要です。Winogradアルゴリズムでは、内部の2つのレイヤーで、計算モジュールWinograd(X、F、Y)を呼び出すだけで、畳み込みパラメーターを直接計算できます。60%以上少ない乗算演算。FPGAの実装では、最初に乗算の直接計算を避け、代わりにシフトを使用してみてください。このような高価な乗算リソースを備えたFPGAでは、このWinogradアルゴリズムにより、乗算演算を減らすことができます。これは、もちろん業界で非常に人気があります。FPGAでのWinogradアルゴリズムの効率的な実装に専念する多数の研究者を招きました。

作成者は、ラインバッファアーキテクチャを使用して入力データをキャッシュすると同時に、カーネルの各セットをキャッシュから取り出し、Winograd行列乗算用に設計されたPEモジュールに配置します。

ここでの具体的な目的は、モジュールに従って各関数を分割し、BlockRAMであるオンチップラインバッファーを使用してキャッシュし、6行ごとにWinograd畳み込みを行うことです。その後、ストライドは4になります。PEは特別なWinogradコンボリューションモジュールです。次の図は、特定の操作を示しています。

各行列の変換に必要な行列は固定されています(A、B、G)はオフラインであり、行列の乗算は4つのステップに分割され、オンチップBRAMを保存するために、最初に入力とフィルターを変換します。ここで使用されるのは、変換行列BおよびGの特性により、LUTが実行されるため、ビット演算のみが必要です。2番目のステップはEWMM計算を実行することであり、3番目のステップはYの変換行列を計算することであり、最後にチャネルに従って累積して対応する出力を取得します。

比較のための指標には、GOP / sとエネルギー効率GOP / s / Wが含まれます。これは、FPGA開発プラットフォームを通じて評価できます。

AlexNetと比較すると、他のプラットフォームと比較して、ZYNQの販売量は10倍以上増加しています。

VGGの実装とは対照的に、他の元の実装と比較して、Winograd畳み込みアルゴリズムの実装は約8.7倍改善されています。

GPUと比較すると、効率もある程度向上しています。(PS:ピークコンピューティングと比較すると、スループット、TOP、TOPはGPUよりも優れていませんが、消費電力が含まれると、ワット数はGPUよりもはるかに高くなります。電力効率は1桁ではありません。)

3. 効率的なスパース-ウィノグラード畳み込みニューラルネットワーク

これはMITHan Songが監督し、ICLR 2018会議で公開された論文です。彼のスタイルを継続し、ネットワークを整理し、スパースし、計算プロセスでの乗算の数を減らします。スパース性を畳み込み変換に導入します。

剪定後のスパース性は、Winograd畳み込みの実現に使用されます。これにより、乗算の数が完全に削減されます。これは、ほぼ10.4倍、6.8倍、および10.8倍の削減です。従来のアルゴリズムでReLUとPruneを実行する場合、変換前はアクティベーションレイヤーとカーネルレイヤーがスパースになりB ^ T(入力)B、G(フィルター)G ^ Tます。変換後、EWMMを実行すると、乗算の数を減らすことなく、非スパース乗算が同じになります。作成者はReLUとPruneの前に変更するため、スパース演算後の行列はWinogradアルゴリズムに直接使用できる行列になり、乗算の数が減ります。

特定の内容は論文で見ることができます。この図は非常に明確に説明しています。異なる場所に追加された同じスパースメソッドは、結果に異なる影響を及ぼします。

スパース化の式は次のとおりです。

CIFAR10でのVGGの精度の最終比較では、高密度剪定の場合、最終的な分類精度がそれほど低下しないことがわかります。また、13.3倍の計算負荷が軽減されます。重みの数を減らし、乗算の数を減らします。

他のデータセット、ImageNet、CIFAR100、Resnet実装などの比較については、ペーパーを確認できます。

 

4.  FPGA上に2Dおよび3D CNNsを加速するための統一テンプレートベースのアーキテクチャに向けて

これは、FPGA 2018のトップミーティングで発表された論文です。著者は、Winogradアルゴリズムの2D畳み込みを3D畳み込みに拡張し、FPGAに実装しました。統一された計算テンプレートが確立されました。具体的な概略図を図に示します。

行列の変換と畳み込みの演算はすべて全体として行われるため、乗算の数が減り、FPGAの乗算器リソースが節約されます。

この畳み込みの実装を2番目のペーパー(FPGAでのShangtangの実装図)と比較すると、2つのペーパーのforループの層数が同じであることがわかります。処理を増やすと、元の2D行列の乗算は3Dに拡張できます。実現プロセスはより複雑です。

具体的な実装プロセスを上の図に示します。行列を転置して行列を乗算し、最初にテンプレートで変換し、最後にPEでWinogradの最後の要素ごとの行列乗算を実行します。実際、このモジュールはSenseTimeの記事と非常によく似ており、全体のフローと処理構造は非常に似ていることがわかります。

最終評価結果から、性能が大幅に向上していることがわかります。1.0TOPSを超えました。より多くのコンテンツを論文で見ることができます。

 

前回のレビューでのWinogradアルゴリズム、GEMM、およびその他の効率的な畳み込み実装の分析については、前回のレビューを参照してください。最後の総説のアドレス。https://blog.csdn.net/qq_32998593/article/details/86177151

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: blog.csdn.net/qq_32998593/article/details/86181663