数値解析系

2019年2月20日 (水)

SONY Neural Network Consoleで独自データの学習・推論をやらせてみた

以前から気にはなっていたのですが、ようやく使ってみることにしました、SONYのNeural Network Console。

GUIでニューラルネットワークが組めて、簡単にディープラーニングが体験できるという優れもの。実は、Kerasなどと比べると計算速度が遅いので、あまり実用には向いていないかもしれませんが、簡単な画像認識に使ってみたり、あるいは教育用にはうってつけなツールです。

てことで、独自データで組んでみるところまでをやってみます。

まずは、以下のサイトから入手します。

Neural Network Console

「Windowsアプリで始める」をクリックすると、メールアドレスを聞かれます。そこにメアドを入れると、ダウンロードページのリンクが帰ってくるので、それに従ってダウンロードします。

すると「neural_network_console_130.zip」というのが落ちてくるので、それを解凍。

(130のところはバージョンナンバー。私が落としたのは1.3.6897.7956でした)

まずはインストール・・・ですが、方法はとっても簡単。

ZIPファイルを解凍して、出てきたフォルダを適当なところに置くだけ。デスクトップでも可。

これで、完了です。

ただし、全角文字やスペースの入ったフォルダの下にはおけません。このため、ユーザー名に全角文字を使っている人は、デスクトップは不可(絶対パスに全角文字が入るため)。また、「Program Files」もダメ。

その場合は、例えばCドライブの下に「neural_network_console_130」フォルダを作り、そこに入れるのがいいでしょう。

Nnc01

フォルダの中は、こうなっているはずです。「neural_network_console.exe」をダブルクリック。

最初は規約だの環境だのをいろいろと聞かれるはずです。

Nnc02

で、こんな感じの画面にたどり着くはずです。

真ん中には、サンプルデータがいくつか入っています。

とりあえず動かしてみたい方は、チュートリアル(チュートリアル:サンプルプロジェクトを用いた学習 – Docs - Neural Network Console)を参考に動かしてみるといいと思います。

ここでは、いきなり独自データを使います。

さて、まずは「教師データ」を準備します。

私の過去のディープラーニング用コード(TensorFlowの画像認識プログラムをKerasに書き換えてみた: EeePCの軌跡等)と似てますが、SONY Neural Network Consoleは、ラベルごとにフォルダ分けした画像データを読み込んで、教師データと評価用データとして使うようになっています。

まずは、それを準備。

私は過去に作った(TensorFlowで”日本のお城”を識別させてみた: EeePCの軌跡参照)”お城”データを使いました。

まず、私の今回のテストのフォルダ構成ですが、以下のようにしました。

【学習環境】

Neural Network Console:デスクトップ\neural_network_console_130

(パスは”C:\Users\{半角小文字のユーザー名}\Desktop\neural_network_console_130”)

【教師データ置き場と推論コードの置き場】

C:\linux\nncs\

まず、C:\linux\nncsに「data」というフォルダを作り、7種類のお城のデータを入れます。

Nnc03

本当は「inuyama」(犬山城)、「kumamoto」(熊本城)のように長い名前だったんですが、どういうわけか長い名前だと読みません。5文字程度に抑えた方がよさそうです。

中身はこんな感じ。

Castle02

フリーソフトVIXなどを使い、全てのフォルダ内の画像サイズを64×64にしておいてください。

また、画像ファイル以外を入れないよう注意してください。

Neural Network Console側でこのデータセットを格納するフォルダをあらかじめ作ります。

私は「C:\Users\{半角小文字のユーザー名}\Desktop\neural_network_console_130」の下に「dataset_out」というフォルダを作っておきました。

これで、教師データの準備は完了。

Neural Network Consoleへ行き、左端の「DATASET」をクリックし、その近くにある「+Create Dataset」をクリックします。

Nnc04

こんな画面が出ます。私の環境では以下の項目を書き換えました。

・Source Dir: C:\linux\nncs\data

・Output Dir: C:\Users\{半角小文字のユーザー名}\Desktop\neural_network_console_130\dataset_out

・Output Color Ch: 3(RGB)

・Output Width: 64

・Output Height: 64

・Output file 1: の後ろのRatio(%): 90

・Output file 2: の後ろのRatio(%): 10

これで、教師データの作成が完了。学習用が90%、バリデーション用が10%に自動で割り振られるはずです。

ちなみに、DATASETの一覧に「train.csv」「test.csv」というのができるはずです。

例えば「train.csv」をクリックすると、こんな画面に。

Nnc05

IndexNo.と画像の横、そしてラベル名(ここでは0~6)が割り振られます。

ここでは、

0:犬山城
1:熊本城
2:松本城
3:名古屋城
4:大垣城
5:岡崎城
6:大坂城

となってました。

これ、推論の時に使うので、事前に調べておいてください。

教師データができたので、今度はニューラルネットワークを作ります。

左端の「PROJECT」をクリックし、「+New Project」をクリックします。

Nnc06

こんなまっさらな画面が出てくるはずです。

まずはここでこのからプロジェクトを保存しておきます。上のディスクのアイコンをクリックすると、保存できます。

私は「C:\Users\{半角小文字のユーザー名}\Desktop\neural_network_console_13」フォルダの下に「castle」という名前のフォルダを作り、「castle.sdcproj」という名前で保存しました。

ではいよいよ、ここにニューラルネットワークを作っていきます。

Nnc07

まずは、「IO」-「Input」をぴゅーっと引っ張ってやります。

こんな感じに、ブロックができます。

Nnc08

ですが、このままでは使えません。

左下にある「Layer Property」のSizeのところを「1,28,28」を「3,64,64」に変えてやります。

これでRGBの64×64の画像が読めるようになります。

続いて、下の方にある「Basic」-「Convolution」を、さきほどのInputにぶつけるようにドラッグ&ドロップします。

Nnc09

ただし、こいつもデフォルトでは使えません。Layer Propertyをいじります。

Nnc10

私はKernelShapeを「5,5」から「3,3」に、Paddingを「0,0」から「1,1」に変えます。

もしPaddingを「0,0」のままにすると、Convolution層を通るたびに画像サイズが上下左右1ドットづつ小さくなっていきます。これを防ぐために、Paddingに入れた分だけ補正して増やしてやる必要があります。

もしKernelShapeを「5,5」のままにするならば、Paddingを「2,2」とすると画像サイズが小さくならずに済みます。

続いて、「Activation」の「ReLU」をドラッグ&ドロップします。

が、左のメニューからこの「ReLU」が探せなくなっているはず。

