DINO は Windows 環境でカスタム データセットをトレーニングします

序章

論文: https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2203.03605
コード: https://link.zhihu.com/?target=https%3A//github.com /IDEACVR/DINO
DINO: 物体検出に Transformer を組み込む

主な特徴:

  1. SOTA パフォーマンス: 比較的小さなデータとモデル (以前の SwinV2 と比較して~ 1/10) を持つ大規模なモデルで最良の検出結果を達成しました。ResNet-50の標準設定で51.3AP達成。
  2. End2end (エンドツーエンド学習可能) : DINO は DETR タイプの検出器に属し、エンドツーエンドで学習可能で、従来の検出器で手動で設計する必要がある多くのモジュール (NMS など) を回避します。
  3. 高速収束: 標準の ResNet-50 設定では、5 スケール機能 (5 スケール) を使用する DINO は、12 エポックで49.4 AP、 24 エポックで51.3 AP を達成します。4 スケール機能 (4 スケール) を使用する DINO は同様のパフォーマンスを達成し、23 FPS で実行できます。

ここに画像の説明を挿入

構成環境

ダウンロードコード

git clone https://github.com/IDEA-Research/DINO.git
cd DINO

Pytorch環境をインストールする

# an example:
conda install -c pytorch pytorch torchvision

コード環境をインストールする

pip install -r requirements.txt

CUDA 演算子をコンパイルする

cd models/dino/ops
python setup.py build install
# unit test (should see all checking is True)
python test.py
cd ../../..

知らせ:

  1. Cocoapi/panopticapi/MultiScaleDeformableAttend のコンパイルとインストールが失敗する場合は、コンピュータに完全な C++ コンパイル環境があるかどうかを確認してください。ない場合は、対応するコンパイル環境をインストールしてください。Win の場合は、 「Microsoft Visualの解決方法」を参照してください。C++ 14.0以降が必要です。「Microsoft C++ Build Tools」で入手してください。
  2. CUDA オペレーターをコンパイルするには、Pytorch と CUDA のバージョンが高くても低くなく、一貫している必要があります。そうでない場合は、バージョンが同じになるまで調整してください。
  3. 実行後に MultiScaleDeformableAttendant パッケージが見つからないpython test.py場合は、CUDA オペレーターのコンパイルとインストールが失敗したことを意味しますが、ビデオ メモリ/メモリ オーバーフローのエラーがある場合は正常です。

PS: 実際には、Pytorch より高い CUDA は動作に影響しませんが、コンパイルできないため、それよりも低いバージョンの CUDA 環境を持つコンピュータを使用して、MultiScaleDeformableAttendance を WHL バージョンにコンパイルし、ローカルにインストールすることもできます。 。コンパイルを正常に完了できない場合は、対応するパッケージの WHL バージョンを使用してインストールしてみてください。ここでは、Python3.8 および CUDA11.7 環境に基づいてコンパイルした、いくつかの一般的なパッケージの WHL バージョンをいくつか示します。
Baidu ネットワーク ディスク
抽出コード: z4ia

訓練

COCO データセット

実行してscripts/DINO_train.sh /path/to/your/COCODIRトレーニングを開始する
か、

python main.py --output_dir ./logs/DINO/R50_IP102_finetune -c ./config/DINO/DINO_4scale.py --coco_path ./coco_path --options dn_scalar=100 embed_init_tgt=TRUE dn_label_coef=1.0 dn_bbox_coef=1.0 use_ema=False dn_box_noise_scale=1.0

カスタムデータセット

DINO は COCO 標準データセットを採用しており、ディレクトリ構造は次のとおりです。

COCODIR/
  ├── train2017/
  ├── val2017/
  └── annotations/
  	├── instances_train2017.json
  	└── instances_val2017.json

1. データセットを準備する

トレーニングの前に、まずデータセットを COCO 標準に変換する必要があります。YOLO
標準または VOC 標準を使用している場合は、データセット変換ツールを自分で検索してください。

2. num_classes を変更する

