2024年4月25日木曜日

通信方法

近年活発な現場での通信方法(LTE以外)です。

  • スターリンク
    衛星を使ったインターネット接続サービスです。お値段は高めですが、施工現場では使い勝手が良いのでしょう。
  • LPWA(Sigfox, LoRa, ELTRES など)
    これは実際に使うと驚きです。通信頻度にもよりますが、バッテリーで数年持つほど省電力なのに、無線で㎞オーダーの通信が可能です。富士山での利用例もあります。ビルの中でも5階差までは受信を確認しました(それ以上は未確認)。

今後期待される通信方法です。

  • HAPS
    成層圏に携帯の基地局があるようなもの、だそうです。SoftBankさんが飛行機を飛ばしている紹介動画が、なかなかカッコ良い!

2024年4月24日水曜日

Survey123 レポート作成までのフロー

Survey 123 でデータを採取し、加工してレポートにするまでの大まかな流れです。

【Survey 123】

  • 現地でデータ収集。

【ArcGIS Online】

  • 収集されてできたフィーチャレイヤーのシンボルを変更。「詳細」「ビジュアライゼーション」タブにてレイヤーの「プロパティ」のスタイル編集からスタイルを変更します。

【ArcGIS Pro】

  • 「カタログ」ウィンドウの[ポータル]タブからonlineのフィーチャレイヤーをマップに追加。属性にID等のフィールドを加えるなど加工してからフィーチャを保存すると、online のデータに反映されます。

【ArcGIS Online】

【Survey 123】

  • 写真の入れ替え、追加の必要があればここで実施。先の MapViewer で実施すると Pro (Basic) でフィールドを変更できなくなったり、レポートで写真が追加されなかったり制限が多いのでダメ。
  • 123 でレポートを作成。Pro で設定した連番を含めると平面図との対比が容易になります。
    調査結果の印刷—ArcGIS Survey123 | ドキュメント

2024年4月17日水曜日

Virtual-logit Matching

 [2203.10807] ViM: Out-Of-Distribution with Virtual-logit Matching (arxiv.org)

DNNの重みとバイアスを利用して固有値分解時の平均を除去する効果を狙った(と思われる)所がこの手法の勘所でしょうか。イマイチすっきりしません。

分散共分散行列を作成するのに GPU から CPUに戻しています。sklearn を使用しているので時間がかかるのが難点です。

以下、主要部分です。

特徴量の固有ベクトルを求める。
-> バイアスを取り除いた特徴量を作成する。
-> 特徴量の原点を計算。
固有値分解は分散共分散行列を利用。

from sklearn.covariance import EmpiricalCovariance
print('computing principal space...')
    ec = EmpiricalCovariance(assume_centered=True)
    ec.fit(feature_id_train - u)
    eig_vals, eigen_vectors = np.linalg.eig(ec.covariance_)
    NS = np.ascontiguousarray(
        (eigen_vectors.T[np.argsort(eig_vals * -1)[DIM:]]).T)

残差||xPT||を固有ベクトルへの射影時の離れ具合とみなし、OOD検出に利用している。残差が最大のロジットと比較して非常に小さい場合、SoftMaxでロジットのノイズに埋もれてしまう。スケールを補正するために、α=最大ロジットの平均/残差の平均を求める。

print('computing alpha...')
    vlogit_id_train = norm(np.matmul(feature_id_train - u, NS), axis=-1)
    alpha = logit_id_train.max(axis=-1).mean() / vlogit_id_train.mean()
vlogit_ood = norm(np.matmul(feature_ood - u, NS), axis=-1) * alpha


LogicOOD

このフレームワークの特徴は、DNNをモジュールとして組み合わせている点と人の判断が加わる点でしょう。

モジュール化によりシステムをインクリメンタルに構築することができ、要求に合わせてカスタマイズできるという利点を主張されています。例えば、知覚システムφに概念検出器f′を追加することができ、その結果、状態z′∈Z′を持つ拡張知覚システムφ′を作ることができる、と。計算時間はかかりそうですが容易にアンサンブルに持ち込めます。

環境構築はシビア。固定のVerでないと動かない、あるライブラリを入れるとTorchも上がり、依存関係が壊れる、など。欲張らなければ問題ないのですが。

OODの判定
outlier(x) = 1 if Df(x) >= τ, 0 else
Df (x) = -max Softmax: OOD detector

Logic
Dφ(x, S):outlier score = 0 if φ(x) ∈ S, τ else
φ(x) = f1(x), ..., fN(x) ∈ Z: predicted state for some input x.
S: 知識ベース(KB)に格納される制約条件

推論システムは推論エンジン
satKB : Z → {0, 1}
を実装しており、与えられた状態zが知識ベース内のすべての公式Sを満たすかどうか=KBを満たす状態とそうでない状態に効果的に分割する。

