MobileNetシリーズ(数万語の詳細解説、1記事で十分)

序文

この記事では、CV 関連の MobileNet について説明します。MobileNet には、いくつかのモジュールを含めて、誰もが既に慣れ親しんでいると思います。いくつかの軽量なアイデアがよく使用されます。ここでもまとめて整理し、私の理解と意見を述べたいと思います。畳み込みニューラル ネットワーク CNN は、コンピューター ビジョンの分野で広く使用されており、優れた成果を上げています。近年、CNN モデルはますます深くなり、モデルの複雑さはますます高くなっています.たとえば、深層残差ネットワーク (ResNet) は 152 層にもなります。ただし、モバイル デバイスや組み込みデバイスなどの一部の実際のアプリケーション シナリオでは、このような大規模で複雑なモデルを適用することは困難です。1 つ目は、モデルが大きすぎて、メモリ不足の問題に直面しているということです.2 つ目は、これらのシナリオでは、低レイテンシまたは高速応答が必要です.自動運転車の歩行者検出システムが非常に遅い場合、どんな恐ろしいことが起こるか想像してみてください. したがって、将来のハードウェアはますます高速になりますが、少なくとも現時点では、これらのシナリオで小さくて効率的な CNN モデルを研究することが重要です。

現在の研究は、次の 2 つの方向に要約できます。

  • 1 つは、トレーニング済みの複雑なモデルを圧縮して小さなモデルを取得することです。
  • 2 つ目は、小さなモデルを直接設計してトレーニングすることです。

いずれにせよ、目標は、モデルのパフォーマンス (精度) を維持しながらモデルのサイズ (パラメーター サイズ) を縮小し、モデルの速度 (速度、低レイテンシー) を向上させることです。この記事の主役である MobileNet は後者に属し、最近 Google によって提案された、精度と遅延の間の妥協点となる、小さくて効率的な CNN モデルです。

1. MobileNet V1の詳細説明

V1 の主なイノベーションは、通常の畳み込みを深度分離可能な畳み込みに置き換え、2 つのハイパーパラメーターを導入して、リソースに応じて独自のモデルのサイズをより柔軟に制御できるようにすることです。

では、Depthwise 分離可能な畳み込みとは何ですか?

過去の記録によると、2012 年の論文Simplifying ConvNets for Fast Learningまでさかのぼり、著者は分離可能な畳み込みの概念を提案しました。

  Laurent Sifre 博士は、2013 年の Google でのインターンシップ中に分離可能な畳み込みを深さまで拡張し、博士論文Rigid-motionscattering for image classification 分離可能な畳み込みには、空間的に分離可能な畳み込みと深さ方向に分離可能な畳み込みの 2 つの主なタイプがあります

空間分離畳み込み

名前が示すように、空間分離可能性は、3*3 カーネルを 3*1 カーネルと 1*3 カーネルに分割するなど、大きな畳み込みカーネルを 2 つの小さな畳み込みカーネルに変換することです。

 MobileNet はこれを使用しないため、ここでは詳しく説明しません。

深さごとに分離可能な畳み込み

深さレベルの分離可能な畳み込みは、実際には因数分解された畳み込みです。これは、深さ方向の畳み込みと点方向の畳み込みという 2 つの小さな操作に分解できます。

標準的な畳み込みでは、12*12*3 の入力特徴マップが入力され、5*5*3 の畳み込みカーネルによって 8*8*1 の出力特徴マップが取得されます。この時点で 256 の特徴マップがある場合、次の図に示すように、8*8*256 の出力特徴マップが得られます。

 深い畳み込み (実際には、グループ 1 を使用したグループ畳み込み) の場合、すべての特徴マップ チャネルが分解され、各特徴マップは単一チャネル モードであり、個々のチャネル特徴マップは畳み込まれます。このようにして、元の特徴マップと同じチャネル数を持つ生成された特徴マップが取得されます。12*12*3 の特徴マップが入力されると仮定すると、5*5*1*3 の深度畳み込みの後、8*8*3 の出力特徴マップが得られます。入力と出力の次元が定数 3 であるため、チャネル数が少なすぎる、特徴マップの次元が小さすぎる、有効に情報を取得できないという問題があります。

