備忘:細胞の蛍光画像の検出

ディープラーニングを用いた例。

 

 

DeepYeastも活用

Accurate classification of protein subcellular localization from high throughput microscopy images using deep learning http://www.g3journal.org/content/ggg/early/2017/04/05/g3.116.033654.full.pdf

 

”We have demonstrated that DeepYeast, an 11-layer convolutional neural network, can achieve classification accuracy of 91% for individual cells over twelve subcellular localizations, and 100% for proteins when entire cell populations of at least moderate size are considered. ”

DeepYeast モデルは、特徴量抽出器として使える。

DeepYeastモデルを転移学習することで、目的に応じた細胞検出に用いることができるとみられる。

 

 

本年度のIT導入補助金

IT導入補助金の情報が少し出てきました。

 

補助金の上限額・下限額・補助率

上限額
450万円
下限額
40万円
補助率
1/2以下

 

とのこと。

 

国として中小企業の多くにITを導入することを推し進めています。

 

昨年までは、上限が50万円(条件により100万円)だったのに対し、

今年は450万円と大幅に増額になっていることからも、

国の本気度が伺えます。

 

交付申請は5月27日開始のスケジュールです。

 

詳しくは、

 

https://www.it-hojo.jp/

 

でご確認ください。

 

VGG16 ようやく

VGG16の転移学習によるAIの学習実験が終わりました。

 

とりあえずわかったのは、

  • 計算がめちゃ大変
    • ちょっとのデータを学習するのに数日かかった
  • イチからネットワークを作るのに比べてVGG16の転移学習の方がかなりいい
    • イチから作った場合、すぐに過学習になりがち
    • VGG16の転移学習の場合、過学習になりにくい

 

といったところ。

 

今回は実験のためデータ数が少なく、転移学習の挙動を見るにとどまりました。

 

農作物の等級分類

農作物の等級分類のAIが入り始めていますね。

 

有名なところでは、きゅうりのAIがあります。

 

AIを用いてきゅうりの等級分類を行うものです。

 

さて、以前、試しに作ってみたのですが、

学習の経過に応じて

学習データでは損失関数の値が減少していくものの、

評価用データではロスが途中から増加していく、

いわゆる「過学習」が起きました。

 

原因として考えられるのは、

・そもそもデータ数が少ない

・画像サイズが小さい

・ニューラルネットの構成が適切でない

といったことです。

(きゅうりのデータはネットから拾って加工したもの)

 

こういった問題にたいしては、転移学習を用いるのが良いであろうと気づきました。

 

転移学習の場合は、既に大規模データで学習済みのモデルを使います。

 

しかも、多くのモデルはいわゆる「深い」モデルです。

 

「深い」モデルでは、入力データが層と経過していくに従い、

特徴が抽出されていきます。

 

特に、大規模なデータで学習を行ったモデルは、

特徴抽出器として、大きな威力を発揮します。

 

今回、VGG16というモデルを使用してAIを作成してみてます。

なお、VGG16は、下の図のような感じのモデルです。

 

この図の緑色の部分が、全結合層になっています。

この、緑色の部分は、画像の特徴量を抽出した後で、

その特徴量をもとにそれが何であるのかを判断する層です。

 

VGG16はImageNetの画像を学習していますので、

分類はその1,000分類です。

 

しかし、実用面では、

その1,000種類に名札に分類できる必要は必ずしもなくて、

実際に使うカテゴリにのみ分類できれば良いのです。

 

その部分は、おそらく、ニューラるネットワークのうち、

最後の全結合層で行われています。

 

今回の転移学習では、

その全結合層の部分のみを入れ替え、学習を行います。

 

MobileNet で転移学習

先日書いた物体認識は、

ml5.js で MobileNetというモデルを

クラウドから読み込んで動いていました。

 

さてそのMobileNetのモデルですが、

そのままでは認識精度がいまいち、

独自のモノの認識ができない、

といった問題があります。

 

今回は、このMobileNetを用いて

転移学習を行うアプリを作ってみました。

 

「転移学習」というのは、簡単にいうと、

