数値解析系

2017年12月16日 (土)

GTC Japan 2017に参加しました

12月13日に、NVIDIAが主催する「GPU Technology Conference Japan 2017」に参加してきました。

Img_0152

例によって、当日朝に名古屋から新幹線で東京に向かうんですが、朝からいきなりこういうものに遭遇。

14番線に明かりの消えた新幹線が居座っていて、東京方面は15番線のみで発着していました。

これ、前日(12月12日)に台車亀裂で重大インシデントに認定された、あの新幹線です。

Img_0154

朝からいきなりトラブル車両を目にするわけですが、それにしてもこの日は富士山がきれいでした。

Img_0160

さて、GTC Japan 2017の会場はこのフジテレビ・・・

Img_0161

ではなくて、その斜めお向かいにあるヒルトンお台場。

Img_0165

会場に到着。

実はGTC Japan 2017は前日の12月12日から行われていたんですが、この日は用事があって参加できず。13日のみ参加しました。

Img_0171

2日目となる12月13日は基調講演からスタート。登壇するのはジェンスン・ファンCEO。創業者自らが登壇して、NVIDIAの取り組みを話してくれます。

今やGPUといえばAI。ディープラーニング用にGPUを使うのは当たり前のこととなりつつあり、私も「GeForce GTX 1050Ti買ってディープラーニングを加速してみた: EeePCの軌跡」にある通り、恩恵を受けております。

Img_0183

講演では、発表されたばかりのTITAN Vの威力を見せつけておりました。まずはこれ。CPUのみで訓練を行った場合。毎秒5枚程度ですが・・・

Img_0180

TITAN Vでは毎秒1000枚!200倍以上の速さです。

このTITAN Vが日本で発売されると発表されてましたが、時期や価格は未定。アメリカでは2999ドルと言ってましたね。

Img_0227

日本なので、日本のAI字状の話もいくつか出ていました。これはコマツの話。

建機の制御や工事計画などで、AIを活用しようとしているようです。

Img_0239

さて、会場の様子ですが、どこに行っても人だらけ。とにかく、人が多い。

Img_0240

そんな中でも、ちゃっかり展示物をチェックしていました。

これはHPのワークステーション。11月に出たばかりの新型です。

Img_0265

画像認識系の展示をやってる企業は多かったですが、これはその中でも一番気になった事例。

単眼カメラで物体と距離を推定するというもので、認識された矩形の上に、距離が書かれていました。

結構混んだ会場で物体認識をさせているので、どこの画像認識デモ機も人物を示す矩形だらけでしたね。

Img_0299

中にはサーバーのラックを持ち込むところも。これは富士通のディープラーニング用オンプレサーバー”Zinrai”です。

Img_0339

会場では、なぜかクリスピードーナツが配られてました。なかなかおいしかったです、このドーナツ。

そういえば、写真に撮り忘れましたが、GPU搭載の組み込み系ボードPCの”Jetson TX2”が38600円で売られてましたね。通常9万円ほどですから、かなりお得。意外と買ってる人、多かったです。

Img_0284

NVIDIAのコーナーでは、こんなものが展示されてました。これはコマツの建機のコクピット部分を再現した模型のようです。他にも自動巡回ドローンや、サッカーをするロボット、サラダを盛り付けるロボットアームなどが展示。

さて、会場ではいくつか発表がありました。私が聞いたのは、Project MARS(100万人の火星都市をVRで作るプロジェクト)、ドコモのAIタクシー(タクシーの需要予測AI)、機械学習による視覚情報理解(判別器をブラウザのみで動かす、ディープラーニング用3Dデータにポリゴンを使う、BCラーニングというものを使うと精度が上がることの考察)、そして東大の松尾豊先生の「ディープラーニングを日本の産業競争力につなげるために」という講演です。

Img_0360

基本的にどの講演でも、ディープラーニングを理解している人向けの話がほとんどでした。CNN、RNN、オートエンコーダという概念は当たり前のように使われていて、それをベースにこんなことをやってます・・・的な話方です。

ですが、会場にどれくらいその中身を理解できている人がいるんだろうか・・・私を含めて、かなり怪しい人が多いんじゃないかなぁと。

なお、個人的に一番関心を引いたのは、上の「BCラーニング」というやつです。

