SlideShare a Scribd company logo
backbone としての timm 入門
2021/08/17 第3回分析コンペLT会 オンライン
@tawatawara
自己紹介
JTC Kaggler(死語)
◦ 研究開発(?)職
◦ 社会人からMLを始める
Kaggle Master
◦ みんな GM になっていく…
近況
◦ #11 atmaCup 5th (つらい)
◦ https://github.com/tawatawara/atmaCup-11
◦ 宇宙人とまだ交信中
timm …?
Kaggle の公開 Notebooks や Solution でも
見かけるけど timm って何だろう…?
timm: PyTorch Image Models
Ross Wightman さんが公開している最強の画像認識ライブラリ
◦ 様々な model が実装されている
◦ 612種†‡ の実装
◦ 452種†‡ の pretrained model
◦ 最新のmodel も割とすぐ追加される
◦ 上記を統一的に扱える仕組みの提供
◦ その他カスタムされた augmentation 等の提供
◦ ここらへんは詳しく知らないので今回話しません
†: 重複した構造を含む
‡: v0.4.12 時点での情報 https://github.com/rwightman/pytorch-image-models
backbone?
一般的な画像分類 model の構成は以下
◦ 特徴抽出 (Convolutional Layers)
◦ 特徴の集約 (Global Average Pooling)
◦ 出力(Fully Connected Layer(s)) (タスクを解く部分)
特徴抽出部(+ GAP)を backbone, 出力部を head と呼ぶことが多い
Backbone
(CNN)
Head
(FC)
Pooling
(GAP)
(C’, ) (out_dim, )
(C’, H’, W’)
(C, H, W)
ここからの話
基本的な使い方
ちょっとだけ凝った使い方
どのモデルを使う?
基本的な使い方(1/)
create_model 関数
◦ model_name で model を指定
◦ pretrained=True とするだけで pretrained model
が読み込まれる(初回は download される)
◦ ImageNet が基準なので入力のチャネルが 3 で
出力の次元が 1000 というのが基本
注意事項
◦ pretrained model が無い model を指定して
pretrained=Trueにしても何も言ってくれない
◦ 既に download 済な場合も何も表示されない
基本的な使い方(2/)
head を置き換える
◦ 引数 num_classes を使うことで、任意の出力
次元の head に置き換えられる
◦ head は基本的に1層の全結合層
◦ head の名前等は model によってまちまちだ
が、そこは timm が勝手に処理してくれる
◦ あとは学習させるだけ。めっちゃ便利!
ちょっとだけ凝った使い方(1/)
backbone として使いたい
◦ head の部分を複雑なものにしたい
◦ backbone としてひとまとめに扱いたい
head の部分を無効化する
◦ num_classes=0 とするだけ
◦ 出力サイズ: (bs, C’)
pooling を無効化する
◦ global_pool=“” とするだけ
◦ 出力サイズ: (bs, C’, H’, W’)
ちょっとだけ凝った使い方(2/)
backbone として使いたい
◦ head の部分を複雑なものにしたい
◦ backbone としてひとまとめに扱いたい
一度呼び出した後に変更
◦ reset_classifier 関数を使用すると可能
◦ head や pooling の無効化を後からできる
因みに
◦ 無効化は torch.nn.Identity に置き換えること
で行われている
ちょっとだけ凝った使い方(3/)
実は色々情報を持っている
◦ num_features
◦ 一番使うやつ
◦ CNN 部分の最後のチャネルの数
◦ feature_info
◦ ブロックごとの情報
◦ [追記] コメントで教えて頂いたのですが model に
よってはこの属性を持っていません
◦ default_cfg
◦ pretrained model の学習条件など
◦ 最初の Conv 層の情報, head の情報
ちょっとだけ凝った使い方(4/)
自分で model を定義してみる
◦ self.backbone は timm.create_model で
head を無効化したものを使用
◦ head として非線形な全結合層を実装
◦ head の入力の次元を設定するために
num_features にアクセス
◦ Linear -> ReLU -> Drooput -> Linear
ちょっとだけ凝った使い方(5/)
自然画像じゃないデータに使いたい
◦ 白黒画像、細胞画像、メルスペクトログラム…
実は in_chans 引数を指定するだけ
◦ めちゃくちゃお手軽
◦ ちゃんと pretrained weight を使ってくれる
どういう仕様?
◦ 1のとき: 元の 3 channels 用のフィルタの合計値
◦ 1と3 以外: R,G,B,R,G,B,R, … と並べる
◦ 値の大きさはスケールされる
ちょっとだけ凝った使い方(6/)
複数の feature map を取り出したい
◦ features_only=True (上)
◦ ブロックごとの出力(5個)が得られる
◦ out_indices で特定の場所を指定可能(下)
◦ 指定した2ブロックの出力が得られる
◦ [追記] コメントで教えて頂いたのです
が model によっては対応してません
Global Pooling 系
◦ 実は max や avgmax も指定できる
◦ ただ avg 以外は基本使ったこと無いので
仕様は把握してません
どのモデルを使う?
timm.list_models で一覧が見れる
◦ Pretrained=True とすると、Pretrained Model
があるものだけ確認できる
◦ 652 種類(pretrained ありは 452)
でも…
◦ いっぱいある過ぎるしどれ使えばいいの?
◦ model の名前だけ見てもわからんな…
◦ (vovnet...?知らない名前だ...)
どのモデルを使う?
レポジトリ内に ImageNet Classification Task
に対する結果がまとまっている
◦ https://github.com/rwightman/pytorch-image-
models/tree/master/results
◦ ※たまに追加が忘れられてる model もあります
じゃあ性能順に試せば良いのか?
◦ 実際にやってみると…
◦ いやこの model 重すぎて学習無理…
◦ 数値上のパラメータ数少ないのに学習させてみたら
めっちゃVRAM食うぞ?!
https://github.com/rwightman/pytorch-image-models/blob/master/results/results-imagenet.csv
どのモデルを使う?
分析コンペの進め方として
◦ 徒にいろんな model を試すのは時間がかかるだけ
◦ 大きい model だから良い性能が出るとも限らない
◦ model の種類では無く前処理等が決め手になるときも
◦ 自分の中で base model を決めて改善してくのが〇
いやどの model がいいの?
◦ 個人的には ResNet-D が好き
◦ Solution では EfficientNet をよく見かける
◦ 最近だと ViT 系が Solution に現れるようになった
◦ SwinTransformer が良いという話を見かける
まとめ
timm: PyTorch Image Models
◦ 様々な model が実装されており pretrained model も豊富
◦ 更新も頻繁で今現在間違いなく最強の画像認識ライブラリ
timm の使い方を簡単に紹介
◦ create_model でお気軽に呼び出せるし pretrained model も読み込める
◦ 引数の指定によるカスタムも豊富
じゃあコンペでどの model を使う?(個人的見解)
◦ 徒に色々試すよりは自分の使う base model を決めておいた方が良い
◦ 様々なコンペの Solution で出てくるやつは大概強いのでそういうのから試してみるのはアリ
参考
公式レポジトリ:https://github.com/rwightman/pytorch-image-models
公式の docs: https://rwightman.github.io/pytorch-image-models/
fastai の(?) docs: https://fastai.github.io/timmdocs/
◦ 何か妙に詳しい記述があったり無かったり
◦ In_chans を 3 以外にしたときの仕様: https://fastai.github.io/timmdocs/models#Case-2:-When-the-
number-of-input-channels-is-not-1
[追記] 有志による timm の model の速度比較
◦ https://github.com/kentaroy47/timm_speed_benchmark
◦ @arutema47 さん公開ありがとうございます!
Ad

