windowsでipython使う時はpyreadline必要

WindowsPython使うとき、多くはバイナリーインストーラを使うと思うが、その時同時にインストールされるPython shell(IDLE)はよりも、便利なものがIPython。
IpythonがPyhon shellよりイイ点は、
・コマンドの補完ができること。(モジュール内部の補完も、ファイル名の補完も効く)
・OSのコマンド(コマンドプロンプトで実行できるコマンド)がそのまま使えること。(cd, pwd, ls とか)

その動作確認メモ

http://ipython.org/download.html
からipythonのインストーラとってくる。ここにも書いてあるが、補完機能はreadline ライブラリを使っている。これを入れないと、ipythonのコード補完が効かない。ipython起動時に警告だしてくる。

WARNING: Readline services not available on this platform.
WARNING: Proper color support under MS Windows requires the pyreadline library.
You can find it at:
http://ipython.scipy.org/moin/PyReadline/Intro
Gary's readline needs the ctypes module, from:
http://starship.python.net/crew/theller/ctypes
(Note that ctypes is already part of Python versions 2.5 and newer).

Defaulting color scheme to 'NoColor'
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.

IPython 0.10.2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

  Welcome to pylab, a matplotlib-based Python environment.
  For more information, type 'help(pylab)'.

In [1]:

こんなかんじに。

pyreadline はwindows用のバイナリーインストーラがある。ここから取れる。

https://launchpad.net/pyreadline/+download

今しがたは、
pyreadline-1.7.win32.exe
pyreadline-1.6.2.win32.exe
あたりが最新になっている。

この2つを入れると、補完が効くようになる。ディレクトリ操作もできるし、ファイル名の補完、モジュールの補間もできるので手放せないかんじ。
ipythonがインストールされる C:\Python26\Scripts を環境変数PATHにいれて、cmd.exe からipython で起動する。

それから、場合によっては、winpy32も使うと、WindowsならではのCOMも操作できるようになる。せっかくWindows上でPython使うなら、COMも操作できたほうがいいことあるかも、ということでメモしておく。
http://starship.python.net/crew/mhammond/win32/

Scipy,Numpy,matplotlibの初心者向けリソースのメモ

ちなみに、ScipyはNumpyに依存していて、NumpyはN次元配列を効率的にあつかえる機能が実装されている、らしい。

Scipyのとっかかりとしては、「科学技術計算のために Python を始めよう」のリソースがOK
http://www.ike-dyn.ritsumei.ac.jp/~uchida/scipy-lecture-notes/index.html
roscipy 2010 のチュートリアルからの講義和訳らしい。

scipyのTutorialも必須だろう。
http://docs.scipy.org/doc/scipy/reference/tutorial/index.html

scipyで各種ファイルを読み込む
http://docs.scipy.org/doc/scipy/reference/tutorial/io.html
matlabのmatファイル、wekaのarffファイル、音声waveファイル、の扱い方とか。

scipyで統計処理する
http://docs.scipy.org/doc/scipy/reference/tutorial/stats.html

図表書くためのmatplotlib。
http://matplotlib.sourceforge.net/
matlibplotのTutorialはこちら
http://matplotlib.sourceforge.net/contents.html

画像認識による環境理解だけでない未来の車のセンサー認識とかの研究メモ

画像認識によって歩行者や障害物、前方の車を検出して追突しない車をつくるわけだが、運転している人間の状態のモニターも研究の歴史が長い。

フォードが心拍数をモニターして運転手の健康状態を把握。心臓発作などによる不測の事故を未然に検出したい、ということ。
http://response.jp/article/2011/05/25/156894.html

人間工学の分野でも自動車関連機関の研究は歴史がある。
心拍時系列解析で人間の精神状態をモニターする例
http://pioneer.jp/crdl/rd/pdf/14-3-3.pdf
まずは、眠気の事前検出。眠らないように。
そして、加速する時の緊張、高速運転時の緊張、などの精神ストレスのモニター、心地よい快適な運転環境をつくるという目的。
ちなみに、心電図はハンドルを握る左右の手から取れる。足にも電極があると、3点測量で医療目的に使われる心電図になるが、左右の手でも心拍の時系列解析をする分には十分。足まで電極つけられるのはちょっとストレスかも。
心拍の解析の具体的な事例としては、
http://www.p.u-tokyo.ac.jp/~yamamoto/jres_11/jres_11.html
基礎的な解説は、
http://hclab.sakura.ne.jp/index.html

眠気の検出をするために、運転手の顔認識も使える。
まばたきの回数、周期、目の開き具合で推定する。あるいは、視線の方向変化から注意力を推定して、注意力が落ちていることを推定する。