通常、教師データとして「犬」の写真を使ったとすると、教師信号として「犬:1.0」というのを与えます。ところがBCラーニングでは「犬:0.7、猫:0.3」のような教師信号と、犬と猫を7:3で合体した画像を使うそうです。

この混ぜ方がまた難解で、なんでも画像を「波」にして合成するんだそうですが・・・ただ混ぜちゃダメなの?

で、このBCラーニングを使うと、通常のディープラーニングよりも認識精度が向上するという結果が得られるそうです。なんでそうなるのか?という話でした。

いや、BCラーニング、やってみたいです。画像の合成方法がわかれば、私にもできそうですね。

Img_0450

松尾豊先生のお話は、ディープラーニングにおける今の技術の現状、特に”深層強化学習”について言及されてました。深層強化学習を使った事例というのは増えつつあるものの、明確なモデルがまだ確立されていないとのこと。そのあたりの話をいきなりしてきます。もうディープラーニングの中身は知っていて当たり前。

という一方で、「ディープラーニング協会」を立ち上げて、上のような検定を作ったり、講座を開いたりという活動を進めているようです。とにかく、人材を育てるということに熱心なご様子でした。

Img_0415

以前も聴いたのですが、松尾豊先生のやりたいディープラーニングを使った30のことというのがあって、これを”Deep30”と呼んでいます。

”Deep 牛”というのは、牛丼の盛り付けから食洗器へのセットまでを可能にするロボットを配置した牛丼屋を作って、ワンオペならず”ゼロオペ”を目指すというもの。

明らかにどこかの牛丼チェーン店への当てつけのような構想ですが、これをやろうとすると正確にお皿を認識してつかむロボットを作らないとだめですし、それを行うためにディープラーニングとロボットを融合する必要があるとのこと。

でもこれができれば、食品産業というビッグなビジネスに革命をもたらすということで、大変な利益が期待できるとおっしゃってます。

そんな勢いのものが30個も出てきます。

私もやってみたいですね、この”Deep○○”ってやつ。何か面白そうなもの、ないでしょうかね?最近毎日考えてます。

Img_0455

帰りはこんな弁当を食べながら帰宅。とにかく人が多くて、おまけに立ち見になる会場が多くて疲れました。

Img_0458

戦利品です。

ディープラーニングばかりでなく、ワークステーションはストレージなど、今の仕事でも役立つ情報も盛りだくさんでした。また来年にでも、行きたいですね。

NVIDIA・ Jetson・ TX2 開発者キット

2017年12月 9日 (土)

”進入禁止”と”天下一品”はディープラーニングで識別できるか!?

こんなツイートを見かけたので。

うちにあるディープラーニングコードで、”進入禁止”と”天下一品”を識別できるか!?

気になったので、やってみました。

※ この記事は、某H社さんの機能を否定するものではありません。あらゆる場面での画像認識は難しいです。ほんとに。

精度を上げようと思ったらいくらでもあげられるんですが、上記の状況になるべく合わせるように以下のような条件でディープラーニングしました。

・ ディープラーニングの学習時の画像サイズは56×56

・ 教師データは、写真中に一部だけ写ったものをなるべく使用(画像一杯に移った高解像度な”進入禁止”、”天下一品”の画像はなるべく使わない)

Ten_ichi01

こんな感じに、画面のごく一部に写ったそれぞれのマークを取得します。

Ten_ichi02

ちょっと困ったのは”進入禁止”のマーク取得。

上のように、写真じゃないものならたくさん引っかかるんですが、写真に写った進入禁止の標識はなかなかありません。

おかげで、300枚の写真を集めて、得られたのは26枚。

Ten_ichi03

一方の”天下一品”の看板はたくさんありました。ここから使えそうなものだけを選び、大体40枚くらい集めました。

Ten_ichi04

集めた画像から、それぞれ3枚づつを抜き取り、さらにそのデータを左右反転した画像を作って2倍にします。

それから上のようにディープラーニングを実行。

300 epochがものの3分ほどで終了。低解像度なので、軽いです。

Ten_ichi05

で、テスト画像を使った結果。

結論から言うと、進入禁止3枚はすべて”進入禁止”で認識、一方”天下一品”マークの3枚は、1枚しか正解しませんでした。

全体の認識率は66%ですが、天下一品だけ見ると33%。

やっぱり、低いですね。

Ws000000

最近、こういう可視化ツールを作ってみました。