More Related Content

What's hot (20)

Transformer メタサーベイ
Transformer メタサーベイTransformer メタサーベイ
Transformer メタサーベイ
cvpaper. challenge
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!Transformer
Arithmer Inc.
 
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
Deep Learning JP
 
研究効率化Tips Ver.2
研究効率化Tips Ver.2研究効率化Tips Ver.2
研究効率化Tips Ver.2
cvpaper. challenge
 
【メタサーベイ】Transformerから基盤モデルまでの流れ / From Transformer to Foundation Models
【メタサーベイ】Transformerから基盤モデルまでの流れ / From Transformer to Foundation Models【メタサーベイ】Transformerから基盤モデルまでの流れ / From Transformer to Foundation Models
【メタサーベイ】Transformerから基盤モデルまでの流れ / From Transformer to Foundation Models
cvpaper. challenge
 
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII
 
【DL輪読会】Self-Supervised Learning from Images with a Joint-Embedding Predictive...
【DL輪読会】Self-Supervised Learning from Images with a Joint-Embedding Predictive...【DL輪読会】Self-Supervised Learning from Images with a Joint-Embedding Predictive...
【DL輪読会】Self-Supervised Learning from Images with a Joint-Embedding Predictive...
Deep Learning JP
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII
 
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks? 【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
Deep Learning JP
 
