ふらふら Diary (仮)

興味のあることを適当に書いていく感じです

/* cherry-blossom viewing */

昨日,桜を見に行きました.天候が心配されましたが,この日は雨は降ることなく,時折,日が出てくることもあり,よかったです.
昨年の今頃は桜を見る余裕もなかったので今年は見ることができうれしかったです.

毎年,来年の桜は見られるのだろうか,と思ってしまうので,今年の桜をしっかりと見て春を感じたいと思います.


https://instagram.com/p/09jWbYQF4E/

https://instagram.com/p/09jZemwF4K/

https://instagram.com/p/09jvDGQF4n/

https://instagram.com/p/09j6DJwF47/

https://instagram.com/p/09j9-pQF5A/


残りはInstagram (https://instagram.com/jetarin_a/) に載せていますので,ご覧ください.

/* 理由なく上がったTOEICの点数 */

2015年4月12日に第199回TOEIC公開テスト,同年5月24日に第200回TOEIC公開テストがあるようです (http://www.toeic.or.jp/).

さて,1年前の2014年6月までにTOEIC公開テストのスコアが必要になりました.
このことが分かっていたにも関わらず,勉強していませんでした.

でも,いいスコアが欲しい….少なくとも大学生の平均ぐらいは欲しいということで勉強を始めました.


まず,

はじめての新TOEICテスト 完全攻略バイブル

はじめての新TOEICテスト 完全攻略バイブル

を購入して,やりました.大切なことはリスニングで点数を稼ぐというところですね.リスニングは全く聞き取れないと思い,リーディングを頑張ろうと思ったのですが,リスニングの方が点数がとれるようで.これは2周はやりました.


そして,「はじめての新TOEICテスト 完全攻略バイブル」である程度TOEICがどんなテストであるか分かった後は

TOEICテスト新公式問題集〈Vol.5〉

TOEICテスト新公式問題集〈Vol.5〉

をきっちり2時間計って解きました.

どちらも解くだけではなく,何度も聞いて出てきた単語を覚えて勉強しました.


その後,本格的に勉強し始めて2ヶ月で180点上がりました.無事(?)大学生の平均点ほどのスコアを手に入れたのです.


振り返って思うのは,2ヶ月でこれだけ上がったのは,TOEICがどんなテストであるか事前に知っていたことが大きいと思います.というのも,2013年は4度受験しましたし,2011,2012年ともに2度以上は受験しています.勉強もしていないにも関わらず,受験料を支払うのは愚かだったとは思いますが,これによって少しは良い結果が得られたのではないかと感じます.

人検出における評価指標

提案手法の有効性を示すためには評価実験をします.実験の評価基準にはいくつかありますが,本記事では2つを紹介し,そのうちの1つを詳しく書いていきます.

  • 縦軸にmiss rateを縦軸にFalse Positive Per Window (FPPW)を示すDetection Error Tradeoff (DET)カーブを描く*1

こちらは学習データと同じ大きさの画像を評価用画像として用いて比較実験を行います.

  • 縦軸にDetection Rateを横軸にFalse Positive Per Frameを示すROCカーブを描く*2

こちらは車載カメラや防犯カメラで撮影された画像を評価用画像として用いて比較実験を行います.この場合,画像データセットを用いた場合は,アノテーションデータとして人の存在する位置や大きさが記述されています.このアノテーションデータを用いて検出精度を比較します.


本記事ではmiss rateとFPPWを算出してDETカーブを描く評価指標について述べたいと思います.
まず,miss rate,FPPWは次の式で定義されます.

\text{miss rate} = 1 - \dfrac{\text{人画像を正しく人として識別した数}}{\text{人画像の数}}

\text{FPPW} = \dfrac{\text{背景画像を間違えて人と識別した数}}{\text{背景画像の数}}

評価手順としては,まず,前回の記事と同様にHOG特徴量を算出します.識別器を構築するときと同様,+1には人画像,-1には背景画像のHOG特徴量をそれぞれ算出します.今回は人画像10枚,背景画像10枚として評価を行います.これをexample.datとし,ファイルに書き込みます.そして,コマンドプロンプトを開き,SVM-Light (http://svmlight.joachims.org/)のあるディレクトリに移動します.
その後,前回で作成したmodel_fileを用いて以下のように記述します.

 > svm_classify example.dat model_file output_file

次に作成したoutput_fileを見てみます.

0.1131256
0.57471402
0.32858306
0.2575153
0.62797327
0.39330365
0.68454537
0.7337844
0.53083444
0.55778887
-0.40430174
0.019183116
-0.10045875
-0.19039516
-0.74474677
0.093509865
-0.30452128
-0.24911432
-0.26294845
-0.44431607

このうち,上の10行は人画像,残りは背景画像です.
人と判定するしきい値を0以上とした場合,この中では上の10行と12,26行目の画像は人画像と識別されたということになります.このしきい値を変化させることによってmiss rateとFPPWを算出し,これを曲線で結ぶことによって描画していきます.

二つ以上の手法で検出精度を比較する場合,DETカーブが原点に近く描かれる手法であるということを示します.
人検出の場合,人画像であるにも関わらず,背景画像と識別した誤検出と,背景画像であるにも関わらず,人画像と識別した未検出を算出して精度を比較します.

誤検出も未検出も小さい値を示すことが理想です.

*1:N. Dalal and B. Triggs. Histograms of oriented gradients for human detection. Proceedings of 2005 IEEE Computer Society Conference on Computer Vision and Pattern Recognition, Vol. 1, pp. 886-893, June 2005.

*2:M. Enzweiler and D. M. Gavrila. Monocular pedestrian detection: Survey and experiments. Pattern Analysis and Machine Intelligence, Vol. 31, No. 12, pp. 2179-2195, Dec. 2009.

人検出における識別器構築 -その2-

前回の記事の続きです.

人画像,背景画像を用意した後,これらから特徴量を抽出し,学習した識別器を構築します.今回は,画像特徴としてHOG特徴量を使用し,識別器にSVMを用います*1.なお,本記事では,HOG特徴量の算出については省きます.いろいろなサイトをご覧になれば,詳しく記載されていますので.

SVMについてはSVM-Light (http://svmlight.joachims.org/)を使用します.SVM-Lightで使用できるようにHOG特徴量は以下のように記述できるようにしておきます.

+1 1:0.059147 2:0.047999 3:0.053404 4:0.060847 5:0.041208...
...
-1 1:0.150525 2:0.046580 3:0.052251 4:0.104595 5:0.045420...

+1には人画像,-1には背景画像のHOG特徴量をそれぞれ算出します.これをHOG2.datとし,ファイルに書き込みます.
そして,コマンドプロンプトを開き,SVM-Lightのあるディレクトリに移動します.その後,以下のように記述します.

> svm_learn HOG2.dat model_file

このようにすると以下のように出力され,model_fileというファイルが作られます.今回は,人画像10枚,背景画像10枚で学習しています.実際はもっと画像枚数が多いほうが良いです.画像枚数を増やすほど学習には時間がかかるようになります.
HOG2.datがSVM-Lightと別のディレクトリに保存している場合は

C:\○○\HOG2.dat

とします.model_fileを保存するディレクトリを指定する場合も同様です.

f:id:jetarinA:20150212195512p:plain


識別器構築については以上です.
次回は評価指標などにすることとします.

*1:N. Dalal and B. Triggs. Histograms of oriented gradients for human detection. Proceedings of 2005 IEEE Computer Society on Computer Vision and Pattern Recognition, Vol. 1, pp. 886-893, June 2005.

人検出における識別器構築 -その1-

今回は,人検出を行うための識別器構築をしたいと思います.
なお,本記事では,人画像(ポジティブ・歩行者)は事前に用意しているという前提で話を進めたいと思います.

背景画像(ネガティブ・非歩行者)は,人画像と同じ大きさに切り取られる必要があります.しかし,例えば今回使用したDaimler Mono Ped. Detection Benchmarkのように,背景画像が人画像と同じ大きさで与えられていないものもあります.
その場合は,自分で切り取る必要があります.


negative image

ランダムな位置およびスケールで切り出されたものを人画像と同じ大きさ(48×96ピクセル)で切り取りました.今回は1枚の背景画像について10ヶ所から切り取っています.

  • 29行目で0から入力画像 (src_img) の幅 (src_img.col) からWIDTH (48) の間で乱数を生成させています.
  • 30行目で0から入力画像0から入力画像 (src_img) の高さ (src_img.row) からHEIGHT (96) の間で乱数を生成させています.
  • 31,32行目でWIDTH/2 (48÷2=24) からWIDTH (48) の間,HEIGHT/2 (96÷2=48) からHEIGHT (96) の間で乱数を発生させています.この値はさまざまに変えてもよいと思います.
  • 33行目で
 printf("%d %d\n", a, b);

とありますが,aとbの値を表示させているだけですので不要です.(私の場合は確認のために表示させています.)不要な場合は,

 //printf("%d %d\n", a, b);

コメントアウトするか削除してください.

  • 35行目はroi_imgにsrc_imgに(深い)コピーしています.
  • 36行目はdst_img1をroi_imgから切り取った画像としています.具体的には点(a, b)から幅c,高さdだけ切り取っています.
  • 38行目ではdst_img1を正規化(48×96ピクセルの大きさにする)し,これをdst_img2としています.
  • そして42行目で画像を保存します.

乱数生成については以下のサイトを参考にしました.
C言語による乱数生成


書き方の問題はあるかと思いますが...
識別器構築についてはまた書きたいと思います.

/* Happy New Year 2015 */

明けましておめでとうございます.
今年もよろしくお願いします.

昨年の9月にブログを始め,年を越しました.
ブログを始めた当初は,もっと日記のような今日あった出来事を記録していくのだろうと思っていました.でも,実際は,画像処理・画像認識を勉強し始めた自分が後々に困ることのないようにソースコードを載せていることの方が多かったです.

これから,記事の内容については変わることがあるかもしれません.


2012年8月に登録したTwitterは削除しました.自分の人生は決してリセットできないけれど,すべてのつながりをいったん削除したいと思ったからです.もちろん,すべての人とつながりたくないと思ったのではありません.やめたらその分寂しくなるという思いを持って削除しました. 結局,アカウントは復活させました (2015/3/12 追記).4月からは所属が変わり,今までつながっていた人とは一生会わないかもしれません.そのような中で一日一日を大切に生き,充実した1年にしていきたいです.