2017年9月4日 更新

LPixel主催!「画像解析ハッカソン」イベントまとめ

2017年7月26日に行われた「ライフサイエンス画像解析カジュアルハッカソン!」(https://goo.gl/9mjwfc)のまとめ記事です.

629 view お気に入り 1

ライフサイエンス画像解析カジュアルハッカソン!

 (4202)

2017年7月26日に行われた「ライフサイエンス画像解析カジュアルハッカソン!」(https://goo.gl/9mjwfc
に参加しましたので,イベント概要および感想を投稿させて頂きます.ハッカソンの雰囲気やKerasを用いたニューラルネットの構築に興味がある方はぜひ一読してみて下さい.

筆者のレベルは? どんな人が参加しているの?

まずは筆者の自己紹介および画像解析のレベルを述べます.筆者は薬学系研究科に所属しており,研究室に配属されてからは,ケミカルバイオロジーと呼ばれる分野で研究活動を行っています.研究室には画像解析の専門家はおらず,画像解析を学ぶ機会は全くありませんでした.

しかし,4ヶ月前に「東大人工知能学生団体HAIT」というサークルに入り,それから毎日コツコツと機械学習や画像解析についての勉強を行っていました.その成果を試してみたくハッカソンに挑戦してみました.因みにハッカソン参加時の筆者のレベルは,

・Pythonの基本的な構文が書ける
・Numpy・Pandas・OpenCVなど一部ライブラリが使用できる

であり正直かなり不安でした.

本ハッカソンには,お医者さん・学部生・ライフサイエンス研究者など,多種多様なバックグラウンドを持つ人たちが集まっていました.機械学習や画像解析を専門にしている人は少なく,筆者のように独学で勉強している人が多いという印象を受けました.しかし各チームに少なくとも1人は専門の方が割り振られており,どのチームも円滑にお題に取り組めていました.

機械学習や画像解析を専門にしている方は,LPixelエンジニアの方と接するまたとない機会ですし,専門外の方でも十分に楽しめる非常に有意義な会でした.

ハッカソンのお題は?

本ハッカソンでは,細胞画像の分類を行いました.与えられた訓練用の細胞画像には,「観察した時刻:t」と「z軸方向の位置:z」の情報がラベルづけされており,これを元にラベルがついてない画像に対してtとzを予測するというお題が課されました.
 (4273)

観察時刻を表すtが小さいと細胞分裂が起こっていないのに対して,tが大きいと細胞分裂が複数回起こっている様子が分かる.
 (4274)

z軸方向の位置を表すzが極端に小さかったり.大きかったりすると焦点が合っていないぼやけた画像が得られる.一方で,zが適切であると鮮明な細胞画像が得られている.

Kerasで初めてニューラルネットを構築した!

出されたお題に対して筆者のチームが取った戦略は次の2つです.①KerasでCNNを実装する.②特徴量を抽出しSVMで分類する.筆者はこれまでにニューラルネットを構築した経験がなかったが今回,チームのメンバーの助力を得て,初めて実装することができたので解説を行います.
 (4276)

CNN(Convolutional Neural Network)とは,ニューラルネットワークの1種であり,画像認識の分野で活躍しているネットワークです.
画像の前処理,特に画像の水増しに関しては,Deep learningで画像認識⑦〜Kerasで畳み込みニューラルネットワーク vol.3〜 (IMACEL ACADEMY内の記事) を参考にしたので,そちらを参照していただきたい.KerasでのCNN構築コードは以下に記載しました.

前処理およびCNN構築の際に注意・工夫した点は,

・計算時間を短縮するため425 × 434の画像を100 × 100にした
・正規化しないと学習が進まない
・二値分類であるので,最後の出力を "softmax" でなく "sigmoid" にした

訓練データで学習させた結果,accuracyが95%以上と,良い学習器ができました.
from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.optimizers import RMSprop
from keras.callbacks import EarlyStopping, ModelCheckpoint
from keras.preprocessing.image import ImageDataGenerator

nb_filters1 = 32     # 畳み込みフィルタ1の数
nb_filters2 = 64     # 畳み込みフィルタ2の数
nb_conv1 = 3     # 畳み込みフィルタ1の縦横pixel数
nb_conv2 = 2     # 畳み込みフィルタ2の縦横pixel数
nb_pool = 2     # プーリングを行う範囲の縦横pixel数 
nb_epoch = 30     # 最適化計算のループ回数
batch_size = 32     # 計算効率化のために分割した1グループに含まれるデータ数
img_rows = 100     #入力データの縦ピクセル数
img_cols = 100     #入力データの横ピクセル数

model = Sequential()
model.add(Conv2D(nb_filters1, (nb_conv1, nb_conv1), padding="same", input_shape=(img_rows, img_cols, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))
model.add(Conv2D(nb_filters2, (nb_conv2, nb_conv2), padding="same"))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(256))
model.add(Activation("relu"))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation("sigmoid"))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
CNNの構築.py
今回用いたのは簡単なCNNのネットワークですが,より複雑にすることで,精度向上が期待できます.
17 件

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

Deep learningで画像認識⑩〜Kerasで畳み込みニューラルネットワーク vol.6〜

Deep learningで画像認識⑩〜Kerasで畳み込みニューラルネットワーク vol.6〜

U-Netと呼ばれるU字型の畳み込みニューラルネットワークを用いて、MRI画像から肝臓の領域抽出を行ってみます。
木田智士 | 1,947 view
Deep learningで画像認識⑨〜Kerasで畳み込みニューラルネットワーク vol.5〜

Deep learningで画像認識⑨〜Kerasで畳み込みニューラルネットワーク vol.5〜

U-Netと呼ばれるU字型の畳み込みニューラルネットワークを用いて、MRI画像から肝臓の領域抽出を行ってみます。
木田智士 | 3,415 view
Deep learningで画像認識⑧〜Kerasで畳み込みニューラルネットワーク vol.4〜

Deep learningで画像認識⑧〜Kerasで畳み込みニューラルネットワーク vol.4〜

転移学習と呼ばれる学習済みのモデルを利用する手法を用いて白血球の顕微鏡画像を分類してみます。
木田智士 | 7,898 view
「Deep Learning×画像解析」ライトニングトークイベント by LP-tech まとめ

「Deep Learning×画像解析」ライトニングトークイベント by LP-tech まとめ

2月28日に行われた,「Deep Learning×画像解析」ライトニングトークイベント by LP-tech のまとめ記事です.
三好 裕之 | 436 view
Deep learningで画像認識⑦〜Kerasで畳み込みニューラルネットワーク vol.3〜

Deep learningで画像認識⑦〜Kerasで畳み込みニューラルネットワーク vol.3〜

Kerasと呼ばれるDeep Learingのライブラリを使って、白血球の顕微鏡画像を分類してみます。
木田智士 | 12,412 view

この記事のキーワード

この記事のキュレーター

井上 大輝 井上 大輝