(AI開発用メモ) 17 Category Flower Datasetの準備

LINEで送る
Pocket

http://www.robots.ox.ac.uk/~vgg/data/flowers/17/

 

より、Dataset images をダウンロード。ファイル名は17flowers.tgz

 

展開すると、jpg/フォルダにimage_xxxx.jpg とfiles.txt*が生成される。

 

これを整理する。

 

まず、files.txt* をrm

 

次に、以下の内容の書かれたlabels.txtを作成。

 

1 80 Tulip
81 160 Snowdrop
161 240 LilyValley
241 320 Bluebell
321 400 Crocus
401 480 Iris
481 560 Tigerlily
561 640 Daffodil
641 720 Fritillary
721 800 Sunflower
801 880 Daisy
881 960 ColtsFoot
961 1040 Dandelion
1041 1120 Cowslip
1121 1200 Buttercup
1201 1280 Windflower
1281 1360 Pansy

 

次に、以下のsetup.pyを作成

 

import os
import shutil
import random

IN_DIR = 'jpg'
TRAIN_DIR = 'train_images'
TEST_DIR = 'test_images'

if not os.path.exists(TRAIN_DIR):
    os.mkdir(TRAIN_DIR)

if not os.path.exists(TEST_DIR):
    os.mkdir(TEST_DIR)

# name => (start idx, end idx)
flower_dics = {}

with open('labels.txt') as fp:
    for line in fp:
        line = line.rstrip()
        cols = line.split()

        assert len(cols) == 3

        start = int(cols[0])
        end = int(cols[1])
        name = cols[2]

        flower_dics[name] = (start, end)

# 花ごとのディレクトリを作成
for name in flower_dics:
    os.mkdir(os.path.join(TRAIN_DIR, name))
    os.mkdir(os.path.join(TEST_DIR, name))

# jpgをスキャン
for f in sorted(os.listdir(IN_DIR)):
    # image_0001.jpg => 1
    prefix = f.replace('.jpg', '')
    idx = int(prefix.split('_')[1])

    for name in flower_dics:
        start, end = flower_dics[name]
        if idx in range(start, end + 1):
            source = os.path.join(IN_DIR, f)
            dest = os.path.join(TRAIN_DIR, name)
            shutil.copy(source, dest)
            continue

# 訓練データの各ディレクトリからランダムに10枚をテストとする
for d in os.listdir(TRAIN_DIR):
    files = os.listdir(os.path.join(TRAIN_DIR, d))
    random.shuffle(files)
    for f in files[:10]:
        source = os.path.join(TRAIN_DIR, d, f)
        dest = os.path.join(TEST_DIR, d)
        shutil.move(source, dest)

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です