画像認識するとき、いったいどの特徴を拾っているのか?を見える化。赤いところほど注目している部位です。

正直いって、両者にあまり認識パターンの違いがありません。つまり、分けづらいということのようです。

もちろん、高解像度にして深層化すればかなり認識率は上げられますが、車に搭載するレベルのカメラで、かつ街中で小さく現れるレベルでは、この結果のようにほとんど認識できないのでは?と思います。

わざわざこの2者だけを識別する学習器を作ってこれですから、現実には難しそうです。

ということは、自動運転が実用化した時代に”天下一品”の看板を見た自動運転車はどうなるんでしょうか?気になりますね。

おやつカンパニー ベビースタードデカイラーメン 天下一品 こってり味 1箱(12袋)

2017年12月 8日 (金)

Amazonがディープラーニング向けビデオカメラ”AWS DeepLens”を4月に249ドルで発売へ

最近は猫も杓子もディープラーニングという時代ですが、お手軽にディープラーニングを始められるキットをAmazonが発売するようです。

Amazon、ディープラーニング向けビデオカメラ「AWS DeepLens」を249ドルで発売へ - ITmedia エンタープライズ

”AWS DeepLens”と呼ばれるこのキット、TensorFlowやCaffe2もサポートし、お手軽に画像認識を試せるAIキットです。

名前の通り、AWS(Amazon Web Service)で利用することが前提のやつなんでしょうね。

開発者向けのキットのようですが、あらかじめAWSが提供する画像認識用の学習済みモデルを入手し利用できるようです。発表段階では、猫と犬の個体を認識するものなど7つのモデルが用意されているとのこと。

スペック的には、Atomプロセッサ搭載でメモリ8GB、ストレージは16GB(SDカードで増量可能)。

これ単体で学習するのはちょっと辛そうですね。やはりAWS利用前提のようですが、手軽さという点が最大の売りですね。日本でも発売されるんでしょうか?

CurieNeurons Kit - ニューラルネットワーク ディープラーニングキット

2017年12月 4日 (月)

”人工知能”特集のニュートン 2018年1月号を買いました

実は、ディープラーニングについて説明する機会というのがありまして、どうやって説明するのがいいかいろいろ考えていたのですが。

まさにうってつけの資料を見つけたので、買ってみました。

Img_0142

「ニュートン」2018年1月号です。

Img_0143

表紙にもある通り「ゼロからわかる人工知能」特集が組まれてました。

人工知能の中でも、主に「ディープラーニング」の説明が中心です。

その一つの事例として、画像認識の説明が載っていたのですが、

Img_0144

「イチゴ」をこうやって認識しているよ!という事例で、畳み込みニューラルネットワーク(CNN)を図解していました。

ニュートンという雑誌の凄いところは、難しい科学的・技術的用語を、わかりやすい図を使って説明しているところ。まさしくそういう図が載っています。

でも、まさかこのブログで全部載せるわけにはいかないので、気になる方は是非お買い上げください。

特に上司から「人工知能・AIってやつを調べろ!」などと無理難題を言われている方は、これはなかなかいい資料だと思います。

Img_0145

ところで、こんな付録がついてました。

カレンダーですが、ハッブル宇宙望遠鏡がとらえた「イータカリーナ星雲」の中にある「神秘の山」っていう部分だそうです。星の赤ちゃんがいるらしいですね。

買ってはみたものの、飾る場所がないですね・・・どうしようか。

なぜかニュートンを買うと、次男が大喜びで見ます。中身はともかく、絵や写真が面白いようです。ちょっとグロテスクで神秘的な海洋生物の写真もあったんですけど、きゃあきゃあいいながら見てました。あれの何が面白いんでしょうか?よくわかりませんが、子供も楽しめる雑誌ということで、おすすめです。

2017年11月15日 (水)

長野県伊那市でドローンを使った鹿検知コンペを実施

鹿の被害が6億円にも及ぶという長野県伊那市では、ドローンを使った鹿検知のコンペを行ったようです。

獣害に苦しむ自治体を救え! 伊那市「ドローン×鹿検知コンペ」密着取材 | ROBOTEER

鹿の被害だからといって、馬鹿にはできないようです。農作物の肥大のみならず、木々の皮を食べるなどにより南アルプスの表土がむき出しになって、最悪土砂崩れを引き起こしてしまうみたいです。