ポイントごとの畳み込みは 1*1 畳み込みであり、その主な機能は特徴マップの次元を増減することです。深い畳み込みの過程で, 8*8*3 の出力特徴マップを取得します. 1*1*3 の 256 個の畳み込みカーネルを使用して, 入力特徴マップで畳み込み操作を実行します. 出力特徴マップと標準畳み込みは製品操作も 8*8*256 です。以下に示すように:

 標準畳み込みと深さ分離可能畳み込みのプロセスは、次のように比較されます。

 深さ方向に分離可能な畳み込みの利点

標準畳み込みの場合、畳み込みカーネルのサイズは Dk*Dk*M であり、合計で N 個あるため、標準畳み込みのパラメーター量は次のようになります。

深さ方向の分離可能な畳み込みのパラメーター ボリュームは、深さ方向の畳み込みとポイントごとの畳み込みの 2 つの部分で構成されます。深度畳み込みの畳み込みカーネル サイズは Dk*Dk*M であり、ポイントごとの畳み込みの畳み込みカーネル サイズは 1*1*M であり、合計 N であるため、深度分離可能な畳み込みのパラメーター量は次のようになります。

畳み込みカーネルのサイズは Dk*Dk*M で、合計 N 個あり、それぞれに Dw*Dh 演算が必要なので、標準的な畳み込みの計算量は次のようになります。

深度分離畳み込みの計算量も、深度畳み込みと点ごとの畳み込みの 2 つの部分で構成されます。深度畳み込みの畳み込みカーネル サイズは Dk×Dk×M で、合計 Dw×Dh の乗算と加算が必要です; ポイントごとの畳み込みの畳み込みカーネル サイズは 1×1×M で、N 個あります。と Dw×Dh の掛け算と足し算の合計なので、深さ分離畳み込みの計算量は

深さ分離可能な畳み込みは、通常の畳み込みよりも計算量とパラメーター量がはるかに小さく、ネットワークの推論遅延を大幅に削減し、高速化できることがわかります。

深度分離可能な畳み込みはここで終了しました。MobileNet V1 がどのように適用されるかを見てみましょう。下の図のように (図は RELU6 のはずですが、図が間違っています)。左の画像は従来の畳み込みで、右の画像は深さ方向に分離可能な畳み込みです。さらに ReLU6 は、モデルの非線形変動を増加させ、モデルの汎化能力を高めます。

ここまでで上記のブロックの基本的な意味が理解できたはずですが、次になぜRelu6を使うのか、そのメリットとは何か、Reluを使わない理由についてお話ししましょう。

 実はRelu6は普通のRelu関数なのですが、入力の最大出力値が6という制約があります。ReLU6 関数とその導関数を下の図に示します。

では、なぜ Relu の代わりに Relu6 を使用するのでしょうか? 実際、これはモバイル端末の float16/int8 などの低精度デバイス用であり、数値分解能も良好です。Relu の値に制限がない場合、出力範囲は 0 から無限大になる可能性があるため、アクティベーション値が非常に大きくなり、広い範囲に分散されますが、精度の低い float16 やその他の組み込みデバイスはあまり良くありません。このように広い範囲を記述すると、精度が失われます。これが本書の最初のイノベーションポイントです。

イノベーションの第 2 のポイント: MobileNet ネットワークの構造と遅延は比較的小さいですが、多くの場合、特定のアプリケーションではより小さくて高速なモデルが必要です. このため、幅係数アルファが導入されています.モデル、記事では、解像度係数 rho を紹介します。

幅係数 alpha (Width Mutiplier) は、各層でネットワークの入力チャネルと出力チャネルの数を減らします. 出力チャネルの数は M から alpha*M までであり、出力チャネルの数は N から alpha*N までです.換算後の計算量は次のとおりです。

通常、アルファは (0, 1] の間で、典型的な値は 1, 0.75, 0.5, 0.25 です。幅係数が使用されない前に、計算量とパラメーターの数は 1/alpha**2倍に削減されます。 .

 解像度係数 rho (解像度乗数)を使用して、入力と内部層の表現を制御します, つまり、解像度係数を使用して入力の解像度を制御します. 深度畳み込みとポイントごとの畳み込みの計算量は次のとおりです。

