ブログ

Blog

絞り込んで表示する

2018.10.03 - 

画像分類の予測精度を向上させてみる

グルーヴノーツ コンサルタントの吉村です。

先日やった画像分類の精度向上の手法について説明したいと思います。

画像分類に精度向上には基本的には 画像を増やす ことが何よりも正です。

とは言うものの画像を増やすのって大変ですよね。 今回のコーヒー豆であれば私がもっといっぱい撮影すればいいだけなのですが、 実際の現場で特に製造業や設備保守の現場ではそうはいきません。

そこで今回は「本当は画像をもっと収集したいけど難しいから仕方なく水増しする」方法をご案内します。 水増しの考え方として基本的には下記のようなことを考えます。

  • 画像を反転・回転させる
  • 画像を拡大・縮小させる
  • 画像を上下・左右に移動させる
  • 画像の明るさ・コントラストを調整する
  • 画像にあえてノイズを追加する

上記の考え方は取り組む画像分類の課題によって向き不向きがあります。 例えば工場のラインで固定されたカメラで撮影されるのであれば、明るさ・コントラストやノイズは不向きでしょう。 また自動車のように逆さまで撮影されることのないものを回転や上下反転は不向きでしょう。

そこで今回は先日のコーヒー豆の画像をやりやすいところで、回転・反転させてみます。 回転は細かく回転させてもいいのですが、分かりやすいところで90,180,270度回転にします。

まずは回転させてみます。下図の左上(赤枠)の画像がオリジナルの画像です。

続いて反転させます。下図の左上(赤枠)が左右反転させたもので、残りが回転させた画像です。
(上下反転も加えると画像が重複するのでこれだけで大丈夫です)

このように回転と反転を組み合わせるだけで1枚が8枚になります。 前回の70枚(ok:35枚+ng:35枚)を回転・反転させると8倍の560枚まで水増しすることができます。 この560枚でトレーニングを実施したモデルで予測してみると前回1枚だけ間違えた画像も正解することができました。

今回ご案内した水増しと併せてトレーニング方法で 精度優先 を利用することでより高い精度のモデルを作ることが可能です。 MAGELLAN BLOCKSの画像分類はとにかく使い方が簡単で、このように精度向上もパラメータチューニングなどなく実施することが可能です。 人間が画像を見ることで何かしらの判断をする業務がある現場でぜひお試しいただければと思います。


補足:画像を回転・反転させる方法

画像を回転・反転させる方法は色々ありますが、個人的にはImageMagikというコマンドツールをおススメしています。 ImageMagikで回転・反転させるコマンドはこのようなコマンドを使います。

#回転させる
convert -rotate 090 input.jpg output_090.jpg
convert -rotate 180 input.jpg output_180.jpg
convert -rotate 270 input.jpg output_270.jpg
#左右反転させる
convert -flop input.jpg output_flop.jpg

ちょっとプログラミングしちゃってますがBashが入っている環境(最近ではWindowsでも入ってる?)ではこのシェルスクリプトでまとめて水増しできます。

image_augmentation.sh

#!/bin/sh
shellname=`echo ${0##*/}`
target_directory=`pwd`
filelist=${target_directory}/${shellname%.*}_$$.tmp
# Listing JPG files
find -s ${target_directory} -type f \( \
        -name \*\.jpg  \
    -or -name \*\.JPG  \
    -or -name \*\.jpeg \
    -or -name \*\.JPEG \
    \) > ${filelist}
# Listed operatoin
exec 3< ${filelist}
while read filepath 0<&3
do
    # get filename and extention
    filename="${filepath%.*}"
    extension="${filepath##*.}"
    # flopping jpeg image
    convert -flop ${filename}.${extension} ${filename}_flopped_000.${extension}
    # rotating jpeg image
    convert -rotate 090 ${filename}.${extension} ${filename}_090.${extension}
    convert -rotate 180 ${filename}.${extension} ${filename}_180.${extension}
    convert -rotate 270 ${filename}.${extension} ${filename}_270.${extension}
    convert -rotate 090 ${filename}_flopped_000.${extension} ${filename}_flopped_090.${extension}
    convert -rotate 180 ${filename}_flopped_000.${extension} ${filename}_flopped_180.${extension}
    convert -rotate 270 ${filename}_flopped_000.${extension} ${filename}_flopped_270.${extension}
    # rename original image
    mv ${filename}.${extension} ${filename}_000.${extension}
done
exec 3<&-
# Remove temp files
rm -f ${filelist}
# Finish message
echo "Flopping and Rotating is finished."

これ以外にもMacならプレビューアプリ、Windowsならエクスプローラからも可能です。(Windowsでは回転はできるけど反転は見つけられませんでした)

Macのプレビューで画像を回転・反転させる例

Windowsのエクスプローラで画像を回転させる例


※本ブログの内容や紹介するサービス・機能は、掲載時点の情報です。