どういうわけかこの左メニューはホイールマウスのスクロール機能が効きません。頑張ってマウスでニューラルネットワークの部品の並んだ窓の端にあるバーをつまんで、動かすしかありません。

Nnc11

ReLUはデフォルトのままでいいです。

同様に、「Pooling」-「MaxPooling」をつけます。

Nnc12

で、この後、第2層目、第3層目のConvolution - ReLU - MaxPoolingのセットを作ります。

Nnc13

だたし、

【2つ目のConvolutionのLayer Property】

・OutMaps : 「32」

・KernelShape:「3,3」

・Padding:「1,1」

【3つ目のConvolutionのLayer Property】

・OutMaps : 「64」

・KernelShape:「3,3」

・Padding:「1,1」

としてください。

その下に、「Basic」-「Affine」をつけます。

Nnc14

Layer Propertyの「OutShape」を512としてください。

その下にReLUを付けた後、左の部品メニューのずーっと下にある「Other」-「Dropout」を引っ付けてください。なくてもいいですが、過学習を防ぐため、あったほうが無難です。

Nnc15

最後に、Affine(Layer PropertyのOutShapeをラベル数に、ここでは「7」)、「Activation」-「Softmax」をつけて、最後に「Loss」-「CategoricalCrossEntropy」というのを引っ付けてください。

Nnc16b

これで、完了です。

さて、ここで教師データを選んでやります。

画面の赤丸のある辺りにある「DATASET」をクリックします。

Nnc18

分かりにくい図で申し訳ありませんが、まず左の「Training」を選び、右の斜め上矢印と四角のアイコンをクリックし、そこで現れる一覧から「train.csv」を選びます。

同様に、「Validation」では「test.csv」を選択します。

続いて、画面右上のある「CONFIG」をクリックして、以下のような画面を出します。

Nnc19

ここでは、Max Epoch:を50に、Batch Size:を20、Precision:をHalfとしておきました。

Nnc20

ここでようやく学習開始です。「Training」の下の再生ボタンっぽいのを押しましょう。 

Nnc21a

こんな感じに、なんか学習が進みます。正常なら、エラー率がどんどん減っていくはずです。

終わったら、横の「Evaluation」の再生ボタンを押してみましょう。

Nnc22a

評価用の画像と、その推測ラベルが表示されます。

「Confusion Matrix」というラジオボタンを押すと、各ラベルと全体の正答率が出てきます。

Nnc23

なんと、Accuracyが「1.0」でした!全問正解!たまたまでしょうが、すごい正答率ですね。

さて、今度はこれを使って「推論コード」を作ります。

ここまではノンプログラミングでしたが、推論に関してはそれを使って何かをさせる必要があるため(不良品を見つけて機械を止めるとか、画像を見て機械に仕分けさせるとか)、Pythonのコードに持っていくのがベターかと思われます。

そこで、今回学習させた学習器を使って推論をさせるPythonプログラムの最低限の作り方を書きます。

その前に、まずはWindows上でAnaconda3を使えるようにしておいてください。

SONY Neural Network Consoleで作ったニューラルネットワークとモデルを使うための最低限の準備は、以下の記事を参照。

NNabla(Neural Network Libraries)をWindowsのanaconda(python3)環境にインストール - "BOKU"のITな日常

この記事に加えて、ここではOpenCVを使うため

> pip install opencv-python

も入れておいてください。

ここで設定したAnacondaプロンプトが使えることを前提として、進めます。

まず、先ほど学習の終わったNeural Network Consoleで、左上の「EDIT」をクリックします。

Nnc24

そこでまず一番下のブロック「CategoricalCrossEntropy」を消します。

そのうえで右クリックすると、上のようなメニューが出るので、「Export」-「Python Code」を選択します。

Nnc25

クリップボードにコードが張り付けられた旨が表示されるため、適当なテキストエディタに張り付けてください。

Nnc26

(ここでは、VS Codeに張り付け)

こんな感じに、コードが張り付きます。

その下に、以下のコードを張り付けてください。

import cv2
# load parameters
nn.load_parameters('モデルのパス')

# Prepare input variable
x=nn.Variable((1,3,64,64))

IMAGE_SIZE = 64
im = cv2.imread('推論させたい画像ファイル名')
im = cv2.resize(im, (IMAGE_SIZE,IMAGE_SIZE)).transpose(2,0,1)
x = nn.Variable((1, ) + im.shape)
x.d = im.reshape(x.shape)

# Build network for inference
y = network(x, test=True)

# Execute inference
y.forward()
print(y.d)

赤字の部分を2箇所変えます。

「モデルのパス」のところですが、SONY Neural Network Consoleのプロジェクトを保存したフォルダに「(プロジェクト名).files」というのがあって、その下に日付っぽいフォルダがあり、その下に学習済みモデルが入っています。

Nnc27

こんな感じのファイルがあるはずです。

この中の「results.nnp」というのが、学習済みモデルです。

このパスを上の「モデルのパス」のところに記載してもいいですし、Pythonプログラムと同じ場所において「./results.nnp」としてもいいです。

画像は

これを「test_app.py」と保存します。

これを実行

> python test_app.py

すると、以下のような結果が。

Nnc28

うーん、分かりにくいですよね。

最後に出てくる”[[1. 0. 0. 0. 0. 0. 0.]]”というのが推論結果なんですが・・・

これは、要するに0~7のラベルの内、この画像はラベル0だ!と言っているんです。

ちなみに、推論させた画像はこれ。

2_inuyama01

ちなみに、事前に調べておいたラベルによれば・・・

0:犬山城
1:熊本城
2:松本城
3:名古屋城
4:大垣城
5:岡崎城
6:大坂城

だったので、ラベル0 = 犬山城 ということになります。

つまり、正解!

他にも

3_matumoto01

を入れてみると

Nnc29

ラベル2ということだから・・・松本城!正解です!

という具合に、まあまあの学習モデルができて、しかもPython上で動かすところまで行けました。

サンプルも充実しているので、このNeural Network Console、結構使えそうです。

ソニー開発のNeural Network Console入門【増補改訂・クラウド対応版】--数式なし、コーディングなしのディープラーニング

2019年1月26日 (土)

AI+RPAによるプレスリリース記事自動作成ツール

プレスリリースを自動で生成できるRPAツール・・・いや、こういう記事って、ロボット化できるものなの?

日本初!RPAでプレスリリース記事を自動作成 記事作成時間の8割削減を実現 - CNET Japan

