こんにちは、Tech Samuraiです!
機械学習や画像認識のモデルを作成する際、「学習データ(画像)が足りない」という壁にぶつかったことはありませんか?
特に、画像に対応する「アノテーションデータ(バウンディングボックスの座標などが書かれたtxtファイル)」がある場合、画像を加工したらテキストファイルもセットで管理しなければならず、手作業で行うのは非常に手間がかかります。
そこで今回は、「画像の色味(明るさ・コントラスト)をランダムに変更して水増ししつつ、アノテーションファイルも自動でコピーする」Pythonスクリプトを作成しました。
コピペですぐに使えるので、データセット作成の効率化に役立ててください。
スクリプトの機能と特徴
今回作成したツールの特徴は以下の通りです。
- 画像とテキストをセットで処理: 画像を加工して保存する際、同名の .txt ファイル(アノテーションデータ)も自動で複製します。
- ランダムな加工: 「明るさ」と「コントラスト」をランダムに変化させ、データの多様性を確保します。
- 一括処理: フォルダ内のすべての画像を対象に実行できます。
※今回は座標計算が必要な「回転」や「トリミング」は行わず、色調補正のみを行うため、アノテーションデータ(座標)はそのままコピーして利用可能です。
事前準備
ライブラリのインストール
画像処理には定番のライブラリ Pillow を使用します。
# pipを使用する場合
pip install Pillow
# Ryeを使用する場合
rye add Pillow
rye sync
フォルダ構成
スクリプトを実行するディレクトリに、以下のような構成でデータを準備してください。
augment.py(今回作成するスクリプト)annotation_data/(元画像とtxtを入れるフォルダ)image01.jpgimage01.txt- …
ソースコード (augment.py)
以下のリポジトリ内の augment.py が今回のソースコードです。
使い方とカスタマイズ
実行方法
ターミナル(コマンドプロンプト)で以下のコマンドを実行します。
python augment.py
実行が完了すると、augment_output フォルダが自動生成され、その中に加工された画像とコピーされたテキストファイルが保存されます。
パラメータの調整
コード上部の定数を変更することで、動作を調整できます。
NUM_COPIES = 5: 1枚の画像から5枚のバリエーションを生成したい場合に変更します。random.uniform(0.9, 1.1): 画像処理部分の数値を変えることで、変化の度合いを調整できます(0.5〜1.5にすればより極端に変化します)。
まとめ
今回はPythonを使って、アノテーションデータ付きの画像を簡単に水増しする方法を紹介しました。
ディープラーニングの精度向上には、良質で大量のデータが不可欠です。こういった単純作業はPythonに任せて、効率よく開発を進めていきましょう。
それでは、良きTech Lifeを!

コメント