LogicOOD
D'φ(x, S):outlier score = Σi1,N[λDfi(x)] if φ(x) ∈ S, τ else
Dfi(): OOD detector for model fi
λi: weighting coefficients
Note: this method does not require example outliers during training.

LogicOOD+
An additional concept detector that is trained with example outliers to distinguish between IN and OOD.

T-LogicOOD
temperature-calibrated concept detectors.

ARPL+CS

ARPL (Adversarial Reciprocal Point Learning) (Chen et al., 2020a; 2021)

ARPL
データ、空間
DL: labeled samples ={(x1,y1),...,(xn,yn)}
DLk∈ Sk: positive  training  data, category k
DL≠k∈ Okpos:  negative  training  data, category !=k
DU∈ Oneg: potential  unknown  data
Sk: deep embedding space of category k
Ok: open space of category k, Okpos ∪ Okneg:
Okpos: positive open space from other known classes
Okneg: negative open space  as the remaining infinite unknown space 

クラスKの全サンプルにおいて特徴量空間で表現される点からからPkまでの距離は、他のクラスや未知クラスにおけるどのサンプルのPkまでの距離よりも大きくなる。
max(ζ(DL≠k∪DU,Pk))≤d,∀d∈ζ(DkL,Pk)
d(C(x),Pk) =de(C(x),pki)−dd(C(x),Pk)
de(C(x),Pk) =1/m·‖C(x)−Pk‖22
dd(C(x),Pk) =C(x)·Pk
ζ(·,·): calculates the set of distances of all samples between  two  sets
Pk: reciprocal point of category k, learnable parameter
m: dimension
C: deep embedding function, embedding feature

実装
class Dist(nn.Module):
    def __init__(self, num_classes=10, num_centers=1, feat_dim=2, init='random'):
        super(Dist, self).__init__()
        self.feat_dim = feat_dim
        self.num_classes = num_classes
        self.num_centers = num_centers
        self.centers = nn.Parameter(torch.Tensor(num_classes * num_centers, self.feat_dim))
    def forward(self, features, center=None, metric='l2'):
        if metric == 'l2':
            f_2 = torch.sum(torch.pow(features, 2), dim=1, keepdim=True)
            if center is None:
                c_2 = torch.sum(torch.pow(self.centers, 2), dim=1, keepdim=True)
                dist = f_2 - 2*torch.matmul(features, torch.transpose(self.centers, 1, 0)) + torch.transpose(c_2, 1, 0)
            else:
                c_2 = torch.sum(torch.pow(center, 2), dim=1, keepdim=True)
                dist = f_2 - 2*torch.matmul(features, torch.transpose(center, 1, 0)) + torch.transpose(c_2, 1, 0)
            dist = dist / float(features.shape[1])
        dist = torch.reshape(dist, [-1, self.num_classes, self.num_centers])
        dist = torch.mean(dist, dim=2) 

Class ARPLoss(nn.CrossEntropyLoss):
    def __init__(self, **options):
        self.Dist = Dist(num_classes=options['num_classes'], feat_dim=options['feat_dim'])
        self.points = self.Dist.centers
        self.radius = nn.Parameter(torch.Tensor(1))
        self.radius.data.fill_(0)
        self.margin_loss = nn.MarginRankingLoss(margin=1.0)
    def forward(self, x, y, labels=None):
        dist_dot_p = self.Dist(x, center=self.points, metric='dot')
        dist_l2_p = self.Dist(x, center=self.points)
        logits = dist_l2_p - dist_dot_p
        loss = F.cross_entropy(logits / self.temp, labels)
        center_batch = self.points[labels, :]
        _dis_known = (x - center_batch).pow(2).mean(1)}
        loss_r = self.margin_loss(self.radius, _dis_known, target)
        loss = loss + self.weight_pl * loss_r


softmax function
p(y=k|x,C,P) = eγ**d(C(x),Pk) / ∑i=1N{eγ**d(C(x),Pi)}
γ: hyperparameter, default = 1.0

損失
Lc(x;θ,P) =−log p(y=k|x,C,P) : pytorch の CrossEntropyLoss 実装
Lo(x;θ,Pk,Rk) =max(de(C(x),Pk)−R,0)
L:joint loss L = Lc + λ·Lo.
Lc: Classifire loss
Lo: loss, open space risk
λ: weight of the adversarial open space riskmodule, default = 0.1
θ: parameters in the convolutional layers, learnable parameters
R: parameters in the losslayers, learnable margin, learnable parameters


ARPL+CS
敵対的画像の利用
CS:Confusing Samples as DU