流行りのネタとして、脳波でギア操作。ハンディキャップある人向けの特殊運転手段としてはありえるかもしれない。ユニバーサルデザインのコンセプトからすると、将来的も普通の人も脳波で運転というはあるのかもしれないが、どうだろう。
http://www.youtube.com/watch?v=lWzdWMapJ-c&feature=player_embedded

windowsでmatlibplot読み込むとfont_manager.pyでMemoryErrorが出る←解決

Pythonでscipy,numpy,matlibplot使っている人がかなりいるようでちょっと手を出してみようと思ったのです。そして、すごく可能性を感じました。
toolboxなしのmatlabはもういらないです。と感じました。
仕事でmatlabを virtual model simulator として使ってるのだが、いわゆるCADとして使わなければmatlabを使い続ける理由がないな。逆に言うと、まだCADとして手厚いサポートがあるのでmatlabの契約を継続するのですけど。
でも、pythonの開発人口の層の厚みを鑑みるに時間の問題な気がする。誰か作って下さい。積極的に乗り換えますwww

ところで、インストール時にちょっとはまった点をメモ。

windowsでmatlibplot読み込むとfont_manager.pyでMemoryErrorが出た。コマンドラインからも、python shellからも同じエラー

環境
winxp
python2.6、python2.7

Numpy,Scipy,matplotlibは以下のバイナリパッケージをお手軽インストール。site-packages内に展開されます。
numpy-1.6.1-win32-superpack-python2.6.exe
scipy-0.9.0-win32-superpack-python2.6.exe
matplotlib-1.0.1.win32-py2.6.exe

>>>import matplotlib.pyplot

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    import matplotlib.pyplot
  File "C:\Python26\lib\site-packages\matplotlib\pyplot.py", line 23, in <module>
    from matplotlib.figure import Figure, figaspect
  File "C:\Python26\lib\site-packages\matplotlib\figure.py", line 18, in <module>
    from axes import Axes, SubplotBase, subplot_class_factory
  File "C:\Python26\lib\site-packages\matplotlib\axes.py", line 14, in <module>
    import matplotlib.axis as maxis
  File "C:\Python26\lib\site-packages\matplotlib\axis.py", line 10, in <module>
    import matplotlib.font_manager as font_manager
  File "C:\Python26\lib\site-packages\matplotlib\font_manager.py", line 1349, in <module>
    _rebuild()
  File "C:\Python26\lib\site-packages\matplotlib\font_manager.py", line 1299, in _rebuild
    fontManager = FontManager()
  File "C:\Python26\lib\site-packages\matplotlib\font_manager.py", line 1004, in __init__
    self.ttffiles = findSystemFonts(paths) + findSystemFonts()
  File "C:\Python26\lib\site-packages\matplotlib\font_manager.py", line 332, in findSystemFonts
    for f in win32InstalledFonts(fontdir):
  File "C:\Python26\lib\site-packages\matplotlib\font_manager.py", line 214, in win32InstalledFonts
    key, direc, any = _winreg.EnumValue( local, j)
MemoryError

解決手順

python26\Lib\site-packages\matplotlib\font_manager.py

の206行目に
local = None
を入れる。

        try:
            local = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, fontdir)
        except OSError:
            continue
        
        local = None
        if not local:
            files = []


http://d.hatena.ne.jp/wikuba/20110614/1308033727

local = none
じゃだめ
NameError: global name 'none' is not defined
って出るのですぐ気付くだろうけど。

大規模画像データセットを用いた自動画像アノテーション

研究用メモ

画像認識に関する研究用メモ

任意の画像に映ってい映っている物やシーンを自動的に理解するために、画像にタグを自動手に付けていく手法が求められている。
自動画像アノテーションの定義は、タグがついていない画像に対して、ふさわしいタグを複数付けていく手法のこと。
画像中の特定のもの、たとえば、猫を見つけるなら、「特定物体認識」、何が映っているかを複数見つけるなら、「一般物体認識」と分けて議論される。

自動アノテーション処理の流れ
1.画像とそれに付随するタグのペアデータベースの構築
2.画像とタグの特徴抽出
3.画像とタグの関係モデルの構築
4.モデルから新規画像へのふさわしいタグ推定
が処理の流れ。

画像の自動タグつけ用データセットをチェックしておく。

自動アノテーション手法のアルゴリズム評価用に用意されたデータセット

corel5K

例が載っている。Humanが画像に付けたタグと、開発したアノテーションアルゴリズム semantic multi-class labeling (SML) で自動で付けたタグが見比べられる。
http://www.svcl.ucsd.edu/projects/imgnote/eg_annotation.htm
データとタグがダウンロードできるかと思ったら、問い合わせないとダメなよう。
画像の元データはcorelの画像CDで、そこに人力でタグつけをしたもの。
corel5k:5000枚の画像に371種類のタグ
corel30k:31695枚の画像に1035種類のタグ
問い合わせてからもらうらしい。
と思ったら、corel5k.rar というファイルがsourceforgeにあった。
http://sourceforge.jp/projects/sfnet_mulan/downloads/datasets/corel5k.rar/


