目次
1 CNN (畳み込みニューラル ネットワーク)
https://www.zhihu.com/question/52668301
畳み込み層 -> 非線形層 -> プーリング層 -> 全結合層
古典的な構造:
入力→畳み込み→ReLU→畳み込み→ReLU→プーリング→ReLU→畳み込み→ReLU→プーリング→フル接続
1.1 畳み込み層
最初の層の入力は元の画像であり、2 番目の畳み込み層の入力は最初の層によって出力された活性化マップです。つまり、このレイヤーへの入力は、元の画像内の低レベルの特徴の位置を大まかに表します。
これに一連のフィルターを適用すると (2 番目の畳み込み層を通過させると)、出力は高レベルの特徴を表すアクティベーション マップになります。このようなフィーチャは、半円 (曲線と直線の組み合わせ) または四角形 (複数の直線の組み合わせ) にすることができます。ネットワークを深く掘り下げ、より多くの畳み込み層を通過すると、より複雑な機能のアクティベーション マップが得られます。
1.2 全結合層
簡単に言えば、この層は入力 (畳み込み層、ReLU 層、またはプーリング層の出力である可能性があります) を処理し、N 次元ベクトルを出力します。ここで、N はプログラムが選択する必要があるクラスの数です。
数値が 10 個ある場合、N は 10 になります。この N 次元ベクトルの各数値は、特定のクラスの確率を表します。
完全に接続された層は、前の層の出力 (上位レベルの機能のアクティベーション マップを表す) を調べ、それらの機能がどのクラスに最も適合するかを判断します。たとえば、プログラムが画像が犬に関するものであると予測した場合、アクティベーション マップの高い値は足や 4 本の脚などの高レベルの特徴を表します。
1.3 畳み込みの応用
https://blog.csdn.net/zhu_hongji/article/details/81562746
テンプレートと画像を畳み込みます。画像上の点の場合、テンプレートの原点をその点と一致させ、テンプレート上の点と画像上の対応する点を乗算し、各点の積を次のように加算します。 get ポイントの畳み込み値を取得します。画像上のすべての点に対してこれを実行します。
ほとんどのテンプレートは対称であるため、テンプレートは回転されません。
畳み込みは、2 つの曲線が重なる領域を見つけるために使用される積分演算です。これは重み付けされた合計とみなすことができ、ノイズを除去して機能を強化するために使用できます。
コンボリューション: 画像処理における演算の 1 つであり、画像の各ピクセルに対するカーネルの演算です。
カーネル: 基本的に、中心点がアンカーポイントと呼ばれる固定サイズの行列の配列
2ポイントネット
2.1 ネットワーク構造
2.2 制限事項
ローカルフィーチャが欠落している
各点は高次元空間にマッピングされ、最大値で結合されます。そのネットワークはすべてのポイントをグローバル フィーチャに直接暴力的にプールするため、ローカル ポイント間の接続はネットワークによって学習されません。
=> PointCNN 畳み込みニューラル ネットワークは、グリッド内に密に表現されたデータ (画像など) の空間的に局所的な相関を利用できます。
3 PointCNN:X 変換された点の畳み込み
PointCNN: X 変換された点の畳み込みPointCNN
: X 変換された点の畳み込み
3.1 要約
質問する:
- PointNet の方法では、局所的な特徴が失われます。
- 点群は不規則で順序付けされていないため、点に関連付けられたフィーチャをカーネルに直接畳み込むと、形状情報が失われ、ポイントツーポイントの順序が変化します。
問題を解く:
2 つの理由を同時に促進するために、入力ポイントから X 変換を学習することを提案します。
- 1 つ目は、ポイントに関連付けられた入力フィーチャの重みです。
- 2 つ目は、ポイントを潜在的および潜在的な正規順序に配置することです。
3.2 はじめに
まず、点群には標準化されたデータ形式がないため、畳み込みには適さないことが紹介されます。
3.3 関連作品
CNN メソッドは、画像内の空間的な局所相関を効果的に利用します。
通常のドメインからの機能学習. 通常のドメインでの機能学習
CNNを3Dボクセルに拡張 => 入力カーネル、畳み込みカーネルともに高次元であるため、計算量と記憶量が急速に増大する。
オクツリー、Kd ツリー、ハッシュ ベースの方法は、空の空間での畳み込みをスキップすることで計算を節約するために提案されています。
これらの方法と比較すると、PointCNN は入力表現と畳み込みカーネルの両方においてスパースです。
スパーシティの理解: スパーシティは次のように簡単に説明できます。ニューロンが出力が 1 に近い場合に活性化され、出力が 0 に近い場合に抑制されると考える場合、ほとんどの時間ニューロンを抑制する制約はスパース制約と呼ばれます。
不規則なドメインからの特徴学習 不規則なドメインの特徴学習
PointNet および Deep セットは、入力に対称関数を使用することで入力順序の不変性を達成することを提案しました。
PointNet++ と SO-Net は、PointNet を階層的に適用して、ローカル構造をより適切にキャプチャします。
PointNet のような手法を改善するために、カーネル相関とグラフ プーリング (カーネル相関とグラフ プーリング) が提案されています。
RNN は、[18] で、順序付けされた点群スライスをプールすることによって集約された特徴を処理するために使用されました。
[50] は、点空間と特徴空間の両方で近傍構造を利用することを提案しています。
これらの対称プーリングベースの方法は、[10、58、36] の方法と同様に、順序不変性の達成を保証しますが、情報を破棄するという代償を伴います。
[43、3、44] は、まず特徴を、典型的な CNN が適用できる事前定義された規則的な領域に「補間」または「投影」することを提案しています。
これらの方法では、各点に関連付けられたカーネルは個別にパラメータ化されますが、私たちの方法の X 変換は各近傍から学習されるため、局所構造により適している可能性があります。
点群であることに加えて、不規則な領域のまばらなデータはグラフまたはメッシュとして表すことができ、そのような表現から特徴を学習するためにいくつかの研究が提案されています [31、55、30]。
不変性対等変性 不変性対等変性
不変性を達成する際のプーリングによる情報損失の問題に対処するために、等変性の達成を目的とした一連の先駆的な研究が提案されている [16, 40]。
PointCNN では、X 変換は重み付けと置換の両方に使用されると想定されているため、汎用行列としてモデル化されます。
3.4 ポイントCNN
まず、画像 CNN と同様に、PointCNN に階層的畳み込みを導入します。次に、コアとなる X-Conv 演算子を詳細に説明し、最後に、さまざまなタスク用の PointCNN アーキテクチャを紹介します。
3.4.1 階層的畳み込み
図2の説明:
上半分:通常のグリッドでは、畳み込みがローカル グリッド パッチに再帰的に適用されます。これにより、通常、グリッドの解像度が低下します (4×4 → 3×3 → 2×2) が、チャネル数は増加します (スポット厚さの視覚化を介して)。
下半分:同様に、点群では、X-Conv が再帰的に適用され、近傍からの情報をより少ない代表点 (9 → 5 → 2) に「投影」または「クラスター化」しますが、それぞれがより豊富な情報を持ちます。
グリッドベースの CNN への入力:
1. 入力特徴F 1 F_1F1(R 1 × R 1 × C 1 R_1\times R_1\times C_1R1×R1×C1)
R1R_1R1: 空間解像度C 1 C_1C1: 特徴チャネルの深さ
2. ニュークリア株式会社K(K × K × C 1 × C 2 K\times K \times C_1\times C_2K×K×C1×C2) F 1 から F_1を使用F1的バッチ(K × K × C 1 K\times K \times C_1K×K×C1) 特徴マップF 2 F_2を生成するための畳み込みF2(R 2 × R 2 × C 2 R_2\times R_2\times C_2R2×R2×C2)
図 2 では、R 1 = 4 、K = 2 、R 2 = 3 R_1=4、K=2、R_2=3R1=4 、K=2 、R2=3
F1F_1付きF1F2F_2との比較F2通常は解像度が低くなります ( R 2 < R 1 R_2< R_1R2<R1) およびより深いチャネル ( C 2 > C 1 C_2>C_1C2>C1) を使用して、より高いレベルの情報をエンコードします。
このプロセスは再帰的に適用され、空間解像度は低下しますが (4×4 → 3×3 → 2×2)、より深いチャネルを持つ特徴マップが生成されます (図 2 の上部で、ますます太いドットで表示されます)。
PointCNN への入力:
各点p 1 、i p_{1,i}を表しますp1 、私特徴f 1 , i f_{1,i}がありますf1 、私,また{ f 1 , i : f 1 , i ∈ RC 1 } \left\{f_{1, i}: f_{1, i} \in \mathbb{R}^{C_{1}}\right\ }{ f1 、私:f1 、私∈RC1}
F 1 F_1でそれを願っていますF1X-Conv を適用して高次レベルの表現を取得します。
F 2 = { ( p 2 , i , f 2 , i ) : f 2 , i ∈ RC 2 , i = 1 , 2 , … , N 2 } \ mathbb {F}_{2}=\left\{\left(p_{2, i}, f_{2, i}\right): f_{2, i} \in \mathbb{R}^{C_{ 2 }}、i=1,2、\ldots、N_{2}\right\}F2={
( p2 、私、f2 、私):f2 、私∈RC2、私=1 、2 、…、N2}
F2 は F1 よりも空間解像度が低く、より深い特徴チャネルを持ちます。N2 < N 1、C 2 > C 1 N_2<N_1、C_2>C_1N2<N1,C2>C1
p 2 , i p_{2,i}p2 、私はp 1 , i p_{1,i}p1 、私F 1 F_1 を
X で再帰変換するときの代表点の集合F1F 2 F_2を向いてくださいF2の場合、特徴を含む入力ポイントはより少ないポイント (9→5→2) に「投影」または「クラスター化」されますが、それぞれの特徴はますます豊富になります (図 2 では、下部を視覚化するためにますます太いポイントを介して)。
代表点 p2i は、分類タスクにおけるランダム ダウンサンプリングによって生成されます。
3.4.2 X 畳み込み演算子
グリッドベースの中枢神経系における畳み込みと同様に、空間的に局所的な相関を利用するために、X-Conv は局所領域で動作します。
出力特徴量は代表点{ p 2 , i } \left\{p_{2, i}\right\}に対応するはずなので{ p2 、私}が関連付けられているため、X-Conv はそれらを{ p 1 , i } \left\{p_{1, i}\right\}{ p1 、私}および関連する特徴は、畳み込みの入力として使用されます。
注文数pはp 2 , i p_{2, i}p2 、私ffの代表的なポイントfはppですp、NNNはp 1 , i p_{1, i}p1 、私中pppのKK近所のKさん。
したがって、p の X-Conv 入力は次のようになります。S = { ( pi , fi ) : pi ∈ N } \mathbb{S}=\left\{\left(p_{i}, f_{i}\right): p_ {i} \in \mathbb{N}\right\}S={ ( p私は、f私は):p私は∈N }
S \mathbb{S}S はK × D im K \times Dimに変換できます。K×D im関数:P = ( p 1 , p 2 , ... , p K ) T \mathbf{P}=\left(p_{1}, p_{2}, \ldots, p_{K}\right) ^ {T}P=( p1、p2、…、pK)T、およびK×C 1 K×C_1K×C1サイズの行列: F = ( f 1 , f 2 , … , f K ) T \mathbf{F}=\left(f_{1}, f_{2}, \ldots, f_{K}\right)^{た}F=( f1、f2、…、fK)T
どこKKK はトレーニング可能な畳み込みカーネルを表します
これらの入力を使用して、特徴Fp F_pを計算したいとします。Fp、代表点ppへの入力特徴量です。pの「射影」または「重合」
X_conv アルゴリズムの式:
F p = X − Conv ( K , p , P , F ) = Conv ( K , MLP ( P − p ) × [ MLP δ ( P − p ) , F ] ) \mathbf{F}_{p}=\mathcal{X}}\operatorname{Conv}(\mathbf{K}, p, \mathbf{P}, \mathbf{F})=\ 演算子名{Conv}\left(\mathbf{K}, MLP(\mathbf{P}-p) \times\left[ML P_{\delta}(\mathbf{P}-p), \mathbf{F}\ right ]\右)Fp=バツ−変換( K ,p 、P 、フ)=コンバージョン( K ,MLP ( P ) _−p )×[ MLP _ _d( P−p ) 、F ] )
MLP δ ( ⋅ ) ML P_{\delta}(\cdot )MLP _ _d( ⋅ )は、多層パーセプトロンが各ポイントに個別に適用されることを示します (PointNet アルゴリズムと同じ)。X_Conv は
微分可能であるため、バックプロパゲーションによるトレーニングのためにニューラル ネットワークに挿入できます。
PointNet ベースの方法と同様に、座標をフィーチャにリフトする方法は、点ごとのMLP δ ( ⋅ ) ML P_{\delta}(\cdot) をMLP _ _d( ⋅ )実現しました。ただし、フィーチャへの座標を持ち上げる方法は、対称関数を介して実装されるのではなく、関連するフィーチャとともに、すべての近傍によって共同で学習される X 変換によって重み付けされ、並べ替えられます。
結果の X は点の順序に依存します。X は入力点によってF ∗ F_*によって変換される必要があるため、これはまさに期待どおりです。F∗したがって、特定の入力順序を知っておく必要があります。
追加の特徴がない入力点群の場合、つまり f が空の場合、最初の X-Conv 層はF δ F_{\delta}のみを使用します。Fd。したがって、PointCNN は、追加の機能の有無にかかわらず、堅牢かつ均一な方法で点群を処理できます。
3.4.3 PointCNN アーキテクチャ
ここでNNNとCCC は、出力がポイント数とフィーチャ次元KKKは各代表点の隣接点の数、D は X-Conv 拡張率です。
図 a:
2 つの X-Conv レイヤーを備えた単純な PointCNN は、入力ポイント (特徴の有無にかかわらず) をより少ない表現ポイントに段階的に変換しますが、各表現ポイントはより豊富な特徴を持ちます。2 番目の X-Conv 層の後には、前の層のすべての点からの情報を集約する代表点が 1 つだけ残ります。PointCNN では、各代表点の受容野を大まかにK / NK / Nとして定義できます。K / N比、ここでKKKは隣接する点の数、NNNは前のレイヤーのポイントの数です。
この定義では、最後の点は前の層のすべての点を「見る」ため、受容野は 1.0 になります。形状全体の全体的なビューがあり、その特徴は形状の意味論的な理解に役立ちます。ネットワークをトレーニングするために、最後の X-Conv 層の出力の上に完全に接続された層を追加し、その後に損失を追加できます。
// 完全には完了していません
3.5 分類実験
3.5.1 データセット
ModelNet40、ScanNet、TU-Berlin、Quick Draw、MNIST、CIFAR10
3.5.2 結果
mA: クラスごとの平均精度
oA: 合計精度
1024 ポイントに基づく実験
4 コードの実装
特定のコード実装: https://github.com/Kandy990125/PointClouds_cls/tree/main/PointCNN_Pytorch
参考コード: https: //github.com/hxdengBerkeley/PointCNN.Pytorch