Yolo 8 用のデータセットを自動で作成するpythonコード

こんにちは!とびろぐ管理人のとびうおです!

今回は、yolo8にて、データセットを一つのフォルダに作ったけど、その後に適切なディレクトリに保存したい!という時に使えるスクリプトを用意したので紹介します!

スクリプト

以下のスクリプトを実行することで、自動で振り分けることが可能です!

import os
import shutil
from sklearn.model_selection import train_test_split

def prepare_yolo_dataset(source_dir, dest_dir, test_size=0.2):
    # 画像ファイルとラベルファイルのリストを作成
    images = [f for f in os.listdir(source_dir) if f.endswith('.png')]
    labels = [f.replace('.png', '.txt') for f in images]

    # トレーニングと検証用に分割
    images_train, images_val, labels_train, labels_val = train_test_split(
        images, labels, test_size=test_size, random_state=42)

    # ディレクトリを作成(存在しない場合)
    os.makedirs(os.path.join(dest_dir, 'images', 'train'), exist_ok=True)
    os.makedirs(os.path.join(dest_dir, 'images', 'val'), exist_ok=True)
    os.makedirs(os.path.join(dest_dir, 'labels', 'train'), exist_ok=True)
    os.makedirs(os.path.join(dest_dir, 'labels', 'val'), exist_ok=True)

    # ファイルをコピー
    for img in images_train:
        shutil.copy(os.path.join(source_dir, img), os.path.join(dest_dir, 'images', 'train'))
        shutil.copy(os.path.join(source_dir, img.replace('.png', '.txt')), os.path.join(dest_dir, 'labels', 'train'))

    for img in images_val:
        shutil.copy(os.path.join(source_dir, img), os.path.join(dest_dir, 'images', 'val'))
        shutil.copy(os.path.join(source_dir, img.replace('.png', '.txt')), os.path.join(dest_dir, 'labels', 'val'))

# 使用例
source_directory = ''  # 元のディレクトリパス
destination_directory = ''  # 保存先のディレクトリパス

prepare_yolo_dataset(source_directory, destination_directory)

解説

このスクリプトは、YOLO形式のオブジェクト検出モデル用にデータセットを準備することができます。

指定されたソースディレクトリから画像ファイルとラベルファイルを読み込み、トレーニングセットと検証セットに分割し、それぞれを別のディレクトリにコピーします。

とびうおくん
とびうおくん

画像ファイルはpngファイルを想定しているよ!

作られるディレクトリ

作られるディレクトリは以下の通り。

– dest_dir/images/train: トレーニング用画像
– dest_dir/images/val: 検証用画像
– dest_dir/labels/train: トレーニング用ラベル
– dest_dir/labels/val: 検証用ラベル

とびうおくん
とびうおくん

yoloに合わせてあるよ!

関数の引数

関数の引数は3つ用意しています!

– source_directory: 元の画像とラベルファイルが含まれているディレクトリのパス
– destination_directory: 分割後のデータセットを保存するディレクトリのパス
– test_size: 検証セットに割り当てるデータの割合(デフォルトは0.2、つまり20%)

とびうおくん
とびうおくん

自分なりに変更して、ください!

おわりに

便利なスクリプトなので、ぜひ使ってみてください!

トビログではその他にもプログラミングの記事を多く公開しています!チェックしてみてください!↓↓

テクノロジー

最新のテクノロジーに関する記事の一覧です。

とびうお
ブログ管理人です!
swimaneというアプリをリリースしました!

コメント

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