SlideShare a Scribd company logo
1 of 30
Download to read offline
2011-11-11 Kashiwa.R#1



 画像解析とパターン認識における R の利用




                    くつな   なつまろ
              朽名 夏麿
 (東京大学 大学院新領域創成科学研究科 先端生命科学専攻)
生物画像解析の特性
多次元 (時間,立体,波長…)            多様性(生物種,部位,観察法…)


                 t, z, l


データサイズ・枚数 (n)              多目的性 (何に着目するか)
            100 ms/枚           位置・局在 濃度・電位   運動   数・形・長さ
            1024*1024 pixel/枚
            12 bits/pixel
             → 4 GiBytes / 5 分

   自動化・計算機支援に向く             研究者(人間)の柔軟性が不可欠


  AI?? パターン認識?? 機械学習?? データマイニング??
      ・ 多様な画像と目的をカバーできる適応性・汎用性
      ・ 数値化による客観性,自動化による高速性
シロイヌナズナ気孔
  アクチン繊維
              「画像→画像」の例




  共焦点画像 高周波数成分の抽出        二値化像     細線化像
        (繊維等の強調処理)      (白黒画像)


              「画像→数値」の例
              気孔開閉の指標       アクチン繊維の配向の指標

             短径 / 長径   長径   気孔に対する
                            アクチン繊維の角度   q
                       短径               q

                                     気孔
 灰色: 気孔領域    この場合,          この場合,
黒色: アクチン繊維   短径 / 長径=0.47   アクチン繊維の角度=54.3°
159   デジタル画像は数値が並んだもの
           153


                                 x
                       (3, 0)
                       輝度30

    (x,y) = (0, 0)     (3, 2)
    輝度 35              輝度 21

y                                              159列



                                表示を縮小
                                        153行
画像処理・画像解析のソフトウェアツールと要件
NIH Image/Scion Image/ImageJ
Photoshop
                         採用されている画像や処理のモデル
GIMP                     拡張性
MetaMorph                可搬性
OpenCV                   インタラクティビティ(REPL,GUI)
VTK (Mayavi, ParaView) フリーソフトウェア,オープンソース
Amira                    ユーザの多さ,情報の多さ
MATLAB, Octave           開発状況
                         速度や記憶量.スケールするか.
ImageMagick
CImg
Python Imaging Library (PIL)
 :
R
ImageJ
Java .オープンソース.NIH の人が開発.生物学分野で多用される.




                                               拡張性:
                                                * 独自仕様のマクロ
                                                * Java等JVM用言語でのプラグイン
                                                * JavaプラットフォームでのAPI

                                               可搬性・速度・スケール性:
                                                * Java に準ずる.

                                               画像のモデルがバイオ向き
                                               * 画素について u8, u16, float ...
                                               * Z軸,時間軸でのスタック化
                                                 (3次元以上の高次元画像)
以降の顕微鏡画像は全て http://ome.grc.nia.nih.gov/iicbu2008/ (IICBUデータベース) より取得.
ImageJ plugins
http://rsbweb.nih.gov/ij/plugins/ (ImageJ 公式サイト内)




                    このサイトだけでも500個以上のプラグインが紹介されている.
                    Java ソースかクラスファイルか JAR 形式.
Java による ImageJ plugin




          生物画像解析のニーズは多彩すぎており,
          探すよりも書く方が早く済むことも多い.
Python による ImageJ plugin
ImageJ では画像から欲しい情報を
定量化するところまでは容易だが…
高次元・多量の非画像データの
扱いは不得手.
Excel にコピペしてプロットや検定…
ある程度はパッケージがあるようだ.
(試してません…)
R で画像処理の本が出る
共立出版のサイトより引用
http://www.kyoritsu-pub.co.jp/series/arudemanabu.html#11
生物画像解析における R の使いどころ


        画像処理       画像処理   画像処理



               画像からの測定

                                 画像からの測定
  画像の読込
                データ解析

                                  データ解析



 画像データの生成
(シミュレーション等)
ImageJ から R を使うには




      ?
Rserve: TCP/IP を介した R の利用




          connect       R console と ImageJ を別プロセスで動かしつつ,
ImageJ                  データのやりとりをすることができれば
                    R   便利そうなので,そのうちトライしたい.
 (Java)                                    http://www.rforge.net/Rserve/