データセットを変更した後、パラメータスクリプトDINO_4scale.pyを最大カテゴリ ID+1変更する必要があります(混乱を避けるために、ここで新しいスクリプトをコピーして作成することをお勧めします)。これは最大カテゴリ ID+1 である必要があることに注意してください。ここでの num_classes は曖昧であり、必ずしもデータセット内のカテゴリの数を指すわけではありません。たとえば、COCO データセットには 80 カテゴリしかありませんが、category_id の範囲は 1 ~ 90 であるため、ここでのデフォルトの num_classes は 90 です+1. 0 からかどうか 開始や隙間の有無は関係ない詳細はnum_classes 108 に関する混乱を参照してください。num_classes

次に、models/dino.py の 717 行目を次のコードに変更します。

match_unstable_error = args.match_unstable_error  
dn_labelbook_size = args.dn_labelbook_size  
if dn_labelbook_size < num_classes:  
    dn_labelbook_size = num_classes

dn_labelbook_size のデフォルトは 91 ですが、num_classes 以上である必要があります。

3. Win環境における特定のエラーを修正

ここでは、Win 環境のみを変更する必要があるため、
util/slconfig.py の 83 行目のコードを次の形式に変更します。

if filename.lower().endswith('.py'):  
    with tempfile.TemporaryDirectory() as temp_config_dir:  
        temp_config_dir = "C:/tempDir/"  
        temp_config_file = tempfile.NamedTemporaryFile(  
            dir=temp_config_dir, suffix='.py')  
  
        temp_config_file = open('C:/tempDir/temp.py', 'w+b')  
        temp_config_name = osp.basename(temp_config_file.name)  
        shutil.copyfile(filename,  
                        osp.join(temp_config_dir, temp_config_name))  
        temp_module_name = osp.splitext(temp_config_name)[0]  
        sys.path.insert(0, temp_config_dir)  
        SLConfig._validate_py_syntax(filename)  
        mod = import_module(temp_module_name)  
        sys.path.pop(0)  
        cfg_dict = {
    
      
            name: value  
            for name, value in mod.__dict__.items()  
            if not name.startswith('__')  
        }  
        # delete imported module  
        del sys.modules[temp_module_name]  
        # close temp file  
        temp_config_file.close()
  1. 一時フォルダーを作成し、そのフォルダーの下に一時ファイルを作成します
  2. temp_config_dir一時フォルダーに変更されます
  3. temp_config_file一時ファイルに変更されます

詳細については、「PermissionError: [Errno 13] Permission Deneded: 'C:\Users\20825\AppData\Local\Temp\tmpt11h2ul9\tmp2fdhjty4.py' #43」を参照してください。

4. トレーニング

4.1 ゼロから始める

python main.py --output_dir logs/DINO/R50_custom_finetune -c ./config/DINO/DINO_4scale_custom.py --coco_path ./coco_path --options dn_scalar=100 embed_init_tgt=TRUE dn_label_coef=1.0 dn_bbox_coef=1.0 use_ema=False dn_box_noise_scale=1.0 

4.2 微調整

python main.py --output_dir logs/DINO/R50_custom_finetune -c config/DINO/DINO_4scale_custom.py --coco_path ./coco_path --options dn_scalar=100 embed_init_tgt=TRUE dn_label_coef=1.0 dn_bbox_coef=1.0 use_ema=False dn_box_noise_scale=1.0 --pretrain_model_path./checkpoint0033_4scale.pth --finetune_ignore label_enc.weight class_embed

引用

  1. DINO: ターゲット検出に Transformer を取り入れましょう
  2. PermissionError: [Errno 13] アクセス許可が拒否されました: 'C:\Users\20825\AppData\Local\Temp\tmpt11h2ul9\tmp2fdhjty4.py' #43
  3. num_classes 108 に関する混乱
  4. 方法 Microsoft Visual C++ 14.0 以降が必要です。「Microsoft C++ Build Tools」で入手してください

おすすめ

転載: blog.csdn.net/Lc_001/article/details/129197052