Open GENZITSU opened 10 months ago
画像のcaption, dense caption, segmentation除法をテキストに落として、LLMに組み込むことでドライブレコーダーで撮影した走行状況の説明を試みている記事
Image2Paragraphというレポジトリをもとに、画像キャプショニングはBLIP-2、Dense CaptioningはGRiT[Wu+ 22]、領域の意味抽出はFastSAM[Zhao+, 23]を用いて、プロンプトに落とし込む情報を抽出している。
多段階にモデルを走らせる必要があるため、推論時間に難ありだが、現状の構成としてはかなり優秀そう。
現状はChatGPTレベルに優秀なマルチモーダルモデルがないため一旦テキストに落とし込む他ないが、マルチモーダルが解放されたらもっと凄いことになりそう。
正常画像と異常画像を用いずに、プロンプトを工夫することで異常検知を行う手法の解説記事
この手法はVAND 2023 ChallengeというZero-shot, Few-shot異常検知の精度を競うコンペで準優勝という成績を納めている。
画像とプロンプトを入力に使えるGrounding DINOを用いて、候補領域のBBoxを検出後、Segment Anything Modelに画像とBBox, プロンプトを入力してsegmentationを実施する
ただしこのベースモデルには、事前学習済みモデルと対象画像との間のDomain Gapやプロンプトに用いるワードのtraining / inference時のgapなどが存在する
ポイントは以下の3つ
ジッパーのような一般的にはどこが以上がわかりにくい画像 (ジッパー自体を異常と見做しがち)では間違いやすいが、プロンプトの改良と既存技術の掛け合わせで、コンペ準優勝までいけるというのは驚き。
TIER IV ワークショップ:自動運転におけるAIコンピューティングにて発表された物体検出処理モデル(YOLOX)の高速化事例の紹介動画
勉強になった点をペタペタメモ
YOLO famillyをまとめている図
代表的な高速化手法
onnx → TensorRTでモデルを最適化 (precisionはINT-8)
前処理をCPU→CUDA→Kernel Fusionを用いて高速化
GPU効率の良いアーキテクチャーの探索 (都度プロファイリングして遅いところを潰す)
INT8を前提にすると32chずつのアーキテクチャーの方が効率が良い
SwishよりもReLUの方が効率が良い
Jetson OrinからサポートされたDeep Learning Accelarator (DLA) の恩恵を受けられるように改造する
使い方自体はTensorRTを用いる際にフラグを立てるだけ
プロファイリングをしながら、DLAオンリーになるように改造してく
更なる改造
高速化できた分、input sizeを大きくし、精度向上を狙う
量子化手法はいろいろあるが、モデルによってどれが最適か検証する必要がある
DLAではサポートされていない量子化だったのでDynamic Range Quantizationを採用
勉強になりすぎる...
DLAを意識した改造は相当用途が決まっていないと手が出せない領域だが、以下のテクニック達は通常のユースケースでも手を出せそう。
sentence bertを利用せずに、huggingfaceライブラリを用いて文章ベクトルを抽出する際のtipsを共有している記事。
イタズラに長いトークン長固定でencodeすると推論時間が無駄に伸びるのでpadding数を削減しようという旨
以下の図がわかりやすいが、トークン長が近いもの同士で並び替えて、バッチ推論するとpadding数が少なく済むので、推論が早くなる
CLSトークンを文章ベクトルとみなすことも可能だが、最終層の全トークンのembeddingのmean/maxを取るという手段もある
その際、padding文を無視するようにすることを忘れずに
python
features = tokenizer.batch_encode_plus(
batch, padding="longest", truncation=True, return_tensors="pt"
)
output = model(**features)
output = output["last_hidden_state"]
# [CLS] tokenの場合
output = output[:, 0, :]
# token平均値の場合
att_mask = features["attention_mask"]
att_mask = att_mask.unsqueeze(-1)
output = (output * att_mask).sum(dim=1) / att_mask.sum(dim=1)
タスクにもよるが、token 平均を使った方がいい時もありそう
最終層は事前学習タスクに最適化されている可能性が高いということで、最終層から2層目以降からembeddingを引っ張ってくることがある
今回はあまり変化なかったとのこと
token平均のところは意外と忘れやすそう
それらtipsを統合した実装も公開されているのがありがたい
添付のような誤字ツイートを機械的に生成するライブラリの紹介
誤字ツイートの生成ロジックを分析して、それをシミュレートしているのが好印象
パターンA:元と読みは同じで漢字だけ違う単語(同音異義語)に置き換わる パターンB:一文字違いの単語に置き換わる パターンC:予測変換によって、最初の数文字だけ同じ全く別の単語に置き換わる
SNS投稿に対するモデリングをする際のdata augmentationとして利用できるかもしれない
表題の通り
検証結果としては明らかにノイズとなるような特徴量は削除しておいた方が良いが、もしかしたら関係するかも?というものは別に残しておいてもそこまで悪影響を及ぼさないという結論を得ている
実務的には明らかにノイズ!となる特徴量を混ぜ込むことはそうそうなさそうなので、気にしなくてもいい感じかも
表題の通り、デフォルトのまま学習させると全く精度が出ないものの、適切に設定を変えると精度が出るようになる
以下エッセンス
- ラベル量(データ量)が多いと、データセット準備時(init prefetcher)にcore dumpする場合がある。その対策としてdata_num_workersを1に指定する。参考
- get_data_loaderメソッドをオーバーライドして、max_labelsの値を120から任意の値(1画像枚のラベル数の上限)に変更する。yolox/exp/yolox_base.pyよりget_data_loaderメソッドをコピペして該当箇所を修正すればよい。
- mixupはオフにする。ただでさえラベルが多いのにmixupで画像を重ね合わせるとラベルがさらに増えてしまう。
- pycocotoolsはデフォルトで1画像毎のラベル数を[1,10,100]とハードコードしていて、APやARの計算には100ラベル時の値が用いられる。ラベル数はCOCOEval.params.maxDetsで管理されているので、ここを改変すれば良い。COCOeval_optもCOCOevalを継承しているので同様に変更可能。ここでは[1,10,100] -> [100,500,1000]とした。
画像 → テキストに一回した後に、テキストのembeddingで類似度とるやつ
最近ちらほら見かける構成
画像→テキスト 部分はchatgptのplugin使ってるけど、普通に画像を説明してくれるモデルを使うのでも良い
Deblurモデルを作成する際に必要な基礎知識が体系的にまとめられているシリーズ
まだ読めてないけど、いつか使いそうなのでメモ
【LLM】ベクトルデータベースって多くてどれを使ったら良いか分からないというあなたのための記事(6つのツールを比較)
代表的なベクトルデータベースである、Pinecone, pgvector, Weaviate, Qdrant, Milvus, Chromaのそれぞれの概要と一般的な使い方を紹介している記事。
コメント
参考になったのでメモ
元々pgvectorを使おうと思っていたが、性能が悪いらしいので、WeaviateかQdrantを使ってみようかなと
出典