Grouped Convolutionのハイパーパラメータを最適化する「clcNet」を読んでみました

インターンの林です。
社内勉強会でclcNetについて発表しました。

arxiv.org

概要

  • clcNet提案
  • CDG(Channel Dependency Graph)とCRF(Channel Receptive Field)を新たな分析のツールとして使用
  • グループ化畳み込みに変わり、新たな畳み込みのIGC(Interlaced Grouped Convolution)を使用
  • ImageNet-1Kデータセットにおいて、既存のモデルより高い計算効率とパラメーター数減少を達成

背景

  • 現在では計算効率の良い畳み込みの手法として、dw 畳み込みやグループ化などが使われている
  • モバイルデバイスに使えるようなCNNは計算効率とメモリ効率のが重要である
  • 上記の畳み込み手法に少し変更を加え、計算効率を向上させたのがclcNet

CLC (Channel Local Convolution)

  • 出力チャネルの計算が一部の入力チャネルのみに依存している畳み込み
    • dw 畳み込み, グループ化畳み込み
  • CLCの受容野は空間次元とチャネル次元の両方に沿って局所的
    • 受容野: ある特徴マップの一画素が集約してる前の層の空間の広がり
    • Figure 1で概念的に示している

Figure1.PNG

CDG (Channel Dependency Graph)

  • チャネルの計算依存性を示す2部グラフ
    • Node: チャネル
    • Edge: 依存性
    • 上のNodeが入力
    • 下のNodeが出力を表す
    • 出力->入力というように表現される
  • CDGを使うことで、モデル設計のためのチャネル依存の分析が簡単になる
    • 積み重ねたCLCカーネルを、通常畳み込みに近似させるための分析に使う Figure2.PNG

チャネル受容野 CRF (Channel Receptive Field)

  • 出力チャネルが依存する入力チャネルのサブセット
  • FCRF (Full Channel Receptive Field)
    • 出力チャネルが入力チャネルのすべてに依存している状態
  • CRFサイズ
    • 依存している入力チャネルの数
仮説:
  • FCRFを達成することは、CLCが通常Convolutionの正確な近似する上で必要である
CGDを使って他のモデルを分析してみる
  • FCRFが達成されているモデルに使われている畳み込み
    • ResNetのbottlenetck structure
    • ResNeXt block
    • Depthwise Convolution for MobileNet and Xception

Figure3.PNG

  • FCRFが達成されていないモデルの畳み込み
    • dw畳み込み & 1x1畳み込みをグループ化畳み込みに

Figure4.PNG

  • FCRFが達成されていない
  • 結果、クラス分類において従来よりも低い精度になった
  • ShuffleNetの論文でも、Shuffleなしのdw & 1x1畳み込みが試され、Shuffleありと比べて精度が下がったと言われていた

IGC (Interlaced Grouped Convolution)

  • MobileNetやXceptionでdw畳み込みや1x1畳み込みが効果的であると証明された
    • だが1x1畳み込みの占める計算量は多い
  • さらなるコスト効率化のために、1x1畳み込みを変更したい
  • 1x1畳み込みをグループ化畳み込みにする
    • Figure 4で示した通り、FCRFもなくなり、精度も下がる
  • IGC:
    • グループ化畳み込みのチャネル依存パターンを変えることでFCRFを実現

Figure5.PNG

CLC Block

Figure6.PNG

FCRFのルールとコスト最小化

  • M : input channels
  • N : output channels
  • L : intermediate channels
  • g1: IGC カーネルのgroup parameter
  • g2: GC カーネルのgroup parameter

CRF(Channel Receptive Field): 出力チャネルが依存する入力チャネルのサブセット CRF size: 依存している入力チャネルの数

  • IGC カーネルのCRFサイズ : M/g1
  • GC カーネルのCRFサイズ : L/g2

  • このCLC BlockがFCRFを達成するためには、GCのCRF size(L/g2)がIGCカーネルのgroup parameter(g1)より大きくなる必要がある

    • $ L/g{2} \geq g{1} $ すなわち $ g{1}g{2} \leq L$

コスト (Computational cost)最適化の式

image.png

  • A=9とき最小化されたパラメーター image.png

    • A: spatial area of the convolutional kernel
      • A = 9 for 3x3 kernel
  • モデル image.png

検証

5.1 Classification Accuracy of clcNet

  • state-of-the-art modelであるMobileNetと比較
  • a, b, c, d (layer configurations)
  • 精度が良かった2つをclcNet-A, clcNet-B

image.png

  • 後ろのlayer(c or d)を増やすことが、前のlayer(a or b)を増やすことよりも、精度が上がることが分かる

5.2 The importance of FCRF(Full Channel Receptive Field)

image.png

5.3 Comparision with Previous Models

image.png

image.png

キーポイント系物体検出モデル その2:「CenterNet: Keypoint Triplets for Object Detection」を読んでみました

CTOの幅野です。
CornerNetを拡張したCenterNetを読みました。
CenterNetは同名で別のモデルが提案されています。
今回はCenterNet: Keypoint Triplets for Object Detectionを解説します。

