LoginSignup
2
2

More than 3 years have passed since last update.

Xception NetのBlockを使ったStacked Hourgrass Netを公開しています。

Last updated at Posted at 2020-03-14

Xception NetのBlockを使ったStacked Hourgrass Netを公開しています。

アーキテクチャ

https://github.com/tanreinama/XceptionHourgrass---PyTorch

Stacked Hourgrass Networkとは

Hourgrass=砂時計。
Hourgrass Networkとは、砂時計の形に似て、中間の層での解像度を絞って結合した畳み込みニューラルネットワークのことを言います。
日本語の解説だと、こちらの方のブログが詳しいかな。
要するに、画像の局所的な情報だけで無く、全体として何が写っているのかという情報を使うために、一度畳み込み層のサイズを小さくして、その後元に戻した結果を使おう、というアイデアです。

そして、二つ以上のHourgrass Networkを積み重ねて、それぞれの出力を使って最終的な結果とするのが、Stacked Hourgrass Networkです。

Hourgrass Networkの論文より
(図は論文からの引用)

論文によると、Stackedにすることで、最終的な性能と学習の収束が良くなっているようです。
人体のポーズを推定するOpenPoseや、CenterNet等で使われているようですね。
CenterNetの論文では、Object Detectionタスクにおいて、DLAやResNetよりも優れた結果を出しています。

CenterNetの論文より
(表は論文からの引用)

Xception Networkとは

Xception Networkは、画像認識用のニューラルネットワークのモデルで、日本語の解説だと、こちらの方のブログが詳しいかな。
畳み込みニューラルネットワークにおいて、チャンネル間のマスクを分離することで、パラメーター数を減らしてやる(その分層の数だとかを増やせる)。そうすることで、同じ程度のパラメーター数で作ったその他のネットワークよりも性能がよい、というものになります。

Xceptionの論文より
(図は論文からの引用)

XceptionHourgrassNetとは

そして、私が作ったこちらのニューラルネットワークは、Stacked Hourgrass Networkを、Xceptionで使っているBlockを使って組み立てたものになります。
用途としては、画像からマスク画像やヒートマップ画像を作るためのニューラルネットワークになります。
こういった用途では、入力と出力の両方が画像データとなるため、ニューラルネットワークの中を流れるデータが大きくなってしまい、あまり凝ったネットワークを作ると、学習時にモデルがGPUメモリに乗り切らなくなってしまいます。
そこで、Xceptionで使っているBlockを使うことで、ネットワークのパラメーター数を削減してやろう、と言うのが主眼になります。
個人的に使おうと想定している、特定の用途が念頭にあり、それに対して最適化されています。
具体的には、層の数が深い割に、各層でのチャンネル数がそれほどでも無い(96チャンネル)ため、割とシーンが限定される画像データ向けです。
出力チャンネル数は幾つでも可ですが、中間のチャンネルが少ないので、あまり多いチャンネルは出力出来ません(なので、Image Segmentationみたいな多クラスの出力は苦手)。

アーキテクチャ

なぜこれを作ったか

なぜこのニューラルネットワークを作ったかというと、元はXceptionをBackboneにしたU-Netとかを作るつもりだったんですね。
ところが、オリジナルのXception Networkでは、比較的早い段階で解像度を低下させて(19×19ピクセル)、その後で大量の畳み込み処理を行うように設計されています。
これは、クラス分類タスクにおいては良い結果をもたらしますが、画像のディテールが早期に失われると言うことを意味してもおり、今回のようなタスクには向いていないと思われます。
そこでいろいろ試してみた結果、Hourgrass Networkの構造を取り入れた形になった、と言う訳です。(一応、同じ程度のパラメーター数で作った、XceptionNetのBlockを直線的に繋げたネットワークよりも性能が良いことは確認しています)

テスト学習

GitHubのページはこちら
テストとしてMS-COCOデータセットから猫の画像を集めて学習させるコードも付いています。
学習手順については次回に書こうと思います。

Reference

  1. XceptionHourgrass - PyTorch https://github.com/tanreinama/XceptionHourgrass---PyTorch
  2. Alejandro Newell, Kaiyu Yang, and Jia Deng "Stacked Hourglass Networks for Human Pose Estimation" https://arxiv.org/pdf/1603.06937.pdf
  3. Franc ̧ois Chollet "Xception: Deep Learning with Depthwise Separable Convolutions" https://arxiv.org/pdf/1610.02357.pdf
  4. Xingyi ZhouUT, WangUC, Kr ̈ahenb ̈uhlUT Austin "Objects as Points" https://arxiv.org/pdf/1904.07850.pdf
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2