AI_ML_DL’s diary

人工知能、機械学習、ディープラーニングの日記

Mask R-CNNを使ってみよう!2022.1.21-2

Mask R-CNNを使ってみよう!2022.1.21-2

ちょっとハードルを下げてみよう。

この2日間で、どんなかたちであれ、Mask R-CNNを使う!

 

1月22日12時すぎ:

気合十分で始めたのだが、なかなか進まぬ!

参考にしている(動かそうとしている)コードは、トレーニング無しのコード、すなわち、cocoで学習したモデルtorchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True, progress=True, num_classes=91)

を使って、用意した画像を、その学習済みモデルに入力して、どのような結果が得られるかを見るだけのものである。

参考にさせていただいているのは、Sovit Ranjan Rath氏の「Instance Segmentation with PyTorch and Mask R-CNN」というタイトルの記事とコードである。

学習することによって性能を上げるのが常であるが、今回は、学習済みモデルが学習したドメインと、インスタンスセグメンテーションに用いる画像はドメインが同じなので、学習する必要がない、というのが前提となっている。

 

つい最近終了したKaggleのコンペで、細胞のセグメンテーションの課題があった。そこでも学習済みのMask R-CNNを使っているチームがいたが、みんな、学習用のデータを使って学習させてから予測する。何が違うのか。そう、ドメインが違う。セグメンテーションモデルの学習済みモデルは、cocoで学習させていて、cocoには細胞の画像が含まれていないので、そのまま使っても正しく予測できるはずがない。細胞の教師データを使って追加で学習させる必要がある。つまり、学習済みモデルのドメインと、そのモデルを適用するドメインが同じであればそのまま使えるが、ドメインが異なれば、新たなドメインのデータセットで追加学習あるいは再学習させる必要がある。

 

1月22日22時すぎ:

Anacondaプロンプトで、次のコマンドを入力することによって、image1.jpgに対して、インスタンスセグメンテーションの結果が表示された。

python mask_rcnn_images.py --input ../input/image2.jpg”

f:id:AI_ML_DL:20220122202938p:plain

f:id:AI_ML_DL:20220122220041p:plain

手元にあるいろいろな画像で試してみてわかったことは、91種類の物体に対しては、かなり正確に判別するようだが、91種類以外の物体は検知されない。当然のことだが、次のチューリップは検知されなかった。

f:id:AI_ML_DL:20220122220308j:plain

閾値を0.4まで下げると全体がバウンディングボックスで囲まれた。ラベルは見えないのでわからない。"potted plant"かもしれない。

f:id:AI_ML_DL:20220122222907p:plain

目的物に対して学習させないと使えないことを、改めて感じさせられた。
個々の物質に対する識別能力が高ければ高いほど、少しでも違っていると検知しないということになる。もちろん確率の問題なので、確からしさを下げれば検知される。

上に示した絵画で、0.965のしきい値では、子どもは検知され、母親は検知されていない。しきい値を0.7まで下げれば、次のように、母親も検知された。

f:id:AI_ML_DL:20220122221752p:plain

ラベルと、バウンディングボックスと、スコアと、マスクの4つのデータが出力されること、および、それらのデータ構造の概要がわかった。

cocoで学習させたMask R-CNNが簡単に使えることがわかったとともに、目的物ごとに、データセットを用意して、追加学習させないことには、どうにもならないことも、身に染みて、わかった。

 

プログラミング技術の向上を急ごう!

 

f:id:AI_ML_DL:20220121113852p:plain

style=182 iteration=500

 

PDFgui/fit2を使う

PDFgui/fit2を使う

 

「今日からMacBook Pro/Anacondaを使おう(2021.12.11-12)」という記事を書いて、DiffPy-CMIを使えるところまで進もうとしていたのだが、停滞中である。

 

まずは、PDFgui(DiffPy-CMIの前のバージョン)についてもう少し前に進みたいと思って、この記事を書いている。

 

現状:python=2.7でしか動かないということが気にいらないので、賞味期限切れのsingle-file installers, diffpy-1.0-r3067.exeをダウンロード、インストールして練習用に使っている。

しかしながら、発展性が全くないので、Windows/Anaconda環境で使うことにする。

といっても、Anacondaのコマンドプロンプトから、以下のcondaコマンドを入力しただけである。

conda update -n base conda
conda config --set restore_free_channel true

conda config --add channels diffpy
conda create --name=py27 python=2.7
conda activate py27
conda install "diffpy.pdfgui>=1.1.2"

 

DiffPyのフォルダーに新たにPDFgui(py27)が追加されただけで、何も変わらない。

さて、測定データを借りてきたのだがどうやって読み込めばよいのだろう。

テキストデータは、そのまま読み込むことができた。担当の方がこのソフトで読めるようして下さっていたということ。

 

解析準備が整った。PDFfit2を使えばよいだけだが、フィッティングパラメータが理解できていない/忘れていることに気付いた。3次元原子構造モデルを使って解析することに気をとられ、PDFのデータがどのようにして作られているのかも理解できておらず、スペクトルの減衰、ピーク幅、そのサイズ依存性、ひずみや欠陥の評価方法など、知らないことだらけだ。

粒径に意識が集中しすぎていたようだ。

 

球形近似で粒径を求めるだけであれば、比較的簡単に行えることが分かった。

1.QdampとQbroadは使わない事。

2.フィッティングパラメータは6つ

・Scale Factor

・spdiameter

格子定数

・u11, u22, u33

・delta2

・delta1

delta1とdelta2を両方同時に使うとRwは小さくなり、フィッティングは良くなるが、片方がマイナスになるのが気になる。そのことに合理性があれば良いと思うが、そこまで確認は取れていない。

とりあえずうまくいってると思うのだが、それは、Rigakuの技術資料のおかげである。その資料には、QbroadとQdampの値を大きくすると(いずれも0.05くらい)、ナノ粒子のG(r)のように、減衰してしまうことが、図で示されているのである。

 

このことを知らずに、QbroadとQdampを変数にしてフィッティングすると、エラーになれば気付くのだが、エラーにならず、予想に近い粒径で収束することも起こりうるので、まずは、使わないに越したことはないと思う。

 