arxiv.org

github.com

また、このモデルはCornerNetを拡張したものとなっているのでCornerNetを先に読むと理解が深まります。

metrica-tech.hatenablog.jp

概要

画像内の物体のCornerを検出するCornerNetを拡張したCenterNetを提案
CornerNetは物体のCornerを検出することで物体検出するネットワーク。
本論文ではConerNetのクラス分類精度が低いことを問題として定義。
この問題に対して、物体の中央のkeypointを検出とCenter Pooling, Cascade Corner PoolingをConerNetに導入。
これらは物体中央の情報を抽出するために利用され、MS-COCO datasetで47.0%のAPを達成した。

ConerNetとその問題点

CornerNetについてはここで説明している。 CornerNetはCornerを検出するために工夫されたネットワークで、BoundingBoxのサイズなどをより正確に検出できるが、クラス分類の精度が低い。 それを示しているのが以下の表である。

image.png

$FD$(False discovery rates)は選択されたBounding Boxのクラス誤分類の比率を表している。

$$FD_i = 1 - AP$$

$FD_i$は$IOU \ge\frac{i}{100}$のときのBoundingBoxの$FD$である。
この結果を見ると候補となったBoundingBoxのほぼ3つに1つは誤分類していることがわかる。
CornerNetの精度を高くするためにはクラスの分類精度を高めることが必要であると著者らは考えている。
そこで、1-stageのモデルでConerNetの誤分類を減らすために提案されたのがCenterNetである。
CenterNetの主なアイデアはCenter keypointをBoundingBoxの選択時に利用することで、Cornerと物体の中心を推定したCenterのカテゴリがあっているかどうかを確認することで誤分類を減らすことである。
下図のようにCenter keypointがあれば正しいBoundingBoxを選択できる。

image.png

CenterNetのアーキテクチャ

image.png CenterNetの基本構造はCornerNetにCenterのHeatMapとOffsetsを出力するネットワークが追加されている。
さらにCenter PoolingCascade Cirner Poolingをレイヤーとして追加している。

2つのPoolingの利用

以下の図はCenterPooling, CornerPooling, Cascade Corner Poolingを図示したもの image.png
CornerNetではCorner検出をするために4(b)のようなCorner Poolingという手法を利用して特徴マップ内の特徴をCorner部分に集約するようにしていた。
Centerを抽出する時にもCorner Poolingなどのように特徴を中心に集約できるように4(a)のようなCenter Poolingを利用する。
また、PoolingはCorner部分に集約することはできていたが、端の情報を抽出するのみになっていた。
CenterNetでは内部の情報を考慮した4(a)Cascade Corner Poolingという方法を代わりに利用している。

それぞれのアーキテクチャ構造を図示したものが以下である。

image.png

5(a)Center Poolingは特徴マップに対して2つに分岐させる、それぞれ特徴マップに対して畳み込みを行いTop Bottom PoolingとLeft Right Poolingの組み合わせで算出し、特徴マップを足し合わせている。
Center Poolingがやっていることは特徴マップの行・列の最大値を抽出し足し合わせている

Cascade Corner Poolingの図5(b)はTop Cornerを出力するネットワークに適応させる。
Bottom Cornerを出力するネットワークの場合はTop, Left PoolingがBottom, Right Poolingに変わる。
Corner Poolingとの大きな違いはCorner PoolingではTop, LeftPoolingの計算結果を足し合わせているのに対して、Cascade Corner PoolingではLeft Poolingを行った後に通常のConvolutionした特徴マップと足し合わせてTop Poolingを行っている。
image.png

このように段階に分けてPoolingを行っていることがおそらくCacadeと名付けている理由だろう。
これにより図4(c)のように内部の情報を含めて、Cornerへ集約させることができると著者らは主張している。

CenterNetのBoundingBox推定方法

CenterNetはCornerに加えCenterのheatmapとoffsetsを出力する。
これらの情報を利用してCornerで推定されたBoundingBoxから不必要なものを除去する。
本論文ではこの手法をCentral Region Explorationと呼んでいる。

CornerからのBoundingBoxはCornerNetと同様に行う。 推定後の除去手順は以下のとおりである。

  1. HeatmapのScoreを利用して$k$個Center keypointを抽出
  2. offsetsを利用して入力画像へremap
  3. Cornerで推定されたBoundingBoxのそれぞれのCentral Regionを計算
  4. Center keypointがCentral Regionに入っていなかったらBounding Boxを除去

この手順を各クラスごとに行う

Central Regionは推定された各Bounding Boxに対してその領域を定義する。
Central Regionは以下のように定義される。

image.png

$ctl$,$cbr$がCentral Regionのtop-left,bottom-rightのcorner座標を表している。
これらをBounding Boxのcorner座標$tl$, $br$を元に計算をしている。
また$n$はCentral RegionがBounding Boxの割合を決めるパラメータとなっており、論文では3もしくは5としてた。
Bounding Boxの割合としてCentral Regionを計算することによって、小さいBounding Boxに対しても適切なCentral Regionを選択できる。

