MMSelfSup フレームワーク [1] の使用方法を段階的に説明します。

導入

タスクの紹介

自己教師あり学習 (自己教師あり学習、SSL) は潜在的な学習パラダイムであり、大量のラベルなしデータを表現学習に使用することを目的としています。SSL では、合理的な事前トレーニング タスク (ラベルを自動的に生成できる、つまり自己監視) を構築することでモデルをトレーニングし、強力なモデリング機能を備えた事前トレーニング モデルを学習します。自己教師あり学習によって得られたトレーニング モデルに基づいて、さまざまな下流の視覚タスク (画像分類、オブジェクト検出、セマンティック セグメンテーションなど) のパフォーマンスを向上させることができます。

MMセルフサップ

MMSelfSup は、PyTorch に基づくオープンソースの自己教師あり表現学習ツールボックスです。
枠組みは次のとおりです。
ここに画像の説明を挿入

その特徴は次のとおりです。

  • マルチメソッドの統合
    MMSelfSup は、さまざまな最先端の自己教師あり学習アルゴリズムを提供し、ベンチマークでより公平な比較を行うために、自己教師ありの事前トレーニング学習設定のほとんどは同じです。
  • モジュール設計
    MMSelfSup は、OpenMMLab プロジェクトの一貫した設計哲学に準拠し、ユーザーが独自のアルゴリズムをカスタマイズして実装するのに便利なモジュール設計を実行します。
  • 標準化されたパフォーマンス評価
    MMSelfSup には、線形評価、線形特徴の SVM / ローショット SVM、半教師あり分類、オブジェクト検出、セマンティック セグメンテーションなど、評価とテストのための豊富なベンチマークがあります。
  • 互換性
    OpenMMLab の主要なアルゴリズム ライブラリと互換性があり、豊富なダウンストリーム評価タスクと事前トレーニングされたモデルのアプリケーションを備えています。

ステップ

まず、pytorch がインストールされていることを確認します。

1.mmcvライブラリをインストールする

pip install openmim
mim install mmcv

### 2. mmselfsup プロジェクトをダウンロードする

git clone https://github.com/open-mmlab/mmselfsup.git

git を使用することも、githubで圧縮パッケージをダウンロードして解凍することもできます

3. プロジェクトのメイン フォルダーに移動し、必要なサードパーティ パッケージをインストールします。

cd mmselfsup-main
pip install -e .

4. 選択したモデルの構成ファイルを見つけます。ファイル パスは configs/selfsup にあります。

configs/selfsup にあるファイルは次の図に示されています。フォルダー
ここに画像の説明を挿入
の名前はモデルの名前であり、beit は BEIT モデルを表します。
ここではシムサイアムを選択します。

5. このフォルダーに入ります。このフォルダーの下には、後続のトレーニング プロセス用の構成ファイルがいくつかあります。

このフォルダー内の状況は次のとおりです。
ここに画像の説明を挿入
設定ファイルの命名規則は次のとおりです。

{模型信息}_{模块信息}_{训练信息}_{数据集信息}

simsiam_resnet50_8xb32-coslr-100e_in1k.py は、モデル名が simsiam、使用されているモジュールに resnet50 が含まれていること、トレーニングが 8 枚のカード、バッチ サイズが 32、cos タイプの学習率変更関数が使用されていること、およびデータ セットがイメージネット1kです。
構成ファイルの内部は次のとおりです。次に示すように、
ここに画像の説明を挿入
継承された構成ファイルのアドレスはconfigs/selfsup/ baseです。
ここに画像の説明を挿入

6. データセットの継承された構成ファイルを表示する

文書の紹介

使用するデータセットのパスは、継承した構成ファイルに設定されているパスと異なるため、変更する必要があります。
これを行うには、まず継承された構成ファイルの内容を確認する必要があります。
まず、データ セットのルート ディレクトリを変更する必要があります。
ここに画像の説明を挿入
次に、ラベル ファイルとデータ ファイルの相対パスを独自のパスに変更します。
ここに画像の説明を挿入

ラベルファイルの構築

VOC タイプを除いて、一般的なデータセット フォルダー構造は次のとおりであることに注意してください。

data
│   ├── datasetname
│   │   ├── meta
│   │   ├── train
│   │   ├── val

このうち、 meta フォルダにはラベルファイルがあり、 train フォルダと val フォルダには写真などのデータファイルが保存されます。(train と val はフォルダーに配置することもできます)
教師ありトレーニングの場合、ラベル ファイルの基本構成は次のとおりです:
ここに画像の説明を挿入
左側はデータ ファイルの相対パス、右側は対応するラベルです。
ラベル ファイル mmselfsup の構築ではサンプルが提供されます。ファイル パスはtools/dataset_converters/convert_imagenet_subsets.pyです。そのアイデアに従って変更するだけです。

7. 独自の構成ファイルを構築する

設定ファイルが置かれているフォルダに新規ファイルを作成します 命名方法は先ほどと同じで分かりやすいです。
次に、実際の状況に応じて対応する変更を加えます。定義された変数名は、変更時に無造作に定義されるのではなく、継承されたファイル内の名前と一致している必要があることに注意してください。一般的なプロセスを以下に説明します。
まず継承するファイルを選択します。ここでは simsiam_resnet50_8xb32-coslr-200e_in1k.py を選択します。

_base_ = 'simsiam_resnet50_8xb32-coslr-200e_in1k.py'

_base_ が使用されており、右側のものは構成ファイルが配置されているパスに相当することに注意してください。

次に、学習率を変更します。これは、継承された構成ファイルと同じ設定が使用されないため、変更する必要があります。継承された構成ファイルは 8*32 を使用し、私は 1*32 を使用しているため、学習率は 8 で割られます。

lr = 0.05 / 8
optimizer = dict(lr=lr)

次に、data_root などのデータ セットの関連設定を変更します。

data_root = '/root/dataset/food-101/'
train_dataloader = dict(
    dataset=dict(
        ann_file='meta/food101_train.txt',
        data_prefix=dict(img_path='images/')
    )
)

最後に、トレーニングの回数、モデルの保存回数、ログの印刷間隔を変更します。

default_hooks = dict(
    logger=dict(interval=10),
    checkpoint=dict(interval=20, max_keep_ckpts=5)
)
train_cfg = dict(max_epochs=200)

8. 研修の実施

トレーニング コードは tools/train.py にあります。dist_train.sh ファイルを使用することもできます。このうち、train.py は単一カードに適しており、dist_train.sh は分散トレーニングを行うことができます。

dist_train.sh を使用したトレーニングのコードは次のとおりです。

bash dist_train.sh ${
    
    CONFIG} ${
    
    GPUS} --cfg-options model.pretrained=${
    
    PRETRAIN}

train.py を使用したトレーニングのコードは次のとおりです。

python train.py ${
    
    CONFIG_FILE} [optional arguments]

例: python train.py /root/Project/mmselfsup-main/configs/selfsup/simsiam/simsiam_resnet50_1xb32-coslr-200e_food101.py

バックグラウンドで実行したい場合は、次のように変更します: nohup python train.py /root/Project/mmselfsup-main/configs/selfsup/simsiam/simsiam_resnet50_1xb32-coslr-200e_food101.py &

エピローグ

openmm シリーズは、ディープ ラーニング用の非常に優れたオープンソース フレームワークであり、多くの優れたアルゴリズムが統合されており、学ぶ価値があり、自分でコードを記述する時間を大幅に節約できます。

おすすめ

転載: blog.csdn.net/qq_41234663/article/details/131297707