ひずみや欠陥の情報を得ようと思ったら、もっともっと掘り下げないとダメだと思うし、PDFguiではなく、DiffPy-CMIを使うことが必要で、かつ、ひずみや欠陥を原子構造モデルで自在に作り出すことができるソフトと組み合わせることが必要である。

そこまでやらないと、PDFを使う意味が無い。球体近似で平均粒径を算出しただけでは、殆ど利用価値は無い。フィッティング後の格子定数が小さくなるとか、uijが大きいとかに、物理化学的意味はあるのだが、そこは通過点。ひずみのラジアル方向の変化、表面に吸着している元素の情報、・・・。

 

*次の機会には、次のレベルに行こう!

 

f:id:AI_ML_DL:20220116090900p:plain

style=181 iteration=500

 

Mask-RCNNを使って、画像解析しよう。

2022年1月5日

Mask-RCNNを使って、画像解析しよう。

 

昨日、ブログ記事を参考にして細胞のインスタンスセグメンテーションを学ぼうとしていた。Mask-RCNNモデルをGitHubからもってきて、インストールまでできた。しかしながら、今朝からcocoで学習させたweightをダウンロードしようとして行き詰まってしまった。行き詰まりの原因の1つは、辿った先のGitHubのレポジトリーがなくなっていたことにある。

 

9:12 作戦変更 

Kaggleコンペで、PyTorchでMask R-CNNを使っているコードがあったので、それから学んでみよう。

Anaconda3のjupyter notebookにアップロードして動かしてみた。

ModuleNotFoundError: No module named 'torchvision'

pytorch.orgで調べてみよう。

関係ないと思うが、pytorchのバージョンが1.6.0だったので、1.10.1 にアップデートしてみる。conda update pytorch。

9:40頃完了。しかし、1.6.0のままだった。なぜだろう。ならば、1.6.0をuninstallしてから、あらためてpytorchをインストールしようと思って、conda uninstall pytorch=1.6.0としてみたら、途中で作業が進まなくなった。環境が、inconsistentなのだそうだ。

 

10:12 進まないので、anacondaプロンプトを強制終了し、torchvisionをインストールすることにした。conda install torchvision。見つからない。channelを追加したらインストールできたが、情報が古くて、python2だった。

Kaggleで何でもできるようになった(機械学習が身に付いた)と思っていたのだが、大間違いだった。

Kaggleの計算環境は理想的(至れり尽くせり)であった。だから、いろんなことができるようになったと勘違いした。Kaggleの計算環境を、Anaconda/Windowsで、再現することから始めよう。

 

10:50頃 pytorch.orgのgetstartedを見ていると、start locallyの下にある表が、現在の自分のパソコンの環境を読み取っていることがわかった(違う環境を手動で設定してから更新すると、適切な環境が自動的に選択されている)。Run this Command:のところに、conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorchと表記されているので、この通りに、Anaconda promptから入力したら、上記と同様にinconsistent情報が現れ、少し停滞していたが、しばらく待っていると、内容変更候補が現れ、実行するかどうか聞いてきたので、 y を選択した。pytorch 1.10.1のインストールが始まった。

これでうまくいったら、これからは、pytorchを使うしかない!と思う。

終了したので、conda listで、pytorch 1.10.1torchvision 0.11.2がインストールされていることが確認できた。

jupyter notebookにアップロードしたKaggleコンペのMask-RCNNのコードの最初のセルの、パッケージ/モジュールのimportを、ほんの小さなエラーのみで、無事通過した。

これで、自分のパソコン(Windows 10)でPyTorch: Mask-RCNNを使う準備ができた。

 

11:55 pytorchのデフォルトで使えるモデルの情報を集めよう。

Mask R-CNN
torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=False, progress=True, num_classes=91, pretrained_backbone=True, trainable_backbone_layers=None, **kwargs)

Constructs a Mask R-CNN model with a ResNet-50-FPN backbone.

pretrained (bool) – If True, returns a model pre-trained on COCO train2017

torchvisionを使えば、COCOによる学習済みモデルが使えるのだ!!

 

それは、これから取り組む画像解析でも同じだが、Kaggleコンペとの最も大きな違いは、データ集めである。

モデルの訓練には元画像の他に次のデータを用意する必要がある。

During training, the model expects both the input tensors, as well as a targets (list of dictionary), containing:

boxes (FloatTensor[N, 4]): the ground-truth boxes in [x1, y1, x2, y2] format, with 0 <= x1 < x2 <= W and 0 <= y1 < y2 <= H.

labels (Int64Tensor[N]): the class label for each ground-truth box

masks (UInt8Tensor[N, H, W]): the segmentation binary masks for each instance

ラベルは、粒径計測の場合はバックグラウンドとそれ以外ということで、1か0ということで問題は無い。

boxmaskは、基本的には、手作業で作ることになるのだろう。テスト段階では、maskは、二値化ソフトで出力したもので間に合うかもしれない。boxは、手作業になるかもしれない。

Faster-R-CNNを使えば、bounding boxを出力してくれるのだが、それでも、訓練データは必要になる。

そうではなく、マスクができれば、マスクに外接する長方形がbounding boxだから、変換するプログラムを作ればよい。

 

maskからbaunding boxをつくる(変換する)プログラムが、pytorchで用意されているようだ。

torchvision.ops.masks_to_boxes(masks: torch.Tensor) → torch.Tensor

Compute the bounding boxes around the provided masks.

Returns a [N, 4] tensor containing bounding boxes. The boxes are in (x1, y1, x2, y2) format with 0 <= x1 < x2 and 0 <= y1 < y2.

計算式:

if masks.numel() == 0:
        return torch.zeros((0, 4), device=masks.device, dtype=torch.float)

    n = masks.shape[0]

    bounding_boxes = torch.zeros((n, 4), device=masks.device, dtype=torch.float)

    for index, mask in enumerate(masks):
        y, x = torch.where(masks[index] != 0)

        bounding_boxes[index, 0] = torch.min(x)
        bounding_boxes[index, 1] = torch.min(y)
        bounding_boxes[index, 2] = torch.max(x)
        bounding_boxes[index, 3] = torch.max(y)

    return bounding_boxes

 

これからは、PyTorchを使って、自分でコードを書かなければならない。

21:16 今から、jupyter notebook上で、pytorchのtutorialに従って、練習する。