rJava: R から Java を呼出す
           JRI: Java から R を呼出す




          call
ImageJ               これを使って ImageJ と R をむすんだ
                 R   プロダクトを簡単に 2 つ紹介します.
 (Java)   call                    http://www.rforge.net/rJava/
RImageJ: R から ImageJ を呼出す




                                  R で実質6行のパッケージ.
                                  これだけでも ImageJ マクロのサブセット
                                  が R コンソールから使える.
                                  インタラクティブな操作は不明.
 http://romainfrancois.blog.free.fr/index.php?post/2009/06/22/using-ImageJ-from-R%3A-the-RImageJ-package
Bio7: ImageJ と R,その他を統合




        ImageJ や R の良さが一部
        失なわれているように思う.
        あと挙動が怪しい気が…?
JRI (Java → R) を試す
導入 (ubuntuの場合)
export   R_HOME=/usr/lib/R
export   CLASSPATH=${CLASSPATH}:${R_HOME}/site-library/rJava/jri/JRI.jar
export   LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${R_HOME}/site-library/rJava/jri
% sudo   apt-get install r-cran-rjava

試用
% scala
scala> val engine=new org.rosuda.JRI.Rengine(Array("--no-save"),false,null)
engine: org.rosuda.JRI.Rengine = Thread[Thread-4,5,main]
                                                    Rは別のJavaスレッドで動く
scala> engine.eval("sum(iris$Sepal.Length)").asDouble
res0: Double = 876.5

scala> engine.eval("iris$Sepal.Length").asDoubleArray.sum
res1: Double = 876.5000000000002




    これを使って ImageJ から R を使ってみることにした.
ImageJ から R を使って画像の学習と分類をする


                       ?
 ゴルジ体  リソソーム         課題画像        4. 教師データから分類森を作り,
    教師画像群
                                      課題データを分類
        ImageJ                      randomForest package
1. 画像            7. 表示            3. 特徴等         5. 分類結果
   今回の plugin                                R
2. 特徴等       6. 分類結果
                         JRI (Java/R)
                         JNI (Java/C)
今回のプラグインのソースリスト (一部)
object Ijp extends KbiPlugIn {
  private val imgClassA = arg("imgClassA", KbiGenericDialogObj.Choice.empty)
  private val imgClassB = arg("imgClassB", KbiGenericDialogObj.Choice.empty)

    def config(argStr: String): Option[() => Any] = runWith(imp => {
       val winList = KbiWinListObj.all()
       imgClassA.resetChoice(winList)    ユーザに教師画像を
       imgClassB.resetChoice(winList)
       input(imgClassA, imgClassB)       2セット(A, B)指定してもらう.
       def idx2imp(idx: Int): Imp = winList.getImpFromIdx(idx) match {
         case null => KbiExc("image not found")
         case imp => imp
       }
       new TrainAndClassifier(idx2imp(imgClassA().idx), idx2imp(imgClassB().idx))
    })
}

                            R engine の管理.
private object Rengine {    R は初回使用時のみ初期化する.
  private lazy val engine = new org.rosuda.JRI.Rengine(Array("--no-save"),
                                                       false, null)
  def eval(s: String): org.rosuda.JRI.REXP = engine.eval(s)
}
private class TrainAndClassifier(impA: Imp, impB: Imp) extends ProcNotShow {
  private val featureExtractor = str2featureSet("glcmPlain")
  private val vectorsA = ips2features(UtilImg.ist2ips(impA.getStack))
  private val vectorsB = ips2features(UtilImg.ist2ips(impB.getStack))
  private val nDim = vectorsA(0).size        教師画像からの特徴抽出
  private def ips2features(ips: Array[Ip]) = for (ip <- ips) yield
    featureExtractor.extract(ip).values.drop(2).toArray

