粒子pickツール
本家様https://cryolo.readthedocs.io/en/stable/index.html
crYOLOのバージョン履歴
https://pypi.org/project/cryolo/#history
convolutional neural networksを利用した粒子pickツール
提供されているモデルファイルを使って、あるいは自分自身でモデルファイルを作ってpickします.
そして結果を可視化するツールもそろっています
ここでは pyenv-anaconda 経由で crYOLO 実行環境を作って EnvironmentModules を経て利用するようにします.
*自分のホームディレクトリに anaconda を敷いて crYOLO 実行環境を作り「conda activate crYOLO」とかで利用されても構いません
まずは下準備 pyenv-anaconda 環境の整備
Singularityで作ってみた Singularity/crYOLO
各自のホームディレクトリに各種pythonアプリの実行環境を用意するのではなく、rootで一元管理させるために「pyenv-anaconda」を使ってます.
pyenvでOS提供のpython,anaconda環境から離れ、そのpyenv上にanaconda環境を独自に敷いてます
ここでは「/apps/pyenv」を起点としています.
git clone https://github.com/yyuu/pyenv.git /apps/pyenv
export PYENV_ROOT=/apps/pyenv
export PATH=$PYENV_ROOT/bin:$PATH
pyenv install --list <--これでanaconda,minicondaのバージョンが一覧されます.
pyenv install anaconda3-2024.02-1
anaconda3もいいが、miniforge3でもいい. anacondaは商用利用なら有償. 高性能なパッケージが使えるらしい. miniforgeはmambaが使えるのがいい
その後にpyenvの既定を anaconda3-2024.02-1 にとします
pyenv global anaconda3-2024.02-1
移ったかを確認します
[root@rockylinux9 ~]# pyenv versions
system
* anaconda3-2024.02-1 (set by /apps/pyenv/version)
[root@rockylinux9 ~]# source /apps/pyenv/versions/anaconda3-2024.02-1/etc/profile.d/conda.sh
これで「pyenv-anaconda」の環境敷設は完了です。
次にcrYOLO実行環境を作ります
crYOLOはnvidia製GPUカードを使ってより高速な処理が可能です. そのためにはNVIDIAドライバーのインストールが必要です. cudaライブラリは不要です.
前段で定義済みかもしれませんが「pyenv-anaconda」の環境を用意します
export PYENV_ROOT=/apps/pyenv
export PATH=$PYENV_ROOT/bin:$PATH
source /apps/pyenv/versions/anaconda3-2024.02-1/etc/profile.d/conda.sh
「conda」を最新版にします. 時間が掛かる処理なのでcondaを使てって「古いよ」って言われたら実行してください
conda update conda
その後にcrYOLO向けのpython実行環境を作成します.
crYOLOのpython実行環境の名称ですが、単純に「cryolo」でもいいし、「cryolo-1.9.9」とバージョン番号を設けてもいいです。
現行のcrYOLOのバージョンは一応ここで確認できます. 「https://pypi.org/project/cryolo/」
ここでは最新版は常に「crYOLO」で更新があったらその環境を削除して作り直す方針とします
[root@rockylinux9 ~]# conda create -n cryolo -c conda-forge -c anaconda pyqt=5 python=3 numpy==1.18.5 libtiff wxPython=4.1.1 adwaita-icon-theme 'setuptools<66'
[root@rockylinux9 ~]# conda activate cryolo
(cryolo) [root@rockylinux9 ~]#
(cryolo) [root@rockylinux9 ~]# pip install nvidia-pyindex
(cryolo) [root@rockylinux9 ~]# pip install 'cryolo[c11]'
以上で「crYOLO」自体のインストールは完了です.
引き続き1.9.0から提供された「napari-boxmanager」向けの設定を行います
(cryolo) [root@rockylinux9 ~]# cryolo_dir=$(realpath $(dirname $(which cryolo_predict.py)))
(cryolo) [root@rockylinux9 ~]# napari_link_file=${cryolo_dir}/napari_boxmanager
(cryolo) [root@rockylinux9 ~]# conda deactivate
[root@rockylinux9 ~]#
[root@rockylinux9 ~]# conda create -y -n napari-cryolo -c conda-forge python=3.10 napari=0.4.17 pyqt pip
[root@rockylinux9 ~]# conda activate napari-cryolo
(napari-cryolo) [root@rockylinux9 ~]# pip install napari-boxmanager
(napari-cryolo) [root@rockylinux9 ~]# echo -e "#\!/usr/bin/bash\nexport NAPARI_EXE=$(which napari)\nnapari_exe='$(which napari_boxmanager)'\n\${napari_exe} \"\${@}\""> ${napari_link_file}
(napari-cryolo) [root@rockylinux9 ~]# chmod +x ${napari_link_file}
(napari-cryolo) [root@rockylinux9 ~]# conda deactivate
[root@rockylinux9 ~]#
これで完成. お疲れさまでした.
cryoloのバージョン指定を行いたいなら 「pip install 'cryolo[c11]==1.8.3'」とします
modelファイルは本家様から頂いて、ここでは単純に「/apps/crYOLO」に配置してます
取得先はこちらhttps://cryolo.readthedocs.io/en/stable/installation.html#download-the-general-models
[root@rockylinux9 ~]# ls -lh /apps/crYOLO/
total 194M
-rw-r--r--. 1 root 2001 194M Apr 15 2021 gmodel_phosnet_202005_N63_c17.h5
[root@rockylinux9 ~]#
ここではEnvironmentModulesを使って実行環境を整備してます。
作ったmoduleファイルは下記URLを参照して
http://sphire.mpg.de/wiki/doku.php?id=pipeline:window:cryolo:integration_into_module_system
「/apps/modulefiles/crYOLO」と用意して、中身は下記にします
#%Module1.0
set root /apps/pyenv/versions/anaconda3-2024.02-1/envs/cryolo
setenv CRYOLOPATH $root
prepend-path PATH $root/bin
まずはcrYOLOのmoduleファイルをロードしてcrYOLO実行環境を準備します
[saber@rockylinux9 ~]$ module use /apps/modulefiles/
[saber@rockylinux9 ~]$ mkdir -p test/crYOLO
[saber@rockylinux9 ~]$ cd test/crYOLO
[saber@rockylinux9 crYOLO]$
[saber@rockylinux9 crYOLO]$ module load crYOLO
これでcrYOLOのアプリが使えます。
*「/apps/pyenv/versions/anaconda3-2024.02-1/envs/cryolo/bin」にcrYOLO関連のアプリがあります
本家様で提供されているmodelファイルは下記ですが、ここでは「For cryo images (low-pass filtered)」のmodelを使って粒子pickを試してみます
General PhosaurusNet models
手始めにコマンドラインでテスト的に.
初めに「configファイル」を準備します
チュートリアルにも記載されてますが、下記を実行してconfigファイルを作ります
[saber@rockylinux9 crYOLO]$ cryolo_gui.py config config_cryolo_.json 220 --filter LOWPASS --low_pass_cutoff 0.1
#####################################################
Important debugging information.
In case of any problems, please provide this information.
#####################################################
/apps/pyenv/versions/anaconda3-2024.02-1/envs/cryolo/bin/cryolo_gui.py config config_cryolo_.json 220
--filter LOWPASS
--low_pass_cutoff 0.1
#####################################################
Wrote config to config_cryolo_.json
[saber@rockylinux9 crYOLO]$
[saber@rockylinux9 crYOLO]$ ls -l
total 4
-rw-r--r--. 1 saber saber 344 Mar 20 19:26 config_cryolo_.json
[saber@rockylinux9 crYOLO]$
「config_cryolo_.json」の中身はこんな感じ
[saber@rockylinux9 crYOLO]$ cat config_cryolo_.json
{
"model": {
"architecture": "PhosaurusNet",
"input_size": 1024,
"anchors": [
220,
220
],
"max_box_per_image": 700,
"norm": "STANDARD",
"filter": [
0.1,
"filtered_tmp/"
]
},
"other": {
"log_path": "logs/"
}
}
[saber@rockylinux9 crYOLO]$
configファイルのたたき台を作るくらいでしょうか。別に手動で作成しても宜しいかと思う。
各項目の説明は下記URL参照
https://cryolo.readthedocs.io/en/stable/other/other.html#cryolo-configuration-file
pick対象はGautomatchに付属のribosomeのmrcファイルです.
っで実際にpickさせてみます。
[saber@rockylinux9 crYOLO]$ cryolo_predict.py -c config_cryolo_.json -w /apps/crYOLO/gmodel_phosnet_202005_N63_c17.h5 -i /apps/GCTF_Gautomatch_Cu10.1/ribosome/test[78].mrc -o .
[saber@rockylinux9 crYOLO]$
そのpickした座標データは形式に合わせてCBOX、EMAN、STAあと1.9.xになってからCRYOSPARC向けも用意されたみたい
EMANのbox形式を見てみると
[saber@rockylinux9 crYOLO]$ less EMAN/test7.box
2018.828857421875 3801.8345489501953 220 220
2233.00439453125 3829.3297119140625 220 220
2733.330078125 3819.460433959961 220 220
:
[saber@rockylinux9 crYOLO]$
CRYOSPARC向けのは
[saber@rockylinux9 crYOLO]$ less CRYOSPARC/cryosparc.star
data_
loop_
_rlnMicrographName #1
_rlnCoordinateX #2
_rlnCoordinateY #3
_rlnAutopickFigureOfMerit #4
test7.mrc 2128.828857421875 3911.8345489501953 0.8078545928001404
test7.mrc 2343.00439453125 3939.3297119140625 0.7854877710342407
test7.mrc 2843.330078125 3929.460433959961 0.728760838508606
:
[saber@rockylinux9 crYOLO]$
な感じで書かれています。
[saber@c crYOLO]$ cryolo_gui.py
実行するとcrYOLOの画面が表示されます。その左側には「Actions」として「config」「train」「predict」「ecaluation」があります。
「config」を選ぶとその右側には複数のタブが並びます。
先ほどコマンドラインで作成した「config_cryolo_.json」をGUIで作っているだけなのですが、個々の項目の説明があるので
こちらで欄を埋めてconfigファイルを用意された方がいいのかと思う。
ただ「predict」の実行なら「General arguments」タグの「config_out_path」「boxsize」、「Model options」タグのすべて、
「Denoising option」を埋めて、「Start」ボタンを押下すればconfigファイルは得られる。
っで、次にpredictを選択
「Required arguments」タグでconf欄は前段で作ったconfigファイル。inputはmrcファイルを指定します。
weightsがmodelファイルを指定して、outputはそのばでいいなら「./」とします。
「Optional auguments」タグは説明を読み定義すれば宜しいかと。そのままで動きます。
「Filament」タグはパス
「Deprecated/Experimental/Special」タグもパス
そして「Start」ボタンを押下すればpickしてくれます。
crYOLO-1.9.xになってから「cryolo_boxmanager」は従来版の「cryolo_boxmanager_legacy.py」と新型の「napari_boxmanager」に分かれたみたい.
下記メッセージが表示されるときがある。リモートアクセスの際はないのだが、計算機をモニターに繋げて操作している際はあるみたい
「Qt: Session management error: None of the authentication protocols specified are supported」
っで回避方法はそのcrYOLOを使うターミナルで
unset SESSION_MANAGER
を行うと回避される
(削除)
2023.03時点で rockylinux 8.7 は対応しているが、rockylinux9.1 ではエラーが発生します. 原因はよく分からんが
「Number of processes must be at least 1」とメッセージが表示される. pyenv/anaconda環境なのでOS側の影響は少ないと思うのだが...
2023.04. anacondaを2023.03に変更したらrockylinux9.1 でも動いた