User Tools

Site Tools


blogtng:jblog


日本語ドキュメント 内部リンク

日本語ドキュメント 外部リンク

日本語チュートリアルなど

生物画像解析ブログ

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月から、生物画像解析の日本語の情報をみかけたりしたらこちらに集積していこうかと思います。よろしくおねがいします。

三浦耕太

entry generator

blogtng/jblog.txt · Last modified: 2021/08/19 06:27 by kota

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki