Edited at

Bounding BoxごとのAugmentationに回転を使うとBoxが大きくなったので、差があるのか比較してみた


概要

先日Augmentationのライブラリであるimgaugを用いてBounding BoxごとのAugmentationを行なっていた際、rotate(回転)を使うとBounding Boxが大きくなることを知ったため、しっかりアノテーションしたものと差があるのか比較してみました。


行なったこと



  • LabelImgを用いてアノテーション。


  • imgaugを用いて、Bounding Boxごと画像をAugmentation。

  • Augmentationした画像に対して、再度アノテーションを実施してアノテーション情報を変更した学習用データと、変更していない学習用データの2つを用意。

  • それぞれKerasのYOLO-v3を用いて学習、予測。


データについて

学習にはKaggleのDatasetsにあるBlood Cell ImagesのJPEGImagesに格納されている白血球の画像を使用しました。

白血球は基本的には以下の5種類に分類されます。今回はこの5種類の分類、検出を行なっています。

白血球名
画像
拡張前の枚数

好中球(NEUT)

205枚

リンパ球(LYM)

32枚

単球(MON)

16枚

好酸球(EOS)

50枚

好塩基球(BAS)

7枚

(本当にこの分類で正しいか怪しい画像は削ったり、枚数の少なかった好塩基球は拾ってきた画像を何枚か追加したりしています)


Augmentation

今回は画像が各500枚ずつになるように、以下の種類のAugmentationを行いました。

seq = iaa.SomeOf(4, [iaa.Affine(rotate=(-45, 45)),

iaa.Fliplr(0.5),
iaa.Flipud(0.5),
iaa.GaussianBlur(sigma=(0.0, 1.0)),
iaa.ContrastNormalization((1, 1.5), per_channel=0.7),
iaa.Dropout(p=(0, 0.03))
])

こんな感じになりました。

拡張前
再アノテーションした画像
再アノテーションしていない画像

0.jpg
1.jpg
2.jpg

一番右がBounding BoxごとAugmentationした画像ですが、回転させた場合、Bounding Boxが大きくなっていることが分かります。


結果

テスト画像には、上記と同じく、KaggleのDatasetsにあるBlood Cell ImagesのTEST_SIMPLEに格納されている画像を使用しました。


  • 再アノテーションした学習用データの場合

    result2.jpg


  • 再アノテーションしていない学習用データの場合

    result1.jpg


分類の結果は同じでしたが、いくつかの画像ではBounding Boxに若干ですが違いが見られました。

NEUT44.jpegNEUT44.jpeg

NEUT15.jpegNEUT15.jpeg

左が再アノテーションした学習用データを用いた場合で、右が再アノテーションしていない学習用データを用いた場合です。

上の画像は、左のBounding Boxに比べると右のBounding Boxは少し小さくなり(Bounding Boxから白血球がはみ出している)、下の画像は逆にBounding Boxが大きくなっていました。


まとめ

今回の結果ではBounding Boxに若干の違いはありましたが、分類やBounding Boxの位置には問題はなかったため、個人的にはあまり気にしなくても良いのかなと感じました。