フォルダ分けされた大量の学習画像を一括で読みこむ方法(python)

chainerのサンプルを一通り試して、いざ自分のデータセットを読み込ませよう!と思ったときにまずつまずくのがここ。
どうやって自分の画像データを読み込ませたらいいの??と最初悩んだので、まとめておく。

学習データのファイル構造

まずは、学習データを整理する。流れとしては以下の通り。

  1. ラベルとしてつけたい名前のフォルダを作成。これでラベルの数だけフォルダができる
  2. 各フォルダに画像ファイルを入れていく。今回の場合、拡張子は.png .jpg .jpeg
  3. 全てのフォルダを(プログラムの置いてあるパス)/data/フォルダに入れる

データの読み込み

以下の順番でファイル名、データを読み込んでいく

  1. dataディレクトリ内を読み込み、ラベル名のリスト(=ディレクトリ名のリスト)を手にいれる
  2. ディレクトリ名をlist.txtに記載
  3. ディレクトリ内部の画像ファイルを見つけて処理を行う

以下に抜粋したpythonスクリプトを記載する。エラー処理はしていないため注意。

import os

data_dir_path = u"./data/"
dir = os.listdir(r'./data/')
dir_list = sorted([x for x in tmp if os.path.isdir(data_dir_path+x)])
target = []
target_name = []
label_f = open('list.txt', 'w')

for dir_name in dir_list:
    label_f.write(str(dir_name) + "\n")
    file_list = os.listdir(data_dir_path+dir_name)
    for file_name in file_list:
        root, ext = os.path.splitext(file_name)
        if ext == u'.png':
            #以下各画像に対する処理を記載する
abel_f.close()