SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler 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...

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

Mais conteúdo relacionado

Mais procurados

[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language SupervisionDeep Learning JP
 
Uplift Modelling 入門(1)
Uplift Modelling 入門(1)Uplift Modelling 入門(1)
Uplift Modelling 入門(1)Yohei Sato
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門joisino
 
Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
KaggleのテクニックYasunori Ozaki
 
傾向スコアの概念とその実践
傾向スコアの概念とその実践傾向スコアの概念とその実践
傾向スコアの概念とその実践Yasuyuki Okumura
 
Automatic Mixed Precision の紹介
Automatic Mixed Precision の紹介Automatic Mixed Precision の紹介
Automatic Mixed Precision の紹介Kuninobu SaSaki
 
機械学習におけるオンライン確率的最適化の理論
機械学習におけるオンライン確率的最適化の理論機械学習におけるオンライン確率的最適化の理論
機械学習におけるオンライン確率的最適化の理論Taiji Suzuki
 
機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価Shintaro Fukushima
 
自己教師学習(Self-Supervised Learning)
自己教師学習(Self-Supervised Learning)自己教師学習(Self-Supervised Learning)
自己教師学習(Self-Supervised Learning)cvpaper. challenge
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)Kota Matsui
 
Cmdstanr入門とreduce_sum()解説
Cmdstanr入門とreduce_sum()解説Cmdstanr入門とreduce_sum()解説
Cmdstanr入門とreduce_sum()解説Hiroshi Shimizu
 
3Dマップを活用したVisual Localization
3Dマップを活用したVisual Localization3Dマップを活用したVisual Localization
3Dマップを活用したVisual LocalizationHajime Taira
 
ベイズモデリングで見る因子分析
ベイズモデリングで見る因子分析ベイズモデリングで見る因子分析
ベイズモデリングで見る因子分析Shushi Namba
 
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...SSII
 

Mais procurados (20)

coordinate descent 法について
coordinate descent 法についてcoordinate descent 法について
coordinate descent 法について
 
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
 
Uplift Modelling 入門(1)
Uplift Modelling 入門(1)Uplift Modelling 入門(1)
Uplift Modelling 入門(1)
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
1次式とノルムで構成された最適化問題とその双対問題
1次式とノルムで構成された最適化問題とその双対問題1次式とノルムで構成された最適化問題とその双対問題
1次式とノルムで構成された最適化問題とその双対問題
 
Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
Kaggleのテクニック
 
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM) 一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
 
傾向スコアの概念とその実践
傾向スコアの概念とその実践傾向スコアの概念とその実践
傾向スコアの概念とその実践
 
Automatic Mixed Precision の紹介
Automatic Mixed Precision の紹介Automatic Mixed Precision の紹介
Automatic Mixed Precision の紹介
 
機械学習におけるオンライン確率的最適化の理論
機械学習におけるオンライン確率的最適化の理論機械学習におけるオンライン確率的最適化の理論
機械学習におけるオンライン確率的最適化の理論
 
機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価
 
自己教師学習(Self-Supervised Learning)
自己教師学習(Self-Supervised Learning)自己教師学習(Self-Supervised Learning)
自己教師学習(Self-Supervised Learning)
 
主成分分析
主成分分析主成分分析
主成分分析
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
 
Cmdstanr入門とreduce_sum()解説
Cmdstanr入門とreduce_sum()解説Cmdstanr入門とreduce_sum()解説
Cmdstanr入門とreduce_sum()解説
 
Gurobi python
Gurobi pythonGurobi python
Gurobi python
 
3Dマップを活用したVisual Localization
3Dマップを活用したVisual Localization3Dマップを活用したVisual Localization
3Dマップを活用したVisual Localization
 
ベイズモデリングで見る因子分析
ベイズモデリングで見る因子分析ベイズモデリングで見る因子分析
ベイズモデリングで見る因子分析
 
BlackBox モデルの説明性・解釈性技術の実装
BlackBox モデルの説明性・解釈性技術の実装BlackBox モデルの説明性・解釈性技術の実装
BlackBox モデルの説明性・解釈性技術の実装
 
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
 

Semelhante a 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
 
画像認識で物を見分ける
画像認識で物を見分ける画像認識で物を見分ける
画像認識で物を見分ける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
 
201209 Biopackathon 12th
201209 Biopackathon 12th201209 Biopackathon 12th
201209 Biopackathon 12thSatoshi Kume
 

Semelhante a 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
 
画像処理の高性能計算
画像処理の高性能計算画像処理の高性能計算
画像処理の高性能計算
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
 
201209 Biopackathon 12th
201209 Biopackathon 12th201209 Biopackathon 12th
201209 Biopackathon 12th
 

Último

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Último (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

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