23:03 Quickstartをダウンロードし、jupyter notebookにアップロードし、動かしてみた。

今日の午前中に、最新のPyTorchをインストールできたおかげで、Quickstart(FashionMNISTを使った簡単なNNモデルの学習と予測の練習)が自分のパソコンの計算環境Anaconda3で実行できたのはよかった。

これで、Mask-R-CNNによるインスタンスセグメンテーションも、自前の計算環境で行えるような気がしてきた。ハイパーパラメータを調整するチューナーからプログラムを組み立てることができるデータサイエンティストに変身しよう!正月だし、これを今年の目標にしよう。

「ハイパーパラメータを調整するチューナー」は、出来上がったコードを借用して、ハイパーパラメータを調整して、その結果を投稿する人を指している。これは、もちろん、初心者にはできない事だし、チューナーもレベルが上がってくると、loss functionやoptimizerを入れ替えたり、モデルも入れ替えることができるようになり、見た目がすっかり変わっていて、全く別のコードに変えてしまうこともできるようになる。さらにレベルが上がると、入力データを加工したり、後処理もするようになる。結局はすべてマスターしてしまうようになる人もいるだろうと思う。

これとは逆の人もいて、コードは書けるのだが、スコアが上がらない人がいる。discussionを見ていると、データ処理から入った方々に多く見られ、データ加工ができるから、入力部分や出力部分は書けるし、モデルはゼロから作るわけではなく借用するのが普通だからそこも問題なくできる。ただし、予測まで含めた全体を仕上げるところをやった経験がないと、loss functionやoptimizerの選択、そのパラメータの設定などが適切でなければ、スコアは上がらず、学習すら進まないことも普通におきる。

 

1月8日:

今日はテンソルを勉強している。

今更ですが、jupyter notebookを使うと、パラメータの変更と演算を繰り返すことができて、途中の変数と演算結果も即座に表示できるので、テキストを読むより理解が進む。

torchvision.ops.masks_to_boxes(masks: torch.Tensor) の演算を理解するために、テンソルを勉強しているのだから、 torch.min(x)と torch.max(x)も理解しておこう。

 y, x = torch.where(masks[index] != 0)

        bounding_boxes[index, 0] = torch.min(x)
        bounding_boxes[index, 1] = torch.min(y)
        bounding_boxes[index, 2] = torch.max(x)
        bounding_boxes[index, 3] = torch.max(y)

    return bounding_boxes

マスクが領域内に1つだけ存在するのであれば、マスク領域のx座標の最大値と最小値、y座標の最大値と最小値が、bounding_boxの位置/サイズになる。

複数個所にマスク領域が存在する場合はどうするのだろう。

 

1月16日(日)

機械学習はPyTorchの枠組みの中でやるとしても、科学技術全体を見渡した時には、ベースになる言語をマスターしておくことが必要になる。昔はfortranやbasicだったが、今は、Pythonである。

Kaggleをやっていて、結局身に着かなかったのが、ベースとなるプログラミング技術である。fortranでもbasicでもない。Pytonである。機械学習ディープラーニングのテキストのはじめの方にPython入門、超入門、概要などの章が設けられていて、簡単な説明がなされていて、defやclassが理解できないまま終わる。しかし、実際のプログラムの中身は、KerasでもTensorFlowでもPyTorchでもない。Python(+C++)なのだ。

主題のMask-RCNNからはずれてしまったが、Mask-RCNNを使いこなすためにも、Pythonで自在にプログラムが書けるようになろう。

 

 

f:id:AI_ML_DL:20220105075141p:plain

style=180 iteration=500

 

NMRのお勉強(2021.12.23-26)

パルスNMRと高分解能NMRの計測データを解析できるようにしよう。

10月に勉強したのだが、やりなおし。

磁性とは何かをムーア先生に教えていただこう。

14章 分子構造と分子スペクトル

8. 磁気的性質

分子は永久磁気モーメントµと磁場によって誘起するモーメントαをもっている。

Bは磁気誘導、 H は磁場の強さ、  I は磁化の強さすなわち単位容積あたりの磁気モーメント

磁化率χは、I/Hで、負であれば反磁性、正であれば常磁性である。

9. 反磁性

磁場が加えられると、動いている電子の速度が変わり、Lentsの法則に従って、加えられた場と反対方向に働く磁場を生ずる。

原子中の電子の軌道が小さいため反磁性効果は小さいもので、グラム当たり、- 10^-6程度の大きさである。

10. 常磁性

常磁性を生ずる場合にはχは通常グラム当たり、10^-3 ~ 10^-4で、したがって小さな反磁性効果は問題にならない。

常磁性は軌道角運動量とスピンとに関連している。

軌道角運動量の磁気モーメント

磁気回転比g

量子化

スピン角運動量

11. 磁性の型

12. 核の性質と分子構造

13. 核の常磁性

陽子の磁気モーメント:2.79245核磁子

中性子の磁気モーメント:-1.9135核磁子:負に帯電した粒子のモーメントと同じような挙動をする。

14. 核磁気共鳴

15. 化学シフトとスピンスピン分裂

 

**********中断中

 

 

 

 

f:id:AI_ML_DL:20211223081024p:plain

style=179 iterations=500

 

今日からMacBook Pro/Anacondaを使おう(2021.12.11-12)

2021年12月11日

今日から、MacBook Pro「2020 Apple MacBook Pro Apple M1 Chip (13インチPro, 8GB RAM, 512GB SSD)」を使う。今(午前7時25分)は配送中で、午前中に届くことになっている。

MACは、20年以上前にディスプレイ一体型のデスクトップタイプを購入して使ったことがあるが、それっきりで、以後はWindowsマシンしか使っていない。

なぜ今Mac/Anacondaなのか。

それは、"DiffPy-CMI"というソフトを使いたいためである。

これは、X線を用いて計測したデータを解析するためのソフトで、version 3.0 DiffPy-CMIは、デフォルトでは、LinuxMacに対応しているだけである。

GitHubには、コロンビア大学の大学院生がWindows 10で動かすためのツールを公開している(st3107/diffpy_talk)ので、それを使う手もあるようだ。

もうMacを入手したので、Macで進めるが、Windows 10も、これを機会にリフレッシュしたいとも思っている。特に、Anaconda3は、TF2のインストールでトラブったのが尾を引いていて、TF2はまだ使えない状態が続いている。

 

