YOLO開発のディープラーニングフレームワークdarknetはデータ拡張(Data Augmentation)がデフォルトで機能する。これを知らないで、データ拡張を議論していたのでメモしておく。
yolov3.cfgファイルのデータ拡張のパラメータは以下の4つ。ソースコードを読むとhsv色空間を使っており、hueはカラーチャンネル0、saturatioはカラーチャンネル1、exposureはカラーチャンネル2に割り当てられているので、exposureはValue(明度)のことだと思われる。
- saturation(彩度):14行目、デフォルト値1.5、1/saturation~saturationの乱数
- exposure(露光):15行目、デフォルト値1.5、1/exposure~exposureの乱数
- hue(色相):16行目、デフォルト値0.1、-hue~hue
- jitter(変動):785行目、デフォルト値0.3、切り抜く割合を指定するパラメータ。例えば、jitterが0.2だと、原画像のサイズから約80%まで切り抜く。つまり、ウインドウの幅と縦はそれぞれ80%~100%までの乱数となる。
- random:788行目、デフォルト値1。1の場合は入力画像サイズは一定ではなく、10エポック毎にネットワークサイズが320×320 から 608×608にランダムに変わる。これはいろいろな解像度の入力画像に対してYoloをロバストにすることを狙っている。
データ拡張を無効にするためには、パラメータを以下のように設定する。
- saturation=1.0
- exposure=1.0
- hue=0
- jitter=0
- random=0
なお、flip(左右反転)はdata.cの758~759行目に以下のようにコーディングされている。
int flip = rand()%2;
if(flip) flip_image(sized);
つまり、1/2の確率で左右を反転を生成している。cfgファイルで無効にできない。
以上
コメント