VGG16アーキテクチャについて知りたい情報を1記事で
何だか、なろう系作品の語呂のタイトルになってしまいましたが、VGG16について軽いメモ記事です。
経緯
画像認識で使われる代表的なCNNモデルであるVGG16を扱っている中で、
- kerasのmodel.summary()だと、Output Shapeとパラメタ総数は分かるが、フィルタのサイズやストライド、パディングの情報が分からない。後、完全な形での層の重ね方が分からない(活性化関数として何を使っているのか、までは分からない)
- pytorchのprint(model)だと、フィルタのサイズやストライド、パディングの情報は分かり、層の重ね方も詳細に分かるが、Output Shapeやパラメタ総数は分からない
ということで、両者の情報を併せたテーブルがどうしても欲しくなり、作成しました。
テーブルを作成し終わったとき、そもそもVGG16について(How to codeではなく)知りたい情報が1つにまとまっている記事がないかもなと思い、プチ案内板的な役割の記事を作成しようと思い至りました。
本題
まず、アーキテクチャの詳細情報について作成したテーブルの1枚絵を載せます。
このテーブルでは、前述の通りkerasとpytorchで見られるモデル情報を統合したのに加え、パラメタ総数の計算式の中身を分解して示しました。
基本的には、
パラメタ総数 = インプットチャネルの数 × アウトプットチャネルの数 * フィルタの高さ * フィルタの幅 + バイアスの数(=アウトプットチャネルの数)
で計算されます。
こちらの説明は、名著「ゼロから作るDeep Learning Pythonで学ぶディープラーニングの理論と実装」の第7章に詳しいです。ビジュアルも踏まえて詳しく説明されていますので、ご参考あれ。
これで、kerasとpytorchを行ったり来たり(そんなことをわざわざする人はいないと思いますが。。。)する必要はなくなるはずです。
さらに併せて、ビジュアル化したイメージも載せておきます。
こちらの画像は、以下記事より拝借させていただきました。
注記
この記事を書いている途中で、torchsummaryというライブラリでOutput Shapeやパラメタ総数を表示できることを知りました。
というわけでpytorchユーザーであれば、難なく詳細情報を知ることができますね。