PyTorchで高精度・高性能のEfficientNetを利用する
Sponsored Links
皆さんこんにちは
お元気でしょうか。
本日はEfficientNetをPyTorchで利用します。
私も頻繁に利用しますが、時々忘れてしまうのでメモ
EfficnetNetについて
EfficientNetとは?
幅、深さや解像度に関係性を導き出されたニューラルネットワークのアーキテクチャ。
SoTAを出したが、従来より8.4倍小さく、6.1倍の高速化を実現しています。
EfficientB0-B7(今はそれ以上もあった気もしますが)まで存在し、精度・性能により使い分けできます。
Kagglerたちは最近このニューラルネットワークをソリューションに利用するようになりました。(ResNetより増えている気がする)
arxiv.org
EfficientNet-Pytorchの使い方
モデルの初期化方法
モデルの初期化方法は学習済モデルの有無により、変わります。
学習済モデルがないバージョン
model = EfficientNet.from_name("efficientnet-b5")
学習済モデルを利用するバージョン
model = EfficientNet. from_pretrained("efficientnet-b5")
Fine-turning
ImageNetと同じクラスの問題を解く要望はほぼ皆無だと思います。
学習済のモデルを元にfineturningを行いましょう。
基本的には最終層を変更するのみなので、私は次のようにモデルを構築して学習を行っています。
n_class = 100 model = EfficientNet. from_pretrained("efficientnet-b5") model._fc = nn.Linear(2048, n_class)
後は通常通りモデルを学習すれば良いです。
最後に
EfficientNetは精度も高く性能もそれなりに良いです。
PNASNetなどよりも圧倒的に利用しやすい感じがしているのでResNetなどとのアンサンブルに有効です。