ランチに名物のいも汁を食すかたは掛川駅に1130に集合です。
一応6回で終了すると思うので次回以降の読書会のネタに関しても話し合いたいので、なにか推薦する方は教えて下さい。
いまのところ、機械学習の延長線上にありそうな「実践コンピュータビジョン」はどうかなという話が上がっております。OpenCV+機械学習+Pythonという結構面白い本だと思います
ランチに名物のいも汁を食すかたは掛川駅に1130に集合です。
一応6回で終了すると思うので次回以降の読書会のネタに関しても話し合いたいので、なにか推薦する方は教えて下さい。
いまのところ、機械学習の延長線上にありそうな「実践コンピュータビジョン」はどうかなという話が上がっております。OpenCV+機械学習+Pythonという結構面白い本だと思います
16052013 OpenCV
実践コンピュータビジョンだけではいまいちHarris corner detectorとSIFTの理解が出来なかったので調べた。記述子の意味がわからないと気持ち悪いので。
大体は理解した。
エッジとコーナーの検出アルゴリズム。本を読んだ時にはエッジとコーナーって何が違うねんって思っていたけど
微分値が特定方向に大きい場合はエッジ,多方向に大きい場合はコーナーと考えるHarris Corner Detection
という説明を読んで、あー、なんだそういうことかと気がついた。
Harris corner detectorがわかっていれば理解しやすかった。下のスライドがわかりやすい
実装は次のpdfを見れば良い
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の基本なので。興味を持ったらドキュメントを読むか他の本をあたれというところか。
あまり手を動かしてないので、次は章末の演習問題も解きながらやってみるかもしれない。入門機械学習の次に読む本としても面白いかも(Pythonを書けることが前提になるかもしれないが)。
OpenCVとScipyのドキュメントはひと通り目を通しておく。
他に気になる本
面白いのでどんどん読んでいる。
4章はピンホールカメラモデルを使って拡張現実の基礎っぽいあたりを静止画像に対してやっている。つづいて5章では多視点の幾何に移っていくが、こっちはあまり興味が沸かなかったのでとりあえず読み流した。
4章はもうちょっとサンプル的に面白いものを選択して欲しかった。よくあるOpenGLのティーポットが乗っかっててもなぁ。あとで自分でいじってみてなんか他のものをあわせてみる。こびとのモデルとかあればいいんだけど。
6章からは画像のクラスタリングの話に移って、7章で検索、8章が画像認識、9章が領域分割なので6-9がひとまとまりだと思うけど、今日は6章までしか読んでない。K-meansとスペクトラルクラスタリングというオーソドックスな手法。 K-meansはあちこちに分かりやすい説明(これとか)があるけどスペクトラルクラスタリングは本書の説明だけではわかりにくいかもしれないので、きちんと理解したければ「Rで学ぶクラスタ解析」をよめばよい。
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()
出来た図
遅ればせながらDeep Learningアツいぜっていう感情の高まりがアップしたので、画像いじりが再燃した。ちなみにglitchとか好きです
Deep Learningはここらへんを読むと良いです。
opencvはbrewで入れた。ffmpegを入れておく必要があります。
あと上記URLを参考に。
import cv2 cap = cv2.VideoCapture(0) ret, im = cap.read() cv2.imwrite('cap.jpg', im)
と書くだけで、MBAのカメラからキャプチャしてcap.jpgという名前で保存します。おもろい。