【Python】機械学習で使えるデータを簡単に作ってみた

Python


こんにちは。とりりんです。

今回は機械学習に使えるデータを作ってみようと思います。

こんなことが知りたい方向けです。

  • Python初心者の方
  • 画像処理をしたい方
  • データサイエンスに興味がある方
スポンサーリンク



AIに実行させるタスク

まず、どんなことを想定しているかを作成する画像を見ながらイメージを深めていきましょう。

入力データ・正解データはこんな感じで出来上がります。


このペアを大量に作って学習させることで、見た事ない画像でも「ここを丸を白く塗りつぶせばいいんだな!と学ぶわけです。

今回は簡単のため丸だけのデータにしましたが、バラエティに富んだ画像を与えるとより複雑なタスクができるAIを作成できます。

スポンサーリンク


2枚の丸画像のペアを大量に作成するコード

まず一気にのっけます。こんな感じで実行してください。

python makeCircle.py {コマンドライン引数}
import argparse
import csv
import cv2
import random
import numpy as np


def main():

    args = Parse()

    # 学習用
    makeData(args.trainSaveDir, args.trainNum, args.size)

    # 評価用
    makeData(args.evalSaveDir, args.evalNum, args.size)

    return


def makeData(imgDir, dataNum, size):
    
    for i_num in range(dataNum):
        
        img = np.zeros((size, size))
        corImg = np.zeros((size, size))
        
        x, y = random.randint(0, size - 8), random.randint(0, size - 8)
        cclSize = random.randint(3, 8)
        
        cv2.circle(img, (x, y), cclSize, 255, thickness=1)
        cv2.circle(corImg, (x, y), cclSize, 255, thickness=-1)
        
        inputPath = imgDir + "/inputs/" + str(i_num).zfill(4) + ".png"
        correctPath = imgDir + "/corrects/" + str(i_num).zfill(4) + ".png"
        cv2.imwrite(inputPath, img)
        cv2.imwrite(correctPath, corImg)
 
    return


def Parse():

    parser = argparse.ArgumentParser()
    parser.add_argument('-tn', '--trainNum', type=int, default=500)
    parser.add_argument('-en', '--evalNum', type=int, default=100)
    parser.add_argument('-ts', '--trainSaveDir', type=str, default="./data/train")
    parser.add_argument('-es', '--evalSaveDir', type=str, default="./data/test")
    parser.add_argument('-s', '--size', type=int, default=32)

    args = parser.parse_args()

    return args


if __name__ == "__main__":
    main()
スポンサーリンク


実際に意味があるのはmakeData関数のみです。

一般的には機械学習をする時には学習用のデータと検証用のデータに分けます

学んでない内容で評価させたい!という意図ですね。

そのため、main関数内で2回makeData関数を呼び出すことで、学習用と評価用のデータを作成しています。

コマンドライン引数では、以下の設定ができます(丸の大きさの範囲も設定できればよかったですね)。

設定しなければデフォルト値が反映されます。

  • -tn: 学習用データの数
  • -en: 評価用データの数
  • -ts: 学習用画像を保存するディレクトリ
  • -es: 評価用画像を保存するディレクトリ
  • -s: 画像の大きさ

makeData関数内を簡単に説明しておきます(変数名ちょっと適当すぎた気がする)。

変数imgcorimgはそれぞれ入力画像(塗りつぶされてない画像)と正解画像(塗りつぶされた画像)を示しています(25, 26行目)。

座標(x, y)と丸の大きさ(cclSize)をランダムで決めます(28, 29行目)。

その後、OpenCVで丸を描きます(31, 32行目)。

thicknessは線の太さを示しており、-1にした場合は塗りつぶされます。

まとめ

今回は機械学習で使えるデータを作成してみました!

機械学習は教師データを作るのが一番大変だと思っています。

近々簡単な形で実装したいですね。

最後までご覧いただき、ありがとうございました!


Python

↓とりりんを応援して頂けると嬉しいです!↓
にほんブログ村 投資ブログ お金(投資)へ

にほんブログ村

スポンサーリンク


コメント

タイトルとURLをコピーしました