ESP Game
画像とタグのセットの作成をゲームにして人にやらせる。
ネットでの対戦ゲーム。2人をランダムに選んで対戦させる。2人には同じ絵を見せて、絵に描かれたものを当てるのだが、お互いに相手が何を書くかを想像して、できるだけ同じ答えになるように仕向ける。同じ答えを書くとポイントをもらえる。外れたらポイントはもらえない。相手の心を読む、ということで、エスパーなんだろう。これで、人力で、絵に対するできるだけ共通の概念を示すタグが集まる、という算段。
http://www.gwap.com/gwap/gamesPreview/espgame/

データはどこからとれるのだろう?


caltech101,caltech256
http://www.vision.caltech.edu/Image_Datasets/Caltech101/


tinyimages
http://groups.csail.mit.edu/vision/TinyImages/

タグはwordnetに登録されているものを使っている。Visual Disctionaryなるものになってる。wordnetからのキーワードで画像をグーグルの画像検索で拾って、左に画像を並べる。右にはその平均画像を表示している。正しいと思う画像を訪問者にクリックさせている。
80M枚(32x32)のカラー画像データセットが取れる。非常にでかい。画像は227G、タグデータは57Gなど。データにはMatlabスクリプトでアクセスする。全部で400GBのデータサイズ。
http://horatio.cs.nyu.edu/mit/tiny/data/index.html


imagenet 
Amazon Mechanical Turk(アマゾンメカニカルターク) 機械仕掛けのトルコ人の意味だそうだ。

http://www.image-net.org/
Wordnetに登録されている名詞で画像検索した結果を人力でタグつけさせたもの。タグ付けには、
https://www.mturk.com/mturk/welcome
に仕事を出して、やらせた、らしい。
データセットをダウンロードできるが、それ以外の方法が多数用意されている点が特徴
書く画像は、URLで呼び出せる。
SIFT(画像特徴量の一種)が呼び出せる。http://www.image-net.org/download-features
画像中の注目オブジェクトを囲ったもの(bounding boxes)http://www.image-net.org/download-bboxes
APIも用意されている。
ただのデータセット置き場、ではなく、Webサービスを作る上でも面白い特徴が出ている。

センサの時系列解析例題

いくつかのセンサーの出力から、状態の推定、異常検出、パターン識別をする例題を見繕ってみたメモ

たまたま見た研究会資料から
(1)多センサの多次元表現と部分空間識別器に基づく異常検知
http://jglobal.jst.go.jp/public/20090422/201102278182361273

(2)尤度ヒストグラムに基づく異常検出
http://ci.nii.ac.jp/naid/40018763233
をざっと見た

いずれも、東京農工大日立製作所の何かのシステムにつけている19個のセンサから正常稼働日と異常稼働日を識別する2クラス識別器をつくる問題。

センサの時系列データをどのように表現、特徴量にするか、したほうが識別しやすいか。

(1)多センサの多次元表現と部分空間識別器に基づく異常検知

では、出力された順にそのままデータを並べて特徴ベクトルにする。19個のセンサーなので、19次元のベクトル。ただし、データの規格化を、正常値と異常値あわてする、正常値だけでする、しない、と3パターンやってみる。

固有空間法(部分空間法)して、正常と異常の2クラスの訓練データとテストデータの距離を算出。類似度pointsを各距離から計算。

類似度pointsの合計値のとり方をいろいろかえて、precision recall, F値 で評価。

(2)尤度ヒストグラムに基づく異常検出

尤度を、各センサーの各時刻における正常日のデータから正規分布モデルに対応させた、ありえそうな感じで定義。この尤度をある時間まで積算していく。積算時間の範囲を起動前、初回起動の前後α時間、稼動中、停止作業の前後α時間、停止中、という感じでわけてつくる。特徴ベクトルは、センサー数の19次元、あるいは、連結して5×19次元、など。

3σ管理図での評価とSVMでテスト

precision recallでみると、SVMより3σのほうがよくできている。

時系列解析応用

時系列解析というと、モデルあてはめて予測という流れになる。

http://tswww.ism.ac.jp/kawasaki/nagoya2001summer/index.htm

これが標準的なながれ。

状態を予測するのはこっち。

http://www.eb.waseda.ac.jp/murata/masako.yoshimura/openhouse/tsa.php

睡眠状態の推定。快適な目覚め。状態推定としてはいい例題だと思う。