やましなぶろぐ

特徴のない画像を実験用学習データとして作成しておく

提供されているデータではなく個人用の実験用データを確保

🕒 Last mod: 2020-11-02


1. 実験用学習データを自作する

機械学習用のデータが多く公開されているので基本的にはそれらを利用させてもらえば問題ない。

ただ、公開されているデータにはそれらに適したモデルがセットで公開されているし、また多くの方がいろいろなモデルを試している。

この多くの公開されているモデルは勉強用としては大変ありがたいのだが、ゼロからモデルを構築して個人的にいろいろ試してみたいときには適さない。

この記事では実験用のデータを自作する。作成したデータは今後のモデル構築実験データとして利用していきたい。

また作成するデータは汎用性を考慮してあまり特徴のない面白みのない画像を作成する。

2. 作成するデータ

乱数による砂嵐のような正規分布に従う乱数による白黒画像を作成する。

平均が大きい若干白い画像と平均が若干小さい白黒画像の2種類の画像を作成する。

若干白い方は平均152、黒い方は平均148、標準偏差はそれぞれ40で作成します。

画像サイズは20×20。

モデルは上記の2種類の画像のうちどちらの画像かを識別することになる。

今回はそれぞれ1000枚ずつ、合計2000枚の画像を作成する。

3. 画像のサンプル

実際に作成した画像です。

normalimg_positive.jpg
normalimg_positive.jpg
normalimg_negative.jpg
normalimg_negative.jpg

人の目では見極めが難しそうな小さ画像です。

4. Directory構造

画像を保存するディレクトリ構造です。

positiveとnegativeのそれぞれのディレクトリに画像を保存しておきます。

DirectoryTree
normalimgs/
├── negative
└── positive

5. コード

実際のコードです。

createnoramlimg.py
import numpy as np
from PIL import Image

MEAN_positive = 152
MEAN_negative = 148
SD = 40
ROWS = 20
COLS = 20

def createnormalimg(
    mean,
    sd,
    rows=ROWS,
    cols=COLS,
):
    return np.random.normal(
        mean,
        sd,
        rows * cols,
    ).astype(
        np.uint8
    ).reshape(
        (rows, cols)
    )

normalimg = createnormalimg(MEAN_positive, SD)
Image.fromarray(normalimg).save(
    'normalimgs/normalimg.jpg',
)

normalimg_positive = createnormalimg(MEAN_positive, SD)
Image.fromarray(normalimg_positive).save(
    'normalimgs/normalimg_positive.jpg',
)

normalimg_negative = createnormalimg(MEAN_negative, SD)
Image.fromarray(normalimg_negative).save(
    'normalimgs/normalimg_negative.jpg',
)

for i in range(1000):
    normalimg_positive = createnormalimg(MEAN_positive, SD)
    Image.fromarray(normalimg_positive).save(
        'normalimgs/positive/normalimg_' + str(i) + '.jpg',
    )

for i in range(1000):
    normalimg_negative = createnormalimg(MEAN_negative, SD)
    Image.fromarray(normalimg_negative).save(
        'normalimgs/negative/normalimg_' + str(i) + '.jpg',
    )

6. まとめ

実験用の画像を2000枚作成しました。

今後はこれらの画像を使用していろいろと実験していきます。

今回は以上です。