2016年12月12日 更新

細胞種を機械学習で判別する!

今回は深層学習、ディープラーニングで細胞の種類を判別してみたいと思っています。判別するのは私が普段実験で使っている上皮細胞のEpH4という細胞と、遺伝子発現用のHEK293という細胞です。

1,268 view お気に入り 0
最近の流行りは人工知能でしょう!と思い始めました。OpenCVが大好きな望月優輝です。

今回は人工知能、ディープラーニングで細胞の種類を判別してみたいと思っています。判別するのは私が普段実験で使っている上皮細胞のEpH4という細胞と、遺伝子発現用のHEK293という細胞です。
EpH4

EpH4

HEK293

HEK293

見ると結構見た目が違います。この特徴を学習させます。
機械学習のフレームワークにはいろいろなものがありますが、今回はchainerを使います。インストールなどはLP-techの他の記事を参考にしてみるといいかもしれません。

この記事は畳み込みニューラルネットワークCNNを応用する内容です。
今回は、まず、この2つの細胞の画像のうち右側の高密度の画像をもとに5*5=25枚の分割画像を作ります。次に各25枚すなわち、50枚の画像を3:1で学習用と検証用に分けます。画像数がやや少ないですがデモということで!(途中で画像の数を水増しする処理も紹介しています!!!)
まずはフォルダ構成から。
フォルダ構成

フォルダ構成

chainer.pyがpythonコードの書いてあるファイルです。
original_dataには元のデータを入れます。その中の0のフォルダにEpHの画像を、1のフォルダにHEK293の画像を入れています。今回は1枚ずつしかありませんが、何枚入れてもOKです。

画像の分割と明るさの統一

このコードが分割を行う関数になります。
import cv2
import os.path
import glob

#1枚の画像をN*Nの画像に分割、縮小もする、色補正
def img_split(path,N,label):
    files = glob.glob(path)
    for i, filename in enumerate(files):
        #print filename, os.path.isfile(filename)
        print i,
        img = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)
        img = cv2.resize(img,(64*N,64*N))
        img = img * 64.0 / cv2.mean(img)[0]
        height, width = img.shape
        
        for x in range(0,N):
            for y in range(0,N):
                clp = img[height/N*y:height/N*(y+1), width/N*x:width/N*(x+1)]
                output = "../train_data/"+label+"/"+str(i*N*N+x*N+y)+'.png'
                cv2.imwrite(output, clp)
分割と明るさの統一.py
img_split(r"../original_data/0/*.png",5,"0")
img_split(r"../original_data/1/*.png",5,"1")
分割.py

画像の水増し

分割しただけでは学習に十分な数の画像とは言えないため、回転によって数を増やします。
48 件

関連する記事 こんな記事も人気です♪

Deep learningで画像認識④〜畳み込みニューラルネットワークの構成〜

Deep learningで画像認識④〜畳み込みニューラルネットワークの構成〜

畳み込みニューラルネットワークは、画像データに特化した特徴量の抽出と分類が可能です。今回は、畳み込みニューラルネットワークの構成についての内容です。
木田智士 | 426 view
OpenCVでライフサイエンスを加速する!

OpenCVでライフサイエンスを加速する!

OpenCVはそもそもはコンピュータービジョン向けのライブラリです。それゆえ、顔認識や文字認識、カメラキャリブレーションなど、いわゆるロボットや自動運転車などの工学系の応用を主に想定して開発されていますが、ライフサイエンスの分野でもOpenCVは非常に役に立つツールです。
望月 優輝 | 430 view
OpenCVで重心を計算する

OpenCVで重心を計算する

重心を計算する方法の紹介です
望月 優輝 | 494 view
LSTMとは〜概要と応用について〜

LSTMとは〜概要と応用について〜

音声信号処理や文章・対話の生成に用いられているLSTM(Long Short Term Memory)についてまとめました。
三好 裕之 | 529 view
pythonによるtensorflow〜deepdreamによる画像変換〜

pythonによるtensorflow〜deepdreamによる画像変換〜

今回は前回のtensorflowの記事に引き続き、deepdreamによる画像変換についてご紹介します。
三好 裕之 | 495 view

この記事のキーワード

この記事のキュレーター

望月 優輝 望月 優輝