Skip to content

Taiga10969/Sigmoid_Attenion_ViT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sigmoid_Attenion_ViT

このレポジトリは,Sigmoid AttentionによるAttentionの修正機構を導入したDINOの提案及びHuman in the loopによる精度向上の試み (松本ら [1])を教師あり学習に応用した手法の実装である. 論文では,DINOによる自己教師あり学習手法による評価実験を行なっており,独自の工業製品画像のデータセットを使用している(論文3.1).
そこで,公開されているデータセットを用いてSigmoid Attentionを利用したAttentionの修正機構の有効性の確認を行う.本実験で用いるCUB_200_2011データセットは,200クラスの詳細画像分類タスク用のデータセットでlabelが付与されているため,学習法はDINOではなく,通常の教師あり学習として学習し,詳細画像分類タスクにおける教師あり学習への応用を検証する.

準備

使用するモデルは,論文同様ViT-Small/16を使用する.
ソースコードや事前学習済みの重みは,timmライブラリで公開されているものを活用する.

環境構築/モデルの準備

以下のコマンドを実行してtimmで公開されている事前学習済みのモデルの重みをローカルに保存する.
デフォルトの保存先は,models/vit_small_patch16_224.ptである.
optionで--model_name--save_dirでtimmのモデル名と重みの保存先を指定可能.

cd Sigmoid_Attention_ViT
pip install -r requirements.txt
python3 src/load_pretrained.py 

Datasetの準備

CUB_200_2011データセットを使用して実験を行う.
※コード上では,CUB_200_2010データセットでの実験も収録されているが,CUB_200_2010データセットのBubbleデータはprivateであるためここでは詳しく説明しない.
この先の実験進めるにはCUB_200_2011のデータセットを事前にダウンロードしておく必要がある.
ここからデータセットをダウンロードして./datasetsの下に置く.
また,対応するBubbleデータは,ここからダウンロードして./datasetsの下に置く.

データセットの前処理

以下のコマンドを実行して,データを学習データと検証用データに分割する.分割の際に,各クラス毎のデータセットの枚数が異なるため,各クラス毎にN:(1-N)の割合で分割する. 引数として--shuffleを与えることで,クラス毎に分割する際にクラス内でデータをシャッフルしながら分割する.

python3 src/make_cub200_2011.py --N 0.8 --shuffle

これによりTrainとTextに分けられ["img_path", label, "Bubble_data_name"]でリスト化された./datasets/cub200_2011_dataset.jsonが保存される.

Sigmoid AttentionによるAttentionの修正機構したVision Transformer

論文で提案されている手法はSigmoid関数を通すことで一度0-1の範囲に正規化し,Human in the loopによるAttentionの修正を行う. これによりユーザーが0-1の範囲でAttentionの修正を行うことを可能にしている. さらに,逆Sigmoid関数に通して元のlogitの値へと再変換して後続のSoftmax関数による処理を行うため,Attention Weightの行方向の和が1であることが担保される. また,論文では通常のDINOでの学習後に,人間がAttentionを修正したい数枚のみをアノテーションしHuman in the loopを行う.
しかし,本実験では,CUB_200_2010データとそれに対応するBubbleデータを用いて人間の注視領域と同じ部分に注目したAttentionを獲得するように学習を行う. そのため,通常学習で人間によって理解できないAttentionにを修正するのではなく,全てのデータにおいて人間の注視領域と同じ部分に注目するように学習を行う.

  • Step1:学習(NOT Bubble Data) / 通常のFTによりモデルをデータセットにFitさせる.
  • Step2:HITL学習(Bubble Data) / Bubbleデータを用いて人の注目領域と同じ部分に注目するように追加学習

Step1:学習(NOT Bubble Data)

Bubble DataによるAttentionの学習を行う前に,通常のViTのモデルをFTして精度を確認する.
以下のコマンドにより学習を開始する.wandbで学習進捗を確認するにはrun_vit_trainig.shWANDB_KEYなどを適切に変更しておく必要がある.

bash scripts/run_vit_training.sh

学習結果の確認

学習結果の確認は,result.ipynbを実行することで,テストデータにおける正解率による評価と,サンプルデータにおけるAttentionを用いた判断根拠の可視化による評価を行っている.
このファイルを実行すると,./result./result%Y%m%d_%H%Mの形式で結果画像が保存されます.

Step2:HITL学習(Bubble Data)

次にBubble Dataを含めた学習を行う.
以下のコマンドにより学習を開始する.wandbで学習進捗を確認するにはrun_vit_HITL_training.shWANDB_KEYなどを適切に変更しておく必要がある.

bash scripts/run_vit_HITL_training.sh

実験結果 (Results)

これらの実験をまとめたスライドは,ここから閲覧可能です.(研究室内メンバーのみログインして閲覧可能です.)

References

[1] 松本悠希, 尾澤知憲, 奥野拓也, 三浦勝司, "Sigmoid AttentionによるAttention修正機構を導入したDINOの性能評価", 信学技報, PRMU2024-9, pp. 7-12, 2024.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published