画像生成・生成モデル メタサーベイ
画像生成・生成モデル メタサーベイ画像生成・生成モデル メタサーベイ
画像生成・生成モデル メタサーベイ
cvpaper. challenge
 
【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models
Deep Learning JP
 
自己教師学習(Self-Supervised Learning)
自己教師学習(Self-Supervised Learning)自己教師学習(Self-Supervised Learning)
自己教師学習(Self-Supervised Learning)
cvpaper. challenge
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
joisino
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
ryosuke-kojima
 
マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向
Koichiro Mori
 
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
Deep Learning JP
 
SSII2022 [OS3-02] Federated Learningの基礎と応用
SSII2022 [OS3-02] Federated Learningの基礎と応用SSII2022 [OS3-02] Federated Learningの基礎と応用
SSII2022 [OS3-02] Federated Learningの基礎と応用
SSII
 
Data-Centric AIの紹介
Data-Centric AIの紹介Data-Centric AIの紹介
Data-Centric AIの紹介
Kazuyuki Miyazawa
 
畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化
Yusuke Uchida
 
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
Deep Learning JP
 
Transformer メタサーベイ
Transformer メタサーベイTransformer メタサーベイ
Transformer メタサーベイ
cvpaper. challenge
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!Transformer
Arithmer Inc.
 
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
Deep Learning JP
 
【メタサーベイ】Transformerから基盤モデルまでの流れ / From Transformer to Foundation Models
【メタサーベイ】Transformerから基盤モデルまでの流れ / From Transformer to Foundation Models【メタサーベイ】Transformerから基盤モデルまでの流れ / From Transformer to Foundation Models
【メタサーベイ】Transformerから基盤モデルまでの流れ / From Transformer to Foundation Models
cvpaper. challenge
 
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII
 
【DL輪読会】Self-Supervised Learning from Images with a Joint-Embedding Predictive...
【DL輪読会】Self-Supervised Learning from Images with a Joint-Embedding Predictive...【DL輪読会】Self-Supervised Learning from Images with a Joint-Embedding Predictive...
【DL輪読会】Self-Supervised Learning from Images with a Joint-Embedding Predictive...
Deep Learning JP
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII
 
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks? 【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
Deep Learning JP
 
画像生成・生成モデル メタサーベイ
画像生成・生成モデル メタサーベイ画像生成・生成モデル メタサーベイ
画像生成・生成モデル メタサーベイ
cvpaper. challenge
 
【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models
Deep Learning JP
 
自己教師学習(Self-Supervised Learning)
自己教師学習(Self-Supervised Learning)自己教師学習(Self-Supervised Learning)
自己教師学習(Self-Supervised Learning)
cvpaper. challenge
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
joisino
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
ryosuke-kojima
 
マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向
Koichiro Mori
 
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
Deep Learning JP
 
SSII2022 [OS3-02] Federated Learningの基礎と応用
SSII2022 [OS3-02] Federated Learningの基礎と応用SSII2022 [OS3-02] Federated Learningの基礎と応用
SSII2022 [OS3-02] Federated Learningの基礎と応用
SSII
 
畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化
Yusuke Uchida
 
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
Deep Learning JP
 

Similar to backbone としての timm 入門 (20)

OCaml でデータ分析
OCaml でデータ分析OCaml でデータ分析
OCaml でデータ分析
Akinori Abe
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
MITSUNARI Shigeo
 
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
MicroAd, Inc.(Engineer)
 
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだよろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
Narami Kiyokura
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道
Satoshi Sato
 
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
KamezawaHiroyuki
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
Takeshi Arabiki
 
Altanative macro
Altanative macroAltanative macro
Altanative macro
Motohiro KOSAKI
 
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
Daiyu Hatakeyama
 
Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
Kaggleのテクニック
Yasunori Ozaki
 
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Kotaro Nakayama
 
Halide for Memory
Halide for MemoryHalide for Memory
Halide for Memory
Koumei Tomida
 
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
Nishida Kansuke
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
 
Ctb57 with god7
Ctb57 with god7Ctb57 with god7
Ctb57 with god7
kingtomo
 
C++ template-primer
C++ template-primerC++ template-primer
C++ template-primer
Kohsuke Yuasa
 
SageMaker Neoの可能性について - 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
SageMaker Neoの可能性について- 第3回 Amazon SageMaker 事例祭り+体験ハンズオンSageMaker Neoの可能性について- 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
SageMaker Neoの可能性について - 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
tomohiro kato
 