image.png

この領域にCenter keypointが入っているかどうかでBounding Boxを除去するかを決める。 Cornerで推定されたBounding Boxが内部情報(center)と整合性があるかどうかを確認することができる。

検証

MS-COCOを利用したAP, ARの精度

image.png 結果を見るとOne-stageでは最も高い結果を出している。 CornerNetと比較すると$AP_S$の精度が他のと比べてより大きく向上している。

CornerNetとのFalse Discovery Rateの比較

image.png こちらはCornerNetとFalse Discovery Rateの比較をした結果である。
CenterNetによりFDは減少していることがわかる。
特にsmallに対してのFDが他の比べ大きく減少している。

各提案モジュールの導入有無による精度比較

image.png CenterNetで提案されたCentral Region Exploration(CRE), Center Pooling(CTP), Cascade Corner Pooling(CCP)の3つのモジュールを導入するかどうかで精度比較をしている。
CRE, CTPを入れることで大きくAPが上昇している。

キーポイント系物体検出モデル その1:「CornerNet: Detecting Objects as Paired Keypoints」を読んでみました

CTOの幅野です。
今回はキーポイント検出手法を利用した物体検出モデルCornerNetを読みました。

arxiv.org

概要

オブジェクトの左上と右下の境界を予測することにより物体検出をする手法を提案 MSCOCOにおいてAP42.2%を達成した。

Corner予測のモチベーション

SSDのようなアンカーボックスを利用したObjectDetectionモデルの問題点

  • 大量のアンカーボックスを用意する必要がある
  • アンカーボックスの設計に様々なハイパーパラメータが必要 
    • アンカーボックスの数
    • アンカーボックスのサイズ
    • アンカーボックスのアスペクト比

アンカーボックスを利用しない方法としてオブジェクトの左上と右下のCornerを検出をするConerNetを提案

CornerNetのアーキテクチャ

image.png image.png

CornerNetは左上と右下のキーポイントをHeatmapとして出力する。 HeatmapはそのピクセルにCornerがあるかないかを表している。 なので、Heatmapはオブジェクトのクラス数$C$チャンネル分用意する。 さらに左上と右下のCornerは途中で別のネットワークに分離してそれぞれHeatmapを出力する。

Heatmap

Heatmapは姿勢推定などでも利用されているガウス分布に従ったヒートマップを教師として作成する。 GroundTruthのCorner座標を$x$、$y$として以下のようなヒートマップを作成する。

e^{-\frac{x^{2}+y^{2}}{2 \sigma^{2}}}

ただし\sigmaはある円の半径の$\frac{1}{3}$とする。 その半径はオブジェクトの矩形に対してIOUが少なくとも$t$(今回は0.3)以上になるような円の半径としている。 作成したHeatMapを利用した損失関数が以下の式である。

image.png

Corner($y=1$)かどうかで損失関数を条件分岐しており、式自体はBinaryCrossEntropyを拡張したものとなっている。 $\alpha, \beta$はそれぞれハイパーパラメータで$\alpha=2, \beta=4$で設定されている。

Embeddings

CornerNetは左上・右下を別々に検出する構造なので、どのCornerがペアなのかを紐付ける必要がある。 そこで利用されるのがEmbeddingと呼ばれる埋め込みベクトルを同時に出力し、その距離が小さいかどうかで紐付ける手法である。 なので、学習時にペアのCornerのEmbeddingの距離が小さくなり、他のオブジェクトのEmbeddingとは離れるように学習する。 なお、EmbeddingsはGroundTruthで与えられたCorner部分のEmbeddingsに対してのみ損失関数を適応して学習する。 $e_{t_k}$は物体$k$の左上のCornerのEmbeddingで$e_{b_k}$は右下のEmbeddingである。 ペアのEmbeddingの距離を小さくする$L_{pull}$と他のペアとのEmbeddingから離れるようにする$L_{push}$を損失関数として定義する。

$$ L_{p u l l}=\frac{1}{N} \sum_{k=1}^{N}\left[\left(e_{t_{k}}-e_{k}\right)^{2}+\left(e_{b_{k}}-e_{k}\right)^{2}\right] $$

$$ L_{p u s h}=\frac{1}{N(N-1)} \sum_{k=1}^{N} \sum_{j=1 \atop j \neq k}^{N} \max \left(0, \Delta-\left|e_{k}-e_{j}\right|\right) $$ $e_k$は右下と左上のembeddingの平均を表す。$\Delta$は1としている。

Offsets

CornerNetの出力は入力画像をダウンサンプリングしたものである。 なのでダウンスケールが$n$で入力画像サイズが$(x, y)$とすると出力サイズは$(\lfloor \frac{x}{n} \rfloor, \lfloor \frac{y}{n} \rfloor )$となってしまう。 なので出力を元の画像サイズに戻そうとすると実際の入力画像のCorner座標と出力結果のCorner座標がずれてしまう。 このずれは検出したい物体が小さくなるほど精度に悪い影響を及ぼす。 なのでそのずれをOffsetとして推定することを考える。 以下がOffsets $o$を表す式である。