DiffPy-CMIは、PDF(pair distribution function)スペクトルの解析、シミュレーション、フィッティング等を行うことができるものである。PDFguiを使えばPDFについては、同等のことはできて、PDFguiはWindows 10で問題なく使える。

DiffPy-CMIを使う目的は、"CMI(complex modeling infrastructure)"にあって、このCMIを用いると、TEM, EXAFS, Raman, NMRなどのデータとシンクロさせて解析することや、DFT計算結果を反映させることもできるらしい。それに加えて、ASE(Atomic Simulation Environment)を用いて作成した元素構造モデルも、シンクロさせて解析することができるようである。

 

今(午前10時45分)、MacBook Proが届いて梱包を解いた。

DiffPy-MSIとASEを、よく理解してからMacProを動かそう。

 

DiffPy-CMIを表す図

f:id:AI_ML_DL:20211211152033p:plain

夜になって、MacにAnacondaをダウンロードしはじめたのだが、読み込み中にエラーが出て、Webページの再読み込みの繰り返し。途中でいやになってMacを再起動して、Anacondaをダウンロードしようとしたら、登録済みメルアドが使われていると警告が出て、それ以上進まない。仕方なく履歴を見て、エラーしているところまで戻ったら、ダウンロードは再開されたが、症状は同じ。ダウンロード中に問題が起きたからWebページを再読み込みしろ、というのが繰り返されるだけ。困ったもんだ。
このおかしな現象は何時間続いたかわからない。さらに、なけなしのお金、約17万5千円が無駄になったと思った。

 

あきらめて、リセットしてMacを立ち上げてみると、なにかがダウンロードされていることがわかった。調べてみると、Anacondaが、ダウンロードされていた。何が起きたのかよくわからないのだが、Anacondaのダウンロード中に、Anaconda Nucleusというのが勝手に立ち上がってエラーを起していたのではなかろうか。要するに、ダウンロードは数秒くらいで終わっていて、Anaconda Nucleusというソフトが勝手に立ち上がって動き始め、それが、エラーを引き起こしていたようだ。

 

なにはともあれ、ダウンロードしたAnacondaのファイルは、ダブルクリックすることによってインストールできた。

 

以上で本日終了。

 

明日は、DiffPy-CMIを使えるところまでいきたいね。もう午前1時20分になった!

 

12月12日(日)

Anaconda3をインストールすることができたので、DiffPy-CMIをインストールすれば、使えるようになる。

 

ふつうは、Anacondaのサイトにアクセスすれば、パソコンのシステムを自動検出し、ダウンロードボタンを押せば、感知した環境に応じてWindows, Linux, Macのどれかに対応したAnacondaパッケージがダウンロードされ、ダウンロードしたファイルを探して、ダブルクリックすればインストールが始まるので、あとは、指示に従って作業すれば、Anaconda3をベースにしたPython環境が整う。

 

Anacondaのインストールは、これが2度目である。

最初は、2018年4月頃で、ディープラーニングの勉強を始めた頃である。Windows 10を使っていたのだが、Anaconda3をダウンロードし、インストールすると、Anaconda3のホルダー内に、コマンド入力用画面(ターミナル、コマンドプロンプト)やSpyderやjupyter notebookなどのアイコンが表示されていて、すぐに使い始めることができた。

2度目に相当するトライは何度かやってみた。Windowsでは使えないモジュール/パッケージを使うために、Linux(Ubuntu)の環境にして、Anacondaをダウンロードし、インストールしようとしたのだが、うまくいったことがない。ダウンロードしたファイル/ホルダーの場所がわからず、途中で右往左往して終わるのだ。今回も、Windowsがだめだというので、Linux環境(Ubuntu)にしてAnaconda3のダウンロード/インストールにトライしたが、デスクトップの表示すらままならず、手も足も出なかった。

 

ということでMacに戻ろう。Macの場合は、インストールの後に、Anaconda-Navigatorというアプリのアイコンが現れた。そのアイコンをクリックしてみると、見慣れたSpyder, Jupyter Notebookなどいくつかのアプリが並んでいる。ということで、Macでも簡単にPython使用環境が整うということである。(Anaconda Nucleusに起因すると思われる異常動作さえなければ・・・。)

 

さて、Anaconda3にDiffPy-CMIのパッケージを追加するには、コマンドプロンプト "terminal" が必要なのだが見当たらない。Windows 10では、Anaconda Prompt (Anaconda3)というのがあった。これがないと始まらないのだが、どうしたものかと思いながら、一方で"JupyteLab"は使ったことがなくて気になっていたので、試しにLaunchタブをクリックしてみたらJupyterLabが立ち上がり、JupyterLabの初期画面の左下に鎮座していた。

"Terminal"は、JupyterLabの中から起動できるようになっていた。

 

Anaconda.NavigatorのEnvironmentsから、Anaconda3にインストールされたパッケージを確認することができる。

python 3.9, scikit-learn 0.24.2, scipy 1.7.1, pandas 1.3.4, numpy 1.20.3, matplotlib 3.4.3, などがインストールされているのが確認できた。

初期状態(デフォルト)では、tensorflow, pytorch, kerasなどの、ディープラーニングで常用されているオープンソースプラットフォームがインストールされていないことがわかった。

 

それでは、JupyterLabの"Terminal"から、DiffPy-CMIをHPのマニュアル通りにインストールしてみよう。

インストールは無事完了した。

Anaconda.NabigatorのEnvironmentsには、base(root)とは別に、py37というEnvironmentが新たに作られていて、diffpy-cmiを含む147のパッケージがインストールされていることが確認できた。

 

マニュアルに従って入力していったらできた。というのでは、ここに書く意味が無いので、何をやったか、どうなったかを記しておこう。

terminal画面(表示名を*****で示す)

(base) *****@*****noMacBook-Pro -$ conda create --name=py37 python=3.7

これによって、py37というenvironmentができて、そこには、python 3.7.11と関連パッケージがインストールされる。(base)から(py37)という環境に変わる。(base)にはpythonでよく使われるpandas, matplotlib, scipy, scikit-learnなどがインストールされるが、(py37)には付加的なパッケージは含まれない(python 3.7環境を作っただけ)。