通常、rho は (0, 1] の間であり、一般的な入力解像度は 224, 192, 160, 128 です。計算量の削減は、幅係数を使用する前に 1/(alpha**2*rho*rho) だけ増加します。 , パラメータの量は影響しません. 2つのハイパーパラメータを介して, モデルをさらに削減できます. 記事には具体的な実験結果も示されています. ここにマッピングします.

  • Depthwise conv パラメーターは、パラメーターの数が少ないため、L2 正則化を使用しません。
  • ネットワークの厚さを減らすことは、ネットワークの深さを減らすよりも費用対効果が高く、深さがより重要であることを示しています (論文の実験で証明されています)。

MobileNetV1 では、深い畳み込みネットワークの各入力チャネルに 1 つのフィルターが適用されます。次に、ポイントごとの畳み込みが 1*1 畳み込みネットワークを適用して、深さごとの畳み込みの出力を結合します。この標準的な畳み込みメソッドは、入力をフィルター処理して、新しい出力セットに 1 つのステップで結合します。その中で、深さ方向に分離可能な畳み込みは、フィルタリング用のレイヤーとプーリング用のレイヤーの2回に分割します。MobileNet のネットワーク構造は次のとおりで、合計 28 層 (AvgPool 層と FC 層を除き、深度畳み込みとポイントごとの畳み込みは個別に計算されます) で構成されますが、最初の層は標準の畳み込みカーネルを使用します。残りの畳み込み層はすべて、Depth Wise Separable Convolution を使用します。

 2. MobileNet V2の詳細説明

MobileNet V2 アーキテクチャは、2018 年初頭にリリースされました。MobileNet V2 は、MobileNet V1 のいくつかのアイデアに基づいており、最適化するための新しいアイデアと組み合わされています。アーキテクチャーの観点から、MobileNet V2 は 2 つの新しいモジュールをアーキテクチャーに追加します: 1、レイヤー間の線形ボトルネックの導入、2、ボトルネック間のショートカット接続。MobileNetV2 の核となる考え方は、ボトルネックがモデルの中間入力と出力をエンコードする一方で、内部レイヤーを使用して下位レベルの概念 (ピクセルなど) から上位レベルへのモデルの変換をカプセル化することです。記述子(画像カテゴリなど)能力(わからなくても構いません。後で詳しく説明します)。最後に、従来の残留結合と同様に、ショートカットを使用すると、より高速なトレーニングとより高い精度が可能になります。

MobileNet V1 の構造は比較的単純です. また, 主な問題は Depthwise Convolution にあります. Depthwise Convolution は計算量を削減しますが, Depthwise 部分の Kernel training は廃止されやすい, つまりほとんどの畳み込みカーネルはゼロ. 著者は、最終的には ReLU の後、出力は 0 であると考えており、論文の著者は説明しました. つまり、Relu は、チャネル数が比較的少ないフィーチャー マップに大量の情報損失を引き起こし、これらの情報損失により、ほとんどの畳み込みカーネルが簡単に 0 になります。

具体的には、低次元の情報が高次元にマッピングされてから、Relu を介して低次元にマッピングされる場合、マッピングされた次元が比較的高い場合、逆変換による情報の損失は小さく、マッピングされた次元が比較的低い場合は、次の図に示すように、元に戻すと、損失は非常に大きくなります。

図からわかるように、元の入力次元を 15 次元に増やして ReLU を追加すると、多くの情報が失われることはありませんが、元の入力次元を 2 ~ 5 次元に増やしてから ReLU を追加すると、比較的重大な情報損失になります。そのため、低次元で ReLU 演算を行うと、情報が失われやすいと考えられます。ただし、ReLU 操作が高次元で実行される場合、情報の損失は非常に小さくなります。別の説明では、高次元の情報が低次元の情報に変換されると、それは特徴圧縮を行うのと同じであり、情報の一部が失われ、ReLU を実行した後、損失はさらに大きくなります。ReLU の特性は、負の入力に対して出力を 0 にし、次元削減自体が特徴圧縮のプロセスであるため、特徴の損失がより深刻になりますこの問題に対して、筆者は ReLU を線形活性化関数に置き換えました。 