image.png

この$o$をモデルで同時に予測をする。 損失関数にはSmoothL1Lossを利用している。

image.png

Corner Pooling

CornerNetは上のアーキテクチャ内でCorner Poolingというレイヤーを利用している。 Cornerを予測するという問題のときに以下の画像のようなCorner付近に対象物体が存在しない状況が想定される。 image.png このような状況のときにどこにCornerがあるのかを決定しやすくするためにはCornerへ水平方向にも垂直方向にも情報を集約する必要がある。

To determine if a pixel is a top-left corner, we need to look horizontally towards the right for the topmost boundary of an object and vertically towards the bottom for the leftmost boundary.

ここで提案されたのがCorner Poolingである。 Corner PoolingはTop Left, Bottom Rightそれぞれ別のpoolingとして定義されている。 $f_{t_{ij}}$はTop Left内の$H$×$W$の特徴マップ$f$のij番目のピクセルを表す。

image.png

これらの式を実際に計算した図が以下である。

image.png

2つpoolingしてできた特徴マップを要素ごとに加算している。

これらは以下のようにアーキテクチャ内で利用されている。 image.png

検証

Corner Poolingの有無での比較

image.png Corner Poolingを入れることで精度が向上している。 下がそれぞれが検出したbouding boxである。 image.png 中央のシマウマの画像を見るとわかりやすいが、正しくCornerを検出していることがわかる。

Anchor based VS CornerNet

image.png hourgrassをbackboneとしたモデルにAnchorbasedとCornerbasedの2つをそれぞれ利用した精度結果。

Offsetsの有無での比較

image.png

他モデルとの比較

image.png

他モデルとの精度結果、一番下のmulti scaleのAPがabstractでcontributionとして記述していたscoreで、 one-stage detectorsの中では一番精度が高い結果となっている。

BoudingBoxの小さい物体を検出するモデル「Finding Tiny Faces」を読んでみました

インターンの中村です。
今回はFinding Tiny Facesという論文を読んだので解説していきます。

arxiv.org

Screenshot from 2019-08-20 13-41-42.png

概要

非常に小さい顔を検出できる新しいモデルを提案した論文。 また、どうしてそのモデルに至ったのかをImageNetの特性や画像のスケール、物体の周辺領域の情報(コンテクスト)という観点から長々と考察している

Intro

画像に含まれている物体のサイズは、同じ物体クラスだとしても遠近などにより非常にばらつきがある(数百〜数pixel)。しかし、物体検出器一つでそれらすべてを検出できるようにしたいものだ。

