Data Augmentationというのは、データを変形させて訓練データを増やすこと。そのためのopencv_createsamplesが提供されている。上の画像のように回転・拡縮・光を変えて生成される。コマンド例は、
1枚の画像を変形させて増幅し、vecにまとめる
opencv_createsamples -vec output.vec -img faces/00000000.jpg -num 10 -bgcolor 255 -h 250 -w 250 -show
オプションは、
Usage: opencv_createsamples
[-info <collection_file_name>]
[-img <image_file_name>]
[-vec <vec_file_name>]
[-bg <background_file_name>]
[-num <number_of_samples = 1000>]
[-bgcolor <background_color = 0>]
[-inv] [-randinv] [-bgthresh <background_color_threshold = 80>]
[-maxidev <max_intensity_deviation = 40>]
[-maxxangle <max_x_rotation_angle = 1.100000>]
[-maxyangle <max_y_rotation_angle = 1.100000>]
[-maxzangle <max_z_rotation_angle = 0.500000>]
[-show [<scale = 4.000000>]]
[-w <sample_width = 24>]
[-h <sample_height = 24>]
複数画像を入力にするなら-info, 単一画像なら-imgを使う。画像が生成されるのではなく、vecファイルというバイナリが生成される。これはopencv_haartrainingコマンド, opencv_traincascadeコマンドなどの入力となる。
形が決まっている物、たとえばCDのジャケットなどは上記コマンドで数千枚を生成すればそれの検出器を作れるだろう。顔検出の場合は-infoを使って様々な人の顔を入力とすべき。
PNG出力
できると書いてあるが、-info, -img共に、Macでは出力されなかった。
-infoで複数の正例をvecにまとめる
opencv_createsamples -vec output.vec -info positives.txt -num 4 -bgcolor 255 -h 250 -w 250 -show
positives.txtは、
./data/faces/00000000.jpg 1 1 1 250 250
./data/faces/00000001.jpg 1 1 1 250 250
./data/faces/00000002.jpg 1 1 1 250 250
./data/faces/00000003.jpg 1 1 1 250 250
こうすると複数画像を学習データのvecにできる。変形は行わないようだ。1枚の画像に顔が複数あってどちらも学習する場合の指定方法は、
img/img2.jpg 2 100 200 50 50 50 30 25 25
このように、2枚と書いてx, y, width, heightの順に書く。形式
実行時間
time opencv_createsamples -vec positives.vec -info positives.txt -num 13233 -h 24 -w 24
結果は、
Done. Created 13233 samples
real 0m18.683s
user 0m13.293s
sys 0m2.881s
vecのサイズは15.3MB.