物体検出 – HaarLike 分類器の作成 for mac (オブジェクトの学習編)

positive

物体検出の続きです。 前回はOpenCVの導入まで行いました。今回は前回インストールしたOpenCVでターミナルで使うコマンド「opencv_createsamples」を使ってオブジェクトを学習したいと思います。 ※今回の学習記事は主にOpenCVのドキュメントをもとに解説します。 ドキュメント内では「opencv_createsamples」は下記のように定義されています。

opencv_createsamples is used to prepare a training dataset of positive and test samples. opencv_createsamples produces dataset of positive samples in a format that is supported by both opencv_haartraining and opencv_traincascade applications. The output is a file with *.vec extension, it is a binary format which contains images.

つまり正解画像のサンプル集をつくってくれるコマンドというわけです。 まず作業用のディレクトリを作成します。 この記事ではDesktopにあることを前提として進めます。

$ mkdir Coffee

次に学習させるためのサンプルを用意します。 学習にはPositive(正解画像)とNegative(不正解画像)の2タイプのサンプルが必要です。

Negative画像

Negative samples are taken from arbitrary images. These images must not contain detected objects. Negative samples are enumerated in a special file. It is a text file in which each line contains an image filename (relative to the directory of the description file) of negative sample image. This file must be created manually. Note that negative samples and sample images are also called background samples or background samples images, and are used interchangeably in this document. Described images may be of different sizes. But each image should be (but not nessesarily) larger then a training window size, because these images are used to subsample negative image to the training size.

Nnegative画像は画像中にPositive画像が入っていないことが重要です。入ってなければどんな画像でも大丈夫みたいです。 Negative画像用のフォルダを作ります。


$ mkdir Coffee/Negatives

今作ったNegative画像用のフォルダに任意の画像を入れます。あまり必要ないですが、ファイル名を連番にしたい場合はappleScriptで一括変換することができます。 画像を入れ終わったら、Negative画像の保存先ファイルパスが書かれたテキストファイルを作成します。このファイルパスを記述する際に、先ほどのファイル名を連番にした作業が効いてきます。 もしくは以下のコマンドでテキストファイルを生成できます。

$ find ./Negatives -iname "*.jpg" > negatives.txt

生成するファイルは作業ディレクトリからの相対パスになります。

./Negatives/negative01.jpg
./Negatives/negative02.jpg
./Negatives/negative03.jpg
./Negatives/negative04.jpg


Positive画像

positive画像は1枚の画像から作ります。今回はコーヒー豆を特定するのでコーヒー豆の画像を用意します。 coffee

次にターミナルで「opencv_createsamples」コマンドを実行します。
「-」で始まる文字がパラメータの指定となります。

 $ opencv_createsamples -img coffee.jpg -vec coffee.vec -num 100 -bgcolor 255 -w 44 -h 44 

このコマンドを実行すると、-imgで指定した画像を基に、回転させたり色を変えたりして新しくPositive画像を自動生成します。そのため、大量にPositive画像を集めてきて用意する手間が省けます。

主要パラメータ

-vec <vec_file_name>

 生成するvecファイル名。

-img <image_file_name>

 学習に使用する画像 (Positive画像)。
 ※今回はcoffee.jpg

-bg <background_file_name>

 背景に使用する画像を指定する。
 Negative画像用に作成したテキストファイルのパスを指定します。

-num <number_of_samples>

 学習させるサンプル画像の数。多いと検出精度は上がるが、その分生成時間がかかります。

-bgcolor <background_color>

 0〜255の値で背景色を指定します。
 ※グレースケールを前提としているので注意。

-maxxangle <max_x_rotation_angle>
-maxyangle <max_y_rotation_angle>
-maxzangle <max_z_rotation_angle>

 回転した学習画像を生成する際の最大回転角を指定します。

-show

 このオプションを追加すると、それぞれに生成された画像を表示させることができます。
 デバッグとしてどのような画像が生成されるのかを確認するときに使用するといいです。
 [esc]キーでプロセスを中断することができます。

-w <sample_width>

 生成するPositive画像の横サイズ。

-h <sample_height>

 生成するPositive画像の縦サイズ。

positiveSamples
次回は生成したPositive画像の「.vec」ファイルとNegative画像で分類器を作成し、実際にオブジェクトの検出を行います。

You may also like...