#概要
UTKFaceデータセットを下記特徴ごとに仕分けする。
・問題なし
・グレースケール
・複数人が写っている
・加工処理されている
###仕分けの流れ
前回作成した学習用モデルを使用し、UTKFaceデータセットのpart1フォルダの画像データを一枚ずつ判別
↓
Googleマイドライブに下記フォルダを作っておき、判別された画像を保存していく
・normal
・grayscale
・several
・processing
###環境
Google Colaboratory(GPU)
# UTKFace part1 ZIP読み込み
z = zipfile.ZipFile('/content/drive/My Drive/part1.zip')
imgfiles = [ x for x in z.namelist() if re.search(r"^part1.*jpg$", x)]
for imgfile in imgfiles:
image = Image.open(io.BytesIO(z.read(imgfile)))
image = image.convert('RGB')
image_p1 = image.resize((im_size, im_size))
data = np.asarray(image_p1)
# shapeを(299,299,3)→(1,299,299,3)に変更する
data = data[None, ...]
# ZIPフォルダ内に保存されていたファイル名を取得
file = str(os.path.basename(imgfile))
# 学習済モデルに画像一枚分のデータを入力して予測する
pred=model.predict(data)
# 判別された値によって画像データを保存する場所を変更する
if np.argmax(pred) == 0:
image.save('/content/drive/My Drive/normal/' + file)
elif np.argmax(pred) == 1:
image.save('/content/drive/My Drive/grayscale/' + file)
elif np.argmax(pred) == 2:
image.save('/content/drive/My Drive/several/' + file)
else :
image.save('/content/drive/My Drive/processing/' + file)
z.close()
del z, imgfiles
model.predictは複数枚の画像読み込みを想定(モデルの引数が4次元)しているため、1枚ずつ予測していこうとするとエラーが出ました。
data = data[None, ...]で3次元から4次元に変換すると予測してくれました。
画像のファイル名は変更せずに各フォルダに仕分けをして保存しています。
###仕分けされたフォルダの画像を確認
(スクショを貼ってたんですが、違法なのかもしれないと思い削除させて頂きました)
####grayscaleフォルダ
色がついている画像もちらほら見受けられますがほぼ判別できているようです。
####severalフォルダ
人が複数人写っている画像で学習していましたが学習用データが少なかったためか、ぬいぐるみや動物が写っている、もしくは背景がシンプルではない画像もこちらのフォルダに入ってきているように感じました。
####processingフォルダ
顔に文字が被っていたり、渦巻きのような模様が入っているデータをほぼ判別できています。
###結果
判別精度はぼちぼちですが、normalフォルダにすっきりした画像を集める事ができました。
このnormalフォルダを利用して年齢や性別が特定できるモデルを作っていこうと思います。