MNIST

MNISTとは?
Mixed National Institute of Standards and Technology database
手書き60000枚とテスト画像10000枚の画像データセット

MNISTのデータDL
http://yann.lecun.com/exdb/mnist/

import keras 
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, InputLayer
from keras.optimizers import RMSprop

(x_train, y_train),(x_test,y_test) = mnist.load_data()

x_train = x_train.reshape(60000, 748)
x_test = x_test.reshape(10000, 784)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)

model = Sequential()
model.add(InputLayer(input_shape=(784,)))
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer='rmsprop', metrics=['accuracy'])

epochs = 20
batch_size = 128
history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, y_test))

score = model.evaluate(x_test, y_test, verbose=1)
print()
print('Test loss:', score[0])
print('Test accuracy:', score[1])

MNISTのデータは縦28ピクセル x 横28ピクセル = 計748ピクセル
各ピクセルRGBは 0 – 255 の256種類の整数値

ImageNet Large Scale Visual Recognition Challenge

画像認識コンペティション
ILSVRC(ImageNet Large Scale Visual Recognition Challenge)

2017年の内容
1,Object localization for 1000 categories.
2,Object detection for 200 fully labeled categories.
3,Object detection from video for 30 fully labeled categories.

ILSVRC2012では、AlexNetが優勝
5つの畳み込み層をもち、3つの全結合層
パラメータ数は、約6000万個

ん? 6000万?
畳み込み層のカーネルサイズ、畳み込み層のカーネル数を調整している?
VGGNetのパラーメータは1億4千個?

input -> stem -> 5x Inception-resnet-A -> Reduction A -> 10 x Inception-resnet-B -> Reduction-B -> 5 x Inception-resnet-C -> Average Pooling -> Drop0ut -> Softmax

本郷・水道橋にある画像認識系のスタートアップって、この画像認識のモデルアルゴリズムも設計してるんだろうか。。

Amazonの機械学習

AWSばかり目が行きますが、amazonで使われている機械学習は?
 L 需要予測
 L 商品検索のランクづけ
 L 商品のレコメンデーションや配置
 L 不正取引の検知
 L 翻訳

その他には、自動飛行ドローンが商品を配達するPrime Air
小売店舗のAmazon Goなど

Prime Airとは?
 垂直離着陸と飛行能力を完備したドローン
 飛行体と人、動物、障害物などを把握するアルゴリズム、解析能力を備える

これ、開発するのに5年くらいかかってる?しかも、配達っていっても、洗濯機、テレビなど大型家電も運べるんだろうか?頭上から落ちてきたら敵わんからな。安全上、問題がありそう。

無人店舗 Amazon Go
ローソンやJRなどがやってる無人店舗、店の中でチャージするんだが、
amazon goは棚の上にカメラがあって、棚から人が商品を取ったらチャージされる仕組みのよう。お店から出て10分くらいたってからチャージ。

機械学習の中でも画像認識はコア技術だな〜
ロジスティック回帰、computer vision、アプリってところか。

Hough space

image space
y = m0x + b0

Hough (parameter) space
b = -x0m + y0
b = -x1m + y1

polar representation for lines
d: perpendicular distance from line to origin
Θ: angle the perpendicular makes with the x-axis

Hough transform algorithm
xcosΘ- ysinΘ = d

Hough transform for circles
Circle: center(a,b) and radius r (xi-a)^2 + (yi-b)^2 = r^2

For every edge pixel (x,y):
	For each possible radius value r:
		For each possible gradient direction Θ:
		 %% or use estimated gradient
		 	a = x - r cos(Θ)
		 	b = y + r sin(Θ)
		 	H[a,b,r] += 1
		 end
	end
end

Canny Edge Operator

Gradients -> edges
1. smoothing derivatives to suppress noise and compute gradient.
2. threshold to find regions of “significant” gradient
3. thin to get localized edge pixels

The canny edge detector

% for your eyes only
pkg load image;

frizzy = imread('frizzy.png');
froomer = imread('froomer.png');
imshow(frizzy);
imshow(froomer);

frizzy_gray = rgb2gray(frizzy);
froomer_gray = rgb2gray(froomer);

frizzy_edges = edge(frizzy_gray, 'canny');
froomer_edges = edge(froomer_gray, 'canny');
imshow(frizzy_edges);
imshow(froomer_edges);

imshow(frizzy_edges & froomer_edges);

In the real world

f(x)
d/dx*f(x)

Finite differences responding to noise
Increasing noise

Solution: smooth first
f, h, h*f, α/αx*(h*f)
where is the edge?

for sigma = 1:3:10
	h = fspecial('gaussian', fsize, sigma);
	out = imfilter(im, h);
	imshow(out);
	pause;
end

Gradient

Differential operators – when applied to the image returns some derivatives.
Model these “operators” as masks/kernels that compute the image gradient function.

Discrete gradient
For discrete data, we can approximate using finite differences.

pkg load image;

function result = select_gdir(gmag, gdir, mag_min, angle_low, angle_high)
	result = gmag >= mag_min
endfunction

img = double(imread('octagon.png'))/255.;
imshow(img);

[gx gx] = imgradientxy(img, 'sobel');
imshow((gy + 4) / 8);

[gmag gdir] = imgradient(gx, gy);
imshow(gmag / (4 * sqrt(2)));

my_grad = select_gdir(gmag, gdir, 1, 30, 60);

Edges

Origin of Edges
-surface normal discontinuity
-depth discontinuity
-surface color discontinuity
-illumination discontinuity

Edges seem to occur “change boundaries” that are related to shape or illumination.
A stripe on a sign is not such a boundary.

Edge Detection
Basic idea: look for a neighborhood with strong signs of change.

Problems:
– neighborhood size
– how to detect change

intensity function (along horizontal scanline)

first derivative
-edges correspond to extrema of derivative

Template matching

Scene
Template(mask)

Detected template
Correlation map

pkg load image;

function [yIndex xIndex] = find_template_2D(template, img)

endfunction

tablet = imread('tablet.png');
imshow(tablet);
glyph = tablet(75:165, 150:185);
imshow(plyph);

[y x] = find_template_2D(glyph, tablet);
disp([y x]);