鹿の個体調整を行うために、鹿がどこにいるのかを把握するためにドローンを使おうと思い立ったようで、そのドローンと物体検出を組み合わせて、いったいどれくらい鹿を発見できるかを競うコンペを行ったようです。

山中には鹿のはく製が置かれており、それがどこにあるかを探させるというもので、いくつかのチームがこのコンペにトライ。ディープラーニングによる物体検出を使っているところが多かったようですね。

ただ、コンペ自体は天候悪化により途中で中止されたようです。最近はドローンの事故がクローズアップされており、つい先日も私の実家のある岐阜県大垣市で子供が怪我をする事故が起きたばかり。安全最優先で行われているようです。

そういえば、以前聞いたとあるAIベンチャー企業の発表にも、ドローンを使った畑の病害虫監視システムというのがありました。実際に病害虫に侵されているところだけ農薬をまくようにするため、ドローンで定期的にスキャンするというものでした。

人の真上を飛ばすのはあまりよくないですが、こういう場所であればむしろ便利な活用法があるドローン。次はぜひちゃんとした天候のもとで行われて欲しいものです。

Holy Stone ドローン HDカメラ付き iPhone&Android生中継可能 高度維持機能 2.4GHz 4CH 6軸ジャイロ Wi-Fiカメラ FPVリアルタイム 国内認証済み モード2 HS200 (レッド)

2017年11月13日 (月)

TensorFlow+RNNを使ったマリオカート専用AI”MariFlow”

マリオカート、昔やりましたね。そのマリオカートをクリアするための専用AIが開発されたようです。

TensorFlow×マリオカートでキノコカップ優勝も可能なリカレントニューラルネットワーク「MariFlow」を開発 - GIGAZINE

TensorFlowを使って作ったため、名前が”MariFlow”。なんとも短絡的な名前ですが、15時間分の動画を使って学習した結果、50ccクラスで優勝するほどの成長を遂げたというから、なかなかのAIのようです。

ここで使われているリカレントニューラルネットワーク(回帰型ニューラルネットワーク)とは、時系列や文章といった前後のつながりを学習するのに適したタイプの手法で、こういうゲームのような手順的なものを学習させるのに効果的です。

以前に私もRNN(LSTM)で株価予測をやって見ようとして、失敗してますね。まあ、勉強不足ってことで。

最近のディープラーニングの発達には驚くべきものがありますが、単に最先端の技術がすごいというより、応用分野のすそ野の広さにも見るべきものがありますね。医療や自動運転、金融からゲームまで、ほんと幅広く使われています。

このゲームの自動プレイには少し関心があります。応用次第では、仕事の自動化にも使えそうです。

トミカ マリオカート8 マリオ

2017年11月10日 (金)

TensorFlowで畳み込みニューラルネットワークの認識を可視化する

ディープラーニングというのは非常に精度が高くて素晴らしい技術なんですが、学習結果がブラックボックス化されていて何が行われているのかわからない、という声もあるのは事実。

ある意味どうしようもないんですけど、せめてちょっとくらいは可視化できないものか?

以下の記事を参考に、トライしてみました。

畳み込み層とプーリング層を画像表示してみるてすと - Qiita

ここで紹介するコードは、以下の記事で作ったコードで学習させたものを使っています。

”けものフレンズ”動画顔検出器をディープラーニング+OpenCV物体検出で作る(転移学習&メモリ不足対策): EeePCの軌跡

ただ、教師データは「けもフレ」ではなくて、以下の記事で書いた「お城」を使ってます。

TensorFlowで”日本のお城”を識別させてみた: EeePCの軌跡

では、まずコードを紹介しておきます。

◆cnn_png_56.py

#!/usr/bin/env python

import glob
import os
import sys
import numpy as np
import tensorflow as tf
import cv2
import math
from PIL import Image

path=os.getcwd()+'/analysis/'
file_list=os.listdir(path)

i = 0
label_name = []

flags = tf.app.flags
FLAGS = flags.FLAGS
flags.DEFINE_string('label','label.txt','File name of label')

f = open(FLAGS.label,'r')
for line in f:
  line = line.rstrip()
  l = line.rstrip()
  label_name.append(l)
  i = i + 1

NUM_CLASSES = i
IMAGE_SIZE = 56
IMAGE_PIXELS = IMAGE_SIZE*IMAGE_SIZE*3

