2021年4月28日水曜日

Poles and Zeros

以前から、「地震計の極とゼロって、何を表すのか知りたいなあ」とぼんやり考えていました。

Hi-netの場合、「使わないからいいや」と寝かせていました。が、F-net では機器特性ファイルに示されており、利用されています。

これ、先日の Hi-net と F-net の比較時に教科書を買って読んでいたところ、しっかり書いてありました。学部生レベルの知識のようです(基礎が足りない (´;ω;`)ウゥゥ )。
定義はコチラ↓。

システムの伝達関数
H(s)=入力 x(t) と出力 y(t) のラプラス変換の比=Y(s)/X(s)
H(s)の零点: Y(s)の根
H(s)の極: X(s)の根

z変換も同じ形で示されています。

ん?では F-net の poles and zeros はどちら用でしょう?
と思ったら、精密版に明示されていました。

簡易版
Transfer function type: A

精密版
Transfer function type: A [Laplace Transform (Rad/sec)]

名前の由来は何でしょう?
計算には関係ないので再び寝かしておきましょうか。


2021年4月27日火曜日

ライセンス

ライブラリを使用する際には、そのライセンスを確認しておく必要があります。
サンプルコードにライセンスが明示されていなければ、流用を避けた方が良いでしょう。

というのはわかっているのですが、実際、細部まで確認するのはなかなか難しい。ライブラリがライブラリを読み込むことは一般的ですし、それらのライセンスを順に追って調べていくのは骨が折れます(調べてくれるツールもあります)。オープンソースと言いながらも、そのライセンスの種類は様々で、覚えられません。

これらの問題は、エンジニアさんにとって死活問題のようで、いろいろなところで整理されていました。

個人的に利用しやすかったのがコチラ↓。ライブラリの動的リンクの扱いについて書かれています。
https://future-architect.github.io/articles/20200821/

古い情報ですが、
OSSライセンスの比較、利用動向および係争に関する調査
p2に概要、p46に一覧
https://www.ipa.go.jp/files/000028335.pdf

NECさんの説明
https://jpn.nec.com/oss/osslc/doc/LC20080911Bassui.pdf

GitHub で利用されているライセンス割合
https://github.blog/2015-03-09-open-source-license-usage-on-github-com/

書籍では、コチラ↓。
IT エンジニアのためのやさしい法律Q&A

「はじめに」p3より

法律に関する知識は、トラブルになった後ではなく、トラブルになる前、例えば、受託の話がクライアントと平和的に進んでいる時こそ、必要なのです。

ごもっとも。自衛しましょう。

2021年4月25日日曜日

Hi‐net で F-net をシミュレート その2

続きです。

文献を読み直してみました。
流れは単純なのですが、数式は理解できませんでした。 うーん。

 ★方針

  • 地震計は、その固有周波数と減衰係数によって特徴付けられる
  • 地震計の固有周期よりも長い周期の地震動は、その特性により減衰される(振り子も地面と一緒にゆっくり動いてしまうので、差が生じないイメージ)。
  • 短周期地震計の記録から長周期の地上運動を再構築するためには、観測されたデータをその応答でデコンボルブする必要がある。
  • 時間領域でのフィルターを開発し、ブロードバンド地震計をシミュレートする。


★フィルター

  • 1自由度減衰強制振動式を使って、ラプラス変換により地震計の伝達関数(入出力比)を表現。
  • ブロードバンド記録に変換する関数を作成(F-netの伝達関数/Hi-netの伝達関数)。
  • 離散データに適用するためz変換を利用。関数を式6に書き換え。


★hinet-decon https://github.com/tktmyd/hinet_decon

  '-o  outfile'   ( indicate output sac filename <sacfile.out>          )
  '-f0 freq'      ( eigen frequency of input signal <1.0>               )
  '-h0 damp'      ( damping constant of input signal <0.7>              )
  '-f1 freq'      ( eigen frequency of output signal <0.00833333>       )
  '-h1 damp'      ( damping constant of output signal <0.707>           )
  '-decon'        ( deconvolve without simulation seismometer           )
  '-int'          ( output displacement record by numerical integration )
  '-fint freq'    ( corner frequency of low-cut filter for integration  )
  '-hint damp'    ( damping constant of low-cut filter for integration  )

f0,h0:Hi-netの地震計特性(概ね、この値です。)
f1,h1:F-netの地震計特性(シミュレートしたい計器の値:JIZFの固有周期は120秒=0.008333Hz、地震計によっては大きく異なっています。)
下3つはまだ理解できていません。使うことはないので寝かしましょう。

 

★不明点

  • 「デコンボリューション」の和訳(カタカナ語としてそのまま使われている文献を見かけましたが)
  • 式2の分母(線形常微分方程式のラプラス変換とすると、iはどこから?符号はどこで入れ替わった?)
  • 式5の導出(古い文献か洋書)

 

★要確認
Fortaranソース(計算の流れ)

2021年4月24日土曜日

Hi‐net で F-net をシミュレート

久しぶりに、楽しめた文献です。

Maeda et al., Interference of long-period seismic wavefield observed by dense Hi-net array in Japan, J. Geophys. Res., 116, B10303, 2011.
http://dx.doi.org/10.1029/2011JB008464

いえ、中身を理解しているわけではありません。が、ここに書かれているような比較をするしかない、とプロと話をしていた直後に見つけた文献でしたので、とても心惹かれました。

Hi‐net と F-net の地震計の伝達関数を組み合わせることで、時間領域でのフィルターを作成。Hi‐net のデータから 100秒までの低周波領域を再現できた、という内容です。2007年のスマトラ島沖地震を例に、とある Hi-net の観測局のデータにフィルターをかけた波形と、そこに近接する F-net 観測局の波形を比較することで妥当性を確認されています。
GitHub にコードが掲載されています。

hinet_decon
https://github.com/tktmyd/hinet_decon

A fortran2003 code to deconvolve Hi-net velocity record by its seismometer response by using inverse filtering technique. 

最終更新が7年前。需要がないのか、より良い手法が出たのかわかりませんが、メジャーにはなっていないようです。

ひとまず、手を動かしてみることに。

*** Ubuntu20.04です。**********************************************

a. Hinet の HP から win32tools をDL、make
b. GIthub から hinet_decon をDL、make

conda で仮想環境構築
Python 3.8 を install
pip obspy hinetpy pandas jupyter

a.で作成したcatwin32、win2sac_32をフォルダにまとめ、パスを通す。
home./profile の最後に書き込み。
export PATH="$PATH:/home/hinet/win32tools/" など

条件設定:震央の緯度経度、データ取得開始時間、スパンなど

HinetPy  で読み込み、SAC変換。

b.で作成した hinet_decon で時間領域フィルターをかける。

ObsPy で BPフィルター& record section 作画。

******************************************************************************

Fortaran、c、Python で準備されたライブラリやソフトを Python で繋ぐ感覚です。半日で組みあがり、一つのノートブックに仕上がりました。意外と単純で簡単でしたね。条件を指定した後はデータダウンロードから作画までほぼ自動です。各々の作者に感謝。

で、再現した画像がコチラ。データは防災科学技術研究所 Hi-net を使用。
まずは Fig.6(a) 50~100秒(軸が90度回転しています)。
P波は見えませんが、S波とレーリー波は見えます。文献と時間がずれているのは起点の時間が異なるのでしょう。

次は Fig.6(b) 20~50秒。こちらはP波も見えます。

さらに N.JIZH のみを拡大し、Fig.3と比較。完全に再現できています。コードにミスはなく、ライブラリも正しく動いたようです。この分野でよく利用されているらしい SAC 形式で(結果的に)処理したのが良かったのかな?
https://phreeqc.blogspot.com/2019/08/obspy-2.html

676か所の観測局のデータを DL して描き終わるまで、10分もかかっていなかったと感じます(計っていませんでした)。便利な時代です。

あとは頭がついていくかどうか。
hinet_decon の設定はデフォのまま。まだ理解できていない部分があるので、もう一度読み直してみましょう。

 

2021年4月23日金曜日

GEO_Kit 2020.6

今年度からCIM関連も兼務することに。
これで3つ目の兼務。お給金は据え置き。お得です。どなたか買いませんか?

CIM に関しては、5~6年前に全国的な講習がありました(もっと前でしたか?)。その講習に参加しようとしたら executive から「待った」がかかりました。今回は何も言われなかったので、考えが変わったのでしょう。

4月に入り落ち着いたので、毎年恒例のソフトを更新。あわせて V-nasClair の GEO_Kit も入れてみました。GEORAMA 2021 が単独で CIM に対応していませんので、コチラはどうか?知りたいというのもありました。

GEO_Kit には解説とサンプルデータが付属しています。お昼休みに一通り試すことのできる分量でした。
残念ながら、できることはまだ非常に少ない状況でした。が、操作性は良好。模式柱状図の土質をクリックして層の位置を修正する仕様は見事。各種仕様に応じた支持層サーフェスの作成も、日本の需要にフィットしています。

簡単な操作で人をつかみつつ、機能を向上させる方針はありですね。多機能でも複雑なツールは敬遠されがちですから。
GEORAMA が追い越されるのも時間の問題でしょうか。


2021年4月17日土曜日

Log into Ubuntu from Win via SSH

Ubuntu20.04 に、Windows10 から ssh して Jupyter notebook を動かしてみました。

以前から、Ubuntu の Python 環境を Windows10 から使いたいなと考えていました。ライブラリの OS 対応状況が異なっており、ラップトップの Win10 では制約が生まれていたためです。GUI 接続は遅いし、ラップトップをデュアル OS にしても GPU を使えないし、ということで、SSH の出番です。
(これらの内容は web 上に情報があふれていますので、最低限と思われる部分のみをメモしておきます。)


まずは、ホスト側の準備。(Ubuntu20.04)
Ubuntu に OpenSSH server をいれます(入れていませんでした)。
$ sudo apt install openssh-server

サーバーを起動。
$ sudo systemctl  start ssh

鍵を作成。
秘密鍵「id_rsa」と公開鍵「id_rsa.pub」が作成されます。
※秘密鍵はローカルホストに保存します。隠しファイルを表示しないと見えません。
$ ssh-keygen -t rsa

「id_rsa.pub」を「authorized_keys」にリネーム。
$ cd ~/.ssh
$ mv id_rsa.pub authorized_keys


次に、クライアント側(Win10)。
ローカルホストに秘密鍵「id_rsa」を保存します。cdコマンドを打たなくてもよいように、同パスにcmd.exe をコピー。そこから立ち上げて ssh の流れです。

余談ですが、AWSのEC2でも ssh 接続の場合は同じようにコマンドを打つだけでしたね。AWSの場合は接続まで仮想ネットワークを構築する作業が必要でしたけど。
https://phreeqc.blogspot.com/2018/10/aws-2.html
・セキュリティ
 Multi-Factor Authentication (MFA), security group (インスタンスの仮想 FireWall)
・アカウント
 AWS Identity and Access Management (IAM) ユーザー (group, policy)
・ネットワーク
 Amazon Virtual Private Cloud (Amazon VPC: IP, subnet, route table, internet gateway), elastic IP
・仮想マシン
 EC2
・ssh
 ssh -i ~/.ssh/Key.pem ec2-user@IP
うーん、なんだか実機にアクセスするよりもセキュリティーが厳しいような。というか、これが普通で、実機が甘いのでしょうね。

Win10 も RS4(1803) で SSH に標準対応していたそうです(Windows Subsystem for Linux + Ubuntu は不要でした)。
https://phreeqc.blogspot.com/2018/10/aws.html
cmd.exe から以下をたたいて接続。ポートフォワーディング機能を使います。
※cmd.exe と 秘密鍵を同じパスにおいておけば、-i オプションも不要
$ ssh -L 8888:localhost:8888 pc-user@IP

これでJupyter notebook をたたけばサーバーが立ち上がります。あとはクライアント側のブラウザでサーバーにアクセスすればOK。
AWSではここで手こずりましたが、実機ではあっさり動きました。config 作っていたかな?
https://phreeqc.blogspot.com/2019/01/ec2-h2o-jupyter.html

 

****************************
ファイルの転送は WinSCP のままです。Jupyter 用途だと、あまり使わないですかね。


異常検知(動画)

動画での異常検知といえば DL ベース。

と思いきや、その他の手法も健在のようです。土木分野では単純な映像処理が好まれているようですね。最近見かけたものを書き残しておきます。

******************************************************

【土砂移動検知を目的とした既往研究】
五十嵐ら(2017)画像のRGB値・輝度値に着目した,山地河川における流況変化の自動検知アルゴリズム構築の試み,平成29年度砂防学会研究発表会概要集,p.8―9
五十嵐ら(2017)山地河川の濁りによるRGB値に着目した土石流発生検知手法開発に向けた試み,土木技術資料,Vol.59,No.6,p.20―23

  • 手法:画素情報の輝度値・RGB値を用いた流況変化の検知
  • 検証対象:北海道黒岳沢川の土石流動画(2016年8月23日)。
  • 課題:4分間という短い映像時間を用いての解析であったため,自然光の日較差の影響を考慮できていない。画素情報には,日射による違いが及ぼす影響が課題として挙がっており,監視技術を確立する上で検討すべき重要な課題である。

五十嵐ら(2019)画像の RGB 空間における濁水の立体分布と3次元ベクトル空間モデルを用いた流況変化検知手法の基礎的検討

  • 手法:RGB値を単位ベクトル化。RGB輝度の合成ベクトルの大きさではなく方向を導くことで,日射量(光の強度)の影響を軽減。
  • 検証対象:利根川水系大谷川支流稲荷川(流砂量観測渓流)2011年9月2日に発生した土石流のCCTV映像(AM6:32:11~AM6:36:00,30fps)を示す。
  • 課題:
    ・カメラ機器の違いを分析する必要がある。
    ・閾値を適切に設定することで,土石流が発生した際に,前兆現象の濁水発生を検知できる可能性が期待される。
    ・濁度との相関の他,水位変化などと組み合わせたアルゴリズム構築と閾値の設定などが必要。
    ・夜間は不可。夜間間降雨時の照明環境下では,雨滴等による照明の乱反射の影響や,照明コストといった課題が残る。
    ・白波の影響除去。
    ・夕日の映り込みは濁水発生の誤検知が懸念されるため,朝日の反射光も含め光源条件の影響を精査する必要がある。
    ・濁度計測値と RGB 値の変化との関係について今後検討。

辻野ら(2017)住民の迅速な避難行動に資する土砂災害避難警報装置の開発

  • 手法:ウェブカメラ映像のリアルタイム差分による崩壊斜面上のターゲット移動および落石の検知(OpenCV利用)。検知メール転送可。悪天候時、雨粒や雪による影響を受けない。検知範囲11m。
  • 検証対象:崩壊斜面(設定範囲内)
  • 課題:記載なし


【土砂移動検知への流用可能な既往研究】
大石ら(2019)CCTVを用いた画像解析による河岸・堤防侵食の返上検知とアラート配信に関する検討,寒地土木研究所月報 No.798 2019年11月

  • 手法:画像の背景差分(OpenCV の BackGroundSubtractorMOG2、マスク処理、平滑化処理含む)による河岸侵食のリアルタイム変状検知とアラートメール配信システムの開発。土石流やアイスジャムなどに特化した開発も可能。
  • 検討対象:試行:十勝川本川の千代田実験水路脇に盛土を敷設、検証:
  • 課題:精度向上。運用する上での信頼性は十分とは言えない。AI技術の活用など開発を検討

上石(2004)セ ンサーを用いた雪崩の検知・予知技術

  • 雪崩検知を目的とした事例のレビュー。振動センサーや画像検知システムが列挙されている。


【動画の異常検知】(近年、深層学習が主体)
https://paperswithcode.com/sota/abnormal-event-detection-in-video-on-ubi
dataset:UBI-Fights:AUC:0.906
Weakly and Partially Supervised Learning Frameworks for Anomaly Detection
https://github.com/DegardinBruno/human_self_learning_anomaly
Iterative weak/self-supervised classification framework for abnormal events detection
For abnormal events detection purposes

  • [3] temporal auto-encoder that is exclusively fed with normal events.
  • +GAN[15], conditional GANs(cGANs), [14]
  • HOF+AutoEncoder[19]
  • [17] method to learn anomalies through leveraging weakly labeled normal and abnormal videos under a multiple instance learning (MIL) paradigm.
    Dividing each video into non-overlapping temporal segments, each video represents a bag, where the temporal segments are used as instances. Since the specific information of a video containing an anomaly (positive bag) is not provided, the implemented loss function uses the maximum score in each bag to learn a ranking model, producing low scores and high scores for negative and positive instances, respectively, and improving the state-of-the-art performance significantly.

参考
FULLY CONVOLUTIONAL MULTI-CLASS MULTIPLE INSTANCE LEARNING
https://arxiv.org/pdf/1412.7144.pdf
Multiple instance classification: Review, taxonomy and comparative study
https://www.sciencedirect.com/science/article/pii/S0004370213000581
https://lionbridge.ai/ja/articles/weakly-supervised-learning/

  • 画像内の物体のリスト(画像レベルのアノテーション)
  • マルチインスタンス学習は、インスタンスに個別にアノテーション付けしないタイプの学習フレームワークです。
  • 個別にラベル付けする代わりに、バッグと呼ばれるインスタンスの集合にアノテーションを付与します。
  • バイナリ分類の場合、少なくとも一つのインスタンスが正であれば、正のバッグ、バッグ内の全てのインスタンスが負であれば、負のバッグとします。
  • ラベル付けされた一連のバッグから、個々のインスタンスのアノテーションを推測しようと試みます。
  • 画像の全ピクセルを「インスタンス」、画像そのものを「バッグ」と捉えると、画像レベルのアノテーションはバッグのアノテーションとして機能します。


AUC0.892    
Real-world Anomaly Detection in Surveillance Videos
https://paperswithcode.com/paper/real-world-anomaly-detection-in-surveillance#code

  • We propose a MIL solution to anomaly detection by leveraging only weakly labeled training videos. We propose a MIL ranking loss with sparsity and smoothness constraints for a deep learning network to learn anomaly scores for video segments.

C3D feature extraction for each video segment