V2 は、DW 畳み込みの前に新しい PW 畳み込みを追加しました. この理由は、DW 畳み込みが独自の計算特性により、チャネル数を変更する能力がないためです. 彼は、以前に与えられたチャネル数のみを使用できますlayer. 出力するチャンネル数。そのため、上位層のチャネル数が非常に少ない場合、DW では低次元空間の特徴量しか抽出できず、あまり効果がありません.これを改善するために、V2 では DW ごとに PW を搭載するようになりました.問題. 次元を増加させるために特別に使用され、次元増加係数は t=6 として定義されるため、入力チャネル数 Cin が大きいか小さいかに関係なく、最初の PW 次元増加の後、DW は相対的に高次元 (t*Cin) は多かれ少なかれ、最初の PW がアップグレードされた後、DW は比較的高次元 (t*Cin) で一生懸命働いています。また、V2 は、論文の著者が Linear Bottleneck と呼んでいる 2 番目の PW のアクティベーション関数を削除します。これは、活性化関数が高次元空間の非線形性を効果的に高めることができるが、低次元空間の特徴を破壊し、線形効果ほど良くないと著者が考えているためです。2 番目の PW の主な機能は次元削減であるため、上記の理論によれば、次元削減後の ReLU6 を使用することは適切ではありません。この操作は、逆残差および線形ボトルネックとも呼ばれます。

これは「反転残差モジュール」に変換できます。どういう意味ですか?残差モジュールと反転残差モジュールの違いを比較してみましょう。

  • Residual モジュール: 入力は最初に 1*1 畳み込みによって圧縮され、次に 3*3 畳み込みによって特徴抽出が実行され、最後にチャネル数が 1*1 畳み込みによって元に戻されます。全体のプロセスは「圧縮-畳み込み-拡張」です。これは、3*3 モジュールの計算量を削減し、剰余モジュールの計算効率を向上させることを目的としています。
  • 逆残差モジュール: 入力は最初にチャネル拡張のために 1*1 畳み込みを受け、次に 3*3 深さ方向畳み込みを使用し、最後に 1*1 ポイントごと畳み込みを使用してチャネル数を元に圧縮します。全体のプロセスは「膨張-畳み込み-圧縮」です。あなたはなぜこれをやっているのですか?深さ方向の畳み込みはチャネル数を変更できないため、特徴抽出は入力チャネル数によって制限されるため、最初にチャネル数を増やします。この論文の拡張係数は 6 です。

それを表すには、次の図を使用する方が適切です。

 Mobilenet V2 のネットワークモジュールは下図のようになります. stride=1 の場合, 入力は最初に 1*1 畳み込みを経てチャネル数を拡張します. このとき活性化関数は ReLU6 であり, その後 3*3 深さ方向に進みます.畳み込みの場合、活性化関数は ReLU6 です。次に、1*1 点ごとの畳み込みの後、チャネル数が圧縮されて戻り、活性化関数は線形になります。最後に、ショートカットを使用して 2 つを加算します。stride=2 の場合、入力と出力の特徴マップのサイズが一致しないため、近道はありません。

 3D グラフィック:

 最後に、V2 のネットワーク構造を示します。このうち、t は展開と疎性、c は出力チャネル数、n は層の繰り返し回数、s はステップ サイズです。V2 ネットワークは V1 ネットワークよりもはるかに深く、V2 には 54 層あることがわかります。

 3. MobileNet V3の詳細説明

  MobileNet V3 は 2019 年に公開されました。MobileNet-V3 は、リソース要件が異なる状況に適した MobileNet-V3 Large と MobileNet-V3 Small の 2 つのバージョンを提供します。V3 は、v1 の深い分離可能な畳み込み、逆残差、v2 の線形ボトルネック、SE モジュールを組み合わせ、NAS (Neural Structure Search) を使用してネットワーク構成とパラメーターを検索します。偶然にも私は大学院時代にNASを扱っていたので、この部分を書くのはとても快適でした. NASについてはここではあまり話しませんが、NASを見ているととても親切な気持ちになります⭐ .

まず、V3 のベッドのイノベーションをいくつか挙げて、これらのポイントに基づいて個別に説明します。

  • 初期畳み込みカーネルの数を変更する
  • ネットワークの最後にある計算コストの高いレイヤーを変更する
  • SEモジュールを導入
  • H-Swish起動機能

初期畳み込みカーネルの数を変更する

 v2 の入力層の場合、入力は 3*3 畳み込みによって 32 次元に拡張されます。筆者は実際には 32 に減らすことができることを発見したので、ここでは 16 に変更しました.精度を確保する前提で、速度を 3ms 減らしました。これに関する変更は、最後に示されているネットワーク構造で見ることができます

ネットワークの最後にある計算コストの高いレイヤーを変更する

