Dense RepPoints: Representing Visual Objects with Dense Point Sets
どんなもの?
- 新しい物体表現としてDense RepPointsを提案。物体の外観と形状を柔軟かつ詳細にモデリングする。
- バウンディングボックスによるlocalizationと特徴抽出は粗めに行われるのに対して、Dense RepPointsでは物体の意味的かつ幾何学的に重要な位置に、密なサンプル点の集合を適応的に配置することで、物体を解析するために有益な情報を与える。
- COCOを用いた性能評価では、APが既存手法から大幅に向上。
技術や手法のキモ
Dense (Attributed) RepPoints
- RepPointsで使っていたサンプル点の個数は9点と比較的少なかった。
- 物体検出の出力であるバウンディングボックスの自由度は4しかないでこれで十分かもしれないが、instance segmentationといったより精細な幾何的なlocalizationタスクにとっては、こういった疎なサンプル点の集合では表現力が不十分。
- 詳細な物体の構造を表現するために、より大規模なサンプル点の集合であるDense RepPointsを提案する。
- Dense RepPointsは物体のより詳細な構造(輪郭、前景、境界領域など)を近似するポテンシャルを持っている。
- さらに、必要に応じて属性(attributes)を各サンプル点に関連付けることで、表現力をさらに強化することができる。
- 潜在的な属性には、サンプル点が前景に位置する確率や人物のキーポイントの可視性などが含まれる。
- 属性によって強化された表現をDense (Attributed) RepPointsと名付ける。はサンプル点に関連付けられた属性ベクトル。
Object Segment Representation
- セグメントは物体の空間的な範囲を正確に表すことができる。
- 典型的な表現方法としては、MaskRCNNのようなバウンディングボックス内の前景領域を示す二値マップや、バウンディングボックスに依らない(non-box form)輪郭などがある。
- バウンディングボックスベースの構造は表現や計算が比較的簡単である一方で、下図のような前景領域や境界を示す二値マップなど、non-box formでもセグメントを表現可能できる。
- 論文で検討しているのは以下の3つのnon-box form。
- Object contour
- Foreground area
- Binary boundary map
Learn Dense RepPoints by Segment Supervision
- denseなサンプル点の集合(dense point set)と物体のセグメントのアノテーション(segment supervision)間で直接ロスを計算できないため、segment supervisionを中間的な表現に変換することで学習を可能にする。
- 以下の二つのアプローチを提案。
Unorganized point set
- segment supervisionからサンプリングされた点(target point)との不一致を最小化するように、dense pointを配置することを学習する。
- target pointとdense pointの対応付けを明示的には定義せず、サンプル点の集合全体の不一致さをロスとして用いる。
- 各セグメントのtarget pointの決め方は以下の通り。
- contour: target pointを輪郭線上に均一に配置する。
- foreground area: 前景領域から一様にサンプリングした点をtarget pointとする。
- binary boundary map: 輪郭のマップに距離変換をかけて、前景領域内の点に前景、背景領域内の点に背景の属性を割り当てる。
- ロスは以下のChamfer loss。距離が最も近い点間のL2距離を最小化する。
Organized point set
- 物体のマスクの中心を原点とする極座標に基づいて、target pointを配置・インデックス付けする。
- 回転角はいくつかの角度に量子化して用いる。(例: )
- 各セグメントのtarget pointの決め方は以下の通り。
- contour: それぞれの回転角について輪郭との二つの交点をtarget pointとする。target pointの数は。
- foreground area: それぞれの回転角について、前景領域内に一様に分布した固定数の点(例: )をtarget pointとする。target pointの数は。
- binary boundary map: それぞれの回転角について、境界領域内に一様に分布した固定数の点をtarget pointとする。各点には前景/背景の属性が関連付けられる。
- ロスはsmooth L1 loss。
二つの表現方法の比較
- UnorganizedとOrganizedを比較すると、Unorganizedの方が優れていた。(特に輪郭表現)
- organizedだと凹凸が非常に多い物体(複雑なポーズをした人間など)の場合、一つの回転角に3つ以上の交点が存在する可能性があるため、輪郭を正確に表現することは不可能。これは点数を増やしたとしても避けられない。
- foreground areaとbinary boundary mapについては、点数を増やすことでより正確に形状を表現できるポテンシャルを持っている。
Inference of Non-box Descriptors by Dense RepPoints
- 推論時のdense point setからセグメントへの変換方法は以下の通り。
- contour: dense point setからkNNを用いた手法によって凹包を計算する。
- foreground area: dense pointを適応的なガウシアンカーネルによって膨張させることで、前景マスクを生成する。
- binary boundary map: Attributed Dense RepPointsに対して、まずドロネー三角形分割を用いて画像を三角形に分割する。次に、各三角形の重心座標系で線形補間を行うことで、三角形内の任意の画像ピクセルの前景スコアを算出する。
Efficient Feature Extraction
- RepPointsのようにDeformable Convolutionを用いて特徴抽出を行うのは、点数の増加に伴って計算量が線形に増加するため実用的ではない。
- 点数を、それぞれの点における特徴量の長さをとすると、分類と回帰それぞれの計算量のオーダーは。
- この問題に対処するために、group pooling(classification用)とshared offset fields(point refinement用)を導入する。これによって、計算量は点数の増加に対してほぼ不変になる。
- 検出精度はEfficientなアプローチにすることで、劣化するどころかむしろ良くなる。
Group pooling
- classification branchについて、以下の手順で特徴抽出をする。
- 個の点を個のグループに分割する。
- グループ内の各点に対応する特徴量をサンプリングして、max poolingをかけることでグループごとの特徴量を得る。
- 得られた特徴量をconcatして1x1 convをかける。
- こうすることで、計算コストを、メモリコストをまで削減することができる。論文ではとしている。
Shared offset fields and attribute maps
- recognition branchとは異なり、point refinementとpoint-wise attribute predictionでは個々の点の情報が必要となる。そのため、recognitionのようにgroup poolingを用いることはできない。
- 代わりに最終レイヤ以外のレイヤを共有することで、計算コストとメモリコストを削減する。
RPSeg: An Box-Free Instance Segmentation Framework
- Dense RepPointsを利用したインスタンスセグメンテーション手法であるRepPoints Segmenter (RPSeg)を提案。
- RepPointsと同様に中心点を物体の初期表現として用いる。
- 全体構造とヘッドの構造は下図の通り。
有効性の検証
- COCOの物体検出において、マルチスケール学習やアンカーを必要とせずに45.8APを達成。SOTAな手法よりも優れている。
RepPoints: Point Set Representation for Object Detection
どんなもの?
- 近年の物体検出器はバウンディングボックス(アンカーなど)にかなり依存している。
- バウンディングボックスは便利だが、得られる物体の位置情報は粗く、それに応じて物体特徴の抽出も粗くなってしまう。
- 本論文では、より精細な物体表現として、物体をサンプル点の集合として表現するRepPoints (representative points)を提案する。これは位置推定(localization)と認識(recognition)の両方に有用。
- RepPointsはlocalizationとrecognitionのGTから、サンプル点の配置方法を自動的に学習する。サンプル点の配置は、物体の空間的な広がりを拘束するとともに意味的に重要な局所領域を示すように学習される。
- さらに、bounding boxの空間をサンプリングするためにアンカーを使用する必要がない。
- COCOでアンカーベースの物体検出のSOTAに匹敵する性能。
技術や手法のキモ
RepPoints
RepPointsは、物体を適応的なサンプル点の集合(論文では9点)として検出する。
論文では、サンプル点をバウンディングボックスに変換する方法として以下の3つを提案している。
- localizationの学習ではサンプル点を上記の方法でバウンディングボックスに変換した後に、GTのバウンディングボックスとのsmooth l1 lossを計算する。こうすることで、RepPoints用のGTを用意することなく、バウンディングボックスのGTからサンプル点検出を自動的に学習させることができる。
RPDet: an Anchor Free Detector
- RepPoints Detector(RPDet)はDeformable Convolutionを用いた2つのステージで構成される。
- Deformable Convolutionをサンプル点に対して計算し、得られた特徴量をlocalizationとregonitionの推定に用いることで、lossをRepPointsの学習に直接フィードバックすることができる。
- YOLOのように中心点を物体の初期表現として用いる。中心点からのオフセットによってサンプル点を検出する。
- 具体的な構造は以下の通り。
有効性の検証
- COCOでSOTAな性能を示している。(msはmulti-scaleの意。)
所感
- Bounding Boxに代わる物体の表現方法としておもしろい。
- Microsoftの論文ということで、Deformable ConvolutionやDeformable RoI Poolingの有用性をかなりアピールしている印象。
- HeadのDeformable Convolutionを通常のConvolutionに置き換えたら、どのくらい性能が落ちるのか気になるところ。
Kaggle Peking University/Baidu - Autonomous Driving まとめ
KaggleのPeking University/Baidu - Autonomous Drivingで5位になり、2個目のゴールドメダルを獲得しました。
以下、解法とコードです。
Kaggle APTOS 2019 Blindness Detection まとめ
はじめに
2019年6月の終わりごろから先日まで、KaggleのAPTOS 2019 Blindness Detectionに参加していました。 最終的な順位は11位でゴールドメダルを獲得するとともに、Kaggle Masterになりました。
以下、取り組みなどのまとめです。
コンペ概要
Asia Pacific Tele-Ophthalmology Society (APTOS)という眼科学会が主催のコンペで、眼底画像から糖尿病網膜症の重症度(0~4の5段階)を推定するというものです。
データの内訳は以下の通りです。
- train: 3662
- public test: 1928
- private test: 約10925
評価指標はQuadraticWeightedKappaと呼ばれるもので、変動しやすい指標らしいです(よくわかっていない...)。
コンペの形式はsynchronous KO competitionsと呼ばれるもので、推論を行うkernelを提出する形式です。 kernelを編集する際にはpublic testデータにしかアクセスできませんが、提出するとtestデータがprivateを含んだデータに置き換わった状態でもう一度kernelが実行されてスコアが計算されます。
方針
kernelやdiscussionでtrainデータとtestデータの分布が異なることが報告されていたので、kernel上でtestデータ(public + private)を用いたPseudo Labelingをやってみようと思っていました。
解法
前処理
2015年にも全く同じタスクと評価指標のコンペ(Diabetic Retinopathy Detection)が開催されており、このコンペのwinner's solutionで使われていた前処理を多くの人が試していました。
具体的には大まかに以下のような処理です。
- 眼の半径を算出して画像をクロップ。画像の中央にあたるベクトルを抜き出して、平均値以上の値を持つピクセルの数をカウントすることで半径を求める。
- 局所領域の平均値が127.5になるように、画像から局所領域の平均値を減じる。
- "boundary effects"を除くために、眼の領域の面積がオリジナルの円の90%になるように境界付近の領域を削除。
色々と試してみたのですが、結局1のみ使用するのが最もスコアが良かったです。
画像サイズ & Augmentation
画像サイズは256x256です。
Augmentationは2015年のwinner's solutionをベースに色々と試して以下のようになりました。
train_transform = transforms.Compose([ transforms.Resize((288, 288)), transforms.RandomAffine( degrees=(-180, 180), scale=(0.8889, 1.0), shear=(-36, 36)), transforms.CenterCrop(256), transforms.RandomHorizontalFlip(p=0.5), transforms.RandomVerticalFlip(p=0.5), transforms.ColorJitter(contrast=(0.9, 1.1)), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), ])
工夫点はrandom rescaleの部分で、testデータに拡大されたような画像が多かったので拡大方向のrandom rescaleを行いました。その際に256x256の画像を単に拡大すると画像が劣化してしまうため、288x288の画像を縮小方向にrandom rescaleしてから256x256でcenter cropするようにしました(微妙にスコア上がった)。
1st-Level Models
ローカルで学習させたモデルです。
Model
以下の3つのモデルを使用しました。
- SE-ResNeXt50_32x4d
- SE-ResNeXt101_32x4d
- SENet154
ImageNetでpretraindされたもので、BNはfreezeさせました。
Loss
今回のタスクは序数回帰という分類と回帰の中間のような問題で、主に以下の2つのアプローチがありました。
- 分類問題として解く
- 回帰として解いたのちにthresholdingでクラスラベル化
回帰の方がスコアが良かったのでMSE lossを用いて学習させました。
Optimizer
試行錯誤した結果、以下のような感じに落ち着きました。
- SGD (momentum=0.9, weight_decay=1e-4)
- CosineAnnealingLR (lr=1e-3 -> 1e-5)
- 30 epochs
Dataset
外部データの利用が許可されていたので、2015年のコンペのデータを使用しました。 こちらのdiscussionを参考にして、2019年のtrainデータで5-fold cvを作って各foldの学習データに2015年のデータを追加するという方式をとりました。
2nd-Level Models
kernel上でtestデータに対して1st-Level Modelsによる推論を行い、得られた推定値のアンサンブルをtestデータのpseudo labelとして2nd-Level Modelsの学習に使用しました。 データセットは2019年のtrainデータの5-fold cvと、testデータを5等分してそれぞれのfoldの学習データに加えたものです。
kernelには9時間という時間制限があるため、epochを10にするとともに、より早く収束するようにoptimizerとしてRAdamを使いました。 他のパラメータは1st-Level Modelsと同じです。
本当は1st-Level Modelsすべてを学習させたかったのですがkernelの制限時間を超えてしまうため、①SE-ResNeXt50_32x4dとSE-ResNeXt101_32x4dのアンサンブルと②SENet154単体という2つのパターンを試して、これら二つをfinal submissionとして選択しました。
最終的にprivateLB: 0.930で14位になり、その後上位の方が数名BANされて11位になりました。
うまくいかなかったもの
- EfficientNet
EfficientNetは上位勢のほとんどが使っていました。 今後のコンペでもスタンダードなモデルになっていくと思うので、 上位勢の解法を見て学習のノウハウをしっかりと抑えておきたいところです。
MixConv: Mixed Depthwise Convolutional Kernels
どんなもの?
- Depthwise Convolutionは近年の軽量なCNNでよく使われているが、カーネルサイズについては深く議論されていない。
- 本論文では、異なるカーネルサイズ(3x3以外も)を用いることによる影響を体系的に調査し、複数のカーネルサイズを組み合わせて使用することで精度と計算効率の両方が向上することを発見した。
- この発見に基づいてmixed depthwise convolution (MixConv)を提案。
- MobileNetのdepthwise convolutionをMixConvに置き換えることで、分類タスクと物体検出タスクの両方で精度と計算効率が向上した。
- さらに、MixConvを組み込んだアーキテクチャであるMixNetsをAutoMLで探索。MixNet-LがImageNetで近年の軽量なCNNの中ではSOTAな精度の78.9%(top1-acc)を示した。
技術や手法のキモ
MixConv Feature Map
- MixConvの構造は以下の通り。
- 入力マップをチャネル方向で分割して異なるカーネルサイズのdepthwise convolutionをかけ、それぞれをチャネル方向でconcatしたものを出力マップとする。
- tensorflow実装は以下のようになる。
MixConv Design Choices
Group Size
- 入力マップを分割して種類のカーネルサイズを使用するというパラメータ。
- のときは通常のdepthwise convolutionと同じになる。
- MobileNetについてはが良かったが、アーキテクチャを探索する際にはより多様な範囲を探索するために1~5とした。
Kernel Size Per Group
- 理論上は各グループのカーネルサイズは任意であるが、2つのグループが同じカーネルサイズなのは意味がないので、各グループは異なるカーネルサイズであるという制約を設けた。
- さらに、カーネルサイズが小さいほどパラメータ数とFLOPSが小さいため、各グループのカーネルサイズはから始まりずつ増加していくという制約を設けた。言い換えると番目のグループのカーネルサイズは。
- 例えば、4-group MixConvの各グループのカーネルサイズは。
Channel Size Per Group
- 各グループのチャネルの分割について2つの方式を考えた。
- (1) Equal partition: 各グループのチャネル数は同じ。
- (2) Exponential partition: 番目のグループのチャネル数は全チャネルのおよそ。
- 例えば、チャネル数が32の4-group MixConvの各グループのチャネル数は、equal partitionだとで、exponential partitionだと。
Dilated Convolution
- カーネルサイズを大きくする代わりにDilated Convolutionが良く使われるが、実験ではdilatedではない方が精度が良かった。
MixConv Performance on MobileNets
ImageNet Classification Performance
- MobileNetについて、ただ単にdepthwise convolutionのカーネルサイズを大きくした場合と、MixConvを使った場合とでImageNetを用いて性能を比較した。
- 結果は以下のようになった。
- (1) MixConvの方がパラメータとFLOPSが少なく、精度も同等以上だった。→MixConvは精度と計算効率を向上させる。
- (2) depthwise convolutionのカーネルサイズを大きくしていくとある程度の大きさから精度が低下したが、MixConvではそのようなことはなかったため、MixConvはカーネルサイズの大きさによる影響を受けにくいと言える。→MixConvは大きなカーネルサイズを用いる場合により安定した精度を得ることができる。
COCO Detection Performance
- COCOでもMixConvの方が性能が良かった。
Ablation Study
MixConv for Single Layer
- MobileNetV2の15のdepthwise convレイヤのうち一つを、カーネルサイズがのDepthwiseConv9x9、もしくはのカーネルを持つMixConv3579に置き換えたときのレイヤごとの性能比較を行った。結果は以下の通り。
- ほとんどのレイヤで大きな精度の違いは見られないが、ストライドが2のレイヤについては精度が大きく向上している。
- MixConv3579のパラメータとFLOPSはDepthwiseConv9x9の半分であるにもかかわらず、多くのレイヤでDepthwiseConv9x9と同じかわずかに良い性能を示している。
Channel Partition Methods
- 2つのチャネル分割の方式であるequal partition (MixConv)とexponential partition (MixConv+exp)を比較した。結果は以下の通り。
- exponential partitionはより多くのチャネルが小さなサイズのカーネルに割り当てられるため、予想通り、より少ないパラメータとFLOPSになっている。
- MobileNetV1についてはexponential partitionの方がわずかに性能が良いが、V1とV2の両方を見るとどちらが優れているか明確に判断できない。
- exponential partitionの制約として、大きなカーネルが十分に高解像度のパターンを十分に捉えられない可能性がある。
Dilated Convolution
- dilated convolutionについても比較。結果はChannel Partition Methodsの図参照。
- dilated convolutionはカーネルサイズが小さいときには妥当な性能であるが、カーネルサイズが大きくなると精度が急激に低下している。
- 仮説としては、大きなサイズのカーネルのdilation rateが大きいと、多くの局所的な情報をスキップしてしまうため、精度に悪影響を与えていると考えられる。
MixNet
- アーキテクチャの探索によって得られたMixNetの構造は以下の通り。
- MixNet-S, M, Lがあり、MixNet-LはMixNet-Mのdepth multiplierを1.3にしたもの。
- 最初の方のレイヤは特徴マップのスケールが大きいため、カーネルサイズを小さくすることで計算コストを抑えており、一方で後ろの方のレイヤではカーネルサイズを大きくすることで精度を向上させている。
有効性の検証
- ImageNetでの性能を比較したものが以下の表。
- 精度と計算効率の両方でSOTA。
- MixNet-MはResNet-152と同等のtop-1 accだが、パラメータ数は1/12、FLOPSは1/31小さい。
所感
- MixNetはMobileNetと比較するとチャネル数が全体的に小さい。MixConvを使うことでチャネル数が小さくても十分な特徴表現を獲得できるということなのか。
論文読み EXTD: Extremely Tiny Face Detector via Iterative Filter Reuse
どんなもの?
- パラメータ数が0.1M以下の非常に軽量なmulti-scale face detectorのEXTDを提案。精度も大規模なdetectorに匹敵。
- multi-scale detectorはbackbone network中のマルチスケールの特徴マップを必要とするが、EXTDでは異なるスケール間でパラメータを共有する、つまり数層の浅い軽量なbackbone networkを繰り返し再帰的にかけることでマルチスケールの特徴マップを生成する。
技術や手法のキモ
Iterative Feature Map Generation
- ネットワークの反復プロセスは下式のように定義される。 $$ f_i = F(f_{i - 1}), i = 1, \ldots, N, \\ f_0 = E(x). $$
- はbackbone network, は最初のストライド2の畳み込み層を示す。
Model Component Description
- backbone networkでは軽量化のために、MobileNet v2のInverted Residual Blockを用いる。
- depthは6 or 8で、channel widthは32, 48 or 64。
- ReLUよりもPReLU (またはLeakyReLU) の方が良い結果だった。
Classification and Regression Head Design
- 1-stage detectorで問題となるのがnegative sampleとpositive sample間の不均衡性。
- negative sampleのほとんどが最も小さいanchorによるもの。
- そこで、160x160の特徴マップのclassificationレイヤについては、backgroundのスコア推定をチャネルで行い、そのうちの最大のものをスコアとして採用する。これで不均衡性の影響を抑制できるらしい。
- その他はSSDとほぼ同じ。
有効性の検証
- WIDER FACEデータセットを用いて評価。
- 軽量なface detectorのSOTAと比較して圧倒的にパラメータ数が少ないとともに、匹敵する精度を出している。
所感
- アイデアがおもしろい。
論文読み EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
著者による実装 github.com
どんなもの?
- CNNモデルをスケーリングするにはdepth, width, resolution(入力画像サイズ)の3つをチューニングする必要があるが、単純にどれか一つを大きくしても計算コストが増えるだけで精度はサチってしまう(ResNet-1000がResNet-101と同等な精度なのが良い例)。
- この論文では、depth, width, resolutionの3つのパラメータをバランス良くチューニングする手法を提案。
- さらに、ベースとなるネットワーク(ベースラインモデル)であるEfficientNetをNAS (neural architecture search) で探索。
- EfficientNetをスケーリングさせたEfficientNet-B7は、ImageNetのSOTAである84.4% top-1 / 97.1% top-5を達成。これは従来のSOTAであるGPipeに対して1/8.4の大きさかつ6.1倍高速。
技術や手法のキモ
Compound Model Scaling
Problem Formulation
- モデルのスケーリングを以下のような最適化問題として定式化。 $$ \max_{d, w, r} \hspace{3pt} Accuracy(\mathcal{N}(d, w, r)) \\ {\rm s.t.} \hspace{3pt} \mathcal{N}(d, w, r) = \bigodot_{i = 1 \ldots s} \hat{\mathcal{F}}_i^{d \cdot \hat{L}_i} (X_{\langle r \cdot \hat{H}_i, r \cdot \hat{W}_i, w \cdot \hat{C}_i \rangle}) \\ {\rm Memory}(\mathcal{N}) \le {\rm target \hspace{2pt} memory} \\ {\rm FLOPS}(\mathcal{N}) \le {\rm target \hspace{2pt} flops} $$
- はネットワークの各ステージでレイヤが回繰り返されるのを示している。
- は入力テンソル。
- はベースラインモデルのパラメータで、がスケーリングのパラメータ。
Scaling Dimension
- 以下の図はベースラインモデルのEfficientNetのそれぞれのパラメータだけ増加させた際の精度。それぞれ80%になったくらいでサチってる。
Depth (d)
- ネットワークの層を深くすることでより表現力の高い複雑な特徴表現を獲得できるとともに、汎化性が向上することが知られている。
- 深くし続ければ精度が向上し続けるということはなく、深くなるほど精度の向上は横ばいになる。例えば、ResNet-1000はResNet-101と同じくらいの精度。
Width (w)
- ネットワークのチャネル数を増やすことで微細な特徴表現を獲得できるとともに、学習が早く進むことが知られている。
- しかし、depthに対してチャネル数が大きすぎるネットワークは高レベルな特徴表現を獲得するのが難しくなってしまう。
- widthも同様に大きくしていくと精度はサチる。
Resolution (r)
- 高解像度の入力画像を用いることで、ネットワークは潜在的に画像中の微細なパターンを見つけられるようになる。
- ImageNetでは最初は224×224の入力画像が使われていたが、時代が進むにつれてより大きいサイズの入力画像が使われるようになってきており、SOTAであるGPipeの入力画像は480x480。
- resoluitionも同様に大きくしていくと精度はサチる。
Observation 1
- 以上から得られる一つ目の知見は、ネットワークのdepth, width, resolutionのどれかを大きくすると精度は向上するが、モデルが大きくなると精度の向上は少なくなる。
Compound Scaling
- 直感的には、depth, width, resolutionは互いに独立したパラメータではないと言える。
- 例えば、resolutionを大きくするなら画像全体の特徴を捉えるためにdepthも増やすことで受容野を大きくするべきだし、画像中の微細なパターンを捉えるためにwidthも大きくするべき。
- この直感が正しいことを確かめるために、EfficientNetのdepth, resolutionの値を変えてwidthをスケールさせてみると、depth, resolutionを大きくした場合の方が同じFLOPSでの精度は高くなった。
Observation 2
- 以上から得られる二つ目の知見は、より高い精度と効率性を求めるならdepth, width, resolutionのバランスをとることが重要。
Compound Scaling Method
- 以上を踏まえてcompound scaling method (複合スケーリング手法)を提案。
- 下式に基づいて、単一の係数で3つのパラメータを一様にスケーリングさせる。 $$ {\rm depth}: d = \alpha^{\phi} \\ {\rm width}: w = \beta^{\phi} \\ {\rm resolution}: r = \gamma^{\phi} \\ {\rm s.t.} \hspace{3pt} \alpha \cdot \beta^2 \cdot \gamma^2 \approx 2 \\ \alpha \ge 1, \beta \ge 1, \gamma \ge 1 $$
- は定数、簡単なグリッドサーチで求める。
- はユーザーが指定する変数で、モデルのスケーリングに使用できる計算リソースを制御する。
- 畳み込み演算のFLOPSはに比例しており、例えばdepthが2倍になるとFLOPSも2倍になるのに対して、widthかresolutionが2倍になるとFLOPSは4倍になる。
- CNN全体の計算コストのほとんどが畳み込み演算によるものであるため、上式にしたがってスケーリングするとFLOPSはおおよそ倍になる。
- 本論文では、という制約を設けたため、FLOPSはおおよそで増加する。
EfficientNet Architecture
ベースモデルの設計
- モデルのスケーリングはレイヤは変更しないため、優秀なベースモデルを設計することが重要。
- ベースモデルの設計には、MnasNetとほぼ同様の精度とFLOPSの両方を最適化する多目的なneural network searchを用いる。
- 目的関数はで、はモデルの精度とFLOPS、は目標とするFLOPS(今回は400M)、は精度とFLOPSのトレードオフを制御するハイパーパラメータ(今回は-0.7)を表している。
- 探索によって得られるネットワークをEfficientNet-B0とする。構造は以下の通り。
スケーリング
- EfficientNet-B0を以下の2ステップでスケーリングさせる。
Step1
- に固定して小さめのグリッドサーチでを求める。
- EfficientNet-B0に最適な値はという制約の下で、 。
Step2
- を定数として固定して、を変えることでベースモデルをスケーリングさせる。
EfficientNet-B0をスケーリングさせることで得られるのがEfficientNet-B1~B7。
最初から大きいモデルについて直接を探索することでより高い性能を得ることができるが、それだと計算コストが高くなる。
- この手法では、計算コストのかかるパラメータ探索は小さいモデルで行い、得られたパラメータを大きいモデルにも適用することで計算コストを抑えている。
有効性の検証
- ImageNetではEfficientNet-B7がSOTAとなるとともに、それぞれのスケールのモデルは同等の精度の従来モデルと比較してパラメータ数とFLOPSがかなり小さくなっており、効率性も高いことがわかる。
- 他のデータセットでfine-tuningした結果も良好で、汎化性の高い特徴表現を獲得していることがわかる。
所感
- パラメータ数とFLOPS削減の大部分はSeparable Convolutionのおかげな感じ。