almost weekly useful materials - 08/23 -
Opened this issue · 10 comments
【LLM】ベクトルデータベースって多くてどれを使ったら良いか分からないというあなたのための記事(6つのツールを比較)
代表的なベクトルデータベースである、Pinecone, pgvector, Weaviate, Qdrant, Milvus, Chromaのそれぞれの概要と一般的な使い方を紹介している記事。
コメント
参考になったのでメモ
元々pgvectorを使おうと思っていたが、性能が悪いらしいので、WeaviateかQdrantを使ってみようかなと
出典
大規模言語モデルを使って自動車走行時の状況説明をさせてみる? -社内LLMハッカソン記-
画像のcaption, dense caption, segmentation除法をテキストに落として、LLMに組み込むことでドライブレコーダーで撮影した走行状況の説明を試みている記事
Image2Paragraphというレポジトリをもとに、画像キャプショニングはBLIP-2、Dense CaptioningはGRiT[Wu+ 22]、領域の意味抽出はFastSAM[Zhao+, 23]を用いて、プロンプトに落とし込む情報を抽出している。
コメント
多段階にモデルを走らせる必要があるため、推論時間に難ありだが、現状の構成としてはかなり優秀そう。
現状はChatGPTレベルに優秀なマルチモーダルモデルがないため一旦テキストに落とし込む他ないが、マルチモーダルが解放されたらもっと凄いことになりそう。
出典
論文解説∶Segment Any Anomaly∶プロンプトを使った学習要らずの異常検知
正常画像と異常画像を用いずに、プロンプトを工夫することで異常検知を行う手法の解説記事
この手法はVAND 2023 ChallengeというZero-shot, Few-shot異常検知の精度を競うコンペで準優勝という成績を納めている。
SAA (ベースモーデル)
画像とプロンプトを入力に使えるGrounding DINOを用いて、候補領域のBBoxを検出後、Segment Anything Modelに画像とBBox, プロンプトを入力してsegmentationを実施する
ただしこのベースモデルには、事前学習済みモデルと対象画像との間のDomain Gapやプロンプトに用いるワードのtraining / inference時のgapなどが存在する
SAA+ (改良版)
ポイントは以下の3つ
- 事前学習時にも使われてたであろうワードを用いて、プロンプトを調整する
- いくつかのプロンプトを用いて生成したmask (ここは推測) のIoUや画像全体に占める割合などでフィルタ
- 生成された異常箇所をsaliency mapでマスクすることで、さらにフィルタ
- 最後に残った候補群からTopKのマスクのみ残す
コメント
ジッパーのような一般的にはどこが以上がわかりにくい画像 (ジッパー自体を異常と見做しがち)では間違いやすいが、プロンプトの改良と既存技術の掛け合わせで、コンペ準優勝までいけるというのは驚き。
出典
EdgeAIのためのDNN推論処理の最適化
TIER IV ワークショップ:自動運転におけるAIコンピューティングにて発表された物体検出処理モデル(YOLOX)の高速化事例の紹介動画
勉強になった点をペタペタメモ
YOLO famillyをまとめている図
代表的な高速化手法
TIER IVで行われている最適化
onnx → TensorRTでモデルを最適化 (precisionはINT-8)
前処理をCPU→CUDA→Kernel Fusionを用いて高速化
GPU効率の良いアーキテクチャーの探索 (都度プロファイリングして遅いところを潰す)
INT8を前提にすると32chずつのアーキテクチャーの方が効率が良い
SwishよりもReLUの方が効率が良い
Jetson OrinからサポートされたDeep Learning Accelarator (DLA) の恩恵を受けられるように改造する
使い方自体はTensorRTを用いる際にフラグを立てるだけ
プロファイリングをしながら、DLAオンリーになるように改造してく
更なる改造
高速化できた分、input sizeを大きくし、精度向上を狙う
モデル量子化に関するtips
量子化手法はいろいろあるが、モデルによってどれが最適か検証する必要がある
DLAではサポートされていない量子化だったのでDynamic Range Quantizationを採用
結局どうなったか
コメント
勉強になりすぎる...
DLAを意識した改造は相当用途が決まっていないと手が出せない領域だが、以下のテクニック達は通常のユースケースでも手を出せそう。
- onnx
- TensorRT
- GPU効率を意識したアーキテクチャー絵の改造
- 量子化手法のチューニング
出典
BERT系モデルで文章をEmbeddingする際のTips
sentence bertを利用せずに、huggingfaceライブラリを用いて文章ベクトルを抽出する際のtipsを共有している記事。
1. トークン長
イタズラに長いトークン長固定でencodeすると推論時間が無駄に伸びるのでpadding数を削減しようという旨
以下の図がわかりやすいが、トークン長が近いもの同士で並び替えて、バッチ推論するとpadding数が少なく済むので、推論が早くなる
2. CLS vs Token Averaging
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 平均を使った方がいい時もありそう
3. どこからembeddingを取得するか
最終層は事前学習タスクに最適化されている可能性が高いということで、最終層から2層目以降からembeddingを引っ張ってくることがある
今回はあまり変化なかったとのこと
コメント
token平均のところは意外と忘れやすそう
それらtipsを統合した実装も公開されているのがありがたい
出典
X(Twitter)で見かける誤字ツイート(誤字エックス)を生成するライブラリ
添付のような誤字ツイートを機械的に生成するライブラリの紹介
誤字ツイートの生成ロジックを分析して、それをシミュレートしているのが好印象
パターンA:元と読みは同じで漢字だけ違う単語(同音異義語)に置き換わる
パターンB:一文字違いの単語に置き換わる
パターンC:予測変換によって、最初の数文字だけ同じ全く別の単語に置き換わる
コメント
SNS投稿に対するモデリングをする際のdata augmentationとして利用できるかもしれない
出典
ランダムフォレストを使うなら変数選択はしなくてもいいのか?
表題の通り
検証結果としては明らかにノイズとなるような特徴量は削除しておいた方が良いが、もしかしたら関係するかも?というものは別に残しておいてもそこまで悪影響を及ぼさないという結論を得ている
コメント
実務的には明らかにノイズ!となる特徴量を混ぜ込むことはそうそうなさそうなので、気にしなくてもいい感じかも
出典
YOLOXで多量物体検出訓練を行う設定
表題の通り、デフォルトのまま学習させると全く精度が出ないものの、適切に設定を変えると精度が出るようになる
以下エッセンス
- ラベル量(データ量)が多いと、データセット準備時(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]とした。
コメント
- あんま遭遇しないかもですが、こういうオプション設定で学習の成否が変わると考えると、重要
出典
類似画像検索にLLMを利用する。
画像 → テキストに一回した後に、テキストのembeddingで類似度とるやつ
コメント
最近ちらほら見かける構成
画像→テキスト 部分はchatgptのplugin使ってるけど、普通に画像を説明してくれるモデルを使うのでも良い
出典
Debur 外観
Deblurモデルを作成する際に必要な基礎知識が体系的にまとめられているシリーズ
コメント
まだ読めてないけど、いつか使いそうなのでメモ