MMDetection-MMDetection でデータセット ファイル、トレーニング プラン ファイル、操作情報ファイル、および特定のパラメーターの解釈を試してみる (2)

1. MMDetection のデータセットファイルと特定のパラメータの解釈

この記事では、独自の MMDetection 構成ファイルを作成するために必要なデータ セット ファイルと特定のパラメーターの意味を詳しく紹介します。まず
、coco.py ファイルに次の CocoDataset クラス関数を導入します。名前が示すように、coco データ セット形式を使用する場合は、 , coco.py ファイルを呼び出す必要がありますが、coco パブリック データセットが使用されている場合は、直接呼び出すことができます。
独自のデータ セットをトレーニングする必要がある場合は、coco.py ファイルの下の CocoDataset クラスの CLASSES を、独自のデータ セットに対応する型に変更する必要があります。型が 1 つしかない場合は、必ずコンマの後にカンマを追加してください。クラス。
①オリジナルココ公開データセットカテゴリ

CLASSES = ('person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus',  
           'train', 'truck', 'boat', 'traffic light', 'fire hydrant',  
           'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog',  
           'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe',  
           'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',  
           'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat',  
           'baseball glove', 'skateboard', 'surfboard', 'tennis racket',  
           'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl',  
           'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot',  
           'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',  
           'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop',  
           'mouse', 'remote', 'keyboard', 'cell phone', 'microwave',  
           'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock',  
           'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush')

元の coco データ セットには、「人」、「自転車」、「車」、「オートバイ」、「飛行機」、「バス」、「電車」、「トラック」、「ボート」、「信号機、消火栓、一時停止の標識、パーキングメーター、ベンチ、鳥、猫、犬、馬、羊、牛、象'、'クマ'、'シマウマ'、'キリン'、'バックパック'、'傘'、'ハンドバッグ'、'ネクタイ'、'スーツケース'、'フリスビー'、'スキー板'、'スノーボード'、'スポーツボール' 、「凧」、「野球バット」、「野球グローブ」、「スケートボード」、「サーフボード」、「テニスラケット」、「ボトル」、「ワイングラス」、「カップ」、「フォーク」、「ナイフ」、「スプーン」、「ボウル」、「バナナ」、「リンゴ」、「サンドイッチ」、「オレンジ」、「ブロッコリー」、「にんじん」、「ホットドッグ」、「ピザ」、「ドーナツ」、「ケーキ」、椅子」、「ソファ」、「鉢植え」、「ベッド」、「ダイニングテーブル」、「トイレ」、「テレビ」、「ノートパソコン」、「マウス」、「リモコン」、「キーボード」、「携帯電話」、 「電子レンジ」、「オーブン」、「トースター」、「シンク」、「冷蔵庫」、「本」、「時計」、「花瓶」、「はさみ」、「テディベア」、「ヘアドライヤー」、「歯ブラシ」。「ケーキ」、「椅子」、「ソファ」、「鉢植え」、「ベッド」、「ダイニングテーブル」、「トイレ」、「テレビ」、「ラップトップ」、「マウス」、「リモコン」、「キーボード」、 「携帯電話」、「電子レンジ」、「オーブン」、「トースター」、「シンク」、「冷蔵庫」、「本」、「時計」、「花瓶」、「はさみ」、「テディベア」、「ヘアドライヤー」 、「歯ブラシ。」「ケーキ」、「椅子」、「ソファ」、「鉢植え」、「ベッド」、「ダイニングテーブル」、「トイレ」、「テレビ」、「ラップトップ」、「マウス」、「リモコン」、「キーボード」、 「携帯電話」、「電子レンジ」、「オーブン」、「トースター」、「シンク」、「冷蔵庫」、「本」、「時計」、「花瓶」、「はさみ」、「テディベア」、「ヘアドライヤー」 、「歯ブラシ。」「ハサミ」、「テディベア」、「ヘアドライヤー」、「歯ブラシ」。「ハサミ」、「テディベア」、「ヘアドライヤー」、「歯ブラシ」。

②複数種類の自作データセット

CLASSES = ('plane', 'baseball-diamond', 'bridge', 'ground-track-field', 
            'small-vehicle', 'large-vehicle', 'ship', 'tennis-court', 'basketball-court', 
            'storage-tank', 'soccer-ball-field', 'roundabout', 'harbor', 'swimming-pool', 
            'helicopter')

coco 形式で自作した DOTA データセットには、「飛行機」、「野球ダイヤモンド」、「橋」、「陸上競技場」、「小型車両」、「大型車両」という合計 15 のクラスがあります。 '、'船'、'テニスコート'、'バスケットボールコート'、'貯蔵タンク'、'サッカーボール場'、'ラウンドアバウト'、'港'、'プール'、'ヘリコプター' 。

③自作データセットは1種類のみ

CLASSES =('Belt', )

coco データセットの形式を次の図に示します。

cocodata——annotations——instances_train2017.json
                     ——instances_val2017.json
        ——train2017
        ——val2017