test_image = []
test_filenm = []

for file in file_list:
    test_filenm.append(file)

    img = cv2.imread('./analysis/' + file )
    img = cv2.resize(img, (IMAGE_SIZE, IMAGE_SIZE))
    test_image.append(img.flatten().astype(np.float32)/255.0)

test_image = np.asarray(test_image)

def weight_variable(shape):
  initial = tf.truncated_normal(shape, stddev=0.1)
  return tf.Variable(initial)

def bias_variable(shape):
  initial = tf.constant(0.1, shape=shape)
  return tf.Variable(initial)

def conv2d(x, W):
  return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

def max_pool_2x2(x):
  return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
                            strides=[1, 2, 2, 1], padding='SAME')

def save_image(file_name, image_ndarray, cols=8):
    # 画像数, 幅, 高さ
    count, w, h = image_ndarray.shape
    # 縦に画像を配置する数
    rows = int((count - 1) / cols) + 1
    # 復数の画像を大きな画像に配置し直す
    canvas = Image.new("RGB", (w * cols + (cols - 1), h * rows + (rows - 1)), (0x80, 0x80, 0x80))
    for i, image in enumerate(image_ndarray):
        # 横の配置座標
        x_i = int(i % cols)
        x = int(x_i * w + x_i * 1)
        # 縦の配置座標
        y_i = int(i / cols)
        y = int(y_i * h + y_i * 1)
        out_image = Image.fromarray(np.uint8(image))
        canvas.paste(out_image, (x, y))
    canvas.save('images/' + file_name, "PNG")

def channels_to_images(channels):
    count = channels.shape[2]
    images = []
    for i in range(count):
        image = []
        for line in channels:
            out_line = [pix[i] for pix in line]
            image.append(out_line)
        images.append(image)
    return np.array(images) * 255

images_placeholder = tf.placeholder("float", shape=(None, IMAGE_PIXELS))
labels_placeholder = tf.placeholder("float", shape=(None, NUM_CLASSES))
keep_prob = tf.placeholder("float")

x_image = tf.reshape(images_placeholder, [-1, 56, 56, 3])

with tf.name_scope('A_conv1') as scope:
    W_conv1 = weight_variable([3, 3, 3, 32])
    b_conv1 = bias_variable([32])
    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)

with tf.name_scope('A_pool1') as scope:
    h_pool1 = max_pool_2x2(h_conv1)

with tf.name_scope('A_conv2') as scope:
    W_conv2 = weight_variable([3, 3, 32, 64])
    b_conv2 = bias_variable([64])
    h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)

with tf.name_scope('A_pool2') as scope:
    h_pool2 = max_pool_2x2(h_conv2)

with tf.name_scope('A_conv3') as scope:
    W_conv3 = weight_variable([3, 3, 64, 128])
    b_conv3 = bias_variable([128])
    h_conv3 = tf.nn.relu(conv2d(h_pool2, W_conv3) + b_conv3)

with tf.name_scope('A_pool3') as scope:
    h_pool3 = max_pool_2x2(h_conv3)

with tf.name_scope('fc1') as scope:
    W_fc1 = weight_variable([7*7*128, 1024])
    b_fc1 = bias_variable([1024])
    h_pool3_flat = tf.reshape(h_pool3, [-1, 7*7*128])
    h_fc1 = tf.nn.relu(tf.matmul(h_pool3_flat, W_fc1) + b_fc1)
    h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)

with tf.name_scope('fc2') as scope:
    W_fc2 = weight_variable([1024, NUM_CLASSES])
    b_fc2 = bias_variable([NUM_CLASSES])

with tf.name_scope('softmax') as scope:
    y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)