  def proc(istQ: Ist, impQ: Imp, kpl: KbiPlugIn) {
    val ipsQ = UtilImg.ist2ips(istQ)
    val vectorsQ = ips2features(ipsQ)       課題画像からの特徴抽出
    val cmdsForR = Util.withArrBuf[String](acc => {
       def addVectorStr(i: Int) {
         acc += "tf%d <- c(%s,%s)".format(i, vectorsA.map(_(i)).mkString(","),
                                             vectorsB.map(_(i)).mkString(","))
         acc += "qf%d <- c(%s)".format(i, vectorsQ.map(_(i)).mkString(","))
       }
       acc += "library(randomForest)"         R に渡すコマンドを生成
       for (i <- 0 until nDim) addVectorStr(i)
       acc += "imgClass <- c(%s,%s)".format(  (学習と分類)
                     Array.fill(vectorsA.size)("'A'").mkString(","),
                     Array.fill(vectorsB.size)("'B'").mkString(","))
       acc += "dTeach <- data.frame(%s,imgClass)".format((0 until nDim).map(n =>
                     "f%d=tf%d".format(n, n)).mkString(","))
       acc += "dQuery <- data.frame(%s)".format((0 until nDim).map(n =>
                     "f%d=qf%d".format(n, n)).mkString(","))
       acc += "rf <- randomForest(formula=imgClass ~., data=dTeach)"
       acc += "predicted <- as.integer(predict(rf, dQuery))"
    })
cmdsForR.forall(cmd => Rengine.eval(cmd) != null) match {
          case false => KbiExc("error occurred in R")             R の呼出
          case true => {
            val predicted = Rengine.eval("predicted").asIntArray
            KbiExc.assert(predicted != null, "error occurred in R: predicted")
            val (ipsEstA, ipsEstB) = Util.withArrBuf[Ip, Ip]((accA, accB) =>
              for ((lbl, idx) <- predicted.zipWithIndex) lbl match {
                case 1 => accA += ipsQ(idx)
                case 2 => accB += ipsQ(idx)
                                                        分類結果に応じて
              })
            if (ipsEstA.size > 0) UtilImg.show(ipsEstA)
                                                        課題画像を
          }
            if (ipsEstB.size > 0) UtilImg.show(ipsEstB) 2つに分けて表示.
        }
    }
}

    今回は R script を生成するために
      double[] a = { 1.2, 2.4, 3.6 };
    を
      String s = String.format("f1 <- c(%g, %g, %g)", a[0]…
      Rengine.eval(s);
    のようにデータを文字列中に埋め込んでから評価しているが,
      Rengine.assign("f1", array);
    の方が速度や誤差の面では望ましい.
実行のようす: 教師画像群A, Bと課題画像の指定


         ゴルジ体   リソソーム




                 ?
             (エンドソーム)
実行のようす: 分類結果の表示等




             R engine に渡した R script
           → 後で R コンソールで検討可能.

分類




 8 vs 83
ゴルジ体                リソソーム




           エンドソームの分類状況(一部)    リソソームぽい
       ゴルジ体ぽい
                8 vs 83

エンドソームは今回の特徴量と分類法と
画像セットでは,ゴルジ体よりリソソームに
似た局在をしている.
Next...

クラスタリングについて
当研究室の湖城さんから

More Related Content

What's hot

ハミルトニアンモンテカルロ法についての説明
ハミルトニアンモンテカルロ法についての説明ハミルトニアンモンテカルロ法についての説明
ハミルトニアンモンテカルロ法についての説明KCS Keio Computer Society
 
時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?Fumihiko Takahashi
 
Skip Connection まとめ(Neural Network)
Skip Connection まとめ(Neural Network)Skip Connection まとめ(Neural Network)
Skip Connection まとめ(Neural Network)Yamato OKAMOTO
 
初めてのグラフカット
初めてのグラフカット初めてのグラフカット
初めてのグラフカットTsubasa Hirakawa
 
[DL輪読会]画像を使ったSim2Realの現況
[DL輪読会]画像を使ったSim2Realの現況[DL輪読会]画像を使ったSim2Realの現況
[DL輪読会]画像を使ったSim2Realの現況Deep Learning JP
 
画像生成・生成モデル メタサーベイ
画像生成・生成モデル メタサーベイ画像生成・生成モデル メタサーベイ
画像生成・生成モデル メタサーベイcvpaper. challenge
 
RAFT: Recurrent All-Pairs Field Transforms for Optical Flow
RAFT: Recurrent All-Pairs Field Transforms for Optical FlowRAFT: Recurrent All-Pairs Field Transforms for Optical Flow
RAFT: Recurrent All-Pairs Field Transforms for Optical FlowMasanoriSuganuma
 
「世界モデル」と関連研究について
「世界モデル」と関連研究について「世界モデル」と関連研究について
「世界モデル」と関連研究についてMasahiro Suzuki
 
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~. .
 
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...SSII
 
『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた
『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた
『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた. .
 
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural NetworksDeep Learning JP
 
空撮画像技術と3次元リアルタイムデータの可視化について
空撮画像技術と3次元リアルタイムデータの可視化について空撮画像技術と3次元リアルタイムデータの可視化について
空撮画像技術と3次元リアルタイムデータの可視化についてRyousuke Wayama
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII
 
Attention-Guided GANについて
Attention-Guided GANについてAttention-Guided GANについて
Attention-Guided GANについてyohei okawa
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tatsuya Tojima
 

What's hot (20)

ハミルトニアンモンテカルロ法についての説明
ハミルトニアンモンテカルロ法についての説明ハミルトニアンモンテカルロ法についての説明
ハミルトニアンモンテカルロ法についての説明
 
時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?
 
Skip Connection まとめ(Neural Network)
Skip Connection まとめ(Neural Network)Skip Connection まとめ(Neural Network)
Skip Connection まとめ(Neural Network)
 
SLAM勉強会(PTAM)
SLAM勉強会(PTAM)SLAM勉強会(PTAM)
SLAM勉強会(PTAM)
 
初めてのグラフカット
初めてのグラフカット初めてのグラフカット
初めてのグラフカット
 
[DL輪読会]画像を使ったSim2Realの現況
[DL輪読会]画像を使ったSim2Realの現況[DL輪読会]画像を使ったSim2Realの現況
[DL輪読会]画像を使ったSim2Realの現況
 
画像生成・生成モデル メタサーベイ
画像生成・生成モデル メタサーベイ画像生成・生成モデル メタサーベイ
画像生成・生成モデル メタサーベイ
 
RAFT: Recurrent All-Pairs Field Transforms for Optical Flow
RAFT: Recurrent All-Pairs Field Transforms for Optical FlowRAFT: Recurrent All-Pairs Field Transforms for Optical Flow
RAFT: Recurrent All-Pairs Field Transforms for Optical Flow
 
20180424 orb slam
20180424 orb slam20180424 orb slam
20180424 orb slam
 
「世界モデル」と関連研究について
「世界モデル」と関連研究について「世界モデル」と関連研究について
「世界モデル」と関連研究について
 
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
 
EMアルゴリズム
EMアルゴリズムEMアルゴリズム
EMアルゴリズム
 
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
 
『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた
『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた
『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた
 
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
 
空撮画像技術と3次元リアルタイムデータの可視化について
空撮画像技術と3次元リアルタイムデータの可視化について空撮画像技術と3次元リアルタイムデータの可視化について
空撮画像技術と3次元リアルタイムデータの可視化について
 
階層ベイズとWAIC
階層ベイズとWAIC階層ベイズとWAIC
階層ベイズとWAIC
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
 
Attention-Guided GANについて
Attention-Guided GANについてAttention-Guided GANについて
Attention-Guided GANについて
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
 

Similar to Kashiwa.R#1 画像解析とパターン認識における R の利用

Opencv object detection_takmin
Opencv object detection_takminOpencv object detection_takmin
Opencv object detection_takminTakuya Minagawa
 
C#のすばらしさを語る会用
C#のすばらしさを語る会用C#のすばらしさを語る会用
C#のすばらしさを語る会用Hideaki Kazaoka
 
画像処理でのPythonの利用
画像処理でのPythonの利用画像処理でのPythonの利用
画像処理でのPythonの利用Yasutomo Kawanishi
 
OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群Norishige Fukushima
 
introduce "Stealing Machine Learning Models via Prediction APIs"
introduce "Stealing Machine Learning Models  via Prediction APIs"introduce "Stealing Machine Learning Models  via Prediction APIs"
introduce "Stealing Machine Learning Models via Prediction APIs"Isao Takaesu
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門SatoYu1ro
 
How to use animation packages in R(Japanese)
How to use animation packages in R(Japanese)How to use animation packages in R(Japanese)
How to use animation packages in R(Japanese)sleipnir002
 
機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価Shintaro Fukushima
 
画像認識で物を見分ける
画像認識で物を見分ける画像認識で物を見分ける
画像認識で物を見分けるKazuaki Tanida
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
AV 画像認識とその周辺 - UT Startup Gym 講演資料
AV 画像認識とその周辺 - UT Startup Gym 講演資料AV 画像認識とその周辺 - UT Startup Gym 講演資料
AV 画像認識とその周辺 - UT Startup Gym 講演資料ぱろすけ
 
2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料Recruit Technologies
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016kyoto university
 
第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016kyoto university
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類Tetsuya Hasegawa
 

Similar to Kashiwa.R#1 画像解析とパターン認識における R の利用 (20)

Opencv object detection_takmin
Opencv object detection_takminOpencv object detection_takmin
Opencv object detection_takmin
 
C#のすばらしさを語る会用
C#のすばらしさを語る会用C#のすばらしさを語る会用
C#のすばらしさを語る会用
 
画像処理でのPythonの利用
画像処理でのPythonの利用画像処理でのPythonの利用
画像処理でのPythonの利用
 
OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群
 
introduce "Stealing Machine Learning Models via Prediction APIs"
introduce "Stealing Machine Learning Models  via Prediction APIs"introduce "Stealing Machine Learning Models  via Prediction APIs"
introduce "Stealing Machine Learning Models via Prediction APIs"
 
MIRU2018 tutorial
MIRU2018 tutorialMIRU2018 tutorial
MIRU2018 tutorial
 
マーブル図で怖くないRxJS
マーブル図で怖くないRxJSマーブル図で怖くないRxJS
マーブル図で怖くないRxJS
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
How to use animation packages in R(Japanese)
How to use animation packages in R(Japanese)How to use animation packages in R(Japanese)
How to use animation packages in R(Japanese)
 
機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
画像認識で物を見分ける
画像認識で物を見分ける画像認識で物を見分ける
画像認識で物を見分ける
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
AV 画像認識とその周辺 - UT Startup Gym 講演資料
AV 画像認識とその周辺 - UT Startup Gym 講演資料AV 画像認識とその周辺 - UT Startup Gym 講演資料
AV 画像認識とその周辺 - UT Startup Gym 講演資料
 
2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
 
第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016
 
画像処理の高性能計算
画像処理の高性能計算画像処理の高性能計算
画像処理の高性能計算
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
 

Recently uploaded

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 

Recently uploaded (11)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

Kashiwa.R#1 画像解析とパターン認識における R の利用

  • 1. 2011-11-11 Kashiwa.R#1 画像解析とパターン認識における R の利用 くつな なつまろ 朽名 夏麿 (東京大学 大学院新領域創成科学研究科 先端生命科学専攻)
  • 2. 生物画像解析の特性 多次元 (時間,立体,波長…) 多様性(生物種,部位,観察法…) t, z, l データサイズ・枚数 (n) 多目的性 (何に着目するか) 100 ms/枚 位置・局在 濃度・電位 運動 数・形・長さ 1024*1024 pixel/枚 12 bits/pixel → 4 GiBytes / 5 分 自動化・計算機支援に向く 研究者(人間)の柔軟性が不可欠 AI?? パターン認識?? 機械学習?? データマイニング?? ・ 多様な画像と目的をカバーできる適応性・汎用性 ・ 数値化による客観性,自動化による高速性
  • 3. シロイヌナズナ気孔 アクチン繊維 「画像→画像」の例 共焦点画像 高周波数成分の抽出 二値化像 細線化像 (繊維等の強調処理) (白黒画像) 「画像→数値」の例 気孔開閉の指標 アクチン繊維の配向の指標 短径 / 長径 長径 気孔に対する アクチン繊維の角度 q 短径 q 気孔 灰色: 気孔領域 この場合, この場合, 黒色: アクチン繊維 短径 / 長径=0.47 アクチン繊維の角度=54.3°
  • 4. 159 デジタル画像は数値が並んだもの 153 x (3, 0) 輝度30 (x,y) = (0, 0) (3, 2) 輝度 35 輝度 21 y 159列 表示を縮小 153行
  • 5. 画像処理・画像解析のソフトウェアツールと要件 NIH Image/Scion Image/ImageJ Photoshop 採用されている画像や処理のモデル GIMP 拡張性 MetaMorph 可搬性 OpenCV インタラクティビティ(REPL,GUI) VTK (Mayavi, ParaView) フリーソフトウェア,オープンソース Amira ユーザの多さ,情報の多さ MATLAB, Octave 開発状況 速度や記憶量.スケールするか. ImageMagick CImg Python Imaging Library (PIL) : R
  • 6. ImageJ Java .オープンソース.NIH の人が開発.生物学分野で多用される. 拡張性: * 独自仕様のマクロ * Java等JVM用言語でのプラグイン * JavaプラットフォームでのAPI 可搬性・速度・スケール性: * Java に準ずる. 画像のモデルがバイオ向き * 画素について u8, u16, float ... * Z軸,時間軸でのスタック化 (3次元以上の高次元画像) 以降の顕微鏡画像は全て http://ome.grc.nia.nih.gov/iicbu2008/ (IICBUデータベース) より取得.
  • 7. ImageJ plugins http://rsbweb.nih.gov/ij/plugins/ (ImageJ 公式サイト内) このサイトだけでも500個以上のプラグインが紹介されている. Java ソースかクラスファイルか JAR 形式.
  • 8. Java による ImageJ plugin 生物画像解析のニーズは多彩すぎており, 探すよりも書く方が早く済むことも多い.
  • 12.
  • 16. 生物画像解析における R の使いどころ 画像処理 画像処理 画像処理 画像からの測定 画像からの測定 画像の読込 データ解析 データ解析 画像データの生成 (シミュレーション等)
  • 17. ImageJ から R を使うには ?
  • 18. Rserve: TCP/IP を介した R の利用 connect R console と ImageJ を別プロセスで動かしつつ, ImageJ データのやりとりをすることができれば R 便利そうなので,そのうちトライしたい. (Java) http://www.rforge.net/Rserve/
  • 19. rJava: R から Java を呼出す JRI: Java から R を呼出す call ImageJ これを使って ImageJ と R をむすんだ R プロダクトを簡単に 2 つ紹介します. (Java) call http://www.rforge.net/rJava/
  • 20. RImageJ: R から ImageJ を呼出す R で実質6行のパッケージ. これだけでも ImageJ マクロのサブセット が R コンソールから使える. インタラクティブな操作は不明. http://romainfrancois.blog.free.fr/index.php?post/2009/06/22/using-ImageJ-from-R%3A-the-RImageJ-package
  • 21. Bio7: ImageJ と R,その他を統合 ImageJ や R の良さが一部 失なわれているように思う. あと挙動が怪しい気が…?
  • 22. JRI (Java → R) を試す 導入 (ubuntuの場合) export R_HOME=/usr/lib/R export CLASSPATH=${CLASSPATH}:${R_HOME}/site-library/rJava/jri/JRI.jar export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${R_HOME}/site-library/rJava/jri % sudo apt-get install r-cran-rjava 試用 % scala scala> val engine=new org.rosuda.JRI.Rengine(Array("--no-save"),false,null) engine: org.rosuda.JRI.Rengine = Thread[Thread-4,5,main] Rは別のJavaスレッドで動く scala> engine.eval("sum(iris$Sepal.Length)").asDouble res0: Double = 876.5 scala> engine.eval("iris$Sepal.Length").asDoubleArray.sum res1: Double = 876.5000000000002 これを使って ImageJ から R を使ってみることにした.
  • 23. ImageJ から R を使って画像の学習と分類をする ? ゴルジ体 リソソーム 課題画像 4. 教師データから分類森を作り, 教師画像群 課題データを分類 ImageJ randomForest package 1. 画像 7. 表示 3. 特徴等 5. 分類結果 今回の plugin R 2. 特徴等 6. 分類結果 JRI (Java/R) JNI (Java/C)
  • 24. 今回のプラグインのソースリスト (一部) object Ijp extends KbiPlugIn { private val imgClassA = arg("imgClassA", KbiGenericDialogObj.Choice.empty) private val imgClassB = arg("imgClassB", KbiGenericDialogObj.Choice.empty) def config(argStr: String): Option[() => Any] = runWith(imp => { val winList = KbiWinListObj.all() imgClassA.resetChoice(winList) ユーザに教師画像を imgClassB.resetChoice(winList) input(imgClassA, imgClassB) 2セット(A, B)指定してもらう. def idx2imp(idx: Int): Imp = winList.getImpFromIdx(idx) match { case null => KbiExc("image not found") case imp => imp } new TrainAndClassifier(idx2imp(imgClassA().idx), idx2imp(imgClassB().idx)) }) } R engine の管理. private object Rengine { R は初回使用時のみ初期化する. private lazy val engine = new org.rosuda.JRI.Rengine(Array("--no-save"), false, null) def eval(s: String): org.rosuda.JRI.REXP = engine.eval(s) }
  • 25. private class TrainAndClassifier(impA: Imp, impB: Imp) extends ProcNotShow { private val featureExtractor = str2featureSet("glcmPlain") private val vectorsA = ips2features(UtilImg.ist2ips(impA.getStack)) private val vectorsB = ips2features(UtilImg.ist2ips(impB.getStack)) private val nDim = vectorsA(0).size 教師画像からの特徴抽出 private def ips2features(ips: Array[Ip]) = for (ip <- ips) yield featureExtractor.extract(ip).values.drop(2).toArray def proc(istQ: Ist, impQ: Imp, kpl: KbiPlugIn) { val ipsQ = UtilImg.ist2ips(istQ) val vectorsQ = ips2features(ipsQ) 課題画像からの特徴抽出 val cmdsForR = Util.withArrBuf[String](acc => { def addVectorStr(i: Int) { acc += "tf%d <- c(%s,%s)".format(i, vectorsA.map(_(i)).mkString(","), vectorsB.map(_(i)).mkString(",")) acc += "qf%d <- c(%s)".format(i, vectorsQ.map(_(i)).mkString(",")) } acc += "library(randomForest)" R に渡すコマンドを生成 for (i <- 0 until nDim) addVectorStr(i) acc += "imgClass <- c(%s,%s)".format( (学習と分類) Array.fill(vectorsA.size)("'A'").mkString(","), Array.fill(vectorsB.size)("'B'").mkString(",")) acc += "dTeach <- data.frame(%s,imgClass)".format((0 until nDim).map(n => "f%d=tf%d".format(n, n)).mkString(",")) acc += "dQuery <- data.frame(%s)".format((0 until nDim).map(n => "f%d=qf%d".format(n, n)).mkString(",")) acc += "rf <- randomForest(formula=imgClass ~., data=dTeach)" acc += "predicted <- as.integer(predict(rf, dQuery))" })
  • 26. cmdsForR.forall(cmd => Rengine.eval(cmd) != null) match { case false => KbiExc("error occurred in R") R の呼出 case true => { val predicted = Rengine.eval("predicted").asIntArray KbiExc.assert(predicted != null, "error occurred in R: predicted") val (ipsEstA, ipsEstB) = Util.withArrBuf[Ip, Ip]((accA, accB) => for ((lbl, idx) <- predicted.zipWithIndex) lbl match { case 1 => accA += ipsQ(idx) case 2 => accB += ipsQ(idx) 分類結果に応じて }) if (ipsEstA.size > 0) UtilImg.show(ipsEstA) 課題画像を } if (ipsEstB.size > 0) UtilImg.show(ipsEstB) 2つに分けて表示. } } } 今回は R script を生成するために double[] a = { 1.2, 2.4, 3.6 }; を String s = String.format("f1 <- c(%g, %g, %g)", a[0]… Rengine.eval(s); のようにデータを文字列中に埋め込んでから評価しているが, Rengine.assign("f1", array); の方が速度や誤差の面では望ましい.
  • 27. 実行のようす: 教師画像群A, Bと課題画像の指定 ゴルジ体 リソソーム ? (エンドソーム)
  • 28. 実行のようす: 分類結果の表示等 R engine に渡した R script → 後で R コンソールで検討可能. 分類 8 vs 83
  • 29. ゴルジ体 リソソーム エンドソームの分類状況(一部) リソソームぽい ゴルジ体ぽい 8 vs 83 エンドソームは今回の特徴量と分類法と 画像セットでは,ゴルジ体よりリソソームに 似た局在をしている.