蛇使いな彼女BLOG
【第89回】 Contour境界値描画におけるプーリング操作の応用について~#2.pooling処理
2023.07.21
毎日暑いですが皆さんいかがお過ごしでしょうか。
モトハシが子供の頃、真夏以外は扇風機でも耐えられる暑さでしたが、今はエアコンなしでは生命に関わりますよね(°°;)
この炎天下の中屋外でお仕事されている方、大変お疲れ様です。
くれぐれも体調にお気をつけください。
さて、本編の前に皆様へお知らせがあります。
★お知らせ★
2023年8月23日~25日の間、東京ビッグサイトで開催される
【第25回 ジャパン・インターナショナル・シーフードショー】という
イベントの 【国際水産養殖技術展2023】に環境システムも出展します!
詳細はこちら>第25回 ジャパン インターナショナル シーフードショー
商談を目的とした業界関係者を対象としているので来場出来る人は限られるようですが、興味のある方はイベントHPから来場事前登録を行うと無料で入場できるらしいですよ!
ということなので是非遊びに来てくださいね(^-^)
お知らせは以上でした!
【プーリング操作について】
本題に戻りますよ~!前回の続き、プーリング操作の話題です。
以下、左側の配列⇒右側のプーリング値に変換する過程を詳しく解説していこうと思います。
一般的なプーリングではデータの各部位の特徴値(多くは最大値)を計算し、それらを新たな特徴データとして定義する方法です。
例えば、①の2×2枠(フィルター≓カーネル)を2マスずつ右にずらして端までくると今度は左側スタート地点の2マス下から右側へ移動し、計算を行います。
この操作で特徴データを作成すると、結果は③になります。
このとき初期の配列に対してプーリング後の配列は次元が減っているのが分かります。
複雑なデータを簡略化する為によく使われるらしいですが、水質コンターグラフでこの方法をそのまま使用してしまうと、時系列情報も同時に圧縮されて後々修正など余分な操作が必要になります。
そこでモトハシは以下のように②で特徴計算した後、その値を元の配列と同じ位置に展開する方法をとりました。
この操作の結果以下の特徴マップが得られます。
これをPythonで関数にするとこのようになります。
今プーリング操作の例としてあげている配列は2×2のカーネルサイズできっちり割り切れましたが、実際のデータを使用した場合、使用カーネルによってはフィルタリング行列に過不足が生じることから特徴計算途中でエラーが発生する可能性が高くなります。
このエラー対策としてコード18行目までの処理では、元の配列の右末端、下末端に0でパディングした行列を追加する処理を加えています。
機械学習やDeepLearningでは配列の上下左右にパディングを施す事例が多いのですが、今回のケースでは、元のデータの周りをぐるっとパディングすると単純に特徴計算後のトリミング工程が複雑になることと、その結果プーリング操作の前後でコンターグラフの再現性が変わってしまうリスクがあったので、自分なりにアレンジを加えました。
このことに関して詳しく説明すると、まず重要なポイントとして水質データの表層側では気温による水温変化を考えないといけません。
そしてdt/dzでは 気温<表層水温 条件では表層側で負の値をとります。
パディング値は一般的に0ですが、それは元の配列の値が0以上の正の値を取ることが前提です。
この状況で安易に配列の上側にパディングを施してしまうと、本来特徴として負の値を取るはずの部分が全て0に置き換わってしまいます。
このように本来のデータ特徴を改変するリスクを避けるため、妥当な位置にパディングを行っています。
その後の処理21行目から30行目までは特徴計算が最大値の場合と平均値の場合、それぞれの処理と元の配列への展開操作を記述しています。
最後に32行目のコードで最初に追加した0パディングの部分をトリミングします。
この操作のおかげでプーリングの前後で配列の次元が変わる事を防いでいます。
このプーリング関数を使用していない高等線と、使用した高等線を比較します。
【未使用】
線分の種類見分けが付かないので、色を付けています。
0.02:-(黒)、0.2:---(緑)、0.5:…(ピンク)
【プーリング使用】
0.02:-(黒)、0.2:---(緑)、0.5:…(ピンク)
途切れていた線や点が繋がりました!
今回データのNan部分は全て0に置き換えたので、コンターの所々白く抜けている部分は欠測です。
いかがでしたか?
プーリング技術に関してもっと詳しく知りたいという方は以下出典を参考にしてくださいね。
では、今日はこの辺で!
【出典 (参考文献)】
1. 栗田 太喜夫. “カーネルトリック”.サポートベクターマシン入門.平成14年7月8日. https://home.hiroshima-u.ac.jp/tkurita/lecture/svm/node6.html ,(2023.06.16 閲覧)
2. 煜辰,ZHENG YUCHEN,テイ イクシン-“Mining the Displacement by Max-pooling in Convolutional Neural Networks“. 九州大学学術情報リポジトリ.2020,
https://hdl.handle.net/2324/4110518,(2023.06.05閲覧)