(base) *****@*****noMacBook-Pro -$ conda activate py37

これによって、作業場所(environment)が、(py37)に移る。

(py37) *****@*****noMacBook-Pro -$

(py37)の環境に、diffpy-cmiをインストールするのだが、それが可能なのは、Anacondaが、diffpyに関連するパッケージを保有/管理しているからであり、次のように入力することによって、その保管場所にアクセス可能になるようである。

(py37) *****@*****noMacBook-Pro -$ conda config --add channels diffpy

そのうえで、次のように入力することによって、diffpy-cmiとその関連パッケージ、さらには、それらのパッケージが使う、scipy, matplotlib, scipy, numpyなどもインストールされる。

(py37) *****@*****noMacBook-Pro -$ conda install diffpy-cmi

 

以上で、基礎工事完了!

次の週末には、diffpy-cmiのチュートリアルに取り組もう。

 

おっと、重要なことを忘れていた。DiffPy-CMIを使う最大の目的は、ASE(Atomic Simulation Environment)で作った原子構造モデル(全原子の位置座標)をDiffPy-CMIに読み込んでPDFスペクトルのシミュレーションと実験データへのフィッティングであった。

よって、同じ環境(py37)に、ASEをインストールしなければならない。土台はまだ半分しかできていないのだ。

 

早速、ASEのインストールに取り掛かった。

Mac OSX (Homebrew)の題目で始まる手順書の通りにやればよいと思ったが、「$ brew install python」は、py37の環境を使うから不要と判断して次に進んだ。

「$ pip install --upgrade --user ase」これで全てうまくいくと思ったら、なぜか、(py37)の環境にインストールされない。

ただし、(py37)の中のパッケージ数は147から166に増えていた。

 

ASE(Atomic Simulation Environment)のインストールはうまくいかなかった。

来週の週末は、ASEのインストールから始めよう!

 

12/17-19にやる予定だったが、別件(NMRが面白くなってきた)が入って、できなくなった。

 

2022年1月3日(月)

必要なものは2つある。

1つは、DiffPy-CMI

もう1つはASE(Atomic Simulation Environment)

今日、ようやくLinux(Ubuntu)を立ち上げることができたので、WinとMacLinuxを比べることができた。Anacondaを普通に使った場合、

DiffPy-CMIは、Windowsになく、MacLinuxにある。

ASEは、Windowsにあり、MacLinuxにはない。

ということがわかった。

PDFgui/fit2は、単一金属のナノ粒子の粒径を球体近似で見積もるのには十分かなと思う。ASEと組み合わせるDiffPy-CMIがどのようなものかを知る必要があるのだが、どうしたものか。

 

まずは、DiffPy-CMIがどのように使われているのか、GitHubで調べてみよう。

 

 

f:id:AI_ML_DL:20211204191305p:plain

style=178 iteration=500

基礎からの燃料電池触媒:2021年10月3日~中断

基礎からの燃料電池触媒:2021年10月3日~

山梨大学燃料電池ナノ材料研究センターのパンフレットによれば、1978年4月に工学部付属燃料電池実験施設を設置しており、1989年4月には学内特別施設電気化学エネルギー変換研究室を設置、2001年4月にはクリーンエネルギー研究センターを設置、そして、2008年4月に当該センターが設置されている。ということで、目に見える形で燃料電池にフォーカスしてからでもすでに40年以上の歴史を有している。

当該センターとNEDOとの関係:「本学では、2008年度から2014年度にNEDOのHi-PerFCプロジェクト(※1)を受託し、2015年度から2019年度にNEDOのSPer-FCプロジェクト(※2)を受託し、燃料電池の高出力化、高耐久化、高効率化に資する触媒や電解質材料およびそれらの性能を極限まで発揮させる触媒層の研究に取り組み、世界でも注目される多くの成果を挙げてまいりました。」

2020年度からは、「この度、新たにNEDOからECCEED’30-FCプロジェクト(※3) ECCEED’40-FCプロジェクト(※4)を受託しました。2020年度からこれまでの成果を活かしながら新たな発想を取り入れることにより、NEDO技術マップ等で定められるシナリオに基づき、高効率、高耐久、低コストの燃料電池システムを実現するための技術を開発します。」

ということで、燃料電池の研究開発の現状と展望を知るためには、当該センターに出かけて行ってお話を聞くのが良さそうである。できるだけ早い機会に訪問したいと思う。

 

今日のテーマは過電圧:

燃料電池のカソードにおける酸素還元反応に対する過電圧の起源に関する論文を読んでみよう。2004年の有名な論文のようだ。

J. K. Nørskov et al., Origin of the Overpotential for Oxygen Reduction at a Fuel-Cell Cathode, J. Phys. Chem. B, 108, 17886 (2004)

水素と酸素から水を生じる電気化学変換反応を利用する低温燃料電池において、酸素を還元するカソード反応が遅いということは、大きな問題点の1つである。それは、水素を酸化するアノード反応よりも遅いのだが、なぜそうなのかについてはコンセンサスが得られていない。

In the following, we use density functional theory (DFT) calculations to gain some insight into the cathode reactions.

DFT calculations can provide information about the stability of surface intermediates in the reactions, which cannot be easily obtained by other means.

We start by considering the simplest possible reaction mechanism over a Pt(111) surface.

We introduce a method for calculating the free energy of all intermediates as a function of the electrode potential directly from density functional theory calculations of adsorption energies for the surface intermediates.

On this basis, we establish an overview of the thermodynamics of the cathode reaction as a function of voltage, and we show that the overpotential of the reaction can be linked directly to the proton and electron transfer to adsorbed oxygen or hydroxide being strongly bonded to the surface at the electrode potential where the overall cathode reaction is at equilibrium.

We introduce a database of density functional theory calculations of energies of the surface intermediates for a number of metals and show that, on this basis, we can establish trends in the thermodynamic limitations for all the metals in question.

The model predicts a volcano-shaped relationship between the rate of the cathode reaction and the oxygen adsorption energy.

The model explains why Pt is the best elemental cathode material and why alloying can be used to improve its performance.

 

f:id:AI_ML_DL:20211005210813p:plain

 

***残念だが、ブログを中断する***

 

