Skip to main content

オブジェクト検出 - FOMO

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

オブジェクト検出 - FOMO

このセクションでは、COCO MASK データセットを使用して FOMO マスク検出モデルをトレーニングする方法について説明します。FOMO マスク検出モデルの実装は MobileNet V2 および MobileNet V3 に基づいています(選択するモデルプロファイルによって実際のニューラルネットワークが異なります)。

MobileNet に関する詳細情報は、論文 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications を参照してください。

データセットの準備

SSCMA はデフォルトで COCO_MASK データセット を使用して FOMO モデルをトレーニングします。以下の手順に従ってデータセットの準備を完了してください。

  1. インターネットデータセット を参照してデータセットをダウンロードし、解凍してください。

  2. 解凍したデータセットの フォルダパス(例: datasets\mask)を覚えておいてください。このフォルダパスは後で使用する可能性があります。

設定ファイルの選択

トレーニングタスクの種類に応じて適切な設定ファイルを選択します。設定ファイルの機能、構造、および原則については、Config で既に紹介しています。

FOMO モデルの例では、fomo_mobnetv2_0.35_x8_abl_coco.py を設定ファイルとして使用します。このファイルは SSCMA のルートディレクトリ内の configs/fomo フォルダにあり、さらに default_runtime_det.py 設定ファイルを継承しています。

初心者には、まずこの設定ファイル内の data_rootepochs パラメータに注目することをお勧めします。

fomo_mobnetv2_0.35_x8_abl_coco.py
_base_='../_base_/default_runtime_det.py'
default_scope='sscma'
custom_imports=dict(imports=['sscma'], allow_failed_imports=False)

num_classes=2
model=dict(type='Fomo',
backbone=dict(type='mmdet.MobileNetV2', widen_factor=0.35, out_indices=(2,)),
head=dict(type='FomoHead',
input_channels=[16],
num_classes=num_classes,
middle_channel=48,
act_cfg='ReLU6',
loss_cls=dict(type='BCEWithLogitsLoss',
reduction='none',
pos_weight=40),
loss_bg=dict(type='BCEWithLogitsLoss', reduction='none'),
),
)

# データセット設定
dataset_type='FomoDatasets'
data_root=''
height=96
width=96
batch_size=16
workers=1

train_pipeline=[
dict(type='RandomResizedCrop',
height=height,
width=width,
scale=(0.80, 1.2),
p=1),
dict(type='Rotate', limit=30),
dict(type='RandomBrightnessContrast',
brightness_limit=0.3,
contrast_limit=0.3,
p=0.5),
dict(type='HorizontalFlip', p=0.5),
]
test_pipeline=[dict(type='Resize', height=height, width=width, p=1)]

train_dataloader=dict(
batch_size=batch_size,
num_workers=workers,
persistent_workers=True,
drop_last=False,
collate_fn=dict(type='fomo_collate'),
sampler=dict(type='DefaultSampler', shuffle=True, round_up=False),
dataset=dict(type=dataset_type,
data_root=data_root,
ann_file='train/_annotations.coco.json',
img_prefix='train',
pipeline=train_pipeline),
)
val_dataloader=dict(
batch_size=1,
num_workers=1,
persistent_workers=True,
drop_last=False,
collate_fn=dict(type='fomo_collate'),
sampler=dict(type='DefaultSampler', shuffle=True, round_up=False),
dataset=dict(type=dataset_type,
data_root=data_root,
ann_file='valid/_annotations.coco.json',
img_prefix='valid',
pipeline=test_pipeline))
test_dataloader=val_dataloader

# オプティマイザー
lr=0.001
epochs=300
find_unused_parameters=True
optim_wrapper=dict(optimizer=dict(type='Adam', lr=lr, weight_decay=5e-4,eps=1e-7))

# 評価者
val_evaluator=dict(type='FomoMetric')
test_evaluator=val_evaluator
train_cfg=dict(by_epoch=True, max_epochs=70)

# 学習ポリシー
param_scheduler=[
dict(type='LinearLR', begin=0, end=30, start_factor=0.001, by_epoch=False), # ウォームアップ
dict(type='MultiStepLR',
begin=1,
end=500,
milestones=[100, 200, 250],
gamma=0.1,
by_epoch=True)
]

モデルのトレーニング

モデルのトレーニングには、事前に設定した SSCMA 作業環境を使用する必要があります。インストール ガイドに従って Conda を使用して仮想環境 sscmaSSCMA をインストールした場合、現在その仮想環境内にいることを確認してください。

次に、SSCMA プロジェクトのルートディレクトリで、以下のコマンドを実行して FOMO マスク検出モデルをトレーニングします。

python3 tools/train.py \
configs/fomo/fomo_mobnetv2_0.35_x8_abl_coco.py \
--cfg-options \
data_root='datasets/mask' \
epochs=50

トレーニング中、モデルの重みと関連するログ情報はデフォルトで work_dirs/fomo_mobnetv2_0.35_x8_abl_coco パスに保存されます。また、TensorBoard などのツールを使用してトレーニングをモニタリングすることができます。

tensorboard --logdir work_dirs/fomo_mobnetv2_0.35_x8_abl_coco

トレーニングが完了すると、最新の FOMO モデルの重みファイルのパスが work_dirs/fomo_mobnetv2_0.35_x8_abl_coco/last_checkpoint ファイルに保存されます。この重みファイルのパスは、モデルを他の形式に変換する際に必要となるため、大切に保管してください。

tip

仮想環境が設定されているがアクティブ化されていない場合、以下のコマンドでアクティブ化できます。

conda activate sscma

テストと評価

テスト

FOMO モデルのトレーニングが完了したら、特定の重みを指定して以下のコマンドでモデルをテストすることができます。

python3 tools/inference.py \
configs/fomo/fomo_mobnetv2_0.35_x8_abl_coco.py \
"$(cat work_dirs/fomo_mobnetv2_0.35_x8_abl_coco/last_checkpoint)" \
--cfg-options \
data_root='datasets/mask'
tip

テスト中にリアルタイムでプレビューを行いたい場合、テストコマンドにパラメータ --show を追加して予測結果を表示することができます。他のオプションパラメータについては、ソースコード tools/test.py を参照してください。

評価

モデルを実際のエッジコンピューティングデバイスでさらにテストおよび評価するには、モデルをエクスポートする必要があります。モデルのエクスポートプロセスでは、SSCMA がモデルのプルーニングや蒸留などの最適化を行います。モデルのエクスポート方法については、エクスポート セクションを参照してください。

デプロイ

モデルをエクスポートした後、エッジコンピューティングデバイスにモデルをデプロイしてテストおよび評価を行うことができます。モデルのデプロイ方法については、デプロイ セクションを参照してください。

Loading Comments...