MobileNetV2 では、Avg Pooling の前に 1*1 の畳み込み層があり、その目的は特徴マップの次元を増やすことであり、これは構造の予測により役立ちますが、これは実際にはある程度の計算をもたらします。そのため、著者はここで修正を行い、平均プーリングの背後に置きました. まず、平均プーリングでは、特徴マップのサイズを 7*7 から 1*1 に縮小し、次に 1*1 を使用して次元を増やすことが有益です。となり、計算量が 7*7 =49 倍削減されます。そしてさらに計算量を減らすために、筆者は先のスピンドル畳み込みの 3*3 と 1*1 の畳み込みを直接取り除き、さらに計算量を減らし、図の 2 行目のような構造になりました。以下 筆者の感想 3*3 と 1*1 を取り除いた後も精度は落ちません. ここでは約 10ms の遅延が減り, 演算速度は 15% 速くなり, 精度の低下はほとんどありません. .

 H-Swish起動機能を導入

以前の V2 では、ブロックの最後のポイントごとの畳み込みの後、線形活性化関数に置き換えられました.以前の活性化関数は Relu6 でしたが、著者は Swish 関数がネットワークの精度を効果的に改善できることを発見しました. 、しかし、Swish関数にはSigmoid関数が含まれているため、計算量が多すぎるため、著者はここでH-Swishアクティベーション関数を提案します.

スウィッシュ画像:

 (アクティベーション機能については別記事で詳しく説明します) Swishの特徴: 

 h-スウィッシュ:

この非線形性は、精度を維持しながら多くの利点をもたらします. 第一に、ReLU6 は多くのソフトウェアおよびハードウェア フレームワークで実装できます. 第二に、量子化中の数値精度の損失を回避し、高速に実行されます. この非線形の変化により、モデルのレイテンシが 15% 増加します。しかし、それがもたらすネットワーク効果は、精度と遅延にプラスの効果をもたらし、残りのオーバーヘッドは、非線形性を前のレイヤーと融合することで排除できます。

SEモジュールを導入

これは私が注目したい部分でもあります。なぜなら主に、MobileNet を説明している他の記事ではこの部分について詳しく説明されておらず、ほとんどの記事は通り過ぎているからです。CNN ネットワークのコア計算は畳み込み演算子であり、畳み込みカーネルを介して入力特徴マップから新しい特徴マップを学習します。本質的に、畳み込みは、空間 (H および W 次元) およびチャネル間 (C 次元) 特徴融合を含む、局所領域で特徴融合を実行することです。畳み込みは実際には局所領域の特徴融合であることがわかります。これもまた、通常の畳み込みニューラルネットワークの受容野が小さいことにつながります. もちろん、これを増やすためにチャネルの特徴をさらに設計することはできますが、そうすると計算量が大幅に増加します. したがって、より多くの特徴を空間に統合するため、またはマルチスケールの空間情報を抽出するために。インセプションネットワークのマルチブランチ構造など、さまざまな方法も提案されています。チャネル次元の特徴融合の場合、畳み込み操作は基本的に、デフォルトで入力特徴マップのすべてのチャネルを融合します。SENet ネットワークの革新は、モデルがさまざまなチャネル機能の重要性を自動的に学習できることを期待して、チャネル間の関係に焦点を当てることです。この目的のために、SENet は、次の図に示すように、Squeeze-and-Excitation (SE) モジュールを提案しました。

 実際、これはマルチチャネルの自己注意メカニズムです. 異なるチャネルに重みを割り当てることにより、機能マップは有用な機能チャネルを改善し、現在のタスクにはあまり有用ではない機能を抑制できます. 具体的な SE 操作を下図に示します。

 これが SE モジュールのすべての操作です. まず、グローバル プーリング レイヤーを使用して各チャネルを特定の値に変換し、次に 2 つの完全に接続されたレイヤーを学習して重みを割り当てます。最後に、H-シグモイド関数によって最終的な重みが取得され、最初の特徴マップに割り当てられます。現在、主流のネットワークのほとんどは、この 2 つの類似したユニットの繰り返しによる重ね合わせに基づいて構築されています。今日、ほとんどすべてのネットワーク構造に SE モジュールを組み込むことができることがわかります。SEモジュールを元のネットワーク構造のビルディングブロック単位で埋め込むことにより、さまざまな種類のSENetを取得できます。SE-BN-Inception、SE-ResNet など。

