CMCI weblog
Silicon AppleとGPU処理
MacBook Air (M1)でCLIJを使ったベンチマークをメモ。速度はCPUに比較して20倍から35倍の処理速度になる。 ベンチマークは開発のレポジトリにあるマクロをそのまま使った。三次元の平均フィルタ処理。自分で畳み込みのカーネルを作った場合には、差はあまりないが、二倍程度、早くなる。
https://github.com/clij/clij2-docs/blob/master/src/main/macro/benchmarking.ijm
CPU mean filter no 1 took 2687 msec CPU mean filter no 2 took 1759 msec CPU mean filter no 3 took 1959 msec CPU mean filter no 4 took 2253 msec CPU mean filter no 5 took 2557 msec CPU mean filter no 6 took 3406 msec CPU mean filter no 7 took 3526 msec CPU mean filter no 8 took 3722 msec CPU mean filter no 9 took 3520 msec CPU mean filter no 10 took 3419 msec Pushing one image to the GPU took 56 msec CLIJ2 GPU mean filter no 1 took 740 msec CLIJ2 GPU mean filter no 2 took 92 msec CLIJ2 GPU mean filter no 3 took 90 msec CLIJ2 GPU mean filter no 4 took 90 msec CLIJ2 GPU mean filter no 5 took 92 msec CLIJ2 GPU mean filter no 6 took 89 msec CLIJ2 GPU mean filter no 7 took 91 msec CLIJ2 GPU mean filter no 8 took 93 msec CLIJ2 GPU mean filter no 9 took 99 msec CLIJ2 GPU mean filter no 10 took 92 msec Preparing the convolution kernel in GPU memory took 43 msec CLIJ2 GPU mean filter using convolution no 1 took 1500 msec CLIJ2 GPU mean filter using convolution no 2 took 1471 msec CLIJ2 GPU mean filter using convolution no 3 took 1620 msec CLIJ2 GPU mean filter using convolution no 4 took 1551 msec CLIJ2 GPU mean filter using convolution no 5 took 1546 msec CLIJ2 GPU mean filter using convolution no 6 took 1588 msec CLIJ2 GPU mean filter using convolution no 7 took 1475 msec CLIJ2 GPU mean filter using convolution no 8 took 1489 msec CLIJ2 GPU mean filter using convolution no 9 took 1446 msec CLIJ2 GPU mean filter using convolution no 10 took 1551 msec CLIJ GPU mean filter no 1 took 1308 msec CLIJ GPU mean filter no 2 took 106 msec CLIJ GPU mean filter no 3 took 99 msec CLIJ GPU mean filter no 4 took 97 msec CLIJ GPU mean filter no 5 took 100 msec CLIJ GPU mean filter no 6 took 96 msec CLIJ GPU mean filter no 7 took 140 msec CLIJ GPU mean filter no 8 took 116 msec CLIJ GPU mean filter no 9 took 96 msec CLIJ GPU mean filter no 10 took 99 msec Pulling one image from the GPU took 2148 msec GPU: Apple M1 Memory in GB: 16 OpenCL version: 1.2
ffmpegのインストールと動画の変換
Fijiで作成した動画(avi形式)はそのままマックのkeynoteに貼り付けて再生したり、QuickTimeでの再生ができない。画素形式を変換する必要があるのだが、そのための私の使っているかんたんな方法は、ffmpegというコマンドラインツールを使った変換である。以下、コマンドラインの使い方の初歩を含め、これを解説する。
なお、公開の都合上、 Gistに同じ文章を掲載した。|
—
まずhomebrewをインストールする。以下参照。
- Homebrewのインストール - Qiita
- https://qiita.com/zaburo/items/29fe23c1ceb6056109fd
次にhomebrewを使ったffmpegのインストール
画像ファイルからMacのQuickTimeで開けるmp4ファイルを作る - Qiita
https://qiita.com/yohm/items/f84e848b6333aaa897e7
さて、インストールに、brew install ffmpeg
というコマンドを上で使いましたが、これ以外に知っていたほうがよいコマンドをまずいくつか紹介するので、試してみてください。
open .
半角のあとのピリオドが重要です。これを実行すると、目下の処理対象となっているディレクトリー(フォルダー)が表示されます。
このコマンドだと、ウィンドウでどこにいるのかがわかるわけですが、ウィンドウを表示させずに現在どこのディレクトリーにいるのか、ということを知るには
pwd
を使います。実行すると、/ で区切られた、ディレクトリーの場所(ファイルシステムはツリー状。その場所)がわかる。いわば住所。
% pwd
/Users/miura
(上の%は私が打ち込んだものではなく、ターミナルでコマンドの行頭にある目印です。)pwdでターミナルに出力されるこの”住所”を、”パス”といいます。英語だとpath。ディレクトリーやファイルはそれぞれ、固有のパスを持っていることになります。目下のディレクトリーの中にあるファイルを表示するには
ls
(Lの小文字にSの小文字)をやってみてください。
open .
を使ってファインダで開いたときに見えるファイルの名前が出力されているはずです。以上、ファイルのパスとはなにか、ということをまず解説するためにコマンドを紹介しました。
次に、現在処理対象となっているディレクトリーからの移動です。ターミナルを開いてそのままの状態の場合、処理対象は”ホームディレクトリ”といい、コマンドラインでデフォルトの場所(パス)になります。pwdで表示される場所です。私の場合は、
% pwd
/Users/miura
ls
を行うと、だーっといろいろなファイルやフォルダがリストされるのですが、その中で例えばDownloadsというフォルダがあります。そのフォルダの中に移動してみましょう。
cd Downloads
というコマンドになります。 日本語OSだと、手元にないので確認できませんが
cd ダウンロード
になると思います。pwd
で現在の位置を確認しましょう。ファイルシステムの階層を一つ下がったことになります。
% pwd
/Users/miura/Downloads
これは、"Users"というフォルダの中の、"miura"というフォルダの中の"Downloads"というフォルダの中が現在地であること(現在地のパス)であることを示しています。
ここからまた元に戻るには、階層を一つ上がるのですが、これには
% cd ..
とピリオド2つで戻ります。再び現在位置のチェックをpwdでしてみます。
% pwd
/Users/miura
さて、ここまでで、現在ターミナルがいる場所(current directoryと英語では言う)を知ったり、その場所に保存さてているファイルのリストの表示、場所の移動、などをやってみましたが、ここからは実際にffmegで処理してみましょう。
たとえば、ImageJで作成したAVI形式のファイルがあったとします。このファイルの名前がtest.avi
であるとして以下、解説を行います。
コマンドラインだけでもファイルを移動したりできるのですが、ここでは、ファインダでマウスを使ってファイルを移動することと組み合わせてやってみます。まず、test.avi
のファイルを、マウスを使ってダウンロードフォルダに移動(あるいはコピー)してください。test.avi
がDownloads(あるいはダウンロード)のフォルダの中にあることをコマンドラインで確認してみましょう。
cd Downloads
あるいは
cd ダウンロード
で、移動します。次に
ls
フォルダ内のファイルを確認してください。test.avi
もそこにあるはずです。
確認ができたら、
ffmpeg -i test.avi
というコマンドを打ってみてください。すると、多くの情報が出力されるはずです。わたしの場合だったら、当方でFijiを使って作成したAVIファイルの場合、
% ffmpeg -i test.avi
ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
built with Apple clang version 12.0.5 (clang-1205.0.22.9)
configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/4.4_2 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-avresample --enable-videotoolbox
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Input #0, avi, from 'test.avi':
Duration: 00:00:14.14, start: 0.000000, bitrate: 1562 kb/s
Stream #0:0: Video: rawvideo, pal8, 160x174, 1574 kb/s, 7 fps, 7 tbr, 7 tbn, 7 tbc
Metadata:
title : ImageJ AVI
At least one output file must be specified
となりました。コマンドffmpeg -i test.avi
の解説をすると、<コマンド> <オプション> <オプションにあたえる情報>という半角スペースで区切られた書式になっていて、
- コマンド: ffmpeg
- オプション: -i
- オプションにあたえる情報: test.avi
という構成になっています。ffmpegはいわばアプリです。ffmpegにはさまざまな種類のオプションがあり、それぞれハイフン一つ(-)ないしは2つ(--)で始まる「フラグ」と呼ばれる記号が与えらてています。-i
は、入力ファイルを指定するためのフラグで、-i test.avi
は、入力ファイルとしてtest.avi
を使うことを指示していることになります。
ただ、これだけだと、出力先が指定されていないので、上の出力の最後にあるようにAt least one output file must be specified
という警告がでています。そこで以下のコマンドに変えてみましょう。
ffmpeg -i test.avi test.mp4
すると、さっきよりも多くの出力があるはずで(割愛します)、なおかつ
open .
で、ダウンロードフォルダを眺めると、test.mp4というファイルが作成されているはずです。このあたらしいmp4形式のファイルは、avi形式のファイルよりも融通が聞くのですが、これもやはりquicktimeでは開くことができません。詳しい解説は省きますが、画素のフォーマットがquicktimeでは使えない形式なのです。このためにはオプションとして画素のフォーマットをyuv420p形式に変換する、-pix_fmt yuv420p
を付ける必要があります。つまりコマンドは
ffmpeg -i test.avi -pix_fmt yuv420p test.mp4
となりこれを実行すると
File 'test.mp4' already exists. Overwrite? [y/N]
という質問が表示されます。test.mp4を上書きしてもよいか、と聞いているのでy
とタイプしてリターンを押すと、変換が実行されます。
このあとで、
open test.mp4
というコマンドを実行してみてください。Quicktimeで動画が表示されるはずです。
私の場合は、せっかくだったら少し動画圧縮をかけるか、ということで、さらにオプション-c:v libx264
を追加したコマンドを使いました(ツイッターで)。この場合には
ffmpeg -i test.avi -c:v libx264 -pix_fmt yuv420p test.mp4
のように、みっつオプションがあることになります。なお、実際の変換されたファイルはファインダ上では
open .
でウィンドウを開いて、探すことができるはずです。
なお、変換後の動画形式が.mp4になっていますが、.movにしてquicktime純正の形式に変えても問題ないはずです。動画のコンテナ形式といって、箱の形がいろいろある、ということで、画素形式とはまた別の設定である、と考えるといいかと思います。
ffmpegの他のオプションは
ffmpeg -h
ないしは
ffmpeg --help
とすると、ヘルプがターミナルに出力されます。ものすごい数なので使いこなすのは難しいのですが、より手の混んだ処理なども可能です。
ゲルのバンド定量
電気泳動のゲルのバンドの定量に関して、ギゴチャンネルで講評したウェブページのリンクを以下にリストします。
ImageJの場合、主に2つのやり方が紹介されており、ROI ManagerにバンドのROIを集めて測定するやり方と(1番目の方法)、レーン全体に関して泳動方向にプロファイルを取得して、ピークの積分を行う方法(2番目)があるわけですが、私は2番目のピークを積分する方法を推奨しています。学生実習とかあったら、2つの方法でどのぐらいの差がでるかとかやったらいいかもしれない。一番目のほうが恣意性が高いので結果はばらつくはずです。
追記: 二番目の方法に関しては、「デジタル細胞生物学」の付録3に詳しい解説を掲載しています。
2021年6月
2021年6月から、生物画像解析の日本語の情報をみかけたりしたらこちらに集積していこうかと思います。よろしくおねがいします。
三浦耕太
Server moved
The web server hosting this wiki has moved from EMBL to InMotion. The move was rather straight forward, but as biii.info is in the subdomain, htaccess file was tweaked around to enable biii.info to stay as it is while moving only the wiki to be redirected from cmci.embl.de to cmci.info.
Anycase, InMotion seems to be fast enough for rendering (even though it's in US).