f:id:AI_ML_DL:20211003072204p:plain

style=176 iteration=500

 

 

 

物理化学(燃料電池を意識して):2021年9月29日~中断

ムーアの物理化学:藤代亮一訳 を眺めている。

17章 液体状態

3節 液体のX線回折

液体のX線回折について説明されている。液体水銀のX線回折図形と、その回折図形を解析することによって得られた動径分布関数g(r)が図示されている。

4節 液体構造の研究結果

液体構造の研究結果として水のX線回折が紹介されている。J. MorganとB. E. WarrenがJournal of Chemical Physics, 6, 666 (1938)に発表したものである。それによると第一隣接距離は、1.5℃で2.88Å、83℃では3.00Åより少し大きいところまで変化する。

(原子間力顕微鏡で固体表面の水の水和層を検出した画像を初めて見たときは驚いたものだが、X線回折でも水和層を検出できるかもしれない。と思って調べてみたら、X線回折X線CTR)による測定結果が2004年に報告されている。あらためて原子間力顕微鏡と表面X線CTRを比較すると、後者は測定精度が高く(観測している分子数は10^12~15レベル)、前者は局所情報(観測している分子数は10^2~3レベル)がわかるという違いがある。AFMの測定精度の向上が望まれるところである。とはいえ、第一原理計算や分子動力学(第一原理計算を含む)による計算精度が上がっており、かつ、機械学習の導入によって計算時間も短縮されているので、測定精度を追及することの意味について考える必要があるように思われる。とはいえ、やはり、科学することの根本は観測することにあるので、さらなる空間分解能の向上とノイズの低減が進むことによる新たな発見に期待したいと思う。タンパク質の水和構造についてもX線回折による重要な研究があるが、計算でどこまで明らかになっているのだろうか。ちょっと調べてみた。分子動力学によるシミュレーションは不可欠であるが、計測においても、X線テラヘルツ、NMRなど種々の計測技術を駆使しているようである。シミュレーション技術が進むとスペクトルの小さな差異についても解析可能になり、計算と計測の相乗効果でさらに前進しているように見える。現在活発に研究されている領域のようである。)

11章 原子構造と放射能

7節 放射能

マリ・キュリーがピエール・キュリーの論文集の序文に書いた文章が紹介されている。その一部を以下に示す。

ピエール・キュリーにとって、科学は必要欠くべからざるものであり、かれは科学こそ純粋かつ高尚なものと考えていた。経歴とか成功とか名誉とか栄光とかいうような、仕事に無関係なものはなんでもかれの考えに混ざり込んでくることを承知しなかった。かれは一つの問題を考え、時間と労力を惜しまずその解を追求し、少しずつそれを孵化し、ついで精密に育てあげ、最後に正確な結果の仕事に実らせて問題を実際に進めて行くことで一杯だったのである。かれはたえず広い範囲の科学的考えで頭が占められていたけれども、どの仕事をするに当っても同じように良心的な注意をし、どんな実際的なことがらも努力するに値しないとは考えなかったし、また結果の華麗さや生ずる影響を目的とはしなかった。

(科学的知識の不足あるいは欠如は科学的検討や考察が不十分になる原因であり、研究を推進することを妨げる要因となっているが、たいていは、不十分なままで放置されている。物理化学の教科書を前にすると、自分の知識がどれくらい不十分であるかがよくわかる。今、十分に理解できていることなどほとんどないことに気付かされて落ち込んでいる。少しずつ、知識を増やし、理解できる範囲を拡げていこう。)

1章 物理化学的な系の記述

実験とは物理的世界の計画的な観測である。

理論とは観測されるものを理想的なものに関係づけようとすることである。

この宇宙の究極の性質についての研究を掘り下げてゆくと、”説明”とか”理解”といったことばに付随する意味が次第に変わってくる。もともとこれらのことばは奇妙なことをありふれたことで表現しようとすることであるが、現在のところ科学的説明は比較的耳慣れたことを目新しいことばで記述しようとする傾向の方が強い。たとえば光を光子で、物質を波動で、といった具合である。それでも、理解しようと努める際には、理論の数学的背後に、過程の”物理的な像を描いてみる”ことは重要であると考えられる。

6節 物質の熱的性質

純粋の気体または液体状態を規定するためには、まず物質の質量mを規定すればよい。それからさらに三つの変数があるが、そのうち任意の二つが規定されればよい。これらの三つの変数は圧力P、容積V、および温度θであり、このうち任意の二つを指定すると第三の変数は規定される。これら変数の間には互いに関係があるからである。

温度θを物理的量として用いる前に、温度が定量的にどのようにして測定されるかを考える必要がある。温度という概念は暑さ、寒さの感覚から発展したものである。これらの知覚は液体の容積変化をもとにした温度計(thermometer)の読みに関連づけられることがわかったのである。

1631年にフランスの医者 Jean Rey は患者の熱病の進行を調べるためガラス球とガラス管の一部に水を入れたものを用いた。・・・。2個の定点を用いて目盛をつけることは、1688年 Dalenceによって行われた。かれは雪の融点を-10°、バターの融点を+10°と選んだのである。1694年、Renaldiは上の方の定点として水の沸点を下の定点として氷の融点をとった。これらの定点を正確に規定するためには、圧力は1気圧に保たれ氷と平衡にある水は空気で飽和しているという条件をつけ加えねばならない。これら2点へ0°と100°という数値を与えることを初めて提案したのは1710年スウエーデン人の Elviusであった。この2つの温度は百分度の目盛を定義するもので、同じような系を用いたスウエーデンの天文学者の名をとって公式には Cellcius(摂氏)温度目盛りと呼ばれる。