coco データ セット形式は、annotations、train2017、val2017 という 3 つのフォルダーに分割されており、annotations には 2 つのファイル、instances_train2017.json および instances_val2017.json が含まれています。これらは、トレーニング セットのラベル付き json ファイルと検証セットのラベル付き json ファイルです。 ; train2017 は対応するトレーニング セット イメージ、val2017 は対応するテスト セット イメージです。

以下は、ターゲット検出に使用される coco データ セット coco_detection.py のデータ セット ファイルとパラメーターの解釈です。

dataset_type = 'CocoDataset'     #指采用mmdet/datasets下的coco.py文件中的CocoDataset(CustomDataset)类
data_root = 'data/coco/'         #coco数据集的路径
img_norm_cfg = dict(             #对输入图片进行标准化处理的配置,减去mean,除以std,要将读取的bgr格式图像转为rgb通道排列格式
    mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
train_pipeline = [
    dict(type='LoadImageFromFile'),                             #首先读取图片数据
    dict(type='LoadAnnotations', with_bbox=True),               #读取图片对应的Annotations标注文件,默认用于目标检测,带bbox框
    dict(type='Resize', img_scale=(1333, 800), keep_ratio=True),#图像增强中的一种预处理方式,图片变换,最大尺寸为(1333,800),keep_ratio表示保持图片原始比例。keep_ratio=False时,直接按照config配置中的img_scale来缩放图片,大值代表长边,小值代表短边,不会保持原有图片比例。
    dict(type='RandomFlip', flip_ratio=0.5),                    #图像增强一种预处理方式,图像翻转,翻转几率0.5
    dict(type='Normalize', **img_norm_cfg),                     #图像标准化,用定义的img_norm_cfg参数进行图像标准化
    dict(type='Pad', size_divisor=32),                          #图像填充,将变换后的图像填充致能被32整除,这步操作的目的是避免卷积时,特征损失
    dict(type='DefaultFormatBundle'),                           #这个过程对result中的缺失参数进行补充,并将相关数据封装成tensor格式
    dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']),#重新整理result中的keys中的参数
]
test_pipeline = [
    dict(type='LoadImageFromFile'),                             #读取图片数据
    dict(                                                       #封装好的测试数据的增强操作,大体和前面类似
        type='MultiScaleFlipAug',
        img_scale=(1333, 800),                                  #图片变换,最大尺寸为(1333,800)
        flip=False,
        transforms=[
            dict(type='Resize', keep_ratio=True),               #keep_ratio表示保持图片原始比例。keep_ratio=False时,直接按照config配置中的img_scale来缩放图片,大值代表长边,小值代表短边,不会保持原有图片比例
            dict(type='RandomFlip'),                            #图像增强一种预处理方式,图像翻转,翻转几率0.5,默认翻转几率也是0.5
            dict(type='Normalize', **img_norm_cfg),             #图像标准化,用定义的img_norm_cfg参数进行图像标准化
            dict(type='Pad', size_divisor=32),                  #图像填充,将变换后的图像填充致能被32整除,这步操作的目的是避免卷积时,特征损失
            dict(type='ImageToTensor', keys=['img']),           #把图片转成成torch的tensor数据
            dict(type='Collect', keys=['img']),                 ##重新整理result中的keys中的参数
        ])
]
data = dict(
    samples_per_gpu=2,                                          #每个GPU的batch_size,一般coco公共数据集,单个batch_size大概吃5000M显存,量力而行
    workers_per_gpu=2,                                          #每个GOU的线程数,这个线程数不是越大越好,需要自己适配
    train=dict(
        type=dataset_type,                                          #coco数据集格式
        ann_file=data_root + 'annotations/instances_train2017.json',#coco数据集训练集annotations标注文件路径
        img_prefix=data_root + 'train2017/',                        #coco数据集训练集路径
        pipeline=train_pipeline),                                   #pipeline采用上方定义过的train_pipeline
    val=dict(
        type=dataset_type,                                          #coco数据集格式
        ann_file=data_root + 'annotations/instances_val2017.json',  #coco数据集验证集annotations标注文件路径
        img_prefix=data_root + 'val2017/',                          #coco数据集验证集路径
        pipeline=test_pipeline),                                    #pipeline采用上方定义过的test_pipeline
    test=dict(
        type=dataset_type,                                          #coco数据集格式
        ann_file=data_root + 'annotations/instances_val2017.json',  #coco数据集测试集annotations标注文件路径
        img_prefix=data_root + 'val2017/',                          #coco数据集测试集路径
        pipeline=test_pipeline))                                    #pipeline采用上方定义过的test_pipeline
evaluation = dict(interval=1, metric='bbox')                        #evaluation = dict(interval=1, metric='bbox') ,每interval(间隔)一个epoch,进行一次评估,评估指标为metric中定义的

2. MMDetection のトレーニング プラン ファイルと特定のパラメーターの解釈

以下は、トレーニング プラン ファイルの特定のパラメーターの説明です。このファイルには主に、オプティマイザーの選択とパラメーター設定、および学習戦略の選択とパラメーター設定が含まれます。ウォームアップの意味は次のとおりです。トレーニングの開始時にランダムです 初期化されているため、この時点で大きな学習率を選択すると、モデルの不安定性 (発振) が発生する可能性があります ウォームアップ予熱学習率メソッドを選択すると、エポックまたは一部のステップで学習率が小さくなる可能性があります予熱学習率が小さいと、モデルは徐々に安定します。モデルが比較的安定したら、トレーニングにプリセット学習率を選択すると、モデルの収束速度が速くなり、モデルの効果がより良くなります。

# optimizer
optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) #选用SGD优化器,初始学习率为0.02,momentum是SGD的一种加速超参,weight_decay权重惩罚参数为0.0001
optimizer_config = dict(grad_clip=None)                                  #防止梯度爆炸的策略
# learning policy 学习策略
lr_config = dict(
    policy='step',                                                       #采用step学习策略,固定步长进行学习率衰减
    warmup='linear', #网络训练开始时,用linear策略作为从预热的学习率,训练一些epoch或者step后,再修改为预先设置的学习率来完成训练
                     #由于刚开始训练时,模型的权重(weights)是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡),选择Warmup预热学习率的方式,可以使得开始训练的epoch或者一些step内学习率较小,在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳。
    warmup_iters=500,#预热学习率迭代500次
    warmup_ratio=0.001,#预热学习率的初始学习比率,0.001太小,一般0.1
    step=[8, 11])       #在8-11个epoch后开始进行step学习率策略