そのため、下の図のように、パターンマッチングの時代から歴史的に様々な方法で物体サイズのばらつきに取り組んできた。 image.png ` 様々な研究の結果、scale-invariance(画像のサイズをいじることで、大きさの違う物体に対してもパターンがマッチするようにすること)は現在の画像認識システムの基本的特徴となっている。 しかし、実用的にはセンサーの解像度が有限である以上それは必ずしも成り立たない。実際、300pxの顔を認識する手がかりは3pxの顔とは違う。具体的にどういう違いがあるのか見ていこう:

背景

コンテクスト

image.png

上図左上の緑の箱には非常に小さい物体が写っているが、もはや情報が少なすぎてこれだけで検出するのはほぼ不可能である。が、周りの状況が映されている右の箱を見れば顔とわかる。このように、非常に小さい物体を認識するには、その対象にパターンマッチするだけでなくまわりの状況(コンテクスト)の情報も必要である

コンテクストを使うのは直感的に有効なことはわかるし使われてきたが、数値的にその効果を示すのは難しかった。この論文では深層学習モデルの最終的な精度を用いることで、そこに対する数値的な考察も行っている。下の図を見てほしい:

image.png

上段は小さい画像、下段は小さい画像に対するResNetを用いた検出結果である。右に行くにつれ、より深いResBlockの出力も同時に用いて顔を検出している。より深いResBlockのほうが一つのニューロンの受け取る画像の大きさ1が広いので、それが点線で示されている。

どちらにおいても、実線で示された緑の範囲より広い受容野を持つ出力を用いたほうが性能が良くなっており、(特に対象が小さい時)コンテクスト情報が重要であることが実験的に示されている

(なお、上段一番右で精度が下がっているのは、過学習によるものらしい)

image.png

また、逆に深い層の出力だけで予測をするようにした場合、対象の物体が小さいと精度が大幅に低下する(上段:7%や33%に対し、下段はほとんど下がっていない)。

小さい物体を見つけるには、低い層からの高い解像度の出力が重要であることがわかる。

画像の解像度

画像の解像度は高いほうが性能が上がるように思える。実際、小さい画像を「小さいサイズのテンプレート2」で検出させるより、単純に引き伸ばして「中くらいのサイズのテンプレート」に検出させたところ、大きく性能が上がった(69→75%、下図左)!

image.png

一方で、非常に大きい画像を半分に縮小して同じように検出させたところ、やはり性能が上がった(上図右)!

縮小したほうが情報量は下がるのに性能が上がるとは不思議だが、著者らはこれに対して以下のように説明を試みている:

  • WIDER FACEやCOCOといった「自然界の」データセットは、小さい物体のほうが画面に大量に映り込みがち
  • したがって小さい物体のほうがより多くラベリングされる
    • 下グラフにグレイで示されるように、WIDERには小さい物体が多い

image.png

だが、これは「大きい画像を縮小して中くらいのサイズのテンプレートで見つけたほうが性能がいい」ことは説明できても、「小さい画像を拡大して中くらいのサイズのテンプレートで見つけたほうが性能がいい」ことの説明になっていない。

著者は、こちらはPretrainでつかったImageNetに原因があると推測している。ImageNetで認識される物体は、40-140pixelのものが非常に多いのである。

image.png

これにより、同じように検出器が転移学習の前の段階でバイアスを受けていたのではないかという仮説が立つ。

実際、画像をそのまま与えたモデル、2倍にしたモデル、半分にしたモデルの物体の大きさに対する成績は以下のグラフ(グレイ以外)のようになる。

image.png

これらの最も得意なところはこれらの包絡線になるので:

image.png

こんな感じになる。

モデル

上図の、点線で囲われた部分AとBのテンプレートを組み合わせて使う。

image.png

Aは40-140pxのサイズを担当している標準的なもの。これに2倍に引き伸ばした画像と半分に縮小した画像を両方食わせ、より広い範囲を担当させる。

極めて小さい物体に対してはBが担当する。これは2倍に引き伸ばした画像のみを受け取るので、より小さい物体に特化した性能になることが期待される。

性能

image.png

ResNet101: 1.4FPS on 1080p, 3.1 FPS on 720p

image.png

感想

機械学習の論文って、モデルの説明が割と多くを占めているものが多いんですけど、今回の論文はデータセットのインバランスやコンテクストの説明にも多くの分量が割かれている印象でしたね。 Foveal descriptorやtemplateといったCV系の用語がたくさん出てきて、読むのがちょっと難しかったです。

この記事はMETRICAの社内勉強会用の資料を改稿したものです


  1. いわゆる受容野 (Receptive Field)

  2. テンプレートマッチングの文脈に基づいて、著者はCNNの受容野のことをテンプレートと呼んでいるので、それに倣った

MobileNet論文その2: 「MobileNetV2: Inverted Residuals and Linear Bottlenecks」を読みました

CTOの幅野です。  

今回は高速化アーキテクチャとして広く利用されているMobileNetV2の論文を読みました。

arxiv.org

概要

モバイルで推論させることを考慮したMobilNetV1を拡張したMobileNetV2を提案。
MobileNetV1 では depthwise と pointwise covolution で演算を効率化していたが、inverted residuals and linear bottlenecks という構造を入れてさらにメモリ効率が良くかつ性能が高いモデルを構築。
MobileNetV1やshuffleNetなどの効率化アーキテクチャや自動探索したアーキテクチャNas Netなどに対して、精度が同等であり、推論速度が高くなっていることを示している。

本論文の位置づけ

2018年に投稿: CVPR2018 軽量化モデルはPruningや蒸留、スパースモデリングの応用など様々な手法が提案されてきた。 遺伝的アルゴリズム強化学習などを利用して、効率的なアーキテクチャを見つける手法が提案されている。(NASNetなど https://arxiv.org/abs/1707.07012) しかし、これらで見つかったアーキテクチャはとても複雑な構造を持っている。 本手法は複雑ではないより単純な設計で効率化することを目標としており、MobileNetv1をベースとしたReLUの特徴に基づいた新しいアーキテクチャを考案している。

MobileNetV1について

MobileNetV1は勉強会参加者の西本くんが詳細にまとめてくれているので詳細な説明は以下を参考にしてください。  

metrica-tech.hatenablog.jp

https://hirokinishimoto.github.io/StudyRecord/Papers/MobileNets/

Depthwise Separable Convolutionの計算量
$h_i$×$w_i$×$d_i$のテンソルを入力し、$d_j$次元のチャンネルを出力する時

$$h_{i} \cdot w_{i} \cdot d_{i}\left(k^{2}+d_{j}\right)$$

MobileNetV1のアーキテクチャ
image.png

ReLUの表現力問題

活性化関数で得られた結果はmanifold of interest と呼ばれるもので、低次元のmanifoldに情報が埋め込まれているものと考える。 ReLUは非ゼロな値のみを線形変換する非線形関数である。 ReLU関数を利用した非線形変換だと、0につぶしてしまう領域が発生してしまう。 なので低次元でのmanifoldに埋め込む情報が限られてしまう。

image.png

上の図は低次元な写像にReLUを利用するとmanifoldに限られた情報しか埋め込むこむことができないことを示している。 inputのようなスパイラル状の2次元多様体があったときにこれをn次元へ写像させる2×Nの乱数の行列$T$を利用して$n$次元へ写像させ、そこでReLU関数を適応させる。 その後、適応させた行列に疑似逆行列$T^{-1}$をかけて2次元空間へ戻したものが上の図になる。図を見ると$n=2$のような低次元なときにはもとの多様体とは大きくことなっており、一方で$n=15$のような高次元のときには入力と同じような多様体を表現できている。

MobileNetV1の計算量を見ると、1×1 convolutionの計算がチャンネル数的に多くを占めている。 なのでチャンネル数を減らしたいが、低次元に落とし込むとReLUのmanifoldに埋め込まれる情報量が限られてしまうことによりうまく精度を達成させることができない。

ReLU問題の検証

ReLUの多様体が潰れてしまう問題について簡易的に実装をしてみた。

擬似逆行列を利用して生成し、Figure1で図示されていた次元数で検証を行った。
2次元や3次元などが潰れてしまうことがよくわかる。

このReLUの問題に対して中間部分のチャンネルを増やすことによって、本来つぶれてしまう情報を他のチャンネルに持たせることができ、情報の喪失を防げるのではないかと仮説を立てている。

Inverted residuals

ReLUの表現力の問題に基づいたInverted residulals blockと考案している。 このblockを基本的にMobileNetV1のDepth wise Separable Convolutionと置き換えることになる。 inverted residuals blockは3つのconvolutionから構成されていて、最初のconvolutionは1×1Convである。 そしてこのConvは$t$倍に出力チャンネルを写像する役割を持っている。 このハイパーパラメータ$t$は本論文では6にしている。 3つ目のConvolutionも同様に1×1convであるが、こちらは出力チャンネルを入力時のチャンネル次元数に戻すようなConvolutionになっている。 ReLU6はロバスト性を保つために採用しているとのこと。 image.png

また、勾配消失の問題を考慮してskip connectionを利用して3つ目のConv出力に入力テンソルを足し合わせるようにしている。 image.png

計算量

$\left(h, w, c_{i}\right) \rightarrow\left(h, w, c_{o}\right)$となるstride1の$k × k$convolutionを考える。

通常のconvolution: $h \cdot w \cdot c_{i} \cdot c_{o} \cdot k^{2}$
separable convolution: $h \cdot w \cdot c_{i} \cdot\left(k^{2}+c_{o}\right)$
Invert residuals block: $h \cdot w\left(c_{i} \cdot t c_{i}+t c_{i} \cdot k^{2}+t c_{i} \cdot c_{o}\right)=h \cdot w \cdot c_{i} \cdot t\left(c_{i}+k^{2}+c_{o}\right)$

計算量を比較すると必ずしもInvert residuals blockが少ないわけではない。むしろ$t=6$の場合はむしろ計算量が上がってしまっている。

MobileNet2 architecture

Inverted residuals blockを利用してMobileNetV2のアーキテクチャの例で以下である。

image.png

bottleneckがInverted residuals blockに該当する。 MobileNetV1のアーキテクチャと比較すると、inverted residuals blockの部分においてチャンネル数が少ない構造となっている。 これにより、MobileNetV1より1×1convolutionの計算が減っている。

検証

Imagenet Classification

image.png Imagenet classificationにおけるtop-1 accuracyと積和演算のトレードオフのグラフである。 MobileNetV1より効率がよくNaSNet ShuffleNetなどと同等の精度。

image.png 推論速度を見るとNasNetよりも速いことがわかる。

COCO Object Detection

Object Detectionタスクにおける精度結果が以下である。 image.png

image.png SSDLiteはSSD内のConvolutionをDepth wise separableModuleに置き換えたものである。 最初の部分の層などをMobileNetV1に変えたものがMNet V1 + SSDLiteとなる。 V1と比較すると精度は同等で推論速度は速くなっている。

まとめ

  • MobileNetV1を発展させたMobileNetV2を提案
  • ReLUの性質に基づいた中間層のチャンネルを増やすことによる表現力を確保する構造を提案
  • NASNetなどと比較すると高速で同等以上の精度を達成した。

物体検出における3つのImbalance問題を分析した論文「Libra R-CNN」を読んでみました

インターンの中村です。
今回はLibra R-CNNを読んだので解説していきます。

arxiv.org

訓練プロセス、損失、モデル改良を提案して計算量をほとんど変えないまま物体検出の制度を向上させた論文。それら3つをまとめてLibraと呼んでいる。分かりづらい。正直やめてほしい

どれも、既存のモデルに追加して精度を向上させることができるアイデアである。

image.png

intro

これまで様々な物体検出モデルが検出されてきたが、訓練プロセスはあまり注目されてこなかった

物体検出の訓練を成功させるには

  1. 画像の選択された領域(いわゆるdefault bounding box)が代表値として適切か
  2. 抽出された特徴量が十分に使われているか
  3. 目的関数は適切か

が必要だが、著者らによるとどれも適切に達成されていない。それぞれをSample/Feature/Objective level imbalanceとよんで、解決策を提案している

image.png

上の図で黄色、青、赤の箱がそれぞれの改善に対応している。

では、それぞれ見ていこう:

Sample level imbalance

物体検出機の学習にはhard sample(難易度の高いサンプル)をたくさん与えてやることが非常に重要だが、ランダムに選ぶとeasyが殆どになってしまう。 既存手法としてOHEM, Focal Lossがあるが、

  • OHEM
    • ノイズラベルに弱い
    • 計算量、メモリが重い
  • Focal Loss
    • 2-stage methodだとeasy negativeが1つめで除かれてるので(2nd stageの訓練に)意味ない

のような欠点を持つ。

というわけで、IoU-balanced Samplingという方法を考えた

image.png

上の図で見るように、Hard negativesは6割以上がground truthと0.05以上のIoUを持つが、ランダムに選んだサンプルでそうなのは3割程度で全然違う。しかし、IoU-balanced Samplingは割と一致している

手法としては単純で、

  • 既存手法ではM個の候補からN個のサンプルを取り出している
    • $p=\frac{N}{M}$
  • IoU順にK個に候補を分割し、それぞれから同じ数だけサンプルを取り出すように変更する

$$ p_{k}=\frac{N}{K} * \frac{1}{M_{k}}, \quad k \in[0, K) $$

Kが大きいほうがいい気がするが、IoUの高いサンプルがある程度含まれるようになればよいので、Kがいくつかはあまり関係なく精度は向上する。論文ではK=3だった。

positive samplesのimbalance1に対処するのにも使えるようにおもえるが、そもそも数が少ないので難しい。 これに対しては、ground truthあたりのpositive samplesの数を等しくすることで代用している

image.png

Feature level imbalance

追加パラメータの不要なintegrateと呼ばれる作業を特徴マップに対して行う。その後にパラメータを使ったrefineという作業を行い、更に精度を向上させることもできる。

image.png

integrateの仕組みは単純で、

  • $L=l_{max}-l_{min}$個の特徴量マップをリサイズし大きさを合わせる
  • 足しあわせる

$$ C=\frac{1}{L} \sum_{l=l_{m i n}}^{l_{\max }} C_{l} $$

  • もとの特徴量に「足し戻す」(residual connection)ことで、もとの特徴量を強化する
    • ここまでの作業にはパラメータが必要ないことに注目

以上。より深い層の特徴量がミックスされて与えられるので、精度が向上するらしい。

さらに追加で、$C$を洗練(refine)することもできる コンボリューションもありだが、non-local moduleがよりうまく行った

  • 論文ではembedded Gaussian non-local attentionを使用

$$ f\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)=e^{\theta\left(\mathbf{x}_{i}\right)^{T} \phi\left(\mathbf{x}_{j}\right)} $$

  • $\theta , \phi$はそれぞれ行列積
    • ちなみに、これは

$$ \operatorname{softmax}\left(\mathbf{x}_i^{T} \mathbf{W}_{\theta}^{T} \mathbf{W}_{\phi} \mathbf{x}_j\right) $$

……と書くこともできるので、特徴マップのattentionとみなすこともできる

Objective level imbalance

よく見るロス2

$$ L_{p, u, t^{u}, v}=L_{c l s}(p, u)+\lambda[u \geq 1] L_{l o c}\left(t^{u}, v\right) $$

の$L_{loc}$に関して考える。

著者らの実験によると、誤差が1より大きいものが勾配の70%位を決めている。つまり、大幅にハズしてしまった予測に基づいて学習してしまっているということになるなので、バランスの取れたロス$L_b$を考える。

$$ \frac{\partial L_{b}}{\partial x}=\left{\begin{array}{ll}{\alpha \ln (b|x|+1)} & {\text { if }|x|<1} \ {\gamma} & {\text { otherwise }}\end{array}\right. $$

ただし、$b$はこれが$x=1$で連続になるように調整する。

こうすることで、誤差が1より小さくても、0に近くない限り傾きが大きくなる。下図を参照。

image.png

なお、$\alpha$が小さいときはL1 Lossに近似していることもわかる。Smoothed L1とL1の間をパラメータで決められるようになったLossと考えられる。

結果

image.png

Libraを導入することで性能が向上しているのが見て取れる。なお、右にアスタリスクのついているものは著者らによる再現実験。

image.png

Libraによりbackboneがしょぼくてもaverage recallも向上している このような向上が見られたのは、RPNの潜在能力をバランスの取れた訓練により発揮させられたからと著者は考えている

image.png

PositiveをBalanceしてもそこまで性能は向上せず。

  • そもそも数が少ないので、学習にあまり影響しなかったものと思われる

しかし、K=2にするとすごく向上した

  • K=3, 5にしてもあんまり向上せず。hard negativeがある程度選ばれることが重要だったことがわかる

image.png

PAFPNと比べてみた。特徴マップをintegrateしただけ(パラメータ数増えてない)でベースラインモデルでも性能が同等に。 Feature balancingはPAFPNのような既存のモデルに「中処理」として追加できる。PAFPNをbalanceさせることで性能が更に上がった

image.png

loss weight($\lambda$)と$\gamma$が同じ役割を果たすのに加え、L1とSmoothed L1の間を$\alpha$を用いてフレキシブルに調整できるのが強み。すなわち、$\alpha$が小さいときL1に、$\alpha$が大きいときSmoothed L1に近い。

$\lambda = \gamma$が大きすぎても小さすぎてもAPは下がってしまっている。また、$\alpha=0.5$で一番APが高いことは、L1とSmoothed L1の間によりよいロス関数が存在していたことの証左になるだろう。

感想

3つどれをとってみても、改変自体は小さいながらも納得の行く改良であり、実際にある程度の効果が上がっているのですごいね。とくに、Sample Level Imbalanceへの対処は意外と単純な仕組みで面白かった。 ただ、Feature Level Imbalanceを"Imbalance"と呼ぶのは流石にこじつけに思えるぞ……

この記事はMETRICAの社内勉強会用の資料を改稿したものです


  1. 例えば人とテニスラケットでは、物体の平均サイズが違う。すると、当然それに対するpositive sampleとなるdefault bounding boxの数も異なってきてしまい、テニスラケットに対して十分な訓練がされないという問題が発生する

  2. この式の意味がわからない人は、SSD (Single Shot Multibox Detector)の論文とかを読み直そう。

Grouped Convolutionモデルの精度を改善した論文「 ShuffleNet」を読んでみました

インターンの林です。  社内勉強会でShuffleNetを発表しました。

arxiv.org

背景

  • これまでの画像認識タスク
  • Shuffle Netは
    • 限られた計算量で性能を求めるCNN architecture
    • 数十~数百MFLOPSの計算
    • Channel Shuffle + Group Convolution
    • Xception とResNeXtの1x1Convの非効率さからアイデアを得る

ShuffleNet

image.png Figure2: Shuffle Net Unit a) bottleneck unit with depth-wise convolution b) ShuffleNet unit with pointwise group convolution c) ShuffleNet unit with stride = 2

Group Convolutions

それぞれのConvolutionの計算量 (B)

image.png

image.png

image.png

Xception とResNeXtの1x1Convの非効率さ

1x1Conv, 3x3depth-wise, 1x1Conv の計算量

$B = hwm(c + k^2 + c)$

ResNet(1x1conv, 3x3conv, 1x1convの計算量)

$B = hw(cm + 9m^2 + cm) = hw(2cm+9m^2)$

  • $B_{1\times1conv} = hwcm$
  • $B_{3\times3 conv} = hwcmk^2$
  • $B_{1\times1conv} = hwcm$

ResNeXt(1x1conv, 3x3Gconv, 1x1convの計算量)

$B = hw(cm + \frac{9m^2}{g} + cm) = hw(2cm+\frac{9m^2}{g})$

  • $B_{1\times1conv} = hwcm$
  • $B_{3\times3 Gconv} = \frac{hwm^2k^2}{g}$
  • $B_{1\times1conv} = hwcm$

ShuffleNet(1x1Gconv, 3x3dwconv, 1x1Gconvの計算量)

$B = hw(\frac{cm}{g} + 9m + \frac{cm}{g}) = hw(\frac{2cm}{g}+9m)$

  • $B_{1\times1Gconv} = \frac{hwcm}{g}$
  • $B_{3\times3 dwconv} = hwk2m$
  • $B_{1\times1conv} = hwcm$

image.png

Channel Shuffle

image.png

image.png

image.png Table1: ShuffleNet architecture

モデル評価

Pointwise Group Convolution

image.png Table2: Classification error vs. number of groups g

  • gが増えることでclassification errorが減っていることがわかる
  • 0.5x : g=8の時飽和している
    • gが増えるにつれ、畳み込みフィルタの入力チャネルが少なくなってしまうため?
  • 0.25x : gが大きいほど性能が良い
    • 小さいモデルでは広い特徴マップを取ることで良い結果が出る

Channel Shuffle vs No Shuffle

  • cross-group information interchange

image.png Table3: ShuffleNet with/withoutchannel shuffle

  • 全体的にShuffleした方が良い結果が出たといえる
  • gが大きい方が良い結果が出ている
    • gを増やすことでシャッフルがよりたくさん行われる

Comparison with Other Structure Units

  • Stage 2-4のShuffleNet unitsをそれぞれ他のstructureに置き換える
  • channel数を調節してcomplexityを調節

    image.png table 4: classficiation error vs various structure

image.png table 6: Complexity comparison

  • 圧倒的に小さいcomplexityで同じような性能を出すことができる

Comparison with MobileNets and Other Frameworks

image.png table 5: ShuffleNet vs. MobileNet on ImageNet Classification

  • Shuffle Net > MobileNet for all complexities
  • Shuffle Netは深さではなく効率の良い構造で良い精度を出している image.png table 7: Object detection results on MS COCO

推論時間

image.png table 8: actual inference time on a mobile device