Detic : 21kクラスを高精度にセグメンテーションできる物体検出モデル
ailia SDKで使用できる機械学習モデルである「Detic」のご紹介です。エッジ向け推論フレームワークであるailia SDKとailia MODELSに公開されている機械学習モデルを使用することで、簡単にAIの機能をアプリケーションに実装することができます。
Deticの概要
Detic(Detector with Image Classes)は21Kクラスを識別できるセグメンテーションモデルです。FacebookResearchによって開発され、2022年1月に公開されました。YOLOでは今まで検知できなかった物体も再学習不要で高精度に検知することが可能です。また、BoundingBox不要で、画像ラベルのみのアノテーションで学習することが可能です。
Deticのアーキテクチャ
入力された画像から、BoundingBoxとクラス名を識別することを物体検出(Detection)と呼びます。入力された画像から、クラス名のみを識別することを物体識別(Classification)と呼びます。
従来の物体検出は、BoundingBoxのアノテーションコストが大きいという問題があり、小さなデータセットしか作成できず、限られたクラス数の学習と検出しか行うことができませんでした。
対して物体識別は、画像単位のラベルのアノテーションで良いため、より大きなデータセットを作成することができます。それにより、より多くのクラス数の学習と識別を行うことができますが、データセットにはBoundingBoxが含まれておらず、物体検出の学習には使用できないという問題があります。
Deticでは、物体検出器を物体識別用のデータセットで学習することで、この問題を解決します。
物体検出器をBoundingBoxを使用せずに学習する方法は、Weakly-supervised object deteciton (WSOD)と呼ばれています。DeticではSemi-supervised WSODを使用します。物体識別用のImageNet-21Kデータセットを使用して、物体検出器を学習します。
従来の研究とは異なり、Deticでは、物体検出器のBoundingBoxにクラスラベルを与えません。検出されたBoundingBoxに対して、超大規模データセットで学習されたCLIPのEmbedding Vectorを使用することで、クラス名を識別します。
学習において、画像単位のクラスラベルしか存在しないため、物体検出器が出力したBoundingBoxのうち、最もサイズの大きなBoundingBoxに対してクラス識別を行い、Lossを計算します。Lossが大きい場合、識別器と物体検出器のBoundingBox算出方法が修正されることで、学習が進みます。
Deticのデータセット
ImageNet21kは物体識別用のデータセットです。画像単位のラベルのみを含みます。21kのクラスラベルを持ち、1400万枚の画像を持ちます。学習に使用します。
LVISは物体検出用のデータセットです。1000+のクラスラベルを持ち、12万枚の画像を含みます。評価に使用します。
Deticの学習済みモデル
Deticは複数のBackboneを使用した学習済みモデルが公開されています。
例えば、下記のモデルでは、SwinB(Swin-Transformer)のbackboneと、CenterNet2のDetector, Federated Loss, large-scale jitteringのモデルアーキテクチャを使用し、ImageNet21kの物体識別用のデータセットとCOCOデータセットを使用して学習されています。識別対象のクラスとして、COCOおよびLVISのクラスリストと、COCOおよびImageNet21kのクラスリストを選択可能です。
Detic_C2_SwinB_896_4x_IN-21K+COCO_lvis.onnx
Detic_C2_SwinB_896_4x_IN-21K+COCO_in21k.onnx
下記のモデルでは、ResNet50のbackboneを使用し、ImageNet21kの物体識別用のデータセットを使用して学習されています。SwinBよりもmask mAPは低下しますが、より高速な推論が可能です。
Detic_C2_R50_640_4x_lvis.onnx
Detic_C2_R50_640_4x_in21k.onnx
Deticの入力と出力
Deticの入力は下記となります。なお、ONNXはopset=16でGridSamplerを統合したバージョンを使用しています。
入力1 (1,3,600,800):入力画像(NCHW、RGB順のレンジ0–255の画像)
入力2 (2,) = [600, 800]:入力解像度(HW順)
Deticの出力は下記となります。27のところは検出したバウンディングボックスの数が入ります。
出力1 (27, 4) : バウンディングボックス(ピクセル座標、x1,y1,x2,y2)
出力2 (27,) : スコア(0–1)
出力3 (27,) : 予測クラス番号
出力4 (27, 600, 800) : ピクセルマスク画像、入力解像度サイズ(0–1)
Deticの認識例
DeticはYOLOに比べて幅広い領域の物体を再学習不要で認識することができます。SwinB + LVISを使用したDeticの認識例を示します。
建機
三角コーン
メーター
牛とタグ
魚
シートベルト
Deticの使用方法
ailia SDKは1.2.10からDeticに対応しています。下記のコマンドで任意の画像に対して認識が可能です。
$ python3 detic.py --input input.jpg --savepath output.jpg
また、-m R50_640_4xオプションを使用することで、SwinBよりも4倍程度高速なResNet50バックボーンを使用した推論も可能です。
$ python3 detic.py --input input.jpg --savepath output.jpg -m R50_640_4x
ResNet50バックボーンでの推論例は下記となります。SwinBよりは精度が低下しますが、三角コーンも検知可能です。
Deticの応用
Deticは高精度ですが、モデルサイズが551MBと大きいため、エッジ端末で動作させるには負荷が高くなっています。そこで、エッジ端末向けには、Deticでアノテーションデータを作成し、yoloxなどで再学習することで、yoloxの認識カテゴリを拡張するなどすることが望ましいと考えています。ax株式会社ではDeticを使用してyoloxのモデル再学習を自動化するサービスを準備中です。
ax株式会社はAIを実用化する会社として、クロスプラットフォームでGPUを使用した高速な推論を行うことができるailia SDKを開発しています。ax株式会社ではコンサルティングからモデル作成、SDKの提供、AIを利用したアプリ・システム開発、サポートまで、 AIに関するトータルソリューションを提供していますのでお気軽にお問い合わせください。