何だか、なろう系作品の語呂のタイトルになってしまいましたが、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章に詳しいです。ビジュアルも踏まえて詳しく説明されていますので、ご参考あれ。
[https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8BDeep-Learning-%E2%80%95Python%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%A3%85-%E6%96%8E%E8%97%A4-%E5%BA%B7%E6%AF%85/dp/4873117585:title]
これで、kerasとpytorchを行ったり来たり(そんなことをわざわざする人はいないと思いますが。。。)する必要はなくなるはずです。
さらに併せて、ビジュアル化したイメージも載せておきます。
こちらの画像は、以下記事より拝借させていただきました。
[https://newtechnologylifestyle.net/vgg16originalpicture/:embed:cite]
注記
この記事を書いている途中で、torchsummaryというライブラリでOutput Shapeやパラメタ総数を表示できることを知りました。
[https://qiita.com/tatsuya11bbs/items/bfd8f163dd918ea04432:embed:cite]
というわけでpytorchユーザーであれば、難なく詳細情報を知ることができますね。