🤖

大量の学習用データを共有するコツ。

2024/10/07に公開

こんにちは。
ギターエフェクターは完全デジタルへ移行し、数々の制約から解放されたコネクトーム・デザインの伊藤です。

世の中は生成AIへの期待からワクワク感が止まりませんが、一方、外観検査や物体検出など地味な(?)AI開発は継続されています。
画像認識系のAIを学習させるには大量の画像が必要になりますが、リモート環境が整備された今でも、大量かつ大容量の画像の保管と共有には多くの課題があります。

単に、
・枚数が多い。
・ファイルサイズが大きい。
ということもあるし、
・リモートワークで、ローカルマシンで学習させたいのでクラウドからデータを取得したい。
・クラウド上に保管されている画像の中身をざっと確認したい。
というようなことも起きます。

すべてを劇的に解決してくれる方法は無いのですが、実業務を行っていく上で画像データ管理を効率化するTipsを紹介したいと思います。

1. iPhoneのカメラ設定で、フォーマットを「互換性優先」にする。

現在のiOSのデフォルトでは「高効率」設定になっており、画像を取り出した際に拡張子が"HEIC"というファイル形式になるためPCではそのまま開けません。「互換性優先」にしておけば、"JPEG"形式になります。
画像を撮ってくれるメンバーに設定変更を依頼しておきましょう。

2. クラウドストレージへ大量の画像ファイルをアップロードする際は、フォルダごとzip圧縮する。

ファイル数が多いとそれだけでアップロードに時間がかかります。また、一部のファイルのみ失敗したことに気づかず欠落させてしまうこともあります。zipファイルにまとめることで、高速かつ確実にアップロードできます。もちろん、フォルダ名の付け方には気をつけて。

ローカルマシンでの学習に使いたい場合などダウンロードする際の時間短縮にもなります。(画像ファイルが入ったフォルダを指定してダウンロード操作をすると、クラウドサーバ上でzip圧縮するためかなりの時間を要します。)

また、macOSでzip圧縮する際には、"リソースフォークを含めない"ように設定しましょう。

3. zipファイルに入っている画像のカタログをつけておく。

フォルダごとzipファイルにするデメリットとして、クラウドストレージ上ではどんな画像が含まれているのかわかりません。これの解決策として、最初の数枚でもいいのでサムネイル画面一覧のスクリーンショットを撮るなどし、「カタログ画像」として "zipファイルと同じ名前.jpg" でzipファイルと同じ場所に保存しておくと便利です。

4. 同じファイルが複製されて混ざってしまった場合はHash値を使って排除する。

複数人でファイル共有したり、「念の為」と思って保管したものがすでに存在していた場合など、「ファイル名が異なるのに中身は同じファイル」であることがよく起きます。
同じ画像を繰り返しAIの学習には使いたくないですし、何よりもストレージの無駄です。

しかしあちこちのフォルダにちらばった画像を目視で比較して排除するのはあまりに大変なので、ここはプログラムによる自動化を検討します。何度も起きる得るので、できるだけ汎用的なプログラムを作っておきたいところです。

肝心な部分、"2つの画像が同じかどうか"を比較するには、Hash値を使うのが簡単です。

hash = imagehash.phash(Image.open(a_file))

2つの画像から取得したHash値を比較し、同じ値なら同じ画像であると考えてほぼ間違いありません。


[上記コードをそのままDiffusionBeeに入れて生成されたイメージ。]

5. バックアップにはもう一つのクラウドストレージを使うのもアリ。

よほど大丈夫ではあるもののやはりバックアップは取っておきたいのですが、これがまた手間がかかります。方法としては「別の場所にコピーを作る」しかないのですが、頻繁に取り出す必要はないのでローカルにコピーを保存するよりも、別のクラウドサービスにコピーする手も有力ではないでしょうか。
ハードウェアの管理が不要になるのと、自動化しやすいメリットは大きいかと思います。

大量の学習データによってローカルマシンのストレージが圧迫されるのはやはり避けたいので、学習が終わったローカルマシン上のデータは削除するのがよさそうです。もちろん、クラウドストレージに元のデータが保存・バックアップされている前提です。

6. データへのアクセス権は、ファイル単位ではなくプロジェクト単位で設定する。

クラウドストレージに配置したデータのアクセス権を付与する際、「そのファイルに対してのみ権限付与する」という操作をしてしまうことがありがちですが、ファイルが増えたり関わるメンバーが増える都度、権限付与の操作が必要になり、手間もかかるとともに管理が難しくなります。
どのようなツールを使うかに関係なく、最初に「プロジェクトのデータをおく場所」をきちんと決め、プロジェクト単位でメンバーに対するアクセス権を付与しましょう。最初が肝心です。

以上。新しいTipsを思い付いたら追記していきたいと思います。

ちょっとしたことではありますが、みなさんの面倒な作業を少しでも無くす一助になれば幸いです。

CODブログ

Discussion