しんさんのブログ

科学や技術のこと読書のことなど

「三体」劉 慈欣 (著)を読みました

三体

三体

中国のSFがヒューゴー賞を取ったと話題になった本です。
かなり前から話題になっていたこともあり、早々に購入をして積読していました。
1回目に少し読んだところで、1週間空いてしまい物語の展開が追えなくなったので、もう一度初めから読みなおしました。
自分が理論物理を研究していたこともあり、科学的背景は割とすんなり理解できたのですが同時にそれはないだろと突っ込みたくもありましたが、エンタテインメントとして物理屋さんなら楽しめると思います。
また、著者が中国人ということもあり、人民解放軍や同士という言葉が出てきて、そこには中国の文化と言うか社会的な背景がふんだんに織り込まれていますが、小説として読めば違和感はありません。
三体世界の描写もいかにも中国と言う感じはありますし、進んだ科学技術+独裁というのもいかにも前近代的なにおいがしますが、1周回ってそれが現実になるかもと言う最近の世界を考えると逆にリアルだなとも感じました。
科学が進歩するには基礎科学を推進することが重要で、加速器のを建設して物質や時空の謎、宇宙の基本法則を解明することが必要ときちんと言い切っていることろは、まさにその通りと思います。
デジタル化がどうのこうの、ディープラーニングとかデータサイエンスがとか言っている間に、基礎科学が停滞してしまっている日本を見ていると、三体世界が中国で、日本が地球なのではないか、などと妄想してしまいました。
実は、基礎科学を停滞させるために他に投資や関心を向けさせる巧妙な罠が仕掛けられているなんてことはないですよね。
土日を使い集中的に一気に読んでしまいましたが、もう終わりなのか、もっと物語の世界に浸り続けたいと思うほど読みやすかったです。
特に最後の方は一気にいろんな謎が解けるとともに、さらなる謎も投げかけられこれは三体Ⅱも読まざるを得なくなりそうです。

Pytorch学習の効率化

pytorchで学習をさせているときに、GPUを使っているのにGPUのロードが全く上がらないことがよくあります。
おそらくDataLoaderでのデータのロードとデータの処理に時間がかかって、GPUの計算がずっと止まっている状態なのだと思います。
以下のようなとても役に立つ記述がありましたので、メモとしてリンクしておきます。
正確には測ってはいませんが、いくつか使ってみたら確かに少し早くなりました。
qiita.com

ECCV2020リンク集

論文リンク
https://www.ecva.net/papers.php

150+ Pre-recorded ECCV 2020 Paper Presentations - All shared by authors with free public access
crossminds.ai

ECCV 2020 Paper Compilation - TUM Visual Computing Lab & Collaborators
www.youtube.com

Tensorflow, Kerasでよく使うセーブデータ形式

HDF5

多分一番よくつかわれるデータ形式だと思います。
非営利のHDF5グループが管理しているデータ形式
階層バイナリ形式で非常に大規模なデータの保存にも対応できる。 ディープラーニングではモデルそのものやモデルの重みを保存するのに使用されています。
モデルのみを保存できますし、モデルと重みの両方を一度にセーブすることもできる。

#モデルのみセーブする
model.save("hoge-model.hdf5")
#モデルと重みの両方をセーブ
model.save("hoge-modelWeights.hdf5")
#モデルをロードする
myModel = keras.models.load_model("hoge-model.hdf5")
#重みをロード
myWeight= keras.model.load_weights("hoge-modelWeights.hdf5")

JSON

JSONはどちらかと言うとWEB界隈でよく使われているデータ形式で別にTF,Kerasだからというわけではないですが、binary形式の
HDF5形式に対しで後でテキストとして読みやすいのでたまに使うことがあります。 ただし、保存できるのはネットワークモデルのみです。

# モデルの保存
model_json = model.to_json()
with open("hoge/hoge-model.json","w") as js:
     js.write(model_json)
# モデルの読み込み
js = open("hoge/hoeg-model.json", "r")
model_json = js.read()

Pickle

PickleはPythonのリストなどをセーブするのにつかわれます。
TF, kerasでは学習の履歴をセーブするのによく使われます。

# historyのセーブ
history = model.fit( )
with open('hoge.pkl', 'wb') as hf:
     pickle.dump(history.history, hf)
# historyのロード
hf = open('hoge.pkl', 'rb')
history = pickle.load(hf)

Pytorch, TensorflowのGPU版とOpneCV環境の構築方法

2023年8月31日
OpenCV pythonのインストールの記述を更新

2022年11月24日
OpenCVの環境構築方法のアップデート 

2021年3月18日
Pytorch v1.8.0, Tensorflow v2.1.0のGPU版とOpneCV環境の構築方法

GPU: RTX2060Super
OS: Windows11Pro 64bit

Python3.7 Anaconda
CUDA12.2
OpenCV 4.6.0

PytorchとGPU/CUDA の環境確認には以下のコマンドが便利です
>python -c "import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.device_count());"