既存の認識モデルをベースに改造をしたモデルを作ることです。

使用目的に合わせてカスタマイズする、というとわかりやすいかもしれません。

 

こちらです。パソコン用。

なお、クリックする前に使い方を説明しておきます。

クリックすると、パソコンのWebカメラにアクセスし、画面に映像を表示します。

そのカメラに向かって手で方向を指示します。

8方向ありますので、

それぞれの方向を指さしながら、

画面上の同じ方向のボタンを

それぞれ20回くらいずつ押します。

これで、その方向を示す手の画像を取り込みます。

真ん中の「〇」のボタンは、どちらの方向も指さしていない状態です。

これも、20回くらい押します(もちろん、手はどちらの方向もさしていない状態です)。

その後、画面右下の train ボタンを押すと、転移学習が行われます。

パソコンの性能にもよりますが、数十秒で転移学習が終わると思います。

その後は、指さす向きに応じて、画面のボールが移動します。

 

なお、この転移学習と認識はブラウザ上で行われています。

データがどこかにアップロードされるようなことはありませんのでご安心ください。

 

追記:

このアプリは手の画像でなくても転移学習できます。

試しに、「顔の向き」で転移学習をしてみたところ、うまく動きました。

バスケット分析

最近、POSレジのデータをもとに

バスケット分析をしました。

 

バスケット分析は、

アソシエーション分析とも呼ばれ、

買い物カゴに何と何が一緒に

入っていることが多いのかを

分析する手法です。

 

商品分析の手法(ABC分析、アソシエーション分析)

の説明がわかりやすいです。

 

さて、今回このバスケット分析をPython3で行いました。

その時の備忘です。

 

ーーーーー

バスケット分析に使用するライブラリは、

orange3とorange3-assoiate 。

 

pip3 install orange3

pip3 install orange3-associate

で各ライブラリをインストールする。

 

分析するデータは、

以下のような形式でファイルに保存しておく。

 

A,B,C

A,C

B,C,D

D,E,A

 

1行に1つの買い物カゴの中身を書く。

商品は”,”で分ける。

拡張子は.basket

 

ファイル名を data.basket とした場合、

以下のようなコードで分析できる。

 

import sys
import Orange
from orangecontrib.associate.fpgrowth import *tbl = Orange.data.Table(“data.basket”)

X, mapping = OneHot.encode(tbl)

itemsets = dict(frequent_itemsets(X, 5))

rules = association_rules(itemsets, 0.7)

def decode_onehot(d):
items = OneHot.decode(d, tbl, mapping)
return list(map(lambda v: v[1].name, items))

for P, Q, support, confidence in rules:
lhs = decode_onehot(P)
rhs = decode_onehot(Q)
print(f”lhs = {lhs}, rhs = {rhs}, support = {support}, confidence = {confidence}”)

 

 

MobileNet モデルで物体認識

AIプログラミングの勉強記:

Javascript で物体認識。

PCでどうぞ↓

https://snmc.jp/AI/ml5_image_classifier/

スマホでは動作しないかもしれません。

 

Javascript で動いています。

 

認識モデルは MobileNet です。

MobileNetは、ImageNet(http://www.image-net.org/) の

15万枚以上の画像で学習したモデルで、

ブラウザにダウンロードして使えるように

小さくしてあるものです。

(小さくしてあるためか、認識精度は低い感じがします)

 

参考:日経ソフトウェア2019年5月号

Deep Autoencoder でMNISTを学習

Deep Autoencoder を用いてMNISTの学習を行ってみました。

 

エンコーダーは724次元→128次元→64次元→32次元

デコーダーは32次元→64次元→128次元→724次元

最適化の方法は adadelta

損失関数は binary crossentropy

なお、畳み込みなし。

学習データはMNIST(学習用60,000個、評価用10,000個)

 

結果:

(以下の画像は上段が入力画像、下段が出力画像です)

初期段階(epoch=1)

 

epoch=10

 

epoch=100

 

学習が進みにしたがい、Autoencoderの再現がうまく行くようになっている様子がわかります。