27K Views
December 19, 23
スライド概要
・再アノテーションをするモチベーション(mAP 22.0低すぎ? 論文の指標の2分の1)
・精度向上の結果
・データクレンジングの方針
・対象に選定した公開データセット
・クレンジング経過ごとの学習の進み方(Lossの上下動の傾向)
・クレンジングステージごとの精度
・トレーニングデータとバリデーションデータを同時にクレンジングして毎回Split
・官能評価による性能評価
Hobby Programmer. Caffe, Tensorflow, NCS, RaspberryPi, Latte Panda, ROS, DL, TPU, OpenVINO. Intel Software Innovator. The remarks are my personal opinion.
公開データセットの 再アノテーションで精度向上 株式会社サイバーエージェント AI Lab Agent Development Team Research Engineer 兵頭 亮哉
自己紹介 兵頭 亮哉 Hyodo Katsuya 株式会社サイバーエージェント AI事業本部 AI Lab Agent Development Team Research Engineer https://www.cyberagent.co.jp/techinfo/info/detail/id=23823 マルチモーダル音声対話プラットフォームの開発 @PINTO03091 @PINTO0309 2
再アノテーションをするモチベーション ● 精度が高い「人・頭・手」同時検出モデルが欲しい ● 公開されているモデルの精度がそれほど高くない 自分で作る 3
精度向上の結果(1) ● ● ● ● Core i9 CPU推論 Gold-YOLO-Nano Blur耐性が大幅に向上 ハレーション耐性が向上 低照度耐性が向上 遠距離・中距離・近距離 の検出力が向上 @misc{wang2023goldyolo, title={Gold-YOLO: Efficient Object Detector via Gather-and-Distribute Mechanism}, author={Chengcheng Wang and Wei He and Ying Nie and Jianyuan Guo and Chuanjian Liu and Kai Han and Yunhe Wang}, year={2023}, eprint={2309.11331}, archivePrefix={arXiv}, primaryClass={cs.CV} } 4
精度向上の結果(2) Gold-YOLO-Nano 5
精度向上の結果(3) !? Gold-YOLO-Nano 6
データクレンジングの方針 ● 仮説 ○ モデルの構造設計上の性能はかなり高い ○ 人間と違って忖度を一切せず愚直に学ぶ ○ 間違った答えをそのまま正解として学ぶ ○ モデルは賢いので嘘を教えると混乱する ○ 性能が高いほど顕著に傾向が出る ○ データを整備すればレガシーなモデルでも性能が 出る 7
データクレンジングの方針 自分ひとりで全データをクレンジング エッジケースの判断基準を統一 マージンのとり方の基準を統一 国籍や文化のようなコンテキストを理解している前提でしか目視判 断できないオブジェクトは除外する ● モデルの性能を思い込みで過小評価しない ○ 距離(サイズ) ○ 明暗 ○ ノイズ ● 1ミリも妥協しない ● ● ● ● 8
9
対象に選定した公開データセット ● ● ● ● データが多過ぎず データが少な過ぎず GitHubにトレーニング後のモデルが公開されている サンプルコードが豊富ですぐに流用できるもの Oxford-Hand(COCO-Hand)約 4,300枚 https://www3.cs.stonybrook.edu/~cvl/projects/hand_det_attention/ 10
Oxford-Hand の状態と検証方針 教師データもバリデーションデータもかなり不正確 元データのアノテーションを全部捨てる ただの画像セットに手作業でアノテーションを実施 クレンジング300枚から400枚ごとにトレーニング をしてmAPがどのように変動するかをウォッチ ● 引用したデータセットをそのまま使用したトレーニ ング結果とのmAP比較 ● ● ● ● 11
Oxford-Hand の状態と検証方針 12
トレーニングデータのSplit ● トレーニングデータとバリデーションデータを同時 にクレンジングして学習試行ごとに毎回Split ● 作業進捗ごとにゴミデータとクリーンデータの混合 比率が変わる 13
クレンジング経過ごとの学習の進み方 ● 0%〜50% ○ 大幅にmAPが低下 ○ クレンジングが進捗するたびに低下し続ける ○ Training Lossの上下動が激しい ● 51%〜100% ○ 大幅にmAPが向上 ○ クレンジングが進捗するたびに向上し続ける ○ Training Lossの上下動が少しづつ安定 14
クレンジング経過ごとの最終精度([email protected]:.95 のみ) ● ● ● ● ● ● ● ● ● Pure-COCO-Hand : mAP 22.4 自撮り追加(近距離補強) : mAP 25.4 25%クレンジング : mAP 26.3 50%クレンジング : mAP 25.9 65%クレンジング : mAP 29.9 75%クレンジング : mAP 31.6 85%クレンジング : mAP 33.9 90%クレンジング : mAP 36.5 100%クレンジング :mAP 41.7 15
最終mAPが大きく改善した要因の考察 1. トレーニングデータ改善による数値精度向上 2. バリデーションデータ改善による数値精度向上 ● どちらが強く影響しているかは計測していない ● おそらく、バリデーションデータが改善したことに よるmAP改善効果のほうが大きい? 16
オートアノテーション基点のクレンジング ● 教師データもバリデーションデータもある程度綺麗 ● クレンジングによる数値上の精度向上幅が小さい ● クレンジング前よりクレンジング後のほうが数値上 の精度が大幅に低下する(mAP60.0 → mAP 41.0) ● 難易度激低な特徴が選別され過ぎている ● クレンジング終盤の70%〜80%まではひたすら数値 精度が低下する ● クレンジング80%を超えるとmAPが上昇に転じる 17
クレンジングステージごとの精度 22% 18
クレンジングステージごとの精度 37% 19
クレンジングステージごとの精度 44% 20
クレンジングステージごとの精度 64% 21
クレンジングステージごとの精度 100% 22
総クレンジング・アノテーション量 23
アノテーションに掛けた時間とコスト ● 150時間以上 ● 期間2ヶ月 ● CVAT WEB ◯千円 ※オートアノテーション費用 ヒジと腰を負傷したことを除いて 実質無料 24
ごく少量の弱点補強データの追加 ● COCO-Hand 約4,300枚に弱点補強用データ 約200 枚を追加して性能を上げたい ● 4,500枚に対して200枚は 4.4% のボリューム(影 響度)しか無い ● train:val:test=8:1:1 の比率で合計4,500枚を一括 Splitすると補強データがtrainとvalに含まれる量が 偏って極めて少量になってしまうことがある ● バリデーション結果がとても不安定になる 25
ごく少量の弱点補強データのSplit ● COCO-Hand の Split 作業と 弱点補強用データの Split 作業は別々に実施 ● 別々に Split したあとで train, val, test をひとつに マージ ● Split時の確率による偏りをできるだけ除く ● 8:1:1で補強データが確実に分割される 26
官能評価による性能評価(1) クレンジング前 クレンジング後 ※ 全ての後処理(しきい値判定含む)をモデルにマージして end-to-end 化して比較 27
官能評価による性能評価(2) Gold-YOLO Cited: https://github.com/huawei-noah/Efficient-Computing/tree/mast er/Detection/Gold-YOLO#benchmark YOLOX Cited: https://github.com/Megvii-BaseDetection/YOLOX#benchmark 28
官能評価による性能評価(2) Gold-YOLO-Nano 精度 mAP 44.3 YOLOX-Nano 精度 mAP 40.9 ※ 両モデル 640x640 の入力解像度でトレーニングとバリデーションを行いました。 29
官能評価による性能評価(2) Gold-YOLO-N 20.0MB CPU YOLOX-Nano 3.9MB CPU 30
官能評価による性能評価(3) YOLOX-Nano 3.9MB 160x128 RaspberryPi4 CPU tflite_runtime v2.15.0 31
官能評価による性能評価(4) YOLOX-Nano 3.9MB 160x128 RaspberryPi Zero 2 W CPU tflite_runtime v2.15.0 INT8量子化 81ms/推論 約 12.3 FPS 32
すべてを終えたあとの所感 1. 公開データセットはかなり良くない 2. データを限界まで整えればモデルの真のポテンシャルを 引き出せる 3. 精度が劇的に向上 → 解像度削減で計算量を大幅に減らせ る 4. ライトユースの場合は無理をして複雑なトリックが入っ たSOTAモデルを使うメリットがあまり無くなる 5. 論文のベンチマークは過剰に高精度な数値で表現されて いる 33
READMEやデモコードや他リソース 1. https://github.com/PINTO0309/PINTO_model_zoo/ tree/main/425_Gold-YOLO-Body-Head-Hand 2. https://github.com/PINTO0309/PINTO_model_zoo/ tree/main/426_YOLOX-Body-Head-Hand 34
おわりに ● エンジニアも研究者も募集中です。 エンジニア向け 研究者向け 35