オットセイの経営日誌

データサイエンス系ベンチャーを経営してます。経営のこと、趣味のことつぶやきます。

VGG16アーキテクチャについて知りたい情報を1記事で

何だか、なろう系作品の語呂のタイトルになってしまいましたが、VGG16について軽いメモ記事です。

経緯

画像認識で使われる代表的なCNNモデルであるVGG16を扱っている中で、

  • kerasのmodel.summary()だと、Output Shapeとパラメタ総数は分かるが、フィルタのサイズやストライド、パディングの情報が分からない。後、完全な形での層の重ね方が分からない(活性化関数として何を使っているのか、までは分からない)
  • pytorchのprint(model)だと、フィルタのサイズやストライド、パディングの情報は分かり、層の重ね方も詳細に分かるが、Output Shapeやパラメタ総数は分からない

ということで、両者の情報を併せたテーブルがどうしても欲しくなり、作成しました。

テーブルを作成し終わったとき、そもそもVGG16について(How to codeではなく)知りたい情報が1つにまとまっている記事がないかもなと思い、プチ案内板的な役割の記事を作成しようと思い至りました。

本題

まず、アーキテクチャの詳細情報について作成したテーブルの1枚絵を載せます。

f:id:mhiro216:20200418230318p:plain

このテーブルでは、前述の通りkerasとpytorchで見られるモデル情報を統合したのに加え、パラメタ総数の計算式の中身を分解して示しました。

基本的には、

パラメタ総数 = インプットチャネルの数 × アウトプットチャネルの数 * フィルタの高さ * フィルタの幅 + バイアスの数(=アウトプットチャネルの数)

で計算されます。

こちらの説明は、名著「ゼロから作るDeep Learning Pythonで学ぶディープラーニングの理論と実装」の第7章に詳しいです。ビジュアルも踏まえて詳しく説明されていますので、ご参考あれ。

Amazon CAPTCHA

これで、kerasとpytorchを行ったり来たり(そんなことをわざわざする人はいないと思いますが。。。)する必要はなくなるはずです。

さらに併せて、ビジュアル化したイメージも載せておきます。

f:id:mhiro216:20200418230454p:plain

こちらの画像は、以下記事より拝借させていただきました。

newtechnologylifestyle.net

注記

この記事を書いている途中で、torchsummaryというライブラリでOutput Shapeやパラメタ総数を表示できることを知りました。

qiita.com

というわけでpytorchユーザーであれば、難なく詳細情報を知ることができますね。