Lightly 1.2 : Tutorials : 1. 入力の構造化

Lightly 1.2 : Tutorials : 1. 入力の構造化 (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 08/17/2022 (v1.2.25)

* 本ページは、Lightly の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Web: www.classcat.com  ;   ClassCatJP

 

Lightly 1.2 : Tutorials : 1. 入力の構造化

lightly Python パッケージは埋め込みを生成するためやデータを Lightly プラットフォームにアップロードするために画像データセットを処理できます。このチュートリアルではフレームワークにより理解されるように画像データセットを構造化する方法を学習します。

 

サポートされるファイルタイプ

画像

lightly は画像ロードのために Pillow を使用していますので、Pillow によりサポートされる総ての画像形式もサポートしています。

 

動画

動画を lightly に直接ロードするには torchvision と PyAV を使用します。以下の形式がサポートされます。

  • .mov, .mp4 and .avi

 

画像フォルダ・データセット

画像フォルダデータセットは生画像を含み、通常は input_dir キーワードで指定されます。

 

画像を含むフラットなディレクトリ

関心のある総ての画像を追加の階層なしに単一フォルダ内にストアできます。下の例では、lightly はディレクトリ data/ 内の総てのファイル名と画像をロードします。更に、総ての画像をプレースホルダーのラベルを割り当てます。

# a single directory containing all images
data/
+--- img-1.jpg
+--- img-2.jpg
...
+--- img-N.jpg

上の構造に対しては、lightly は入力を以下のように理解します :

filenames = [
    'img-1.jpg',
    'img-2.jpg',
    ...
    'img-N.jpg',
]

labels = [
    0,
    0,
    ...
    0,
]

 

画像を含むサブディレクトリを持つディレクトリ

画像をサブディレクトリ内に集めることで入力ディレクトリに構造を与えることができます。この場合、lightly によりロードされるファイル名は「ルートディレクトリ」data/ についてです。更に、lightly は各画像を (それがどのサブディレクトリに属するかを示す) いわゆる “weak-label” を割り当てます。

# directory with subdirectories containing all images
data/
+-- weak-label-1/
    +-- img-1.jpg
    +-- img-2.jpg
    ...
    +-- img-N1.jpg
+-- weak-label-2/
    +-- img-1.jpg
    +-- img-2.jpg
    ...
    +-- img-N2.jpg
...
...
...
+-- weak-label-10/
    +-- img-1.jpg
    +-- img-2.jpg
    ...
    +-- img-N10.jpg

上の構造については、lightly は入力を以下のように理解します :

filenames = [
    'weak-label-1/img-1.jpg',
    'weak-label-1/img-2.jpg',
    ...
    'weak-label-1/img-N1.jpg',
    'weak-label-2/img-1.jpg',
    ...
    'weak-label-2/img-N2.jpg',
    ...
    'weak-label-10/img-N10.jpg',
]

labels = [
    0,
    0,
    ...
    0,
    1,
    ...
    1,
    ...
    9,
]

 

動画フォルダ・データセット

lightly Python パッケージは、最初にフレームを抽出する必要なしに、動画データを直接扱うことを可能にします。動画ファイルは通常は強く圧縮されていますので、多くのディスク容量を節約できます。動画データでの lightly の使用は単純で、一つ以上の動画がストアされている、入力ディレクトリをソフトウェアに指定するだけです。パッケージは自動的に総ての動画ファイルを検出してそれらをインデックスし、各フレームはアクセス可能となります。

動画を含む入力ディレクトリの例はこのように見えるでしょう :

data/
+-- my_video_1.mov
+-- my_video_2.mp4
+-- subdir/
    +-- my_video_3.avi
    +-- my_video_4.avi

各動画に weak ラベルを割り当てています。上から 3 つの動画をプラットフォームにアップロードするには、次を使用できます :

lightly-upload token='123' new_dataset_name='my_video_dataset' input_dir='data/'

(自己教師あり学習モデルの訓練と個々のフレームの埋め込みのような) 総ての他の操作も動画データで機能します。Give it a try!

 

埋め込みファイル

lightly Python パッケージにより生成された埋め込みは通常は .csv ファイルにストアされてからコマンドラインから Lightly プラットフォームにアップロードできます。埋め込みが lightly コマンドライン・ツールで生成された場合には、それらは既に正しい形式を持っています。

独自の埋め込みを .csv ファイルにセーブしてアップロードすることもできます。その場合、ファイルが形式要件を満たしていることを確実にしてください : embeddings, weak-labels と filenames を正しい shape に変換するために lightly.utils.io からの save_embeddings 関数を使用します。

import lightly.utils.io as io

# embeddings:
# embeddings are stored as an n_samples x dim numpy array
embeddings = np.array([[0.1, 0.5],
                       [0.2, 0.2],
                       [0.1, 0.9],
                       [0.3, 0.2]])

# weak-labels
# a list of integers carrying meta-information about the images
labels = [0, 1, 1, 0]

# filenames
# list of strings containing the filenames of the images w.r.t the input directory
filenames = [
    'weak-label-0/img-1.jpg',
    'weak-label-1/img-1.jpg',
    'weak-label-1/img-2.jpg',
    'weak-label-0/img-2.jpg',
]

io.save_embeddings('my_embeddings_file.csv', embeddings, labels, filenames)

上記のコードは以下の .csv ファイルを生成します :

Note ; lightly はサブフォルダを持つデータセットに対して “weak” ラベルを自動的に作成することに注意してください。各サブフォルダは一つの weak ラベルに対応します。ラベルは ML で直接解きたいタスクに対しては使用されませんが、データをバケットにグループ分けするために関連できるので、”weak” ラベルと呼ばれます。

 

埋め込みの高度な使用方法

埋め込みを追加情報でリッチにしたい場合があります。lightly csv スキームは非常に単純で簡単に拡張できます。例えば、独自の埋め込みを既存の埋め込みに追加することができます。これは各サンプルについて追加のメタ情報を持つ場合に有用でしょう。

 

カスタム埋め込みの追加

カスタム埋め込みを追加するにはより多くの埋め込みカラムを .csv ファイルに追加する必要があります。埋め込みの列挙を正しい順序に保持することを確実にしてください。

ここでは二次元埋め込みベクトルを持つ lightly からの埋め込みを見ます。

そして埋め込みベクトルを .csv ファイルに追加できます。

 

以上