CUDAとcuDNNのインストール

まずは、CUDA10.2をインストールします。
正しくインストールできたかどうかはコマンドプロンプト
>nvcc -V
で確認する。
cuDNNをインストールする。cuDNNはTensorflowで要求されるので、必要なバージョンを確認してインストール。
今回は、cuDNN v7.6.5 for CUDA 10.2 を選択。
ダウンロードしたcuDNNパッケージを解凍し、インストールガイドに従って3つのファイルをコピーする。

pytorch 1.8.0のインストール

(1) まずはanaconda 仮想環境を作成する。
"pytorch18GPUCV"という名前で作成。pythonのバージョンは3.7を選択します。
ついでにjupyter notebookもインストールしておきます。

(2) pytorchのページに行くと、バージョン等を選択すると必要なインストールコマンドが表示されるので、
指示通りにインストールする。

(3) OpneCV4のインストール
以下のサイトを参考にしました。
https://qiita.com/mml/items/fb9f6e66746be351fbc3
>pip install opencv-python
>pip install opencv-contrib-python

2023年8月30日更新
OpenCVではじめようディープラーニングによる画像認識」という本を参照
>conda search opencv
> conda install opencv=4.5.5
でanaconda環境で簡単にインストールできました。
conda-fforgeのopencvパッケージにはopencv-contribのモジュールも含まれているそうです。

(4) ハイパーパラメータの探索
学習のためのハイパーパラメータ探索のために、ベイズ最適化のためのフレームワークBoTorchをベースに作られたAxをインストール

pip install ax-platform

(5) 他のパッケージのインストール

conda install matplotlib
conda install pandas
conda install tensorboard
conda install h5py
conda install seaborn

インストールの確認は以下を参照
PyTorchでGPU情報を確認(使用可能か、デバイス数など) | note.nkmk.me

tensorflow 2.1.0のインストール

tensorflow公式ページのインストール>GPUサポートを見るとCUDA10.1と書いてありますが、今回はCUDA10.2でtensorflowの環境を構築しています。
CUDA10.2で動作はしているのでまあ大丈夫なのでしょう。

(1) まずはanaconda 仮想環境を作成する。
"tensorflow210CV"という名前で作成。pythonのバージョンは3.7を選択します。
ついでにjupyter notebookもインストールしておきます。

(2) tensorflowのインストール
> pip install tensorflow
とやると自分の環境ではtensorflowがGPU版を認識してくれない。
以下のページを参考にして、
https://medium.com/lsc-psd/tensorflow2-1%E3%81%A7cuda10-1%E3%81%AA%E3%81%AE%E3%81%ABgpu%E3%81%8C%E8%AA%8D%E8%AD%98%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84%E5%95%8F%E9%A1%8C%E3%81%AE%E8%A7%A3%E6%B1%BA%E6%B3%95-6be5137ec216

以下のコマンドでインストールしました。
> conda install tensorflow=2.1.0=gpu_py37h7db9008_0

(参考)2020/7/10現在でpython3.7+GPUで一番新しいものは、
https://repo.anaconda.com/pkgs/main/win-64
を見ると
tensorflow-2.1.0-gpu_py37h7db9008_0.tar.bz2
のようだ。

あとはpytorchの時と同様にopenCVとその他のパッケージをインストールします。

(3) OpneCVのインストール
OpenCVではじめようディープラーニングによる画像認識」を参照しました。

pipを使ったインストール

>pip3 install opencv-python==
と入力すると可能なバージョンが表示されるので、例えば
>pip3 install opencv-python==4.5.5.62
でインストール可能。
GUI機能を使わないなら、パッケージサイズが軽量になっているGUIなし版も可能。
opencv-python-headless
さらに、OpenCVの中でも実験的な機能が含まれているopencv_contribパッケージは
以下のようにしてインストールできる。
>pip3 install opencv-cotrib-python==
でバージョンリストを表示し、
>pip3 install opencv-contrib-python=4.5.5.62
でインストールできます。
GUIなしのopencv-contrib-python-headlessも可能。
ただし、Windows上ではVisual Studio 2015のC++領布可能パッケージをインストールしておく必要あり。

condaを使ったインストール

まずはインストール可能なバージョンを探す
>conda search opencv
リストが出てくるので、例えば以下のようにしてインストール
>conda install opencv==4.5.5
バージョン確認は、
>>> import cv2
>>> print(cv2.__version__)
で可能。

(4) 他のパッケージのインストール
>conda install matplotlib

jupyterにカーネルを登録

現在登録されているカーネルの確認
> jupyter kernelspec list

新たにカーネルを登録
> conda activate hoge
> ipython kernel install --user --name=hoge --display-name=hogehoge

登録したカーネルの削除
> jupyter kernelspec uninstall hoge

インストールの確認

インストールを確認するための簡単なコードを作成し、pytorch, tensorflowでGPUが認識されていて、OpenCVが動作することも確認しました。
確認用の簡単なスクリプトgithubに置きました。
github.com