runner = dict(type='EpochBasedRunner', max_epochs=12)#默认最大训练轮数为12轮,自行更改

 3. MMDetectionにおける動作情報ファイルと固有パラメータの解釈

3.1 ファイルコードを実行する

以下は、完全な MMDetection 構成ファイルに含まれる実行情報ファイルです。主に、重み構成ファイル、ロギング構成ファイル、その他のハイパーパラメーター設定が含まれます。

checkpoint_config = dict(interval=1) #权重配置文件,每间隔多少轮保存一次权重文件
# yapf:disable
log_config = dict(                   #日志记录器的配置文件,每间隔多少轮保存一次logger日志文件
    interval=50,
    hooks=[
        dict(type='TextLoggerHook'), #开启文本记录
        # dict(type='TensorboardLoggerHook') #开启可视化训练,将训练结果记录到tensorboard中,方便可视化。如果需要开启将其取消注释即可
    ])
# yapf:enable
custom_hooks = [dict(type='NumClassCheckHook')]#自定义钩子,用户需要在before_run、after_run、before_epoch、after_epoch、before_iter和after_iter中指定钩子在训练的每个阶段将做什么。

dist_params = dict(backend='nccl')#类似与多机多卡、单机单卡等分布式训练的一个东西
log_level = 'INFO'                #程序正常运行的info级别的日志信息
load_from = None                  #预训练模型的权重文件
resume_from = None                #跟着上次的权重文件继续训,意义为是否在保存时覆盖
workflow = [('train', 1)]         #自定义为训练几个epoch,进行一次验证

3.2 パラメータの詳細

Checkpoint_config = dict(interval=1) : 重み設定ファイル、間隔ごとに重みファイルを保存するラウンド数
log_config = dict(interval=50,hooks=[dict(type='TextLoggerHook')]) : ロガーの設定ファイル, ラウンド数ごとにロガー ログ ファイルを保存します。dict(type='TensorboardLoggerHook') #ビジュアル トレーニングを開始し、簡単に視覚化できるようにトレーニング結果を tensorboard に記録します。有効にする必要がある場合は、コメントを外してください。
Custom_hooks = [dict(type='NumClassCheckHook')] : カスタム フック。ユーザーは、before_run、after_run、before_epoch、after_epoch、before_iter、after_iter のトレーニングの各段階でフックが何を行うかを指定する必要があります。
dist_params = dict(backend='nccl') : マルチマシン マルチカード、単一マシン シングルカードなどの分散トレーニングに似たもの。
log_level = 'INFO' : 通常の操作に関する情報レベルのログ情報。プログラム
load_from = None : 事前トレーニングされたモデル 重みファイル
resume_from = None : 最後の重みファイルでトレーニングを続行します。これは、保存時にワークフローを上書きするかどうかを意味します。
= [('train', 1)] : 複数のエポックをトレーニングするようにカスタマイズします。そして検証を実行します

 

上記の MMDetection でのデータセット ファイル、トレーニング プラン ファイル、実行情報ファイルの解釈、およびMMDetection-MMDetection でのモデル フレームワーク ファイルとパラメーターの操作 (1)

4 つのファイルで完全な MMDetection トレーニング テスト ファイルを形成できます。読者はまずこれら 4 つのファイルを詳細に読んで、対応するパラメータの意味を理解してから、次のリンクを組み合わせて独自の構成ファイルを作成できます。MMDetection-MMDetection を再生して独自の構成ファイルを作成します。設定
ファイル (3 つ)

おすすめ

転載: blog.csdn.net/weixin_42715977/article/details/130108936