多少の疑問を抱かずにはおられませんが、そういうツールが開発されたようです。

ただし、よく読むとAIと併用しているっぽいですね。ある程度の記事は機械学習的なものが作成し、それをもとに下書きを作って、人間が最後の仕上げをする。

よく考えたら、プレスリリースってわりと決まった文言が使われてるようにも思いますね。やっぱり、自動化しやすいんでしょうかね?

うーん、これさえあれば、このブログ記事ももっと簡単に作れるってことなんですかね?いや、それをやったら、何がしたいのか分からなくなりますけど。

(予約特典付き)いちばんやさしいRPAの教本 人気講師が教える現場のための業務自動化ノウハウ (「いちばんやさしい教本」シリーズ)

2019年1月 8日 (火)

TensorFlowの画像認識プログラムをKerasに書き換えてみた

ずっと以前からやろうやろうと思っていてやれなかったことを、最近ようやくやりました。

TensorFlowで歴代「クラウン」の画像を判別させてみた: EeePCの軌跡」に始まり、「TensorFlowで”日本のお城”を識別させてみた: EeePCの軌跡」や「TensorFlowで「けものフレンズ」の”フレンズ判別器”作ってみた: EeePCの軌跡」で使った、TenforFlow用の画像認識コードを、Keras用に書き換えてみました。

なぜ今さら、Kerasに書き換えたのか?

メリットは2つあります。

(1) コードが見やすい

 

(2) 収束性が安定する

何と言っても、コードが見やすいです。以下に、学習用(cnn_keras_train_56.py)と推論用(cnn_keras_app_56.py)のコードを載せます。(おまけ:可視化用コード cnn_keras_app_56_vis.py も載せました)

【cnn_keras_train_56.py】

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import cv2
import numpy as np
import tensorflow as tf
import tensorflow.python.platform

import keras
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense,Dropout,Flatten
from keras.layers import Conv2D,MaxPooling2D
from keras.preprocessing.image import array_to_img,img_to_array,load_img
from keras import backend as K
from sklearn.model_selection import train_test_split
from keras.models import load_model
from keras.callbacks import ModelCheckpoint

path=os.getcwd()+'/data/'
checkDir=os.getcwd()+'/checkpoints/'
if not os.path.exists(checkDir):
          os.mkdir(checkDir)
class_count = 0
folder_list=os.listdir(path)

for folder in folder_list:

  class_count = class_count+1

NUM_CLASSES = class_count
IMAGE_SIZE = 56

batch_size = 20
epochs = 100

flags = tf.app.flags
FLAGS = flags.FLAGS

flags.DEFINE_string('label', 'label.txt', 'File name of label')

