PSPNetを実装するにあたり、理論的な内容を解説します。
内容は以下の論文からまとめたものになります。
Pyramid Scene Parsing Network Hengshuang Zhao, Jianping Shi, Xiaojuan Qi, Xiaogang Wang, Jiaya Jia
- 1. PSPNet (Pyramid Scene Parsing Network)
- 2. 従来手法の問題点
- 2.2. 似たようなクラスを判別できてない
- 3. 提案手法
- 3.1. Pyramid Pooling Moduleの導入
- 4. 検証方法
- 5. 参考
1. PSPNet (Pyramid Scene Parsing Network)
セグメンテーションのモデルとなります。
物体同士の関連性の把握、似たものの判別、目立たないクラスの検出を行うことができます。
これを可能にしているのが、PSPNetのキモとなるPyramidPoolingモジュールで、ResNetを使用して入力画像から特徴量を抽出し、Poolingを掛けて異なるサイズの特徴量を作成し、その後、UpSamplingを掛けて結果を結合させ、予測結果を出力します。
周囲のピクセル情報を考慮に入れてモデル化を行えることが強みといえるでしょう。
2. 従来手法の問題点
2.1. 物体同士の関連性を考慮できていない
FCN (従来手法) だと、ボートと車をうまく判別ができていません。
確かにボートと車では外見は似ているかもしれませんが、画像を俯瞰的に見たときに湖の上に浮かんでいる物体であれば、外見が似ていたとしても車ではなくボートと予測されるのが適切と思われます。(車が湖に浮かんでている状況は一般的ではないですよね。)
つまり、物体の判断時に物体同士の関連性を考慮することができれば、予測の改善につながると考えられます。
2.2. 似たようなクラスを判別できてない
FCN (従来手法) だと、高層ビルと建物など似たようなクラスが存在した場合、高層ビルの物体に対して似たクラスが混在した形で予測されています。
物体間の関係を利用することで、予測が混在しない形で物体を捉えることが、予測の改善につながると考えられます。
2.3. 目立たないクラスへの注意を払うことができていない
FCN (従来手法) だと、は小さい領域の物体は見過ごしやすく、大きな領域の物体に引っ張られてしまっていました。
小さい領域のクラスにも注意を払うことができれば、予測の改善につながると考えられます。
3. 提案手法
3.1. Pyramid Pooling Moduleの導入
Feature Map層で抽出した特徴量をPoolingして様々なスケールに変換を行っている。
論文中では4スケールに直しており、1×1、2×2、3×3、6×6のスケールの層を作成しています。
異なるスケールの特徴量を作成することで、全体を考慮するまたは部分的に考慮するなどといったPSPNetの強みであるピクセルの周辺情報を考慮した特徴量を作成することができます。
3.2. 学習をサポートする損失関数の導入
より精度をよくするテクニックとして、AuxLossモジュールが導入されています。
これは深いネットワークを使用すると精度向上につながりますが、同時にネットワークが深ければ深いほど学習が困難になります。
全体の層に関しての最適化は「loss1」が行いますが、学習済みモデル(ResNet)の途中の出力に対して「loss2」として追加で損失関数を補助的に定義します。
これによりネットワークの前半の層に対して最適化の補助を「loss2」が行います。
4. 検証方法
ImageNet、VACAL VOC 2012、Cityscapesで既存手法よりも高い精度で検出できていることを確認していました。
5. 参考
論文
-
この論文の内容を紹介しています
-
-
https://github.com/hszhao/semseg
実装方法については、こちらのGithubのコードを参考にしています。
書籍
つくりながら学ぶ!PyTorchによる発展ディープラーニング
ファインチューニングの方法はこちらの書籍を参考にしています。