Lightly 1.2 : 概要 (README)

Lightly 1.2 : 概要 (README) (翻訳/解説)

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

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

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

 

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

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

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

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

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

 

 

Lightly 1.2 : 概要 (README)

Lightly は自己教師あり学習のためのコンピュータビジョン・フレームワークです。

Lightly の私達は深層学習をより効率的にしたい熱意あるエンジニアです。それが、- コミュニティとともに – raw 画像データを理解してキュレートするために自己教師あり手法の理由を普及させることを望む理由です。私達のソリューションは任意のデータアノテーションステップの前に適用できて学習された表現はデータセットを可視化して分析するために使用できます。これは高度なフィルタリングを通じてモデル訓練のためのサンプルの最善のコアセットを選択することを可能にします。

 

機能

Lightly は以下のような機能を提供します :

  • モジュール型フレームワーク、これは損失関数のような低位ビルディングブロックを公開しています。
  • PyTorch Lightning を使用したマルチ gpu 訓練のサポート。
  • 使いやすく、PyTorch ライクなスタイルで書かれています。
  • 自己教師あり事前訓練のためのカスタムバックボーンモデルのサポート。

 

サポートされるモデル

すべてのサポートされるモデルに対するサンプルコードは ここ で見つけられます。貴方のプロジェクトを始動するためのモデルの各々に対して PyTorch, PyTorch Lightning と PyTorch Lightning 分散サンプルを提供しています。

サポートモデルの幾つか :

 

チュートリアル

Want to jump to the tutorials and see lightly in action?

lightly パッケージを Lightly Platform と共に使用するチュートリアル :

コミュニティとパートナープロジェクト :

 

クイックスタート

Lightly は Python 3.6+ を必要としますが、Python 3.7+ の使用を推奨します。Linux or OSX 環境で Lightly をインストールすることを勧めます。

 

依存性

  • hydra-core>=1.0.0 =1.18.1
  • pytorch_lightning>=1.5
  • requests>=2.23.0
  • torchvision
  • tqdm

 

インストール

Lightly とその依存性を PyPI から次でインストールできます :

pip3 install lightly

We strongly recommend that you install Lightly in a dedicated virtualenv, to avoid conflicting with your system packages.

 

Lightly in Action

Lightly で、最新の自己教師あり学習メソッドを PyTorch のフルパワーを使用してモジュール方式で利用できます。様々なバックボーン, モデルと損失関数で実験しましょう。フレームワークは上から下まで簡単に使用できるように設計されています。docs でより多くのサンプルを見つけてください。

import torch
import torchvision
import lightly.models as models
import lightly.loss as loss
import lightly.data as data

# the collate function applies random transforms to the input images
collate_fn = data.ImageCollateFunction(input_size=32, cj_prob=0.5)

# create a dataset from your image folder
dataset = data.LightlyDataset(input_dir='./my/cute/cats/dataset/')

# build a PyTorch dataloader
dataloader = torch.utils.data.DataLoader(
    dataset,                # pass the dataset to the dataloader
    batch_size=128,         # a large batch size helps with the learning
    shuffle=True,           # shuffling is important!
    collate_fn=collate_fn)  # apply transformations to the input images


# create a PyTorch module for the SimCLR model
class SimCLR(nn.Module):
    def __init__(self, backbone):
        super().__init__()
        self.backbone = backbone
        self.projection_head = models.modules.SimCLRProjectionHead(
          input_dim=512, 
          hidden_dim=512,
          output_dim=128
        )

    def forward(self, x):
        x = self.backbone(x).flatten(start_dim=1)
        z = self.projection_head(x)
        return z

# use a resnet backbone
resnet = torchvision.models.resnet18()
backbone = nn.Sequential(*list(resnet.children())[:-1])

# build the simclr model
model = SimCLR(backbone)

# lightly exposes building blocks such as loss functions
criterion = loss.NTXentLoss(temperature=0.5)

# get a PyTorch optimizer
optimizer = torch.optim.SGD(model.parameters(), lr=1e-0, weight_decay=1e-5)

モデルと損失関数を置き換えることで SimSiam のような別のモデルを容易に利用できます。

# PyTorch module for the SimSiam model
class SimSiam(nn.Module):
    def __init__(self, backbone):
        super().__init__()
        self.backbone = backbone
        self.projection_head = SimSiamProjectionHead(512, 512, 128)
        self.prediction_head = SimSiamPredictionHead(128, 64, 128)

    def forward(self, x):
        f = self.backbone(x).flatten(start_dim=1)
        z = self.projection_head(f)
        p = self.prediction_head(z)
        z = z.detach()
        return z, p

model = SimSiam(backbone)

# use the SimSiam loss function
criterion = loss.NegativeCosineSimilarity()

SimSiam のためのより完全なサンプルは ここ で見つけられます。

モデルを訓練するために PyTorch Lightning を使用します :

trainer = pl.Trainer(max_epochs=max_epochs, gpus=1)
trainer.fit(
    model,
    dataloader
)

あるいは 4 GPU 上でモデルを訓練します :


# use distributed version of loss functions
criterion = NTXentLoss(gather_distributed=True)

trainer = pl.Trainer(
    max_epochs=max_epochs, 
    gpus=4, 
    distributed_backend='ddp'
)
trainer.fit(
    model,
    dataloader
)

分散収集と同期された BatchNorm を伴う適切なマルチ GPU 訓練を提供します。

分散訓練に関する docs を見てください。

 

ベンチマーク

現在実装されたモデルとそれらの cifar10 と imagenette 上の精度。総てのモデルは kNN を使用して評価されています。エポックに渡る最大テスト精度と最大 GPU メモリ消費をレポートします。このベンチマークの総てのモデルは同じ (データ) 増強と同じ ResNet-18 バックボーンを使用しています。訓練精度は FP32 に設定されて optimizer として SGD が cosineLR により使用されます。cifar10 で 1 エポックは V100 GPU で ~35 秒かかります。cifar10 と imagenette ベンチマークについては ここ で更に学習してください。

 

用語

下で lightly Python パッケージに存在する様々なコンセプトの図式的な概要を見ることができます。太字の用語は ドキュメント で詳細に説明されます。

 

Next Steps

ドキュメント に進み lightly で獲得できるものを見ましょう!

 

Further Reading

自己教師あり学習 :

 

BibTeX

(訳注: 原文 参照)

 

以上