テスト結果提出¶
パノプティックセグメンテーションテスト結果提出¶
以下のセクションでは、COCO test-dev データセット上でパノプティックセグメンテーションモデルの予測結果を作成し、COCO 評価サーバーに提出する方法について説明します。
前提条件¶
COCO テストデータセット画像、テスト画像情報、およびパノプティック学習/検証アノテーションをダウンロードして解凍し、「test2017」を
data/coco/
に、「jsonファイル」と「アノテーションファイル」をdata/coco/annotations/
に配置します。
# suppose data/coco/ does not exist
mkdir -pv data/coco/
# download test2017
wget -P data/coco/ http://images.cocodataset.org/zips/test2017.zip
wget -P data/coco/ http://images.cocodataset.org/annotations/image_info_test2017.zip
wget -P data/coco/ http://images.cocodataset.org/annotations/panoptic_annotations_trainval2017.zip
# unzip them
unzip data/coco/test2017.zip -d data/coco/
unzip data/coco/image_info_test2017.zip -d data/coco/
unzip data/coco/panoptic_annotations_trainval2017.zip -d data/coco/
# remove zip files (optional)
rm -rf data/coco/test2017.zip data/coco/image_info_test2017.zip data/coco/panoptic_annotations_trainval2017.zip
以下のコードを実行して、テスト画像情報のカテゴリ情報を更新します。「image_info_test-dev2017.json」のカテゴリ情報には
isthing
属性がありません。そのため、「panoptic_val2017.json」のカテゴリ情報を使用して更新する必要があります。
python tools/misc/gen_coco_panoptic_test_info.py data/coco/annotations
上記の準備が完了したら、data
ディレクトリの構造は以下のようになります。
data
`-- coco
|-- annotations
| |-- image_info_test-dev2017.json
| |-- image_info_test2017.json
| |-- panoptic_image_info_test-dev2017.json
| |-- panoptic_train2017.json
| |-- panoptic_train2017.zip
| |-- panoptic_val2017.json
| `-- panoptic_val2017.zip
`-- test2017
coco test-dev での推論¶
coco test-dev で推論を行うには、まずtest_dataloder
とtest_evaluator
の設定を更新する必要があります。これには2つの方法があります。1. 設定ファイルを更新する;2. コマンドラインで更新する。
設定ファイルの更新¶
関連する設定は、configs/_base_/datasets/coco_panoptic.py
の最後に記載されています(以下を参照)。
test_dataloader = dict(
batch_size=1,
num_workers=1,
persistent_workers=True,
drop_last=False,
sampler=dict(type='DefaultSampler', shuffle=False),
dataset=dict(
type=dataset_type,
data_root=data_root,
ann_file='annotations/panoptic_image_info_test-dev2017.json',
data_prefix=dict(img='test2017/'),
test_mode=True,
pipeline=test_pipeline))
test_evaluator = dict(
type='CocoPanopticMetric',
format_only=True,
ann_file=data_root + 'annotations/panoptic_image_info_test-dev2017.json',
outfile_prefix='./work_dirs/coco_panoptic/test')
coco test-dev データセットでの推論設定の更新には、以下のいずれかの方法を使用できます。
ケース1:configs/_base_/datasets/coco_panoptic.py
の設定を直接コメントアウト解除します。
ケース2:以下の設定を現在使用している設定ファイルにコピーします。
test_dataloader = dict(
dataset=dict(
ann_file='annotations/panoptic_image_info_test-dev2017.json',
data_prefix=dict(img='test2017/', _delete_=True)))
test_evaluator = dict(
format_only=True,
ann_file=data_root + 'annotations/panoptic_image_info_test-dev2017.json',
outfile_prefix='./work_dirs/coco_panoptic/test')
次に、以下のコマンドで coco test-dev データセットで推論を実行します。
python tools/test.py \
${CONFIG_FILE} \
${CHECKPOINT_FILE}
コマンドラインでの更新¶
関連設定の更新と coco test-dev での推論を行うコマンドを以下に示します。
# test with single gpu
CUDA_VISIBLE_DEVICES=0 python tools/test.py \
${CONFIG_FILE} \
${CHECKPOINT_FILE} \
--cfg-options \
test_dataloader.dataset.ann_file=annotations/panoptic_image_info_test-dev2017.json \
test_dataloader.dataset.data_prefix.img=test2017 \
test_dataloader.dataset.data_prefix._delete_=True \
test_evaluator.format_only=True \
test_evaluator.ann_file=data/coco/annotations/panoptic_image_info_test-dev2017.json \
test_evaluator.outfile_prefix=${WORK_DIR}/results
# test with four gpus
CUDA_VISIBLE_DEVICES=0,1,3,4 bash tools/dist_test.sh \
${CONFIG_FILE} \
${CHECKPOINT_FILE} \
8 \ # eights gpus
--cfg-options \
test_dataloader.dataset.ann_file=annotations/panoptic_image_info_test-dev2017.json \
test_dataloader.dataset.data_prefix.img=test2017 \
test_dataloader.dataset.data_prefix._delete_=True \
test_evaluator.format_only=True \
test_evaluator.ann_file=data/coco/annotations/panoptic_image_info_test-dev2017.json \
test_evaluator.outfile_prefix=${WORK_DIR}/results
# test with slurm
GPUS=8 tools/slurm_test.sh \
${Partition} \
${JOB_NAME} \
${CONFIG_FILE} \
${CHECKPOINT_FILE} \
--cfg-options \
test_dataloader.dataset.ann_file=annotations/panoptic_image_info_test-dev2017.json \
test_dataloader.dataset.data_prefix.img=test2017 \
test_dataloader.dataset.data_prefix._delete_=True \
test_evaluator.format_only=True \
test_evaluator.ann_file=data/coco/annotations/panoptic_image_info_test-dev2017.json \
test_evaluator.outfile_prefix=${WORK_DIR}/results
例
ResNet-50 バックボーンを使用した事前学習済み MaskFormer を使用して test2017
で推論を実行するとします。
# test with single gpu
CUDA_VISIBLE_DEVICES=0 python tools/test.py \
configs/maskformer/maskformer_r50_mstrain_16x1_75e_coco.py \
checkpoints/maskformer_r50_mstrain_16x1_75e_coco_20220221_141956-bc2699cb.pth \
--cfg-options \
test_dataloader.dataset.ann_file=annotations/panoptic_image_info_test-dev2017.json \
test_dataloader.dataset.data_prefix.img=test2017 \
test_dataloader.dataset.data_prefix._delete_=True \
test_evaluator.format_only=True \
test_evaluator.ann_file=data/coco/annotations/panoptic_image_info_test-dev2017.json \
test_evaluator.outfile_prefix=work_dirs/maskformer/results
ファイルの名称変更と結果の圧縮¶
推論後、パノプティックセグメンテーションの結果(jsonファイルとマスクが保存されているディレクトリ)はWORK_DIR
に保存されます。COCO のウェブサイトに記載されている命名規則に従って名前を変更する必要があります。最後に、jsonファイルとマスクが保存されているディレクトリをzipファイルに圧縮し、命名規則に従ってzipファイルの名前を変更する必要があります。zipファイルには、上記2つのファイルが**直接**含まれている必要があります。
ファイルの名前変更と結果の圧縮を行うコマンド
# In WORK_DIR, we have panoptic segmentation results: 'panoptic' and 'results.panoptic.json'.
cd ${WORK_DIR}
# replace '[algorithm_name]' with the name of algorithm you used.
mv ./panoptic ./panoptic_test-dev2017_[algorithm_name]_results
mv ./results.panoptic.json ./panoptic_test-dev2017_[algorithm_name]_results.json
zip panoptic_test-dev2017_[algorithm_name]_results.zip -ur panoptic_test-dev2017_[algorithm_name]_results panoptic_test-dev2017_[algorithm_name]_results.json