with tf.Session() as sess:

    saver = tf.train.Saver()
    sess.run(tf.global_variables_initializer())
    saver.restore(sess, "./model.ckpt")

    feed_dict = {images_placeholder : test_image, keep_prob: 1.0}
    tag = "test"

    h_conv1_result = h_conv1.eval(feed_dict=feed_dict)
    for i, result in enumerate(h_conv1_result):
        images = channels_to_images(result)
        save_image("1_%s_h_conv1_%02d.png" % (tag, i), images)

    # プーリング1層
    h_pool1_result = h_pool1.eval(feed_dict=feed_dict)
    for i, result in enumerate(h_pool1_result):
        images = channels_to_images(result)
        save_image("2_%s_h_pool1_%02d.png" % (tag, i), images)

    h_conv2_result = h_conv2.eval(feed_dict=feed_dict)
    for i, result in enumerate(h_conv2_result):
        images = channels_to_images(result)
        save_image("3_%s_h_conv2_%02d.png" % (tag, i), images)

    # プーリング2層
    h_pool2_result = h_pool2.eval(feed_dict=feed_dict)
    for i, result in enumerate(h_pool2_result):
        images = channels_to_images(result)
        save_image("3_%s_h_pool1_%02d.png" % (tag, i), images)

    h_conv3_result = h_conv3.eval(feed_dict=feed_dict)
    for i, result in enumerate(h_conv3_result):
        images = channels_to_images(result)
        save_image("4_%s_h_conv2_%02d.png" % (tag, i), images)

    # プーリング3層
    h_pool3_result = h_pool3.eval(feed_dict=feed_dict)
    for i, result in enumerate(h_pool3_result):
        images = channels_to_images(result)
        save_image("5_%s_h_pool3_%02d.png" % (tag, i), images)

実行方法は単純に、

> python cnn_png_56.py

です。

このコードと同じ階層に”analysis”というフォルダを作り、その中の画像を読み込んで可視化を行ってくれます。この辺りの動作は過去の”cnn_app_56.py”と同じ。

ただし、上記コード中の”saver.restore(sess, "./model.ckpt")”の中の”model.ckpt”は、各自の学習済データのファイル名に合わせて変えてください。

これを実行した結果ですが、7種類のお城を判別する学習済データ(56×56版)を読み込み、以下の画像ファイルを読み込ませました。

5_oosaka03

大坂城ですね。このお城を学習済みデータに通すとどうなるのか?

このコードはConv層+Pool層が3つに結合層2つ、Softmaxが一つという階層になってます。

このうち、最初のConv層を通ってきた画像がこちら。

1_test_h_conv1_17

・・・わかりにくいですけど、なんとなくお城って感じの形が見えます。

Conv層の後の画像とは、要するに3×3のフィルターを通した後の画像が出てきているようです。

ここで浮き出てくるものが、この画像のどの部分の特徴をとらえようとしてるのか・・・という解釈でいいみたいです。

ここが真っ黒だと何も見ていないのと同じことになってしまうみたいですが、一応真っ黒という部分はありませんね(限りなく黒はたくさんありますけど)。

これが最後の3つ目のPool層を通るとどうなるのか?

5_test_h_pool3_17

・・・ますますなんだかわかりませんね。

この層では7×7の画像×128個になってます。なんとなくお城っぽい形をマクロにとらえているようですが・・・

可視化したものの、どう解釈すればいいのかわかりづらいところです。

0_okazaki01

さて、この岡崎城の画像は誤認識されやすい画像です。

これを通してみると、どうなるんでしょうか?

1_test_h_conv1_00

1層目のConv層ですが、なんというかノイズのような画像が多いですね。あまりお城には見えません。

もしかして、岡崎城の認識率が悪いのは、そのせいかもしれません。

わかったような、わからないような結果ですが、会社ではこのコードを改良して使っています。どのあたりの特徴をとらえて判別しているかが大体わかるため、学習の進度を知るために一応参考で使っています。

もうちょっと見やすくする方法があるといいのですが、今のところこれがましな方のようです。

ディープラーニングを可視化したいと思っている方は、参考になさってください。

初めてのTensorFlow 数式なしのディープラーニング

2017年11月 9日 (木)

AI特集のInterface 12月号を買いました!

3か月に一度くらいはディープラーニング特集を行っているInterfaceですが、12月号もAIの特集をやってました。

Img_3138

今回の特徴は、

(1) ディープラーニング以外のAIで使われる機械学習の手法を紹介している

(2) ディープラーニングで最も一般的な畳み込みニューラルネットワークの説明にある程度紙面を割いていること

(3) SONYが提供しているGUIでディープラーニングのコードが作れる「Neural Network Console」のインストールから使い方までを解説している

この3点でしょうか。

Img_3143

ディープラーニングの代表的な3つの手法についても解説が載ってます。わかりやすいですね。

Img_3139

で、これが「Neural Network Console」の目次部分。実際に独自データを使って学習するところまでが解説されてました。それはまた後ほど。

