.fstファイルのラティス(単語グラフ)可視化
OpenFSTのファイル形式(.fst)は、グラフ描画ができる。
OpenFSTがインストールされていることが前提。インストール方法は
教師なし形態素解析ツールlatticelmのインストールと実行方法 - Akiraのメモ書き
を参照。
ラティスをps、pdf形式で出力する方法
.fstファイルを生成していた後の処理
$ fstdraw --isymbols=syms.txt --osymbols=syms.txt fst.fst > fst.dot
dotファイルをps形式に変換
$ dot -Tps:cairo fst.dot >fst.ps
-Tpsオプションのみでは「Warning: UTF-8 input uses non-Latin1 characters which cannot be handled by this PostScript driver」というエラーが発生する場合がある。
日本語フォントだと文字化けする → 「-Tps:cairo」で日本語フォント挿入できる。
参考:
psファイルのpdf化
$ ps2pdf fst.ps fst.pdf
直接PDFに変換
$ dot -Tpdf:cairo fst.dot >fst.pdf
※適宜コマンドが実行できない場合はソフトウェアをインストールする必要がある。
例えば、音節辞書を使ったJuliusの音声認識結果ラティスをグラフ化するとこのようになる。
SLAM、Place categorization、Indoor navigation用データセット リンク集
移動ロボットを用いて取得されたSLAM、Place categorization、Indoor navigationなどのためのオープンデータセットをいくつか調べたので、まとめてみました。
(主に室内データセット)
rosbagファイルで公開されているデータセットはROSで利用可能
- MIT Stata Center Data Set
ファイル形式:rosbag
LaserScan, Odometry, Image など
- SLAM Benchmarking Datasets
ファイル形式:Carmen log file (.clf)
SLAM用データセット
Odometry, laser-range
- Indoor Level 7 S-Block Dataset - Robotics@QUT - Confluence
ファイル形式:rosbag
AMCL Pose, Stereo Images + Calibration, Odometry, Laser, Transforms -
OpenRatSLAM datasets - Robotics@QUT - Confluence
ファイル形式:rosbag
- The IDOL2 Database
laser scans, odometry data, image
- The COLD-Stockholm Database - Homepage of Andrzej Pronobis
ファイル形式:rosbag
laser scans, odometry data, image
データセット取得にはデータ提供者にコンタクトが必要
- Research | Kurazume Lab : Faculty of Information Science and Electrical Engineering, Kyushu University
Kyushu University Kinect Place Recognition Database
color and depth images
- Computer Vision Group - Datasets - RGB-D SLAM Dataset and Benchmark
ファイル形式:rosbag
laser scan, odometry data
- Radish - View Data Set
Complete Repository Listing
SLAM用データセットのリスト
ファイル形式:Carmen log file (.clf)
LaserScan, Odometry, Image など
- DATASET
Cognitive navigation dataset
ファイル形式:txt、jpg
RGB-D sensor, color images and depth maps(深度画像)
- KTP Dataset
ファイル形式:rosbag
Odometry, Depth, Image -
AASS Mobile Robotics & Olfaction Lab - Data Sets
ファイル形式:rosbag
SLAM用のテストデータセットが含まれる模様
- STRANDS public datasets
ファイル形式:rosbag
a depth/color image, camera information, robot position, tf data and laser scan -
MHT Building RGB-D and laser dataset
ファイル形式:rosbag
a depth/color image, camera information, robot position, tf data, laser scan and person detection
- List of RGBD datasets
RGBD(カラー画像+深度)のデータセットのリンク集
・RGBD Datasets: Past, Present and Future
・Datasets capturing single objects
・Segmentation and pose estimation under controlled conditions
・Kinect data from the real world
・SLAM, registration and camera pose estimation
・Tracking
・Datasets involving humans: Body and hands
・Datasets involving humans: Head and face
屋外データセット
今後も発見次第更新予定。
他のオープンデータセットをご存知でしたらコメントお願いします。
CaffeのPlacesCNNのリファレンスモデルで画像認識
風景(屋外&屋内)のシーン画像データセットを基に学習されたCNNとして、PlacesCNNがある。
PlacesCNNの論文やデータは以下のサイトから見ることができる。
今回、ダウンロードしたリファレンスモデルは、Places205-CNNである。
Places205-CNNでは、205のシーンカテゴリを認識できる。
以下のサイトからDLできる。上記のMITのサイトからもDL可能。
AlexNet、GoogleNet、VCCの学習済みモデルが公開されている。
また、Hybrid-AlexNetという、ImageNetデータセットとPlaces detaset両方から学習されたモデルもある。これは、物体場所合わせて1183カテゴリを認識できる。
私は、Caffeで手軽に画像分類 - Yahoo! JAPAN Tech Blogのサイトにあったfeature.pyを参考にしたPythonプログラムを使用している。
そのプログラム内でMEAN_FILEを指定する必要があるが、DLしたリファレンスモデルのフォルダ内には.npyファイルが含まれていないので、.npyファイルを作る必要がある。
binaryproto形式からnpy形式への変換は以下のサイトを参考にした。
パス設定は以下のようにした。
MEAN_FILE = './placesCNN/places205_mean.npy'
MODEL_FILE = './placesCNN/places205CNN_deploy.prototxt'
PRETRAINED = './placesCNN/places205CNN_iter_300000.caffemodel'
Places205-CNNの最終層を得たければ、feature.pyで以下のように指定すればよい。
Softmax関数をかけた後の認識結果が得られる。
LAYER = 'prob'
2016年最新のモデルでは、Places365というものもあるらしい。
教師なし形態素解析ツールlatticelmのインストールと実行方法
latticelmとは、Graham Neubig氏によって開発された、ノンパラメトリックベイズ法に基づくPitman-Yor言語モデルを用いた単語分割と言語モデルの教師なし形態素解析ツール
latticelmでは、以下の論文に記載された手法が実装されている。
Graham Neubig, Masato Mimura, Shinsuke Mori, Tatsuya Kawahara, Learning a Language Model from Continuous Speech, In Proceedings of InterSpeech, 2010.
Nested Pitman-Yor Language Model (NPYLM)の拡張であり、ラティス(単語グラフ)から単語分割と言語モデルの学習を行うことができる。*1
これにより、例えば単語辞書や言語モデルが未知の言語の音声コーパスからでも、音素認識の誤りに対応しつつ、単語に分割された音声認識結果を得ることができる。
ダウンロード、インストールは、latticelmのページから行うことができる。*2
また、OpenFSTという重み付き有限状態トランスデューサ(WFST)のライブラリのインストールが必要。*3
OpenFSTはREADMEまたはサイトのインストール手順に従って行う。
OSのバージョンやlatticelmのバージョンによって、対応するOpenFSTのバージョンが異なることがあるので注意。latticelm実行時にエラーがでるようなら、OpenFSTのバージョンを変更すると動く場合がある。
(Ubuntu 12.04 32bit : openfst1.4.1→latticelm :$make→エラー→openfst1.3.4に変更→OK)
(Ubuntu 14.04 64bit : v.1.3.4→エラー→1.4.1→エラー→latticelmをgitからDL→OK)
opefstのディレクトリで以下を実行。
./configure
make
make check
sudo make install
latticelmはgitからDLする方がベター。
インストールはlatticelmのディレクトリで以下を実行。
make
実行コマンド例
latticelm -input fst -filelist fst_gmm/fstlist.txt -prefix out/ -symbolfile fst/isyms.txt -burnin 50 -samps 100 -samprate 5 -annealsteps 10 -anneallength 15 -knownn 5 -unkn 5
オプションで、ファイルディレクトリの指定やパラメータ値を指定することができる。
各パラメータについてはlatticelmのサイトを参照。
また、latticelmは、WFST形式ラティスのみならず、NPYLMと同様にテキストデータからでも実行可能。
/tutorial/にテキストおよびラティスからの実行方法とテスト用のデータ等は入っているので、まずはそれを実行してみると使い方がわかると思う。*4
/tutorial/1-wordseg/scriptには、unspace-text.plというテキスト文からスペース文字を抜くスクリプトもあるので便利。
テキスト実行コマンド例
$ nkf -w --overwrite ./text.txt #文字コードをUTF-8に変換
$ ~/latticelm/tutorial/1-wordseg/script/unspace-text.pl < ./text.txt > ./text.char #スペース文字を除去
$mkdir ./out #出力用のoutフォルダを作成
$ latticelm -prefix out/ ./text.char
学習結果の出力
-prefixオプションで指定したoutフォルダに出力される。
- samp.100:単語分割結果
- sym.100:全単語のリスト
- ulm.100:未知語モデル
- wlm.100:単語モデル
未知語モデルと単語モデルは、ARPA 標準形式の N-gramモデルの模様。
latticelmのパスを通す
echo "PATH=$PATH:/home/*/latticelm" >> ~/.bashrc
*:ユーザネーム
[追記]OpenFSTのパスを通す
latticelmを実行したときに以下のエラーがでた場合
error while loading shared libraries: libfst.so.3: cannot open shared object file: No such file or directory
ライブラリのパスが通っていないので、パスを追加するとよい。
echo "export LD_LIBRARY_PATH=/usr/local/lib" >> ~/.bashrc
or
echo "export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH;" >> ~/.bashrc
[追記2]乱数シードの変更
pylm.hで乱数シードをtimeで設定することによって、実行ごとに異なるサンプリング結果を得ることができるようになる。
#include <time.h>
rand()を呼び出している行の直前に以下を挿入
srand( (unsigned)time(NULL) );
TIPS
- 良い結果を得るには、意外とオプションのパラメータ調整が効いてくる模様。
- 焼きなまし、n-gram長あたりのパラメータを変えてみるとよい。
- 適切なパラメータ値は、入力するラティスコーパスによって適宜異なるためその都度調整。(サンプリング数<パラメータ な感じで結果が依存する傾向。)
- 入力データ、パラメータ値が同一だとサンプリング結果も同一のものが得られる。(乱数シードが同一なための模様。)
ちなみに、開発者のgitにはlatticelm-v2なるものもあるが、こちらは開発中?
Caffeの学習済みモデルによる画像特徴抽出
Caffe | Deep Learning Framework
The Berkeley Vision and Learning Centerが開発しているディープラーニング用のライブラリ
特に画像認識分野で近年成果を上げているConvolutional Neural Network (CNN)に特化している
学習済みのリファレンスモデルがいくつか公開されているので、大量の画像データセットを用意できない人やコンピュータの計算能力が限られている人にも手軽に使うことができる。
インストール
Ubuntuにインストールする場合は基本的にCaffeのサイトの手順で行えばできる
以下はUbuntu14.04の場合
git clone https://github.com/BVLC/Caffe.git
sudo apt-get install g++-4.6
sudo apt-get install libatlas-base-dev
sudo apt-get install python-dev python-pip
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
cd caffe
cp Makefile.config.example Makefile.config
コピーしたMakefile.configを編集
## Refer to http://caffe.berkeleyvision.org/installation.html # Contributions simplifying and improving our build system are welcome! # cuDNN acceleration switch (uncomment to build with cuDNN). # USE_CUDNN := 1 # CPU-only switch (uncomment to build without GPU support). CPU_ONLY := 1 # uncomment to disable IO dependencies and corresponding data layers # USE_OPENCV := 0 # USE_LEVELDB := 0 # USE_LMDB := 0 # uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary) # You should not set this flag if you will be reading LMDBs with any # possibility of simultaneous read and write # ALLOW_LMDB_NOLOCK := 1 # Uncomment if you're using OpenCV 3 OPENCV_VERSION := 3 # To customize your choice of compiler, uncomment and set the following. # N.B. the default for Linux is g++ and the default for OSX is clang++ CUSTOM_CXX := g++-4.6 # CUDA directory contains bin/ and lib/ directories that we need. #CUDA_DIR := /usr/local/cuda # On Ubuntu 14.04, if cuda tools are installed via # "sudo apt-get install nvidia-cuda-toolkit" then use this instead: CUDA_DIR := /usr |
Makefile.configは 環境に応じて変更すること
make
make test
make runtest
エラーが出なければインストール成功
Pythonでimport caffeしたい場合は、
Ubuntu14.04へのCaffeのインストール - kivantium活動日記
のPython関係のインストールの項目を参照
sudo apt-get install python-dev python-numpy python-skimage
make pycaffe
.bashrcにパスを通す
export PYTHONPATH=~/Caffe/python/:$PYTHONPATH
source ~/.bashrc
numpyのバージョンが違うとエラーが出た場合
RuntimeError: module compiled against API version a but this version of numpy is 9
http://nonbiri-tereka.hatenablog.com/entry/2015/04/27/114536
sudo pip install numpy --upgrade
リファレンスモデルの導入&中間層の特徴を抽出
caffeのビルドしたディレクトリ上で
./data/ilsvrc12/get_ilsvrc_aux.sh
ここからが少しややこしい。私がインストールした時点(2016/6/21)ではCaffeのファイル構成が微妙に参考サイトのものと違っていたりした。
examples/imagenetディレクトリでget_caffe_reference_imagenet_model.shを実行
→ないので、下記を実行
wget https://raw.githubusercontent.com/sguada/caffe-public/master/models/get_caffe_reference_imagenet_model.sh
chmod u+x get_caffe_reference_imagenet_model.sh
./get_caffe_reference_imagenet_model.sh
このコードで取得するのはILSVRC2012データセットのImageNetモデル
cd ~/Caffe/data/ilsvrc12/
./get_ilsvrc_aux.sh
cd ~/Caffe/examples/imagenet/
wget https://raw.githubusercontent.com/aybassiouny/wincaffe-cmake/master/examples/imagenet/imagenet_deploy.prototxt
cp imagenet_deploy.prototxt imagenet_feature.prototxt
emacs ./imagenet_feature.prototxt &
imagenet_feature.prototxtを以下のように編集*3
- layersのnameが"fc6" ⇒ topの値を"fc6"から"fc6wi"に変更
- layersのnameが"relu6" ⇒ bottomの値を"fc6"から"fc6wi"に変更
ちなみに、ImageNetモデルでは中間層はfc6とfc7がある。
文献によっては、fc7の層から特徴を抽出している場合もあるようだ。
Caffeで手軽に画像分類 - Yahoo! JAPAN Tech Blogのサイトにあったfeature.pyを実行してみたが、caffeのバージョンの問題で動かなかった関数があったため、以下のように変更した。
feature.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os, os.path, numpy, caffe
#FULL PATH
MEAN_FILE = '~/Caffe/python/caffe/imagenet/ilsvrc_2012_mean.npy'
MODEL_FILE = '~/Caffe/examples/imagenet/imagenet_feature.prototxt'
PRETRAINED = '~/Caffe/examples/imagenet/caffe_reference_imagenet_model'
LAYER = 'fc6wi'
INDEX = 4
net = caffe.Classifier(MODEL_FILE, PRETRAINED)
caffe.set_mode_cpu()
net.transformer.set_mean('data', numpy.load(MEAN_FILE))
net.transformer.set_raw_scale('data', 255)
net.transformer.set_channel_swap('data', (2,1,0))
image = caffe.io.load_image(sys.argv[1])
net.predict([ image ])
feat = net.blobs[LAYER].data[INDEX].flatten().tolist()
print(' '.join(map(str, feat)))
wget http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz
tar xf 101_ObjectCategories.tar.gz
実行例
python feature.py 101_ObjectCategories/airplanes/image_0001.jpg > tmp.txt
tmp.txtに4096次元の数値データが保存できていれば成功
feature.pyを実行した際のエラー対処にはこのサイトが役立った
OSX10.10でCaffeをインストール、リファレンスモデルで画像を分類 - Qiita
classify.pyを使用して画像分類の項目を参照。
caffe/python/caffe/io.pyの該当部分を古いバージョンのCaffeのコードに直せばよいらしい。
公開されているリファレンスモデル(学習済みモデル)は以下のサイトから探すことができる
Model Zoo · BVLC/caffe Wiki · GitHub
参考サイト
Ubuntu 14.04にOpenCV 3.1.0をインストール
Ubuntu 14.04 LTS(64bit)にOpenCV 3.1.0をインストールするときのメモ*1
今回は、Python 2.7.6でSIFT特徴が取れるようにする。
参考サイト
Ubuntu14.04にpython用にOpenCV3.0.0をインストール - Qiita
OpenCV3.0とopencv_contribをubuntuに入れた作業メモ - Qiita
UbuntuでOpenCV3.0をコンパイルする - 動かざることバグの如し
必要なライブラリのインストール
sudo apt-get -y install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff4-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
ソースファイルのダウンロード
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/3.1.0/opencv-3.1.0.zip
unzip opencv-3.1.0.zip
opencv_contribのダウンロード
git clone --depth 1 https://github.com/Itseez/opencv_contrib.git opencv_contrib
.bashrcに以下を追加
export PYTHON_INCLUDE_DIRS=/usr/include/python2.7
export PYTHON_LIBRARYS=/usr/lib/x86_64-linux-gnu/libpython2.7.so
インストール
cd opencv-3.1.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules ..
make -j $(nproc)
sudo make install
sudo ldconfig
$(nproc)はコア数*2
あと他に必要かもしれなそうなこと
sudo cp ~/opencv-3.1.0/build/lib/cv2.so /usr/local/lib/python2.7/site-packages/
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
Pythonで使えるようになったかどうかは、参考サイトの動作確認のコードを実行
OpenCV3.0とopencv_contribをubuntuに入れた作業メモ - Qiita
cppファイルのコンパイル方法
g++ -o sample ./sample.cpp -ggdb `pkg-config --cflags opencv` `pkg-config --libs opencv`
OpenCVでSIFTやSURFを使う場合、バージョンによって関数名が違う場合があるので注意。