今週末は第5回入門機械学習読書会です

ランチに名物のいも汁を食すかたは掛川駅に1130に集合です。

ProductName 入門 機械学習
Drew Conway
オライリージャパン / 3360円 ( 2012-12-22 )


一応6回で終了すると思うので次回以降の読書会のネタに関しても話し合いたいので、なにか推薦する方は教えて下さい。

いまのところ、機械学習の延長線上にありそうな「実践コンピュータビジョン」はどうかなという話が上がっております。OpenCV+機械学習+Pythonという結構面白い本だと思います

ProductName 実践 コンピュータビジョン
Jan Erik Solem
オライリージャパン / 3150円 ( 2013-03-23 )


Harris corner detectorとSIFT

実践コンピュータビジョンだけではいまいちHarris corner detectorとSIFTの理解が出来なかったので調べた。記述子の意味がわからないと気持ち悪いので。

ProductName 実践 コンピュータビジョン
Jan Erik Solem
オライリージャパン / 3150円 ( 2013-03-23 )


大体は理解した。

Harris corner detector

エッジとコーナーの検出アルゴリズム。本を読んだ時にはエッジとコーナーって何が違うねんって思っていたけど

微分値が特定方向に大きい場合はエッジ,多方向に大きい場合はコーナーと考えるHarris Corner Detection

という説明を読んで、あー、なんだそういうことかと気がついた。

SIFT

Harris corner detectorがわかっていれば理解しやすかった。下のスライドがわかりやすい

実装は次のpdfを見れば良い

実践コンピュータビジョン 7-10章

6章の画像クラスタリングを含めて7-9章は画像認識を扱っている章になっている。10章はOpenCVを触り程度に紹介。

7章は画像から記述子を取り出してきて、テキストマイニングするような感じで画像検索を行う。というよりtf-idf法を使っているだけなのでわかりやすい。最終的にCherryPyを使ってWebアプリを作っているが、色々応用が効きそうなヒントが得られた。

8章は画像認識で、これまた面白い。最初にkNNを使ってSIFT特徴量から手話画像の認識をさせる。でこれの精度を改良するためにいくつかのアルゴリズムを試す。

最初はベイズ分類+SIFTをPCAで次元削減したものを利用するが精度が改善しない。しかしこの手法の良いところは元のデータを保持しなくていいところ。

次にSVMを使って精度が改善するという流れ。次元を減らしても精度がそれほど落ちないとか、よくある話に持っていく。

今時なら、このあとにRandomForestが出てきて云々がはじまるのが定番なんだけど、この本ではそこまでは説明していないので、興味があればRFまでやってみるのがいいかもしれない。

最後に多クラスSVMとして数独の写真を認識する例がある。3章でやった射影変換を利用して斜めに移った写真でもきちんと正方形になおしてから分類するという内容で興味深かった。

9章は画像の領域分割で「背景を分離する」みたいな話。最大フローとかそういう話題。最初ベイズ分類器が出てくるのがよく分からなかくて悩んだんだけど、図9.2を見ながらよく考えたら理解した。

10章はOpenCVの基本なので。興味を持ったらドキュメントを読むか他の本をあたれというところか。

ProductName 実践 コンピュータビジョン
Jan Erik Solem
オライリージャパン / 3150円 ( 2013-03-23 )


まとめ

あまり手を動かしてないので、次は章末の演習問題も解きながらやってみるかもしれない。入門機械学習の次に読む本としても面白いかも(Pythonを書けることが前提になるかもしれないが)。

OpenCVとScipyのドキュメントはひと通り目を通しておく。

他に気になる本

ProductName 詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識
Gary Bradski
オライリージャパン / 4830円 ( 2009-08-24 )


ProductName Learning Opencv: Computer Vision in C++ With the Opencv Library
Gary Bradski
Oreilly & Associates Inc / 6309円 ( 2013-06 )


実践コンピュータビジョン 4-6章

面白いのでどんどん読んでいる。

ProductName 実践 コンピュータビジョン
Jan Erik Solem
オライリージャパン / 3150円 ( 2013-03-23 )


4章はピンホールカメラモデルを使って拡張現実の基礎っぽいあたりを静止画像に対してやっている。つづいて5章では多視点の幾何に移っていくが、こっちはあまり興味が沸かなかったのでとりあえず読み流した。

4章はもうちょっとサンプル的に面白いものを選択して欲しかった。よくあるOpenGLのティーポットが乗っかっててもなぁ。あとで自分でいじってみてなんか他のものをあわせてみる。こびとのモデルとかあればいいんだけど。

6章からは画像のクラスタリングの話に移って、7章で検索、8章が画像認識、9章が領域分割なので6-9がひとまとまりだと思うけど、今日は6章までしか読んでない。K-meansとスペクトラルクラスタリングというオーソドックスな手法。 K-meansはあちこちに分かりやすい説明(これとか)があるけどスペクトラルクラスタリングは本書の説明だけではわかりにくいかもしれないので、きちんと理解したければ「Rで学ぶクラスタ解析」をよめばよい。

ProductName Rで学ぶクラスタ解析
新納 浩幸
オーム社 / 3360円 ( 2007-11 )


SciPyでK-meansって初めて書いたけど、わかりやすかった。

from scipy.cluster.vq import *
from pylab import *
import numpy as np

# サンプルデータを作成
class1 = 1.5 * np.random.randn(100, 2)
class2 = np.random.randn(100, 2) + np.array([5,5])
features = np.vstack((class1, class2))
# 分類
centroids, variances = kmeans(features, 2)
code, distances = vq(features, centroids)
# 可視化
figure()
ndx = where(code==0)[0]
plot(features[ndx,0], features[ndx,1], '*')
ndx = where(code==1)[0]
plot(features[ndx,0], features[ndx,1], 'r.')
plot(centroids[:,0], centroids[:,1], 'go')
axis('off')
show()

出来た図

kmeans

PythonでOpenCVを利用するのは簡単そうだ

遅ればせながらDeep Learningアツいぜっていう感情の高まりがアップしたので、画像いじりが再燃した。ちなみにglitchとか好きです

Deep Learningはここらへんを読むと良いです。

opencvはbrewで入れた。ffmpegを入れておく必要があります。

あと上記URLを参考に。

PythonからOpenCVを使う

import cv2
cap = cv2.VideoCapture(0)
ret, im = cap.read()
cv2.imwrite('cap.jpg', im)

と書くだけで、MBAのカメラからキャプチャしてcap.jpgという名前で保存します。おもろい。

ProductName 実践 コンピュータビジョン
Jan Erik Solem
オライリージャパン / 3150円 ( 2013-03-23 )