Img_3140

さて、ディープラーニングといえばやっぱり”TensorFlow”。Windowsでも使えて便利なコードですから、ある程度のレベルの人はTensorFlowを使ってみるといいでしょうね。

なにせ、Raspberry Piでも使えます。TensorFlow。上のタイトルにある通り、コードの豊富さはダントツです。

Img_3144

機械学習の一般的な手法が一通り載ってました。

SVM(サポートベクターマシン)や回帰式、決定木やk近傍法などなど、一般的によく聞かれる機械学習法が載ってました。

他にも、ディープラーニングで使われる用語についての一覧なんてものもありました。ちょっと数式や数値の表が載っていて、若干わかってる人向けの項目でしたけど、私には役に立ちそうです。

Img_3141

いつも通り、各章でプログラムコードを交えて紹介されてますが、今回の目玉はやっぱりこの”Neural Network Console”じゃないでしょうか。

インストールから基礎的な使い方、応用編まで幅広く載ってる風でした。

Img_3142

詳細はぜひ本書を手に取ってご覧ください。今後ディープラーニングをやってみたいという方は、一冊持っておいて損はないでしょう。

さて今回のInterfaceですが、今までディープラーニングに手を出してはみたものの挫折してしまったという人向けの内容かなぁと思います。内容が浅く広くというか、用語の解説やGUIで使えるツールの使い方に重きをおいてます。

他の雑誌に比べて、明らかにこの雑誌の編集者には”分かってる人”がいますね。レベルが違います。

ちなみに、来月は”Python”特集をやるようです。

Pythonを始めてみたけれども挫折しちゃった・・・という人は、11月25日発売のこの1月号が楽しみですよね。

Interface(インターフェース) 2017年12月号

2017年11月 6日 (月)

ぐにゃぐにゃ文字をも突破するAIが登場か!?

ここのコメント欄でも時々出てくる、機械では読みにくいあやふやなアルファベット文字を表示してボットでないことを確認するあのセキュリティチェックの画面。

CAPTCHA認証というそうですが、あれを結構な確率で突破する技術というものが、発表されたそうです。

「私はロボットではありません」AIで突破 他のディープラーニングより“300倍”効率的なモデルが登場 - ITmedia NEWS

少数のサンプルからでも学習できる人間などの脳を参考に作られた「再帰的皮質ネットワーク」というのを使うと、ディープラーニングの300倍の効率で学習できて、上のように重なった斜めな文字でも読めるようになるんだとか。

単語であれば66%の確率で解読できるそうです。2回トライできれば突破できてしまいますね。

こういう技術は使い方次第。セキュリティ突破に使われることを中心に書かれているため、とんでもない技術に思えますけど、少ない教師データで学習できるなんて、機械学習に取り組んでいるものとしてはとても画期的な技術。私も具体的な中身をぜひ知りたいところですね。

初めてのTensorFlow 数式なしのディープラーニング

2017年10月29日 (日)

Neural Compute Stick+Raspberry Piを試した記事

先日ディープラーニング用USBデバイス”Movidius Neural Compute Stick”が入荷: EeePCの軌跡の記事でも書いた”Neural Compute Stick”とRaspberry Pi 3とを組み合わせて動かしてみた記事が、Switch Scienceのブログで紹介されてますね。

Neural Compute Stickを試してみよう | スイッチサイエンス マガジン

これで知ったんですが、CaffeだけでなくTensorFlowもサポートされてるんですね。

ただしこれとTensorFlowをRaspberry Pi 3で使うには少々注意が必要なようです。この記事を読み進めると、なんとかなりそうです。

この記事では、このNeural Compute StickとRaspberry Piとカメラを使って物体認識を挿せているようです。

その動画がこちら。実際より4倍速らしいですが、4倍かかっているとしてもなかなかの速さですね。

Raspberry PiとCaffeの組み合わせを使ったサンプルプログラムのようです。学習データはimagenetのやつでしょうか。

独自データを使って試してみたいですね。これを見ちゃうと、ちょっと欲しくなりますね、このStick。

Raspberry Pi3 Model B ボード&ケースセット 3ple Decker対応 (Element14版, Clear)-Physical Computing Lab

より以前の記事一覧

当ブログ内検索

  • カスタム検索

スポンサード リンク

ブログ村

無料ブログはココログ