CSRを自動生成する!
CSRを自動生成する!CSRを自動生成する!
CSRを自動生成する!
Taichi Ishitani
 
OCaml でデータ分析
OCaml でデータ分析OCaml でデータ分析
OCaml でデータ分析
Akinori Abe
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
MITSUNARI Shigeo
 
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
MicroAd, Inc.(Engineer)
 
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだよろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
Narami Kiyokura
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道
Satoshi Sato
 
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
KamezawaHiroyuki
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
Takeshi Arabiki
 
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
Daiyu Hatakeyama
 
Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
Kaggleのテクニック
Yasunori Ozaki
 
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Kotaro Nakayama
 
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
Nishida Kansuke
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
 
Ctb57 with god7
Ctb57 with god7Ctb57 with god7
Ctb57 with god7
kingtomo
 
SageMaker Neoの可能性について - 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
SageMaker Neoの可能性について- 第3回 Amazon SageMaker 事例祭り+体験ハンズオンSageMaker Neoの可能性について- 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
SageMaker Neoの可能性について - 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
tomohiro kato
 
CSRを自動生成する!
CSRを自動生成する!CSRを自動生成する!
CSRを自動生成する!
Taichi Ishitani
 
Ad

backbone としての timm 入門

  • 1. backbone としての timm 入門 2021/08/17 第3回分析コンペLT会 オンライン @tawatawara
  • 2. 自己紹介 JTC Kaggler(死語) ◦ 研究開発(?)職 ◦ 社会人からMLを始める Kaggle Master ◦ みんな GM になっていく… 近況 ◦ #11 atmaCup 5th (つらい) ◦ https://github.com/tawatawara/atmaCup-11 ◦ 宇宙人とまだ交信中
  • 3. timm …? Kaggle の公開 Notebooks や Solution でも 見かけるけど timm って何だろう…?
  • 4. timm: PyTorch Image Models Ross Wightman さんが公開している最強の画像認識ライブラリ ◦ 様々な model が実装されている ◦ 612種†‡ の実装 ◦ 452種†‡ の pretrained model ◦ 最新のmodel も割とすぐ追加される ◦ 上記を統一的に扱える仕組みの提供 ◦ その他カスタムされた augmentation 等の提供 ◦ ここらへんは詳しく知らないので今回話しません †: 重複した構造を含む ‡: v0.4.12 時点での情報 https://github.com/rwightman/pytorch-image-models
  • 5. backbone? 一般的な画像分類 model の構成は以下 ◦ 特徴抽出 (Convolutional Layers) ◦ 特徴の集約 (Global Average Pooling) ◦ 出力(Fully Connected Layer(s)) (タスクを解く部分) 特徴抽出部(+ GAP)を backbone, 出力部を head と呼ぶことが多い Backbone (CNN) Head (FC) Pooling (GAP) (C’, ) (out_dim, ) (C’, H’, W’) (C, H, W)
  • 7. 基本的な使い方(1/) create_model 関数 ◦ model_name で model を指定 ◦ pretrained=True とするだけで pretrained model が読み込まれる(初回は download される) ◦ ImageNet が基準なので入力のチャネルが 3 で 出力の次元が 1000 というのが基本 注意事項 ◦ pretrained model が無い model を指定して pretrained=Trueにしても何も言ってくれない ◦ 既に download 済な場合も何も表示されない
  • 8. 基本的な使い方(2/) head を置き換える ◦ 引数 num_classes を使うことで、任意の出力 次元の head に置き換えられる ◦ head は基本的に1層の全結合層 ◦ head の名前等は model によってまちまちだ が、そこは timm が勝手に処理してくれる ◦ あとは学習させるだけ。めっちゃ便利!
  • 9. ちょっとだけ凝った使い方(1/) backbone として使いたい ◦ head の部分を複雑なものにしたい ◦ backbone としてひとまとめに扱いたい head の部分を無効化する ◦ num_classes=0 とするだけ ◦ 出力サイズ: (bs, C’) pooling を無効化する ◦ global_pool=“” とするだけ ◦ 出力サイズ: (bs, C’, H’, W’)
  • 10. ちょっとだけ凝った使い方(2/) backbone として使いたい ◦ head の部分を複雑なものにしたい ◦ backbone としてひとまとめに扱いたい 一度呼び出した後に変更 ◦ reset_classifier 関数を使用すると可能 ◦ head や pooling の無効化を後からできる 因みに ◦ 無効化は torch.nn.Identity に置き換えること で行われている
  • 11. ちょっとだけ凝った使い方(3/) 実は色々情報を持っている ◦ num_features ◦ 一番使うやつ ◦ CNN 部分の最後のチャネルの数 ◦ feature_info ◦ ブロックごとの情報 ◦ [追記] コメントで教えて頂いたのですが model に よってはこの属性を持っていません ◦ default_cfg ◦ pretrained model の学習条件など ◦ 最初の Conv 層の情報, head の情報
  • 12. ちょっとだけ凝った使い方(4/) 自分で model を定義してみる ◦ self.backbone は timm.create_model で head を無効化したものを使用 ◦ head として非線形な全結合層を実装 ◦ head の入力の次元を設定するために num_features にアクセス ◦ Linear -> ReLU -> Drooput -> Linear
  • 13. ちょっとだけ凝った使い方(5/) 自然画像じゃないデータに使いたい ◦ 白黒画像、細胞画像、メルスペクトログラム… 実は in_chans 引数を指定するだけ ◦ めちゃくちゃお手軽 ◦ ちゃんと pretrained weight を使ってくれる どういう仕様? ◦ 1のとき: 元の 3 channels 用のフィルタの合計値 ◦ 1と3 以外: R,G,B,R,G,B,R, … と並べる ◦ 値の大きさはスケールされる
  • 14. ちょっとだけ凝った使い方(6/) 複数の feature map を取り出したい ◦ features_only=True (上) ◦ ブロックごとの出力(5個)が得られる ◦ out_indices で特定の場所を指定可能(下) ◦ 指定した2ブロックの出力が得られる ◦ [追記] コメントで教えて頂いたのです が model によっては対応してません Global Pooling 系 ◦ 実は max や avgmax も指定できる ◦ ただ avg 以外は基本使ったこと無いので 仕様は把握してません
  • 15. どのモデルを使う? timm.list_models で一覧が見れる ◦ Pretrained=True とすると、Pretrained Model があるものだけ確認できる ◦ 652 種類(pretrained ありは 452) でも… ◦ いっぱいある過ぎるしどれ使えばいいの? ◦ model の名前だけ見てもわからんな… ◦ (vovnet...?知らない名前だ...)
  • 16. どのモデルを使う? レポジトリ内に ImageNet Classification Task に対する結果がまとまっている ◦ https://github.com/rwightman/pytorch-image- models/tree/master/results ◦ ※たまに追加が忘れられてる model もあります じゃあ性能順に試せば良いのか? ◦ 実際にやってみると… ◦ いやこの model 重すぎて学習無理… ◦ 数値上のパラメータ数少ないのに学習させてみたら めっちゃVRAM食うぞ?! https://github.com/rwightman/pytorch-image-models/blob/master/results/results-imagenet.csv
  • 17. どのモデルを使う? 分析コンペの進め方として ◦ 徒にいろんな model を試すのは時間がかかるだけ ◦ 大きい model だから良い性能が出るとも限らない ◦ model の種類では無く前処理等が決め手になるときも ◦ 自分の中で base model を決めて改善してくのが〇 いやどの model がいいの? ◦ 個人的には ResNet-D が好き ◦ Solution では EfficientNet をよく見かける ◦ 最近だと ViT 系が Solution に現れるようになった ◦ SwinTransformer が良いという話を見かける
  • 18. まとめ timm: PyTorch Image Models ◦ 様々な model が実装されており pretrained model も豊富 ◦ 更新も頻繁で今現在間違いなく最強の画像認識ライブラリ timm の使い方を簡単に紹介 ◦ create_model でお気軽に呼び出せるし pretrained model も読み込める ◦ 引数の指定によるカスタムも豊富 じゃあコンペでどの model を使う?(個人的見解) ◦ 徒に色々試すよりは自分の使う base model を決めておいた方が良い ◦ 様々なコンペの Solution で出てくるやつは大概強いのでそういうのから試してみるのはアリ
  • 19. 参考 公式レポジトリ:https://github.com/rwightman/pytorch-image-models 公式の docs: https://rwightman.github.io/pytorch-image-models/ fastai の(?) docs: https://fastai.github.io/timmdocs/ ◦ 何か妙に詳しい記述があったり無かったり ◦ In_chans を 3 以外にしたときの仕様: https://fastai.github.io/timmdocs/models#Case-2:-When-the- number-of-input-channels-is-not-1 [追記] 有志による timm の model の速度比較 ◦ https://github.com/kentaroy47/timm_speed_benchmark ◦ @arutema47 さん公開ありがとうございます!