はい、part2は画像の大きさ縮小と水増しでございます。
-- 目次 --
- part0 前書き
- part1 画像の収集
- part2 画像の縮小&水増し <--- イマココ
まずは2値分類してみる。
ここから主要キャラの分類
- part5 主要キャラで分類問題(未知データに適用するよ編)
- part5.5 主要キャラで分類問題(改良編)
- part6 主要キャラで分類問題(GPU使ったよ編)
- part7 新規データをFasterRCNNを使って分類させる(むしろ全てはこれのため)
chainerに放り込む前に画像の大きさを揃えておきます。
今回は50*50の大きさに揃えております。
32*32とかの方がいいのかな?ちょっとまだ最適な大きさとかわからないからとりあえず。
また深層学習には大量の画像が必要なわけで、part1で切り取った画像だけではちょっと心細いわけです。
ということで、回転やらノイズやらでサンプリングした画像を増殖させます。
openCVでもいいのですが、PIL(python image library)がわかりやすかったので今回はPILを使いました。
画像の縮小
以下がpythonコード
# -*- coding:utf-8 -*- from PIL import Image import os imgNames = os.listdir("/Users/path/to/dir")#画像が保存されてるディレクトリへのpath def readImg(imgName): try: #tryを使ってエラーでプログラムが止まっちゃうのを回避します。 img_src = Image.open("/Users/path/to/dir/"+ imgName)#pathは上で設定したのと同じ場所です。 print("read img!")#動いていることを確認するために書きましたがなくても全然OKです except: #ゴミを読み込んだらこれちゃうで!って言います。 print("{} is not image file!".format(imgName)) img_src = 1 return img_src for imgName in imgNames: img_src = readImg(imgName) if img_src == 1:continue else: resizedImg = img_src.resize((50,50)) # resizedImg.save("50_50_"+imgName)#名前は長くなっちゃうけど仕方ない。 print(imgName+" is done!")
これで切り出した画像が50*50の大きさになりました。
こいつにさらに回転をかけて、画像を増殖させます。
画像の回転
上のプログラムと結構似ているので、コメントは書いてません。
難しいコードでは全くないので問題はないはず。
# -*- coding: utf-8 -*- from PIL import Image import os def readImg(imgName): try: img_src = Image.open("/Users/path/to/dir/" + imgName) print("read img!") except: print("{} is not image file!".format(imgName)) img_src = 1 return img_src def spinImg(imgNames): for imgName in imgNames: img_src = readImg(imgName) if img_src == 1:continue else: #上下反転 tmp = img_src.transpose(Image.FLIP_TOP_BOTTOM) tmp.save("flipTB_" + imgName) #90度回転 tmp = img_src.transpose(Image.ROTATE_90) tmp.save("spin90_" + imgName) #270度回転 tmp = img_src.transpose(Image.ROTATE_270) tmp.save("spin270_" + imgName) #左右反転 tmp = img_src.transpose(Image.FLIP_LEFT_RIGHT) tmp.save("flipLR_" + imgName) print("{} is done!".format(imgName)) if __name__ == '__main__': #read imgs names imgNames = os.listdir("/Users/path/to/dir")#画像が保存されてるディレクトリへのpathを書きます print(imgNames) spinImg(imgNames)
得られた画像たち
変態だらけ・・・
こんなんなら忍で2値分類作ればよかったわ・・・
以上でpart2を終わります。
次回はデータセットの作成ですね。
訓練データとテストデータに分けるプログラムを書いていきます。
-- 目次 --
- part0 前書き
- part1 画像の収集
- part2 画像の縮小&水増し <--- イマココ
まずは2値分類してみる。
ここから主要キャラの分類
- part5 主要キャラで分類問題(未知データに適用するよ編)
- part5.5 主要キャラで分類問題(改良編)
- part6 主要キャラで分類問題(GPU使ったよ編)
- part7 新規データをFasterRCNNを使って分類させる(むしろ全てはこれのため)
p.s. あかん、眠い。