V3 の 3D グラフは次のとおりです。

 SEモジュールはv2のボトルネック構造に導入され、深さ方向フィルタの後に配置されています.SEモジュールは軽量のチャネルアテンションモジュールです.SE構造は一定の時間を消費するため,深さ方向フィルタの後,プーリング層を通過します. . . そして、最初の fc レイヤーでチャネル数を 4 分の 1 に減らし、2 番目の fc レイヤー以降でチャネル数を逆変換 (4 倍に拡張) してから、ビット単位で深さ方向に加算するので、著者は、精度が向上することを発見しましたが、同時に、消費時間の増加はありません。

MobileNet V3 ネットワーク構造

MobileNet V3 は、最初に MnasNet を使用して粗い構造を検索し、次に強化学習を使用して、離散的な一連の選択肢から最適な構成を選択します。その後、MobileNet V3 は、NatAdapt を使用してアーキテクチャを微調整します。NatAdapt は、十分に活用されていないアクティベーション チャネルをわずかに減少させて調整できる NetAdapt の補完機能を具体化します。

(1)リソース制約型NAS(プラットフォームアウェアNAS):限られた計算とパラメータ量を前提として、ネットワークの各モジュールを探索することから、ブロックワイズ探索(Block-wise Search)と呼ばれます。

(2) NetAdapt: 各モジュールが決定された後、ネットワーク層を微調整するために使用されます。

        Web 検索は、モデル構造の探索と最適化のための強力なツールです。研究者は、最初にニューラル ネットワーク検索機能を使用してグローバル ネットワーク構造を構築し、次に NetAdapt アルゴリズムを使用して各層のコア数を最適化しましたグローバル ネットワーク構造の検索では、研究者は Mnasnet と同じ RNN ベースのコントローラーと階層検索スペースを使用し、特定のハードウェア プラットフォームの精度と遅延のバランスを最適化して、ターゲット遅延 (~80ms) の範囲内で検索しました。各レイヤーは、NetAdapt メソッドを使用して順番に調整されます。モデルのレイテンシを可能な限り最適化しながら精度を維持し、拡張レイヤーのサイズと各レイヤーのボトルネックを削減します。

  さらに、MobileNet のもう 1 つの斬新なアイデアは、「Squeeze-and-Excitation」(略して SENet、ImageNet 2017 画像分類チャンピオンでもある) と呼ばれるニューラル ネットワークをコア アーキテクチャに追加することです。このニューラル ネットワークの中心となるアイデアは、ネットワークの畳み込み機能チャネル間の相互依存性を明示的にモデル化することにより、ネットワークによって生成される表現の品質を向上させることです。具体的には、学習によって各特徴の重要度を自動的に取得し、その結果を使用して、現在のタスクにあまり役に立たない特徴を抑制し、有用な特徴を促進することです。

  この目的のために、開発者は、ネットワークが機能の再調整を実行できるようにするメカニズムを提案しています。このメカニズムを通じて、ネットワークはグローバル情報を使用して、有益な機能を選択的に強調し、あまり役に立たない機能を抑制することを学習できます。一方、MobileNet V3 の場合、アーキテクチャは MobilenetV2 を拡張して検索空間の一部として SENet を含め、より安定したアーキテクチャを実現します。

  Mobilenet V3 のもう 1 つの興味深い最適化は、アーキテクチャのより高価なレイヤーの一部の再設計です。第 2 世代の MobilenetV2 の一部のレイヤーは、モデルの精度の基礎となりますが、潜在変数も導入します。いくつかの基本的な最適化機能を組み込むことによって。MobileNet V3 は、精度を犠牲にすることなく、MobilenetV2 アーキテクチャの 3 つの高価なレイヤーを取り除きます。

   V3の構造は下図のようになっており、著者は高リソースと低リソースの状況に対応した大小の2つのバージョンのV3を提供しており、どちらもNASによって検索されます。

 そういえば、このシリーズは基本的に終わりです.ネットワーク全体が最も完全であるとは言いませんが、基本的に私が考えることができるすべてがここにあり、多くの優れたブログを検索した後、さらに要約されます.何が問題なのかを願っています.誰もが時間内にそれを指摘できます、ありがとう! ! !

参照:畳み込みニューラル ネットワークのスタディ ノート - 軽量ネットワーク MobileNet シリーズ (V1、V2、V3)

おすすめ

転載: blog.csdn.net/qq_38375203/article/details/125171412