(温度の話題になると、最初に思うのは絶対零度-273.15℃であり、Heike Kamerlingh Onnesが発見した超電導現象である。Wikipediaによると、「1882年、ライデン大学実験物理学教授に就任。1894年、酸素、窒素、空気の液化装置を備えた低温物理学研究所を同大学に設立した。1908年、ヘリウムの液化に初めて成功。カール・フォン・リンデらが開発した冷却機と3重構造の魔法瓶を用い、外側から順に液体空気、液体水素を入れて温度を下げ、最終段階はジュール=トムソン効果によって0.9Kという低温を達成し、ヘリウムの液化を実現した。これが、当時の世界一の低温となった。オリジナルの装置はライデンの Boerhaave Museum にある。1911年に純金属(水銀、スズ、鉛)を冷却し、超低温での電気的性質の分析を行った。ウィリアム・トムソン(ケルビン卿)らは、絶対零度では電気伝導体の電子が流れなくなる、つまり金属の比抵抗が無限大になると信じていた。一方オネスらは温度が低くなるに従って電気抵抗が小さくなり、絶対零度では0になると考えていた。これはイギリスのマーティセン (en) が温度が低くなると金属の伝導率が高まり、抵抗値が小さくなると示したことに基づいている[1]。4.2Kで、水銀の電気抵抗が突然消滅した。当初オネスは試料の電極がショートしたと思ったが、その後で現実に電気抵抗がゼロになったのだと気づいた[2]。これが超伝導現象を発見した瞬間だった。オネスは「水銀は新たな状態へと遷移した。この状態の特異な電気的特性から、これを超伝導状態 (superconductive state) とでも呼ぼう」と記している。その後、スズ、鉛などでも超伝導現象が起こることを発見した。また、超伝導状態の物質に磁場を加えると、超伝導が消失することを発見した。なお、オネスは元々 "superconductivity" ではなく "supraconductivity" という語を使っていた。低温物理学への貢献により、1912年にランフォード・メダル、1913年にはノーベル物理学賞が授与された。」273.15℃は絶対零度と呼ばれているがどのような状態なのか。と思っていたら、教科書に書かれていることがわかった。)

6章 熱力学と化学平衡

13節 絶対零度への接近

低温をつくり出したり用いたりする科学を低温科学(crypgenics)とよぶ。絶対零度に数度以内といった温度で初めてある著しい物質の性質が現われてくる。すなわち、金属の超電導とか超流体ヘリウムへの転移などがそうである。Tが0°Kに近づく際の物質のエントロピー極限値は(6・22)式の定数S0(下付き0)である。まず極低温を実現するのに用いられる方法を考察し、それからこの温度領域でエントロピーがどうなるか調べてみよう。・・・。

(ジュール・トムソン効果とLinde法により、0.84°Kに到達した。さらに温度を下げるためには、断熱消磁法(adiabatic demagnetization method)が必要であった。断熱消磁法は、1926年にWilliam GiauqueとPeter Debyeによって独立に提案されたとのこと。)

(今読むと、この教科書は、非常に良く書かれていて、示唆に富み、刺激に満ち溢れているように思うのだが、当時の自分は、おそらく、無感動で試験勉強のために目を通していただけだったのだろうと思ってしまう。試験勉強=短時間に試験に出る事項のみ記憶しようとしていた。言い訳に過ぎないが、時間はあっても、わからないところを調べる手段が限られ、図書館で調べ物をすると非常に長い時間がかかった。文献検索するのがたいへんだったし、文献が見つかってもコピーが制限されていた。そんなこと言うと、コピー機すらなかった時代の学生に笑われるかな。)

(10月1日から、仕事に復帰する。半年か1年ごとの契約なので、いつまで続けられるかわからないし、どのような仕事が待っているのかもまだわからないが、研究者を志していた頃の自分を取り戻して、研鑽を積んで、良い仕事をしたいなと思っている。)

8章 化学反応速度論

1節 化学変化の速度

最初の明確な定量的研究は1850年にL. Wilhelmyによってなされた。かれは酸の水溶液中におけるショ糖の転化について、偏光計を用いて研究した。

H2O + C12H22O11(ショ糖) → C6H12O6(ブドウ糖) + C6H12O6(果糖)

(酸が反応式に現れない:酸はそれ自身消費されずに反応速度を増大する触媒として作用する)

2節 反応速度の測定法

・・・。したがって最良の分析法は、事実上連続的で、しかも反応混合物から次々と試料を取り出さなくてよい方法である。それにはそれぞれの場合に応じた物理的性質が利用される。Wilhelmyが用いた旋光能の測定は一つの適切な例である。他の物理的方法として次のようなものがある。

1) 吸収スペクトルおよび比色分析

2) 誘電率の測定

3) 屈折率の測定

4) 反応による容積変化を測定する膨張計(dilatometer)法

(化学反応をリアルタイムで追跡している。in sutu, operandですな。)

3節 反応の次数

反応の次数は速度式における濃度のべき乗の和として定義される。たとえば、五酸化窒素の分解、2N2O5 ---> 4NO2 + O2は速度式 -d[N2O5]/dt = k1[N2O5]に従うことがわかっているから、これは1次反応(first-order reaction)である。二酸化窒素の分解、2NO2 ---> 2NO + O2は式 -d[NO2]/dt = k2[NO2]^2に従う。これは2次反応(second-order reaction)である。・・・。化学量論的な反応式の形と反応次数との間には必然的な関係は無い。

4節 反応の分子数

10章 電池

22節 濃淡分極

電池が不可逆的な条件のもとで働く際そのemfは当然平衡値からずれたものになる。電池が蓄電池すなわち電源として用いられる場合、電圧は平衡値以下に降下する。また電池内で電解を起こす場合に加えられるべき電圧はこの電池の平衡値以上のものでなければならない。

この電圧の平衡値との差は一部電池内の抵抗に打ち勝つためにも必要であって、これは積 IR に等しくなる。したがって電気エネルギーRI^2が熱として散逸する。これは不可逆的力学過程における摩擦損失に類似のものである。

このほか、電圧の差を生ずる原因はなお二つのものが普通考えられる。その一つは電池の電解質に起因するものであり、他の一つは電極における速度過程に関連するものである。前者は濃淡分極(concentration polarization)、後者は過電圧(over potential)とよばれる。

濃淡分極とは、その名称が示すように、働いている電池の電解質中に現れる濃度勾配によって生ずる。たとえば、銅陽極と白金陰極を硫酸銅溶液に浸した電極を考えよう。この電池に電流が流れると銅は陽極から溶出し陰極に析出する。電流がいくらか流れると電極付近の溶液中にはいくぶん銅イオンが減少することになり、電池内に濃度勾配ができる。このような濃度勾配ができれば10章16節で議論した濃淡電池と同じことになり、この濃淡電池が外部からの電圧に対抗する逆emfを与えるものと考えられる。この種の濃淡分極は、電解質をはげしくかきまぜて電解質によってつくられる濃度勾配をなくしてやれば実際に除去できることが多い。また温度を上昇させて電池内の電解質イオンの拡散を促進してもこの分極を減少させることができる。