The discriminator is optimized to discriminate the real and generated samples:
maxD{1/n∑i=1n[logD(xi) + log(1−D(G(zi)))]}
x=G(z)
D:X →[0,1] represents the probability of sample x being from the real distribution or a fakedistribution. 

The generator is optimized by:
maxG{1/n∑i=1n[logD(G(zi)) +β·H(zi,P)], (18)=(16)+(17)
β: hyperparameter, default = 0.1
H(zi,P) =−1/N∑k=1N{S(zi,Pk)·log(S(zi,Pk))}: information entropy function
すべての逆数点の距離をバランスさせ、OGに近くなるようなサンプルを生成。
生成されたサンプルが既知のサンプルの境界から遠い場合、式(16)の損失大。
生成されたサンプルが既知のクラスに近い場合、式(17)の損失大。

The classifier C is optimized by the generated confusing samples as:
minC{1/n∑i=1n[L(xi,yi)−β·H(zi,P)], (19)
Note that the known samples and generated samplesare processed independently in Eq.(19). 

ABNは、異なるドメインに属する特徴に対して別々のBNを保持することにより、混合分布を分離し、紛らわしいサンプルの負の影響を効果的にブロックする。


その他

図1:既知サンプルの特徴量と異なる未知サンプルの特徴量の重なりを減らすことで、認識を向上させる。アプリケーションでは、様々な未知サンプルと既知サンプルを最適に分離するスコア閾値を選択する必要がある。残念ながら、(b) Softmax (c) Prototype Learningのいずれにおいても、そのような閾値を見つけることは難しい。より良い分離は(d) ARPLで達成可能。 

図2:ほとんどの手法は、「猫」に代表的な特徴を学習することに焦点を当てている。これに対して、「猫ではない」の潜在的な特徴を利用して「猫」を識別する。⇒ Reciprocal Point の利用。PK は潜在的な未利用のクラス外空間のインスタンス化された表現。OSRにおいて「ネコとは何か」という問題を解く際の不確実性を減らすために利用する。

図3: 開集合認識のための逆説的互変異性点学習(ARPL)提案手法の概要。(a)単一クラスに対する逆相対点学習は、既知の各クラスをその逆相対点から遠ざける。(b)多クラスAdversarialFusionは、相互点によって構成される多カテゴリ境界空間間の対立を引き起こす。その結果、既知クラスは特徴空間の周辺に押しやられ、未知クラスは境界空間内に制限される. (c)Instantiated Adversarial Enhancementは、分類器の信頼性を高めるために、より有効でより多様な紛らわしいサンプルを生成する。

MaxLogit

 MaxLogitの定義は以下の通り。

[2110.06207] Open-Set Recognition: a Good Closed-Set Classifier is All You Need? (arxiv.org)
known / unknown の AUC-ROC のみです。logit の閾値が Unknown の検出性能に大きく影響するでしょう。logit が小さいほど unknown となる定義です。

the maximum logit score (MLS) to provide our open-set score, i.e., S(y∈C|x) = maxj∈C wj · Φθ(x)

[1911.11132] Scaling Out-of-Distribution Detection for Real-World Settings (arxiv.org)
正負逆転していますので、大きいほどunknown?

This is problematic for the maximum softmax probability (MSP) baseline (Hendrycks & Gimpel, 2017), which uses the negative maximum softmax probability as the anomaly score, or − maxk exp f(x)k/ Σexp f(x)i = − maxk p(y=k|x), where f(x) is the unnormalized logits of classifier f on input x. Classifiers tend to have higher confidence on in-distribution examples than out-of-distribution examples, enabling OOD detection. 

we propose using the negative of the maximum unnormalized logit for an anomaly score − maxk f(x)k, which we call MaxLogit.

https://github.com/kkirchheim/pytorch-ood/blob/dev/src/pytorch_ood/detector/maxlogit.py 
正負逆転、negative の流儀です。

    def score(logits: Tensor) -> Tensor:
        return -logits.max(dim=1).values 

[2107.11264] Standardized Max Logits: A Simple yet Effective Approach for Identifying Unexpected Road Obstacles in Urban-Scene Segmentation (arxiv.org)
厳密には他の ML とは異なりますが、こちらも negative の流儀。

Note that we use the negative value of the final SML as the anomaly score. 

 [2311.05006] Familiarity-Based Open-Set Recognition Under Adversarial Attacks (arxiv.org)
最初の論文と同じ positive の定義です。この文献では、logit score に対する敵対的攻撃を Decrease the score of known categories と Increase the score of known categories の2種に区分しています。面白いですね。

the Maximum Logit Score (MLS) [22, 3]: SMLS(y∈F|x) := maxy fθ(x)y, which has outperformed the MSP score in prior work [22].

ARPL (Adversarial Reciprocal Point Learning) (Chen et al., 2020a; 2021)
コードを読むと、敵対的画像を用いないARPL のみの場合は MaxLogitを使用しています(+CS では SoftMaxを通しています)。最初の論文と同じ positive の定義です。実際、MNISTの例でLogit値を出力させると、inよりもoutの値が低くなります。

However,the various negative examples (unknown) are not providedfor  training  the  neural  network,  so  as  that  these  samplesobtain  lower  activation  magnitudes  from  the  neural  net-work than positive samples (known). 

MaxLogitを用いる手法では、正負に留意する必要がありそうです。


Open Set Recognition

OSR の始まりはOpenMAXからのようです。

● OpenMax (Bendale & Boult, 2016)
SoftMaxの前層の Activation Vectorを利用。
https://github.com/abhijitbendale/OSDN
https://github.com/aadeshnpn/OSDN , for Keras2.2.4 TF1.12.0

Classification-Reconstruction Learning for Open-Set Recognition (Yoshihashi et al., 2019)
日本人も頑張っているようでしたが、コードはリンク切れ。残念。

● OpenGAN (Kong & Ramanan, 2021)
Using an adversarially trained discriminator
https://github.com/aimerykong/OpenGAN, for torch
GANを利用しているのでしょうか?読んでいませんが性能は上がるようです。

● ARPL (Adversarial Reciprocal Point Learning) (Chen et al., 2020a; 2021)
https://github.com/iCGY96/ARPL, for torch1.4
上記と同じ生成系のOSR。ネットワークが3つ必要です。これは後日。

● MLS (Maximum logit score) (Vaze., et al., 2022)
OPEN-SET RECOGNITION: A GOOD CLOSED-SET CLASSIFIER IS ALL YOU NEED?
https://github.com/sgvaze/osr_closed_set_all_you_need, for torch1.9.
https://github.com/Jingkang50/OpenOOD, for torch>=1.13.1
OoDです。日本語の紹介サイトがあったですが、見当たりません。ま、要約を読んでもよくわからなかったので、文献を読んでいるわけですが。その文献を読んでも具体的な閾値の決定法は載っていません。なんらかの手法で閾値を検討する必要がでてきます。が、ネットワークの出力値を利用できる手軽な手法です。
https://github.com/sgvaze/osr_closed_set_all_you_need/issues/5
面白いのは、既知クラスの分類性能が高いほど unknown の検出(AUROC)も高くなり、相関性が見られるという点です。OoDの識別性能を鍛えると同時に分類性能が上がるので、ネットワークは一つでいいよ、ということでしょう。

known unknown

機械学習で「未知の異常を見逃したくない」といったオーダーを受けました。

その上で、「既知の異常は多クラス分類したい」ということで異常検知はダメ。少し考えて、ふと思い浮かんだのが softmax 関数の出力値をそのまま使う方法。argmax を通す前に、ある閾値以下を unkonown とする方法です。調べてみると、既に似たような方法が提案されていましたが、あまり上手い方法ではなさそうでした。

このような問題は「オープンワールド認識」の一部として機械学習の研究者が精力的に取り組まれているようです。不勉強により全く知りませんでした。一つ山を登ったと思えば、未開拓の平原が見えてきたようで焦ります。
必要性が高いにもかかわらず、あまり知られていない分野と書かれている文献がありましたので、一般的に知られていないのでしょう。

Open-Set Recognition: a Good Closed-Set Classifier is All You Need?
サブフィールドとして以下のものがあるようです。OSR と OOD検出との違いがワカラナイ。
・オープンセット認識(OSR: open set recognition)
・分布外検出(OOD検出: out-of-distribution detection)
・新規性検知(ND: novelty detection)
・異常検知(AD: anomaly detection)
・新規カテゴリ発見(novel category discovery)

また、「未知」「既知」に関する用語は、以下の4つに区別されています。KUC と UKCが ワカラナイ。GPTに聞いて埒が明かない状態です。
・ known known classes(KKC)
・ known unknown classes(KUC)
・ unknown known classes(UKC)
・ unknown unknown classes (UUC)

[2110.11334] Generalized Out-of-Distribution Detection: A Survey (arxiv.org)
こちらも5つに分類しています。
・anomaly detection (AD)
・novelty detection (ND)
・open set recognition (OSR)
・out-of-distribution (OOD) detection
・outlier detection (OD)

In safety-critical applications such as autonomous driving, the driving system must issue a warning and hand over the control to drivers when it detects unusual scenes or objects it has never seen during training

とても大事ですね。ぼーっと生きていますので、言われて初めて気づきます。


2024年4月16日火曜日

WAV + FFT

16bit 44.1kHz の wav ファイルを扱うことになりました。

スケール変換しようと思いハードウェアの資料を探しましたが見当たりません。レコーダーですので、ないのかもしれません。

2^15 で割って正規化し FFTをかけて、振幅を抽出します。で、この後が不明。ある基準値をもって dB値に変換するのですが、音圧と異なるので決まりがないようです。最大値を基準にしても良いし、最小値でも問題ないのでしょう。今回は見た目で真ん中あたりを選択しましたが、決まったやり方があれば知りたいところです。

出来上がったランニングスペクトルを見ると、現象によって奇麗に判別できました。これで全ての音声を聞かなくて済みそうです。時短に有効活用です。


2024年4月11日木曜日

MEMS Seismometer Update, April 2024

The ability to change the Wi-Fi settings of the ADXL355 MEMS seismometer has been implemented. ESP-Touch app from Espressif Systems is used.

https://github.com/T40O0/ADXL355_SPI_M5_SD_FIR/tree/main

If you are connecting M5Tough to Wi-Fi for the first time, or if you want to connect to a different Wi-Fi access point than the last time, touch "Wi-Fi Settings". You can change the Wi-Fi setting from an "ESP Touch" app on your phone. The app will display the Wi-Fi access point your phone is connected to, so please enter the password, and it will be reflected on the M5Tough.

How to start
There are three options before the measurement starts.

  1. Power On >> Wait 30 seconds >> Start
  2. Power On >> RTC Reset >> Start
  3. Power On >> Set Wi-Fi Access Point >> RTC Reset >> Start


2024年4月8日月曜日

M5StickC Plus + SGP30, 2024 Spring

昨年はM5Toughで地震計を作成しており、SGP30を触っていませんでした。

そろそろタバコ検知の季節なので ver.UP しましょうとコードを探してみましたが、見当たりません。PCを変更した際に、コードをコピーし忘れたようです。

ま、それほどフクザツではないので、もう一度書き直しました。
Lineへの通知も復旧しました。
https://phreeqc.blogspot.com/2022/10/line-notify.html

今回はFFT をかけずに音量のみの取り込みです。音量がある程度高い時、かつ STA/LTA で濃度変化の初期を検知し LINE を送るようにしました。大容量モバイルバッテリーも用意したので、窓を閉めっぱなしでも一晩はかれるます。

さあ、データをとってみましょう。

2024年4月3日水曜日

TensorFlow -> GPT -> PyTorch

TensorFlow のコードを PyTorch に変換しました。
というか、GPTに変換してもらいました。便利な時代になったものです。

そのままでは動きませんでしたが、そこそこ正しいコードでした。error が出たら、再び GPTへ。コードを書くというよりある程度書いてもらったものをチェックする感覚で、完成までかなり早くなりました。2大フレームワークでしょうから、教師データには困らないのでしょう。

なかなか要領を得ない回答もありますが、そのうちストレスを感じることなく回答してくれるようになるのでしょう。楽しみです。

2024年3月15日金曜日

Update MEMS Seismometer

Update

If you can connect to Wi-Fi, touch the button that appears on the startup screen. M5Tough will access any NTP server and start resetting the RTC. Just change lines 12-17 to suit your environment. Once completed, the measurement will start automatically.


1年利用して、プログラムを書き換えてからRTCのリセットを行う、また書き換えて振動を測るという手順がとても面倒に感じていました。特に現場で。

せっかくタッチ画面があるのですから、これを用いてプログラムの切り替えを済ませることにしました。起動時に表示されるボタンにタッチすればRTCをリセットする、完了すれば自動的に振動測定を開始する。もし30秒間ボタンに触れなければRTCリセットをスキップし、いきなり振動測定を行う、という流れ。
ついでにTFカードが入っていない場合も画面にエラーを表示させるように修正しました。

次からは現場でTFカードの交換だけで済みます。これで誰でも扱えるようになりました。

2024年3月3日日曜日

Nvidia HPC SDK on WSL2

WSL2 の Ubuntu 22.04 に Nvidia HPC SDKを入れる方法。
How to install Nvidia HPC SDK on Windows using Wsl (Ubuntu 22.04) | by Aung Khant Thaw | Medium

NVIDIA のサイトが示すインストール方法(sudo apt install)の後に、pathを2つ通す必要がありました。

.barshrc に以下を追記すればOK。

export PATH="$PATH:/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/"
export LD_LIBRARY_PATH="/usr/lib/wsl/lib/"


2024年3月2日土曜日

レポートで2種類の背景地図 Survey123 web

Survey123 web からレポートを出力するための Word テンプレートにおいて、異なる2種類の背景地図を指定する方法です。3ステップです。

1. Webマップを2種類作って、ID を取得する。

  1. ArcGIS Online で [マップ] タブをクリック。
  2. 左側の [追加] → [レイヤーの参照]。
  3. [マイコンテンツ] ドロップダウンをクリック → [ArcGIS Online]。
  4. 検索ボックスに「標準地図(地理院タイル)」等を入力して検索。 
  5. 検索結果から [追加] 。 
  6. Map Viewer 左側の [保存と開く] → [保存]。 
  7. Map Viewer 左側の [マップ プロパティ] → [アイテムの詳細]。
  8. ブラウザーの URLでアイテム ID をチェック。

2. 異なる地図を指定し、もう一つ Web マップを作成。ID を取得する。

3. Word に 2種の ID を記入。


ちなみに、これだけの内容なのですが、ESRI Japan のサポートさんから回答を引き出すのに2週間半かかりました。昔はサポートさんのレスポンスが早く回答も正確だったのですが、5年前位からでしょうか、ある時期を境に急に質が落ちました。
近年は1日1回の回答がノルマのようです(順次回答するので待ってください、の場合もある)。だいたい夕方に回答が届き、そうじゃないとか、どうするのですか?とか返信すると、次の日の夕方まで返事が来ません。時には前提条件を忘れていたり、追加の返信を読んでいなかったりして待ち時間がが無駄になります。で、解決が遅れ実務では使い難い、というのが実態です。
海外製品は機能豊富なのですが、国内の製品ほど丁寧さがありません。能登半島の現地調査では SOCOCA が好評だったようですので、そちらに移行できる部分がないか調べてみましょうか。

電子納品とPython(未完成)

電子納品の季節がやってきました。

細かいところに時間がかかります。

office ファイルのプロパティの大部分は、電脳ヘルパーなど一般的なツールで消せます。が、office 固有の日時などの消せないデータが残ります。これについては、昨年度にPythonで修正するスクリプトを作りました。といっても、web上に掲載されているものを加工しただけだったと思います。今年もこれを使っています。

PDF の10GB分割では、Calssist を利用しています。10GB超で悲鳴を上げるようなPCはもうないので、上限を100GBにすればよいと思います。が、確か平成17年頃からガイドラインは見直されていません。オンライン納品も始まったので、もう見直されることはないでしょうね。

最初のころは協議で10GB以上を許可していただいていましたが、毎度説明するのも無駄な時間のように感じ始めてからはこのツールを利用しています。
ただ、このツールも完璧ではありません。しおりの3階層目で分割しても、10GB以上になる場合があり、4階層目を3階層目に上げて対応しています。
今年度、Pythonで何とかしできないかな?と思って手を動かしましたが完成せず。10GB分割まではうまくいくのですが、しおりの加工がうまく対応できませんでした。で、寝かすことに。
次年度以降、ライブラリが育ってくれることを祈ります(他力本願)。


2024年2月18日日曜日

機械学習予測の誤差範囲

機械学習での回帰にて予測値の信頼区間を示したいなあと思い、調べてみました。

多くの事例が紹介されていましたが、いずれも同じような手法。2,3の方法に絞られるようです。

  1. 分位回帰
  2. 学習結果より RMSE を求め、予測値を平均とみなしσ分布を仮定した90%信頼区間を設ける
  3. 予測後にSE等を求めるモデルを別途作成する。

試してみましたが、今回はどれもイマイチ。得られる見た目は回帰させるデータによるのでしょう。

2024年2月12日月曜日

Photos from Survey123

Survey123 で道路施設などの写真を収集してきました。

帰りに 収集後の online map のアドレスを関係者に送ったのですが、よく考えるとArcGISユーザーがほとんどいないかもしれません。その場合、reportを作成したり、写真を取り出したりする必要が出てきます。


File Geodatabase なら写真を含んでいます。これを落とせばローカルでも GIS データを再構築できるのですが、ArcGISユーザーに限られます。QGISでも再構築できないか?と調べてみましたが、見当たりませんでした。写真を取り出すことは可能でしたが。
export - Exporting images attached to Geodatabase using QGIS - Geographic Information Systems Stack Exchange

便利ですが流行らないというのは、こういう汎用性のなさが原因なのでしょう。

山の固有周期

日本地すべり学会誌 Vol60 No.5の以下の報告に目が留まりました。

地中より地表のほうが良く揺れる、尾根と直行方向によく揺れる、といった内容です。山地のみならずダムでも既知の内容なのですが、周波数帯とも関連するのでより細かな評価が必要になる分野です。
https://phreeqc.blogspot.com/2022/12/blog-post_25.html
https://www.jstage.jst.go.jp/article/jls/45/3/45_3_207/_pdf 
後者の図7のようなイメージ図は見ます。が、この報告のようにパーティクルモーションまで整理された文献は見ませんね(当然すぎるからでしょうか?)。

この報告で気になったのが、山を角柱に模して固有周期を推定している最後の箇所。
モード解析なら点群をダウンロードしてソフトにかける(メッシュを切って材料値を与える)だけなので、このように仮定を多く設けずともそれほど手間をかけずに答えが出てきます。ですので、あえて仮定を複数取り入れて計算するこの簡易手法の結果がどこまで正しいのか、数値解析結果との比較の上で適用範囲や留意点等を見定める内容等であれば、より良い報告になったであろうと感じました。

昨年、似たような内容を含む数値解析の発表を海外で行いました。1次モードに着目したのですが、モード解析まで実施していませんでした。タイミングの良いこの報告に、「やりなさい」と突っ込まれたような気がします。


2024年1月7日日曜日

時空間平面上での群速度イメージ

表面波について書かれている洋書の導入部分に、群速度の説明が書かれていました。波形の合成での動画はYouTubeでよく見ますが、時空間平面上での説明はあまり見ません。このイメージをEXCELで書いてみました。

余談ですが、日本語で波数というと k ですよね。角波数と書かれている文献もありますがそう呼ぶ流儀は国内ではマイノリティなのでしょうか?

【時間的パラメーター】

  • Period 周期 T=1/f [sec]
  • Cyclic frequency 周波数 f=1/T [Hz, 1/sec] 1秒当たりの振動数
  • Circular frequency 角周波数 ω=dΘ/dt=2π/T [rad/sec] 1秒当たりの回転角(周波数*2π)

【空間的パラメーター】

  • Wavelength 波長 λ=c/f [m] 1波当たりの距離
  • Cyclic wavenumber 波数 ν [1/m] 1m当たりの振動数
  • Circular wavenumber (角)波数 k=2π/λ [rad/m] 1m当たりの回転角(波数*2π)

【その他のパラメーター】

  • Phase velocity 位相速度 c0=ω/k [m/sec]
  • Group velocity 群速度 cg=Δω/Δk [m/sec]
  • Ampritude 振幅 A [Any unit]

【関係式】

  • ω=2π/T=2πf
  • k=2π/λ=2πv
  • c0=ω/k=λf=λ/T=f/ν

時間方向、空間方向で別々のパラメーターがあります。時空間では両方利用します。

群速度のイメージ。


2024年1月5日金曜日

stress mapping

Contribution of mine borehole data toward high-resolution stress mapping: An example from northern Bowen Basin, Australia - ScienceDirect

この文献を見て、初期地圧の解釈で悩んでいたころを思い出しました。

知らなかったことが2点。
1つ目は BTV での割れ目を利用できること。これは、応力解放法の簡易版と解釈すれば良いのでしょう。ある程度深くないと揃わないようですね。100~150m程度だとばらつくのも当然です。

2つ目は平面的な補間方法。MATLAB のスクリプトになっているぐらい、頻繁に使われているようです。
Stress2Grid - File Exchange - MATLAB Central (mathworks.com)

This script is the update of Stress2Grid v1.0 (Ziegler and Heidbach, 2017). It provides two different concepts to calculate the mean S_Hmax orientation on regular grids. The first is using a fixed search radius around the grid points and computes the mean S_Hmax orientation if sufficient data records are within the search radius. The larger the search radius the larger is the filtered wavelength of the stress pattern. The second approach is using variable search radii and determines the search radius for which the standard deviation of the mean S_Hmax orientation is below a given threshold. This approach delivers mean S_Hmax orientations with a user-defined degree of reliability. It resolves local stress perturbations and is not available in areas with conflicting information that result in a large standard deviation.

文献では後者を選択しています。こういった方法で空間分布を表現するのが適当だったのですね。勉強になりました。


2024年1月4日木曜日

令和6年能登半島地震 その2

元日に発生した能登半島地震、数日たって被害の全容が見えてきました。

家屋被害のみならず、斜面崩壊も多数発生しています。
地理院さんの公開された判読図によると、輪島市と珠洲市の境で斜面崩壊が多く発生しています。火砕岩、凝灰岩分布域で多いようです。なにかしら特徴があるのかもしれません。

河道閉塞も発生しています。
同空中写真で見るだけでも、河原田川で3か所ありそうでした。2日の写真がベースですので、ひょっとすると過去の崩壊かもしれませんし、小さなダムはなくなっているかもしれません。ポンプ排水などの応急対策も終わっていることを祈ります。
地理院地図 / GSI Maps|国土地理院
地理院地図 / GSI Maps|国土地理院
地理院地図 / GSI Maps|国土地理院

いずれにしても、大きな被害になりました。改めてご冥福を祈るとともに、被災された皆様にお見舞いを申し上げます。

*********************************
20240105 追記
輪島中地区の崩壊箇所判読結果が地理院地図で公開されました。上記3か所の閉塞箇所も含まれていました。今回の地震で発生したようです。

Sedimentary Rocks in the Field

Dorrik A.V.Stow "Sedimentary Rocks in the Field"

昨年夏頃?に購入していた図鑑ですが、これまで寝かせていました。

私は堆積岩について専門的に学んだことがありません。土木分野では知識が必要にならないため、これまで問題にならずに過ごせてきました。これからもそうかもしれません。が、やはり地質屋としては必要な知識であり、時間のある冬休みに目を通しておこうと考えていました。

役に立ったのは3章と15章。
グレーディングの記載の仕方、生痕化石の種類、浸食構造、ラミネーションなど堆積岩に現れる主な特徴が3章に記載してあります。15章では、いくつかの露頭タイプと堆積環境が示されています。

まだまだ図鑑を片手に露頭を見ないと確信を得られない力量ですが、それでも一歩前進したと思います。


2024年1月3日水曜日

事例で学ぶ特徴量エンジニアリング

 オライリー・ジャパン 「事例で学ぶ特徴量エンジニアリング」

全体の8割までは容易に達成できますが、残り2割を詰めるのに時間がかかる、というのは万事共通です。機械学習を系統立てて学んできたわけではないですし、プロでもありません。最近は知見収集をサボっていましたので、冬休みの間に追いつこうと、この本を手に取りました。

以下、備忘録です。

  • null Accuracy (null 正解率): inballance データセットにて、すべてのデータが最も多いカテゴリーであると予測した場合の正答率。これを超える必要がある。
  • 対数変換 log(1+x): x=0 を扱える。
  • ドメイン特化型の特徴量作成: 患者が2つ以上の症状を呈している場合にTrue。
  • FeatureUnion: すべてのパイプラインをまとめる。
  • 特徴量選択: 相互情報量、仮説検定、決定木

  • Fairness (公平性): 性能が良いだけでなく、公平とみなされる予測を目指す。
  • Decile Score (デシルスコア): 10パーセンタイル毎に1~10のラベルを割り当て。
  • 少数データラベルの付け替え
  • Dailex, AI Fairness 360 (AIF360)

  • オートエンコーダーによる次元削減 (TF Keras)

  • HOG特徴量
  • PCA 分散説明率
  • VGG11

  • エクスパンディング特徴量
  • Moving Average Convergence Divergence (MACD; 移動平均収束拡散)
    Exponential Moving Average (EMA;指数移動平均)
    y0 = x0, yt = (1 - α)yt-1 + αxt
    data.ewm(span=12, adjust=False).mean()


2024年1月2日火曜日

令和6年能登半島地震

新年早々、大変なことになりました。
昨日の能登半島地震では、50名弱の方がなくなられたという報道を目にしました。また、本日夕刻には支援に向かわれていた海上保安本部の方々が関連する事故があったとのこと。
ご冥福をお祈りします。

昨日の地震では、私の住まいまで低周波が届いていました。ゆっくりとした揺れが続いたので、震源が遠方の石川県の浅部とは思いませんでした。自身で設置していたさらに遠方の地震計をすぐに確認したところ、やはり低周波を観測していました。強震モニタでも、低周波側は全国でしばらく揺れ続けていました。

能登半島地震等では、1~2秒程度の周期と建物被害の関連性が指摘されています。
jaee.gr.jp/jp/wp-content/uploads/2012/02/kaishi09.pdf
境有紀 (sakaiy.main.jp)
2007年の能登半島地震の死者が1名、2023年5月も1名のようですから、今回は相対的に建物被害が多く、人的被害が拡大したのかもしれません。
これ以上拡大しないこと、早く鎮まることを祈るばかりです。

2024年1月1日月曜日

砂防の観測の現場を訪ねて

砂防学会「砂防の観測現場を訪ねて」
https://jsece.or.jp/journal/kansoku/

既刊4冊を読みました。皆さん、お金をかけてらっしゃるというのが第一印象。このレベルは必要かつ一般的なのだから認識を改めなくては、というのが次の感想でした。
印象に残った章を備忘録として残しておきます。

砂防の観測現場を訪ねて1
2013年 伊豆大島土石流災害
・土壌水分計付貫入計(CPMP)

1990年 雲仙普賢岳の噴火
・GB-SAR

2000年 三宅島の噴火
・プラスチックの利用; 高濃度の火山ガス対応

砂防の観測現場を訪ねて2
ハイドロフォンを用いた流砂観測
・縦型ハイドロフォン

スイス型ジオフォンを用いた掃流砂観測
・ジオフォン

砂防の観測現場を訪ねて4
都市山麓グリーンベルトの整備を目指して
・ササ刈り; 3年程度は5,7月の年2回刈りで50㎝を維持