Open GENZITSU opened 1 year ago
ACL2020 demoに採択されたBERT系モデルの軽量化ライブラリ、TextPrunerの紹介
20%削減程度だとモデルサイズ/推論速度もそこまで減らないので、実用的かと言われると微妙かもしれない。
ただ、軽量化テクの一つとして頭の片隅に残しておきたい。
表題のチュートリアル。
flaskからの乗り換えをしようかと検討していたところだったので、助かる。
coremltoolsを用いてhaggingface transformerをiphone推論用に最適化する公式チュートリアル
メモ
アノテーション行う際に気を付けるべき点と対応策(論文)の紹介がされているスライド。
以下特に有益なスライドを抜粋
実務でデータセット作る際にとても勉強になる。
SSII2021 [TS3] 機械学習のアノテーションにおける データ収集 〜 精度向上のための仕組み・倫理や社会性バイアス 〜
小データ・小ラベルな状況で有力な自己教師あり表現学習とTest time adaptation & source free domain adaptationという手法の解説がなされているスライド。
わかりやすさが尋常じゃない...
test time adaptationは実務にめちゃくちゃ役立ちそう。
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
特許庁がnishikaで開いた類似商標画像検索コンペティションで1位を取った手法の紹介。 2位が0.685なのに対して1位が0.734と大差をつけているのがポイント。
実行環境や推論速度の制限があることがポイント
タスク: 特許庁が提供した約80万枚の商用画像検索用データセットの中から、実際に審査官が類似していると判定した画像を探し出すこと。
評価方法: Recall@20
モデル実行環境 vCPU8コア、32GBメモリ、1TBストレージ、Tesla T4 GPUx1
推論速度の制限: 画像一枚の検索処理を8秒以内に完了すること
訓練データ上は正解データが1枚しか与えられていないが、実際にはもっと類似画像があるため何らかの方法でpositive pairを割り振る必要があった。
そこで、各画像のphashを計算し、それらの値が近しいものでtrain内 / cite内でグループ化し、正解として与えられている1つのペア情報からグループのマージをすることでpositive pairの割り当てを実施。
ちなみにphashとはperceptual hashのことで、似ている画像であればあるほど似たようなhash値になるような値で、詳細はこのブログが詳しい。
また、imagehashというライブラリが存在する模様
- 画像を縮小する。8x8よりも大きいサイズにする(例えば32x32など)。
- グレースケール化する。
- DCTする。
- 低周波数成分の8x8だけを取り出す。
- 直流成分を除いた低周波数成分の平均値を算出する。
- 平均値よりも高いか低いかで2値化する。
- ラスタスキャン順など何らかの順で一列にし、64bitのハッシュを得る。
phashではなくCNNの特徴を用いたグループ化も試されていたが、phashよりも結果が悪かったとのこと。
定性的に見るとCNN特徴の方が結果が良かったようだが、今回の正解データの与えられ方と相性が悪かったのかもと考察されていた。
ロスはcontrastive learningではなく、MultiSimilarityLossを利用したとのこと。いろいろ使ってみたらこいつが一番良かったらしい。
複数のネガポジを使ってロスを算出している感じ。
各モデルの出力はbackboneにpoolingをかけた上で、特徴ベクトルとして変換させたとのこと。 この際の次元は大きい方が精度が上がったらしい。
当初は256次元や512次元としていたものの、1,024次元や1,536次元に増やすことでスコアの改善がみられたため、
ナイーブにバッチを構成してしまうとバッチ内に正例がなくなってしまうので、以下のような工夫を実施
① horovodを用いた分散学習 ② Optimizer: FusedLAMB ③ CrossBatchMemory(memory_size=2048)の利用
正解画像とされている画像とは別の画像がモデルの出力的により似ていると判定される事象が発生。
正解画像が上位20件から漏れてしまうのを防ぐために、「test画像とのcos類似度が0.5以上のtrainがいた場合にそいつに正解として割り当てられている画像を候補に突っ込む」という後処理を実施。
これにより、スコアが 0.679636 から 0.734111 へ約5pt程度改善したとのこと。
GPUを用いた類似度計算は高速であるものの、特徴抽出用のCNNでT4の16GBのメモリのうち14GBが占有されていたため、事前にNGT(Neighborhood Graph Treeという近傍探索ライブラリ)のindex(ONNG)を事前に作成しておき、CPU上で検索処理を行う方法を選択。 (1枚あたり2.1 sec)
NGTについてはpythonのラッパーがある模様 (pyngt)
商標画像検索という実務が強く意識されたコンペであったため、用いられているテクニックやライブラリについても実用的なものが多かった。
phashによる類似画像のグループ化は初耳の方法だったが、CNNによって抽出される特徴とは別のものが出てくるようなので、類似画像チェックが必要なプロジェクトに使えるかもしれない。
1つの資料で使えるイラストの上限は20点までなので注意が必要
書籍・チラシ・パンフレット・ウェブ・テレビ・パッケージ・電子書籍・動画・ソフトウェア・パワーポイントでのプレゼン・卒業アルバム・名刺など、媒体を問わず1つの制作物につき20点(重複はまとめて1点)まで商用利用をすることができます。
しらんかった
ハンドサインの検出から種別の判別までを目的とした552,992件の画像からなるデータセットがCC BY SAライセンスで公開された。
収録されているハンドサインは以下に加えて、no_gestureというものもある。
約3.5万人のユニークユーザーのfull HD画像が収録されていて、test dataはtrain dataに存在しないunique userのみが収録されている。
年齢は18 - 65才までカバーされていて、屋内が主だが証明条件や撮影距離 (0.5 ~ 4m)などはバラエティに富んだものとなっているとのこと。
既存のデータセットと比べて、規模が1周り大きい
また各カテゴリの方よりも小さい。
データの収集は基本的にyandexが提供するクラウドソーシングサイト経由で以下のようなタスク画面で実施。
撮影条件を明示的に与えている模様。
かなり綺麗なデータセットのようで、分類は比較的容易にできる模様。
商用利用も可能ということで、zoomなどのオンライン会議用ツールに対して手話コマンドを実装したり、手を検出する必要がある何らかのプロジェクトなどに使えるかも。
Static Quantization with Hugging Face
optimum
for ~3x latency improvementshuggign face optimumを利用してdistil-bertのCPU推論速度を76ms→25msまで高速させるチュートリアル。 static quantizationによりモデルサイズは約半分になる一方で、精度は92.5% → 92.24%とほぼ低下しないことを確認している。
コメント
メモ
出典
optimum
for ~3x latency improvements