(ここまでは定性的説明であり、文章を読めば分かったような気になるが、電池を組み上げて性能を出すためには定量的な取り扱いができるようにしておく必要がある。そのためには、9章の電気化学:電気伝導度とイオン反応、の知識が必要になる。濃淡電池の電位差であればFickの法則、・・・。)

23節 過電圧

過電圧(overvoltage)の現象の原因は、電極における平衡の達成の遅いこと、すなわち、電極と溶液内イオンとの電子の授受のいずれかが遅いことにある。すなわち反応が進行するには活性化自由エネルギーが必要で、外部から加えた余分の電圧がこの自由エネルギーを供給するのである。この現象はたいていの電極反応に見られるが、金属電極で金属の析出または熔解が起こる場合は通常小さいものである。特に気体の水素または酸素を発生させる場合に必要な過電圧はきわめて大きく、1V、またはある金属ではそれ以上にも達することがある。

 

***毎日、継続する予定***

***時間のある時に、ほんの少しずつ***

 

10月16日(土)

14章 分子構造と分子スペクトル

14節 核磁気共鳴

核スピン I をもつ核を磁場におけば空間量子化が起こる。すなわち磁場のまわりを磁気モーメントベクトルが歳差運動をして、磁場の方向の成分は次の値しかとることはできない。µ mngnβn ここでmn = I, I-1, I-2, …-I である。磁場におくと、異なったmnの値の状態が少しづつ異なったエネルギーをもつことになる。

・・・・・・・・・・。

この振動数は磁場の方向のまわりの磁気モーメントの古典的 Larmor の歳差運動のものと同じである。磁場においた種々の核スピン成分のエネルギー準位間の遷移を検出しようとした初期の試みは不成功に終わったが、1946年 E. M. Purcell と Felix Bloch は独立に核磁気共鳴(nuclear magnetic resonance, NMR)の方法を発展させた。

(テキストには、l = 4 の場合の空間量子化の模式図と、基本的な核磁気共鳴実験に用いる簡単な装置の模式図が描かれている。ここに書いている断片的な文字情報からでは、とても理解できるものではないと思う。)

磁石の磁場 H0 は0から10000 gaussまで変えられる。この磁場は空間量子化の結果、核エネルギー準位の等間隔の分離を引き起こす。そこへたとえば60 Mcの低出力のラジオ波を送信器から発信させる。すると小さな振動磁場ができて試料に作用する。この振動磁場の振動数が2準位間の遷移の振動数に等しいときには、共鳴してエネルギー準位間の遷移を生ずる。そのような遷移が試料中で起これば、磁場中の合成振動は受信コイルに電圧振動を引き起こし、この振動が増幅され検出される。図に示した装置では大きな磁石の磁場と送信器のラジオ周波数を固定し、大きな磁石の場に小さな可変場を連続的に加えていって共鳴を起こさせるようになっている。

(ここでテキストにはエタノールの低分解能NMRスペクトルと高分解能NMRスペクトルが示されている。)

・・・・・・・・・・。

送信器の振動場の振動数が、強い外部場のもとにある核磁石の歳差運動の自然の振動数に等しいときには、振動場からエネルギーが吸収される。いいかえるとマイクロ波の量子が吸収され核磁気量子数 mn が1単位増すのである。しかし振動場から連続吸収するには、核磁石がこのエネルギーを失って励起状態から基底状態へ帰り、またエネルギー吸収して他の量子飛躍に参加するというある有効な機構がなくてはならない。

ここで共鳴効果はエネルギーの正味の吸収を測るものであることを言っておく必要がある(すなわち低い状態から高い状態に移る際吸収するエネルギーと高い状態から低い状態に移る際放出するエネルギーとの差)。低い状態には多くの系があり(ボルツマン因子に従って)、正味のエネルギー吸収が起こるのである。

系が低い状態に戻るのは、スペクトルを放出することによるだけではなく、緩和過程とよばれるいろいろな無放射機構によっても起こる。このような緩和過程が存在しないと、下の状態にいる方が上の状態にいるより少ないような熱平衡を維持する方法がないから、核磁気共鳴は実際には不可能になるだろう。

緩和機構には次の2種類のものがある。その一つは外部場の方向の核磁化がその平衡値に達しようとする緩和であって、縦の緩和(longitudinal relaxiation)とよばれる。これは緩和速度が上の状態にある核の数の(平衡値からの)ずれの1乗に比例するから、1次反応式に従う。ここで速度定数の逆数は縦緩和時間 T1 とよばれる。この過程はまたスピン-格子緩和ともよばれ、配向した核のまわりの物体中のいろいろな変動する局所場によるものである。多くの機構の一例として、常磁性イオンが水に付着すると、イオンの不対電子の強い磁場のため陽子の緩和時間 T1 が非常に減少することが見出されている。

第2番目の緩和過程は横の緩和(transverse relaxation)( T2 )とよばれる。場の方向のまわりを歳差運動している核が互いに同一位相にあると、磁場の軸 Z に垂直な XY 面に磁気モーメントの正味の成分が残ることになる。したがってこの位相を破壊するような何らかの場があると、磁気モーメントの XY 成分の緩和を起こすことになろう。このような過程の1つはスピン-スピン緩和であって、スピンの高い状態の核がスピンを交換して隣の原子核へエネルギーを移すのである。

 

10月17日(日)

NMRの感度が気になって調べている。

化学と教育61巻6号(2013年)296-299:田代 充, NMRの基礎:観測できる原子核とできない原子核、観測しやすい原子核としにくい原子核

共鳴周波数が大きいほどNMR観測における測定感度が高い。実際の試料では天然存在比も感度に影響する。と書かれている。

相対感度は、炭素13を1.00とすると、プロトンは5.7x10^3となっている。フッ素19は、4.7x10^3、リン31は3.8x10^2、窒素14は、5.7である。

(感度は、共鳴周波数の3乗に比例する。)

 

 

 

f:id:AI_ML_DL:20210929195111p:plain

style=175 iteration=500