if __name__ == '__main__':

    count=0
    folder_list = sorted(os.listdir(path))

    train_image = []
    train_label = []
    test_image = []
    test_label = []
    X = []
    Y = []

    f = open(FLAGS.label, 'w')
    for folder in folder_list:
        subfolder = os.path.join(path,folder)
        file_list = sorted(os.listdir(subfolder))

        filemax = 0

        i = 0

        for file in file_list:

            i = i + 1

            img = img_to_array(load_img('./data/' + folder + '/' + file,target_size=(56,56)))
            X.append(img)
            Y.append(count)

        label_name = folder + ' ' + str(count) + '\n'
        f.write(label_name)

        count +=1

    X = np.asarray(X)
    Y = np.asarray(Y)
    X = X.astype('float32')
    X = X / 255.0

    Y = np_utils.to_categorical(Y, NUM_CLASSES)

    train_image, test_image, train_label, test_label = train_test_split(X,Y,test_size=0.20)

    f.close()
    print(u'画像読み込み終了')

    input_shape = (IMAGE_SIZE, IMAGE_SIZE, 3)

    model = Sequential()
    model.add(Conv2D(32,kernel_size=(3,3),
                     activation='relu',
                     padding='same',
                     input_shape=input_shape))
    model.add(Conv2D(32, (3,3), activation='relu', padding='same'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Dropout(0.25))

    model.add(Conv2D(64, (3,3), activation='relu', padding='same'))
    model.add(Conv2D(64, (3,3), activation='relu', padding='same'))
    model.add(Conv2D(64, (3,3), activation='relu', padding='same'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Dropout(0.25))

    model.add(Conv2D(128, (3,3), activation='relu', padding='same'))
    model.add(Conv2D(128, (3,3), activation='relu', padding='same'))
    model.add(Conv2D(128, (3,3), activation='relu', padding='same'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Dropout(0.25))

    model.add(Flatten())
    model.add(Dense(1024, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(NUM_CLASSES, activation='softmax'))

    model.compile(loss=keras.losses.categorical_crossentropy,
                  optimizer=keras.optimizers.Adadelta(),
                  metrics=['accuracy']
                  )

    chkpt = os.path.join(checkDir, 'model_.{epoch:02d}-{val_loss:.2f}.h5')
    cp_cb = ModelCheckpoint(filepath = chkpt, monitor='val_loss', verbose=1,
                            save_best_only=True, mode='auto')

    model.fit(train_image, train_label,
              batch_size=batch_size,
              epochs=epochs,
              verbose=1,
              validation_data=(test_image, test_label),
              callbacks=[cp_cb],
              )

    model.summary()

    score = model.evaluate(test_image, test_label, verbose=0)

    model.save('model.h5')

【cnn_keras_app_56.py】

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import numpy as np
import tensorflow as tf
#import cv2

import keras
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense,Dropout,Flatten
from keras.layers import Conv2D,MaxPooling2D
from keras.preprocessing.image import array_to_img,img_to_array,load_img
from keras import backend as K
from sklearn.model_selection import train_test_split
from keras.models import load_model

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

if __name__ == '__main__':
    test_image = []
    test_fileNM = []

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

    for file in file_list:
        img = img_to_array(load_img(path + file, target_size=(56,56)))
        test_image.append(img)
        test_fileNM.append(file)
    test_image = np.asarray(test_image)
    test_image = test_image.astype('float32')
    test_image = test_image / 255.0

    model = load_model('model.h5')

    predictions = model.predict_classes(test_image)
    print('predictions :',predictions)
    print(label_name)

    i = 0

    for pred in predictions:
        print(u'ファイル : ', test_fileNM[i], u'は ', label_name[pred], u'です。')
        i +=1

旧記事に載っているコードと比べると、格段に短くなっています。

短いだけでなく、動作も安定してますね。

おまけですが、もう一つ推論用コード(可視化用)を。

【cnn_keras_app_56_vis.py】

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import numpy as np
import tensorflow as tf
import cv2

import keras
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense,Dropout,Flatten
from keras.layers import Conv2D,MaxPooling2D
from keras.preprocessing.image import array_to_img,img_to_array,load_img
from keras import backend as K
from sklearn.model_selection import train_test_split
from keras.models import load_model
from keras.models import Model
from PIL import Image

path=os.getcwd()+'/analysis/'
outpath=os.getcwd()+'/visible/'
if not os.path.exists(outpath):
          os.mkdir(outpath)
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

if __name__ == '__main__':

    model = load_model('model.h5')

    for file in file_list:
        img2 = img_to_array(load_img(path + file, target_size=(56,56)))

        test_image = np.asarray(img2)
        test_image = test_image.astype('float32')
        test_image = test_image / 255.0
        test_image = test_image.reshape((1,) + test_image.shape)

        intermediante_layer_model = Model(input=model.input,
                                    outputs=model.get_layer("max_pooling2d_3").output)
        y = intermediante_layer_model.predict(test_image)

        test = np.split(y,128,axis=3)
        test2 = np.zeros((1,7,7,1))
        for ii in range(128):
            test2 = test2 + test[ii]
        image2 = np.array(test2)

        image3 = np.reshape(image2,(7,7))
        img = Image.new('RGB',(7,7),'black')
        pix = img.load()

        max = np.max(image3)
        if max>255:
            max = 255
        min = np.min(image3)
        if min < 0:
            min = 0
        dif = max-min

        for x in range(7):
            for y in range(7):
                r = 0
                g = 0
                b = 0
                p = image3[x,y]
                if p < 1.0:
                    r = 0
                    g = 0
                    b = 0
                elif p < min:
                    r = 0
                    b = 0
                    b = int(p*17.0)
                elif p < min + 1.0 * dif/4.0:
                    r = 0
                    g = int((p-15.0)*17)
                    b = 255
                elif p < min + 2.0 * dif/4.0:
                    r = 0
                    g = 255
                    b = int(255-(p-min + 1.0 * dif/4.0)*51.0)
                elif p < min + 3.0 * dif/4.0:
                    r = int((min + 2.0 * dif/4.0)*51.0)
                    g = 255
                    b = 0
                elif p < max:
                    r = 255
                    g = int(255-(p-min + 3.0 * dif/4.0)*51.0)
                    b = 0
                else:
                    r = 255
                    g = 0
                    b = 0
                pix[y,x] = (b,g,r)

        oimg = np.array(img)
        oimg = cv2.resize(oimg,(56,56))
        savecv2 = outpath + 'hpool3_cont_' + file
        cv2.imwrite(savecv2,oimg)
        srcf1 = path + file
        src1 = cv2.imread(srcf1)
        src1 = cv2.resize(src1,(56,56))
        dst = cv2.addWeighted(src1, 0.7, oimg,0.6, 0)
        cnt_filenm = outpath + 'hpool3_dst_' + file
        cv2.imwrite(cnt_filenm,dst)

        predictions = model.predict_classes(test_image)
        #print('predictions :',predictions)
        #print(label_name)

        print(u'ファイル : ', file, u'は ', label_name[predictions[0]], u'です。')

こちらは、推論の結果を「可視化」してくれるコードです。

さて、このコードの使い方です。

■ 準備

まず、上の2つのコード(「cnn_keras_train_56.py」「cnn_keras_app_56.py」)をコピペして、保存してください。

Windows版Anaconda 3やLinux環境下で、いくつかpipコマンドでインストールしてください。

(tensorflow[tensorflow-gpu]、keras、opencv-python、h5py、numpyなど)

■ 学習

教師データを「data」フォルダ内に入れてください。

その場合、ラベルごとに分けたフォルダを作り、その中にラベルに応じた画像を入れます。

Tfkemofr02

こんな感じです。なお、フォルダ名は英数字、スペースなしお願いします。

それが終われば、

> python cnn_keras_train_56.py

と実行します。

Cnn_keras01

こんな画面が出て、 学習が実行されます。

なお、以前のTensorFlowのコードの場合、Loss値がNanとなることが多かったんですが、Kerasにすると全然問題なく収束しますね。

上のコード(cnn_keras_train_56.py)の92~107行目のmodel.~の部分を深層化しても、全然問題なく収束してくれます。

以前は深層化するために、一段浅い学習モデルを初期値にしてまわしてたんですが、そんな手間がなくなりました。しかも、速い・・・TensorFlowでのあの苦労が、嘘のようです。

学習が終わると、「checkpoints」というフォルダができているはずです。

そのフォルダにある、一番最後に吐き出したモデルファイル(model_.[サイクル数]-[Loss値].h5)というファイルができているので、いちばんLoss値の小さいやつを一つ上の階層に移動して、「model.h5」という名前に変えておきます。

■ 推論

ここで、推論させます。

「analysis」というフォルダを作って、その中に推論させたい画像を入れます。

Tfkemofr04

こんな感じです。正方形に切っておくと、なおベターです。

そこで、以下のコマンドを実行。

> python cnn_keras_app_56.py

すると、こんな画面が出るはずです。

Cnn_keras02

ファイルごとに、推論結果が出てきます。

ちなみに、もう一つの推論コード

> python cnn_keras_app_56_vis.py

を実行すると、「cnn_keras_app_56.py」と同じ挙動をしつつも、「visible」というフォルダが作られて、「analysis」フォルダにある元画像1枚1枚に対し、以下のような特徴分布画像を出力します。

【元画像】

Kaban3

【特徴分布】(弱い:青~強い:赤)

Hpool3_cont_kaban3

【元画像+特徴分布】

Hpool3_dst_kaban3

赤いところほど強く反応しているところで、青いところはほぼ特徴がないととらえている場所です。

どうやらこの学習器では、「かばんちゃん」の前髪の辺りに特徴を見出して判断してるようですね。

教師データの与え方やハイパーパラメーターチューニングなどに、重要なヒントを与えてくれそうです。

これを使えば、その画像のどの「特徴」をとらえて推論しているかが、一目瞭然ですぐに分かるというものです。

これを応用すれば

Cnn_keras03

こんなことも可能です(cnn_keas_app_56.pyにOpenCVの物体検出を併用、コード省略) 。

深層化や、トライアンドエラーが、すごく捗ります。

しかも、なぜかTensorFlowのコードよりも速いです。

その分、ちょっと扱いに注意が必要ですが・・・例えば、Conv2D(~)の中の”padding='same'”を忘れると、えらいことになります(畳み込み層を通るごとに、画像サイズが小さくなります)。

このKeras版コード、実際に業務用に使っていますが、全然問題なく使えますね。

コードが見やすい分、教育用にも適してます。

安定性が増す、見やすい、チューニングが捗る。いいことづくめです。こんなことなら、もっと早く取り組んでおけばよかった・・・

もちろん、Kerasにも欠点はあります(用意されていない手法を実装するのが、とても苦手)が、よほどそういう事態には巡り合わないものと思われます。

画像認識を本気で学習してみたい方は、それこそKerasを使わずにガチでコードを書いた方が学べることも多いですが、ともかく画像認識を業務等で使いたい!という向きの方には、Kerasはおすすめです。

PythonとKerasによるディープラーニング

2018年12月31日 (月)

”EeePCの軌跡”ブログ 2018年を振り返る

今年も、いろいろありました。

総じてみると、あまり収穫のあった年とは言い難いですね。

なんといっても、久しぶりにiPhoneを買わない年でした。iPhone 4を買った2011年以来、ずーっと買い続けていたiPhoneですが、今年はまるで買う気にならなかったですね。

昨年買ったiPhone Xを超える機能が全くない上に、値段が高過ぎるのが決め手でした。

さて、今年も順に振り返ってみます。

【1月】

この記事のアクセス数は、未だに持続してますね。

TensorFlow+KerasでSSDを独自データで使えるようにしてみた: EeePCの軌跡

Ssdtest01

物体認識手法である「SSD」をkerasで実装するというコードを使って、実際に独自データで使えるようにするまでの記事です。

ネット上に同じコードを紹介する記事はあるんですが、私の記事の売りは

・ Windows上で使えるようにした

・ 独自データの作成を詳細に解説(Windows用ツールも一応作成)

というところでしょうか。

TensorFlow用”DCGAN”で独自データでの画像生成を試みてみる: EeePCの軌跡

Test_arange_98

この記事も個人的にはなかなかのヒット作です。

画像認識ではなく、画像生成です。

会社では、車の画像を実際に生成させてみました。なかなか面白いものができたんですけど・・・アピールの場は、ありませんでしたね。

Lenovo G580が我が家にやってきた: EeePCの軌跡

1月はいろいろありましたね。妻の実家にあったLenovo G580が使われなくなり、我が家にやってきました。

今は長男用のPCとして使われています。用途は・・・単に昔の画像を閲覧するだけの端末ですね。

【2月】

地味な製品ですが、こいつは今年の私のヒット製品の一つです。

手軽にワインのコルクが抜ける電動ワインオープナー: EeePCの軌跡

Img_0610

ワインのコルクを抜く電動ワインオープナーです。

こいつのおかげで、綺麗にコルクを抜くことができます。

最近、コルクタイプでないワインも出てきますが、やはりコルクの方が味や香りは抜群ですね。当分こいつは活躍しそうです。

Google Home miniを買いました: EeePCの軌跡

Img_0552

そういえば、こういうものも買いました。”Google Home mini”です。

めちゃくちゃ使っているわけではありませんが、地味に活躍中です。

子供らがよく遊んでますね。私は時々、音楽プレーヤーとして使ってます。

【3月】

Appleの劣化バッテリーを使うと性能劣化されてしまう例の問題のおかげで、今年はバッテリー交換費用が安く済む年ではあったんですが、自分で交換しちゃいました。

iPhone 6 Plusのバッテリー交換: EeePCの軌跡

Img_2014

保証外になるんですが、Plusのバッテリー交換はなかなか予約できなくて、しびれを切らして手を出してしまいました。

未だに快調に使えております。今iPhone 6 Plusは次男用iPhoneですね。

ハイアール製ワインクーラー購入: EeePCの軌跡

Img_1997

今年のヒット商品の一つ。またまたワインがらみですね。

今でも使っております、このワインクーラー。

おかげさまで、香りを最大化できる温度に調整できます。35度越えの真夏でも18度まで下げてくれるので、思ったより使えるワインクーラーでした。

”EeePCの軌跡”ブログを始めて本日でちょうど10年になりました: EeePCの軌跡

ところで、2008年3月に始まったこのブログ、ちょうど10年という節目を迎えました。

名前の通り、元々は”EeePC”が主役だったんですけどね。

今じゃiPhoneさえも影を潜め、機械学習なんてものをやってますね。

まだまだ続けてまいります。

【4月】

最近、あまりアプリのレビュー記事を書きませんね。

自身をアニメ顔に変えられるiPhone X専用アプリ”パぺ文字”: EeePCの軌跡

Img_0908

これはその最近としては珍しいアプリ記事です。

iPhone Xなど、Face ID搭載機でしか使えないアプリ。

ちょっとVTuber気分になれます。

ワインのラベルから銘柄・価格・評価を表示してくれるアプリ”Vivino Wine Scanner”: EeePCの軌跡

Img_0883

これもアプリ記事です。

ワインのラベル部分を撮影すると自動認識して、そのワインの評価を閲覧できるアプリ”Vivino Wine Scanner”です。

今でも使っております。ただ、必ずしも世間の評価が私に当てはまるとは言えないことを思い知らされたアプリでもあります。

【5月】

すでにOSアップデートが打ち切られたiPhone 5cの記事を書きました。

うちのiPhone 5cのバッテリーがおかしい・・・: EeePCの軌跡

Img_1077

どういうわけか、4年近くも初期のバッテリーを使い続けて、それでいて90%の容量を維持するという変態的なうちの5c。

ですが、最近ようやく退役しました。

バッテリーは未だに健在だったんですが、やはり最新のiOSに対応できないため、いろいろと不具合がありまして。

次男用iPhoneでしたが、今はiPhone 6 Plusに役割を譲っております。

iPhone Xの「ソフト面」での不満: EeePCの軌跡

Img_2028

iPhone Xの不満を書きました。

ここで書いた不満の内、解消されたのはタスクの消去だけですね。

まあ、慣れればどうってことはないことなんですが、今のiPhone XS/XS Max、XRにもこの操作系が引き継がれております。

それでいて、今までのiPhoneより高価。使い勝手が向上していないのに値段が上がるなんて・・・iPhoneユーザーとしては、納得できるものではありませんね。

「iPhone 10周年 完全図鑑」買ってみた: EeePCの軌跡

Img_0920

歴代iPhoneをまとめたムック本「iPhone 10周年 完全図鑑」を買いました。

これを見て思うんですが、ジョブス氏がiPhone X/XSを見たら、どう思うんでしょうね?

【6月】

大須に久しぶりに立ち寄ってみました。

”昼飲み”ついでに大須へ行ってきました: EeePCの軌跡

Img_1490

もう自作PCの街でもなくて、中古スマホの店とレトロゲーム機の店が幅を利かせる街になってますね。

それでも、イオシスがあるのが救いなんですが・・・

ところで、名古屋大須には、織田信長の父君、織田信秀の墓標があるところでもあります。近くには、桶狭間の戦いの際に立ち寄った熱田神宮もあるなど、ここは歴史の街なんですよね。

妻がApple Watch Series 3を買いまして: EeePCの軌跡

Img_1383

iPhoneは買ってませんが、Apple Watchは買いました。

こちらは妻用のApple Watch Series 3。

ずっとつけるのが煩わしいようで、外出時のみつけておりますが、それなりに使っているようです。

Apple Watchの復活ならず!: EeePCの軌跡

Img_1218

ちなみに私の使っていた初代Apple Watchを復活させようとしたんですが・・・なんと、バッテリーに異常なしと判定されて、バッテリー交換が叶わず。

WatchOSのサポート外になってしまったので、退役にはちょうどいいタイミングではあるんですけどね。なんだか、もったいないです。

【7月】

今年一番の買い物は、これですね。

いまさらですがMacBook Air買いました: EeePCの軌跡

Img_1524

EeePCを所有している頃からずっとあこがれを抱いていたMacBook Airを、ついに購入しました。

実は、ほとんどメモ帳しか使ってないんですよね。あとはブラウザを少々。それでも私にとっては快適なコンピューティング環境。iPhoneとの連携もよく、これは大当たりでしたね。

新しいMacBook Airが出ましたけど、こっちは安くて手軽で、これはこれでいいですね。

最新の物体検出YOLO v3 (Keras2.2.0+TensorFlow 1.8.0)を独自データで学習できるようにしてみた: EeePCの軌跡

Yolo300

物体検出手法の一つであるYoloのv3を使う方法を紹介しております。

こちらも先の「SSD」と同様、Windowsで使える、独自データの活用を意識して記事を書いております。

So-netの0 SIMを3か月放置したら・・・回線停止通告とSIM返却の手順: EeePCの軌跡

Img_2035

そういえば、0SIMが無効になりました。

すると、SIMの返却を促すメールが届きました。

上の記事の通りですが、封筒に入れて送り返したら、特に追加料金もなく無事終了いたしました。

まあ、このSIMはやりすぎでしたね。いくら何でも0円はちょっとなかったですね。

Apple Watch Series 1を買いました: EeePCの軌跡

Img_1597

そういえば、Apple Watch Series 1を買いましたね。

初代Apple Watchとほぼ同じ性能だといいますが・・・バッテリーの持ちが、半端なく長いです。1日使って、下手をすると75%、どんなによく使う日でも40%を切ったことがありません。

アマゾンプライムデーで128GB USBメモリーを買ってみた: EeePCの軌跡

Img_3224

そういえば、こういうものも買いました。128GBのUSBメモリです。

安かったんですが、ちゃんと容量&速度はありました。時々容量や速度性能を偽った製品が送られてくることがあるみたいですけど、そういうのには引っかかりませんでしたね。

ですが買ったものの、あまり使っておりませんね。時々、メインPCからMacBook AirやLenovo G580にデータを移す際に使っております。

【8月】

この月は、あまりぱっとした記事はありませんね。行楽地へ行った記事はちらほらありますけど。

せいぜい、こんな記事を書いたくらいです。

MacBook Airを買った本当の理由: EeePCの軌跡

「MacBook Airを買った理由」について、くどくどと書かせていただきました。

未だにこの挑戦、続いております。

【9月】

この月は新型のiPhoneXS/XS Max/XRの発表がありましたけど、まるで物欲が刺激されませんでした。

代わりに、iOSの話題があったくらいですね。

iOS 12とWatchOS 5にアップデートしてみた: EeePCの軌跡

Img_2018

こちらはアップデートの話。

ようやくiPhone Xでタスク消去がやりやすくなりました。なんで最初からこうしてくれなかったのかと問い詰めたいところですが、ともかく不満点の一つが解消されただけマシですね。

iTunes Storeで昔買った音楽が再ダウンロードできないときの対処法: EeePCの軌跡

Img_2058

細かい話ですが、昔買った音楽がダウンロードできなくなってたので、再ダウンロードできるようにした記事です。

なんだか、iPhoneがどんどんと使いづらくなっていくような、そんなことを感じさせた月でした。

【10月】

10月は良い記事がありませんね。ほぼ情報発信のみ。まるで物欲が発揮されない月でした。

計測アプリの比較記事を書いたことくらいですかね。

iOS12の標準アプリ”計測”とサードパーティー製”Air Measure”を比べてみた: EeePCの軌跡

Img_2073

標準よりも、サードパーティ製の方が優れてました。家具や白物家電を買うときは便利な機能です。

【11月】

写真を手書き風に買えるアプリ”Olli”が面白い: EeePCの軌跡

Img_3254

このアプリ、ヒットとまではいきませんが、期待度の高いアプリですね。

絵師さんには重宝されるアプリじゃないかなぁと思いますね。私が使いこなせるかどうかは微妙ですが。

【12月】

iPad (第6世代)とApple Pencil (第1世代)を買いました!: EeePCの軌跡

Img_2144

今年はiOS機を買うまい・・・そう決意して迎えた年ですが。

結局、買っちゃいましたね。

といっても、息子用ですが。

どちらかというと、次男が使ってますね。それを見て長男が使うという、そういう連鎖です。

思ったよりApple Pencilのレスポンスが良くて、やはり値段並みのものはあるなと感じた次第です。

いずれはProに上げられればいいですね。

とまあ、年末にそれなりに高いタブレットを買ったかと思えば

Kindle Fire 7を買いました: EeePCの軌跡

Img_3277

反対に、安いタブレットも購入。

Kindle Fire 7。サイバーマンデーの特価で購入。お値段はiPadの10分の1以下。

結果的に、こっちの方がよく使われています。軽いし、そこそこ画面は大きいし、思ったよりもレスポンスは悪くない。

高ければ、いいってものじゃないですね。

今年は、わりと静かな年でしたね。

公私ともに、実りの少ない年だったと感じてます。が、潜在的な蓄積というか、そういうものは増えた年でもあるかなぁと。

来年早々に、そういうのが開花するといいですけどね。

ついでに、来年こそは私が欲しいiPhoneは出るんでしょうか?指紋認証復活があれば、可能性はありますけどね。

でもまあ、なんだかんだと私の物欲が絶える気配はありません。きっと来年も何かを買い、その一瞬の満足感に浸ることでしょう。そういうものの連続体こそが、我が人生です。

それはともかく、今年はこれが最後の更新になります。

皆様、良いお年を。

エンスカイ となりのトトロ 2019年カレンダー

2018年12月30日 (日)

あなたの仕事をRPA化します!と言ったら・・・

多いようですね、自動化に対する抵抗というものは。

私も、ちょっと近いものを経験しています。

「来年からあなたの仕事をRPA化します」と事務スタッフに告げたら猛反発された。 - Everything you've ever Dreamed

来年からあなたの仕事をRPA化します!って言ったら、猛反発を食らってしまったという話です。仕事を奪わないで!などの声が上がったということです。

悪戦苦闘する管理職の話が出てますが、こればかりは正直、トップダウンでないと収まりはつかないでしょうね。

RPAにしても、AIにしても、この手の議論はよく出てきます。

曰く、自動化によって、仕事が奪われてしまう。それは困る。というもの。

他にも、自動化によって人間が馬鹿になってしまう。だから、だめだ。というのもあります。

これらに対する回答は、たった一つです。

自動化できるのに、自動化しなかったら、会社がなくなるだけです。

今は仕事が奪われなくても、会社ごと消滅するか、結局クビをきられるかの、どちらかになってしまうことは明白です。

残念ながら、日本の家電メーカーがその反面教師的な実例を示してくれています。

RPAもAIも、グローバル的にはどこも血眼になって取り組んでいるテーマ。これによって、自動化や新たな業務のやり方というものを模索され続けています。

ということは、いずれどこかの会社がそれに成功し、それについていけなかった会社は淘汰される。

PCからスマホに情報機器の中心がシフトしたときに、家電メーカーはついていけず、結果的に10年前には消滅したり、外資系に身売りしたり、あるいは部門を切り売りしなければならないことになるとは思わなかった会社がいくつかありますね。

内部の猛反発を食らうものをトップが推し進めることができなければ、世間の荒波にもまれ会社ごと消滅するというのが今の時代です。

他人事ではないです。私自身も、この荒波を感じています。

ブログを書き始めたのが、2008年。

あの頃は、まさか東芝がPC部門を切り売りするなんて考えたこともなかったし、シャープが台湾企業の傘下に入るなんて、思いもよりませんでした。

ちょっと時代を読み違えると、大変なことになる。

大企業とはいえ、10年もかからずにあっさりつぶれるものだと、まさに痛感したものです。

でも、他人ごとではありませんね。RPA化でなくなるような仕事ならさっさとなくさないと、会社が無くなります。その分、人は新たな創造分野に注力するべきです。作業なんて、人間がやるもんじゃない。

そういう意識が、求められる時代ですね。

Newton別冊『ゼロからわかる人工知能 仕事編』 (ニュートン別冊)

2018年12月10日 (月)

日本のIT産業は壊滅の一途か!?

最近、そう感じることがあります。

このままいったら、日本はダメじゃねぇ?

自分の会社にも感じていることですけど、これを読むと概ね日本企業全般の問題のようですね。

NTTから『GAFA』へ人材流出 日本式企業の"くだらない"問題点が転職者から赤裸々に

どちらかというとIT関係に近いところにいるため、うなずいてしまう言葉が多いです。

特に「低レベルのITリテラシーな人間が実権を握り経営判断をしているという状況への絶望」という一文には、思わず納得です。

いや、いるにはいるんです。上位者にも、今のままではダメだと感じている人が。でも、やはり少数派なんですよね。分からないから、通らない。そういう議案が、たくさんあります。

無尽蔵にお金を使えとは言いませんけど、機械学習やRPA、VDIくらいは大胆かつスピーディーに導入を決定しないと、もはや業務速度が世界標準に追いつけなくなるでしょう。

個人的には、そう思っています。

でもその予感、多分当たりそう・・・

いざというときのため、外資系に転職してもやっていけるだけの何かを、身に着けるしかなさそうですねぇ。

深層学習教科書 ディープラーニング G検定(ジェネラリスト) 公式テキスト

2018年12月 2日 (日)

平成でもっとも歌われたカラオケの曲は?

データというものは、眺めているだけでちょっと面白いものですね。

通信カラオケ「DAM」が、平成でもっとも歌われた楽曲ランキングを公開しております。

平成のカラオケで最も歌われた楽曲は? 歌手1位は「浜崎あゆみ」 - ITmedia ビジネスオンライン

1位は一青窈さんの「ハナミズキ」だそうです。第3位にはアニソンの「残酷な天使のテーゼ」が入ってますね。

歌手別だと、「浜崎あゆみ」さんが1位とのこと。

平成と言っても、すでに30年は経ってるわけでして、最近の世代からおっさん・老人世代まで、いろいろです。

必ずしも歌われる曲と売れている曲が一致するというわけではないようですね。聞きたい曲と、歌いたくなる曲には微妙に違いがあるようで、このランキングはあくまでも歌いたい方の曲です。

ところで今どき、カラオケってどれくらい歌われるものなんですかね?カラオケ屋って昔よりはずいぶんと減りましたが、今でもちらほら見かけます。

ちなみに、今年の1位は米津玄師さんの「Lemon」。ええと、どういう曲でしたっけ?もしかしたら、聞けばわかるかもしれませんけど。

時代を反映しているのかどうか微妙なランキングですが、この平成を生き延びてこられた方ならば、このランキングに思うところはあると思われます。

1人deカラオケDX 防音マイク

2018年12月 1日 (土)

Ubuntu 18.04のサポート期間が10年に

Ubuntuは2年に一度、長期サポートを謳うLTS版が出ますが。

このLTS版というのは、5年間のサポート期間を持ちます。

が、今年の4月にリリースされた18.04は、なんと10年に延長されるとのことです。

Ubuntu 18.04の長期サポート期間が10年に延長--シャトルワース氏が明らかに - ZDNet Japan

特に、機械学習用のOSとしてよく使われているUbuntu。この10年間サポートのニュースは、このバージョンへの乗り換えを進めることになると思われます。

ちなみに私が会社で使っているGPU端末は、Ubuntu 16.04が入ってます。微妙に18.04に移行できないものがあるんですよね。来年あたりには解消されそうです。

これで18.04への乗り換えへの障害が無くなれば、むしろ今後のディープラーニング用端末などはUbuntu 18.04 LTSが標準になりそうですね。10年という長期間のサポートは、かなりインパクトがあります。

Ubuntuも、ディープラーニングなどの機械学習で一気に脚光を浴び始めましたね。

この発表により、より機械学習向けOSとしてより一層利用されそうです。

Ubuntu 18.04 LTS 日本語 Remix 使い方が全部わかる本 (日経BPパソコンベストムック)

2018年11月30日 (金)

AIプロジェクトを突然やれと言われたら・・・

私にとっては、こういうトップダウンはありがたいんですけど、技術や準備の整っていない状態では、戸惑う人は多いのが現状です。

何事もそうですが、期待しなさすぎ、し過ぎ、どちらもダメ。「過ぎたるは及ばざるが如し」と言いますし。

かの徳川家康は「及ばざるは過ぎたるに勝れり」と言いましたが、AIに過ぎた期待をするトップがいた場合、どういう心構えをするべきでしょうか?

「AIプロジェクトを担当してくれ」突然の上司のむちゃぶり あなたが最初にやるべきことは? (1/5) - ITmedia NEWS

こういう記事がありました。

まさにAIプロジェクトをやってくれ、と突然言い渡されたら、何をするべきかを説いています。

まず、当然のことですが、AIでできることとできないことがあります。

いわゆるディープラーニングによる画像認識は、人の目でしか判別できなかったものを識別可能にする技術として注目されています。しかし、逆に言えば人の目でも間違えるようなものは、やっぱり間違えてしまう可能性があります。

ついついIT技術に100%を求めてしまうんですよね。気持ちはわかりますが、人間ですら100%でないものをAIだからといって100%求めるのは・・・そういう事実を知ると、突然幻滅してしまう人が現れます。

でも、人の目の検査で1万個に10個の誤品を出していた工程で、ディープラーニングを用いたAIでそれを5個にしたならば、それだけでも大いに成果があると思います。もちろん、0が言いに越したことはないのですが、単に精度を上げただけでなく、検査を人から解放することができただけでも十分かと思います。

最近は、意図的ともいうべき不正が増えてます。私は、人に検査を依存していることの裏返しだと感じてます。

複数の別々の人が検査をすればこういう事態を防ぐことができると思うのですが、おそらく検査の人を減らす、納期を早める、コストを減らす、などの要因が背景にはあったのではないかと勘繰ってます。

そんな状況になれば、不正をする気がない人でもそうならざるを得ず、一度通ってしまった不正は前例となり、その後常態化する・・・

なんとなくですが、私は一連の不正検査ニュースを聞くたびに、「検査のワンオペ」があったんじゃないかと感じてます。

もし人と同時に機械によるクロスチェックをさせていたら、昨今騒がせている不正検査の多くが防止できたかもしれません。

たとえ80%程度の精度しかないAIだったとしても、クロスチェック用ならば十分に威力を発揮します。

そういう用途もAIにはあるのだと感じていただければ、100%でなくても使えるAIが作れると思いますね。

かなり話が脱線しましたが、このリンク先にも書かれている通り、AIには3段階の活用方法があるといわれています。

まず、最初に行われるのは「作業の効率化・人の代替化」。まあ、これはよくあるAIの活用方法ですね。今はこれが中心だと思います。

次の段階では「従来価値の高度化」。早い話が、人を超えた精度や技量を持つ特化型AIの登場です。

そして最後には「新しい価値の発見・創造」。アルファ碁が3千年以上かけて人々が築いてきた囲碁のパターンをひっくり返すような手を生み出し、それが囲碁界に新たな知見を与えたように、これまで想像もできなかった手段や事実の発見につながるのではないか?

日本のどこかの研究所が、まさにAIを使ってノーベル賞級の発見をしようと取り組んでますね。

最後の段階はとても到達困難な領域ですが、最初の自動化、効率化ができなければ、最終形態には到底たどり着けません。

だから、まずは今できることを取り組み、徐々にレベルを上げていくというのがこの技術に取り組む前提ではないかと思っています。

でも、なかなか理解が進まないですね。AIが作り上げる未来は、多くの人が抱いているのは概ね仕事がなくなるというものが多いです。あるいは、鉄腕アトムのような汎用AIの登場を夢見ているかのどちらかです。

ですけど、今の世の中にあるのはある特定のことができる特化型AIであって、やれることは限られている。でも、その限られた活用術が、大いに会社に人々に貢献できる。そういうものだと思ってます。

今は、手を動かして実例を挙げていくしかないですね。一日も理解を得られるだけの何かを作り上げて、その成果でAIをドリブンしていく。個人的には、それしかないと感じてます。

図解 人工知能大全 AIの基本と重要事項がまとめて全部わかる

2018年11月22日 (木)

キリンが好みのビールを案内するAI”ビアナビ”を試行中

最近は何でもかんでもAIですが、とうとうキリンもAIを使ったビールのサービスを開始です。

キリン、AIを活用したクラフトビールの案内サービス「ビアナビ」キリンシティ2店舗でテスト開始 | クラフトビールの総合情報サイト My CRAFT BEER

この「ビアナビ」というのは、よくある「AIを使って作った最強の○○」という類のものではなく、いくつかの質問からユーザーの好む既存のビールを割り出すというサービスなようです。

iPad mini上に現れる10ほどの質問から「ブルックリン ラガー」「JAZZBERRY」「Daydream」「496」の4種類のクラフトビールの中から好みのものを割り出してくれるそうです。

個人的には、もうちょっと種類があってもよかったんじゃないかと・・・キリンラガーや発泡酒、第3のビール、それにライセンス生産しているハイネケンもあるというのに、たった4種類から選ぶなんて、ちょっともったいない気がします。

ちなみにこの「ビアナビ」サービスは、キリンシティプラス池袋WACCAとキリンシティプラス横浜ベイクォーターの2店舗で12月16日まで行われている試験的なサービスらしいです。本格導入ではないんですよね。

試みとしてはなかなか興味がわくものだけに、なんだかちょっと中途半端な感じがします。どうせなら、思い切り凄いのを作れなかったんでしょうかね?できれば、アプリにしてばらまくとかすれば案外バズりそうです。

などと言っている私は、どういうわけか発泡酒と第3のビールについてはキリンと相性が悪いです。ラガービールはいいんですけどねぇ・・・ハイネケンは大好きです。

【2018年発売】本麒麟 350ml×24本

より以前の記事一覧

当ブログ内検索

  • カスタム検索

スポンサード リンク

ブログ村

無料ブログはココログ