0、環境配置
conda create --name polarmask python=3.7
conda activate polarmask
pip install torch==1.2.0
pip install torchvision==0.4.0
pip install Cython
python setup.py develop
pip install mmcv
pip install prompt-toolkit==2.0.10
pip install Polygon3
1、config設置
配置文件的設置:
# model settings
model = dict(
type='PolarMask',
pretrained='open-mmlab://resnet50_caffe',
backbone=dict(
type='ResNet',
depth=50,
num_stages=4,
out_indices=(0, 1, 2, 3),
frozen_stages=1,
norm_cfg=dict(type='BN', requires_grad=False),
style='caffe'),
neck=dict(
type='FPN',
in_channels=[256, 512, 1024, 2048],
out_channels=256,
start_level=1,
add_extra_convs=True,
extra_convs_on_inputs=False, # use P5
num_outs=5,
relu_before_extra_convs=True),
bbox_head=dict(
type='PolarMask_Head',
num_classes=81,
in_channels=256,
stacked_convs=4,
feat_channels=256,
strides=[8, 16, 32, 64, 128],
loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=1.0),
loss_bbox=dict(type='IoULoss', loss_weight=1.0),
loss_centerness=dict(
type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0)))
# training and testing settings
train_cfg = dict(
assigner=dict(
type='MaxIoUAssigner',
pos_iou_thr=0.5,
neg_iou_thr=0.4,
min_pos_iou=0,
ignore_iof_thr=-1),
allowed_border=-1,
pos_weight=-1,
debug=False)
test_cfg = dict(
nms_pre=1000,
min_bbox_size=0,
score_thr=0.05,
nms=dict(type='nms', iou_thr=0.5),
max_per_img=100)
# dataset settings
dataset_type = 'Coco_Seg_Dataset'
data_root = '/media/dell/Elements/dataset/MSCOCO/2017/' # 數據路徑
img_norm_cfg = dict(
mean=[102.9801, 115.9465, 122.7717], std=[1.0, 1.0, 1.0], to_rgb=False)
data = dict(
imgs_per_gpu=2,
workers_per_gpu=5,
train=dict(
type=dataset_type,
ann_file=data_root + 'annotations/instances_train2017.json',
img_prefix=data_root + 'train2017/',
img_scale=(1280, 768),
img_norm_cfg=img_norm_cfg,
# size_divisor=0,
flip_ratio=0.5,
with_mask=True,
with_crowd=False,
with_label=True,
resize_keep_ratio=False),
val=dict(
type=dataset_type,
ann_file=data_root + 'annotations/instances_val2017.json',
img_prefix=data_root + 'val2017/',
img_scale=(1280, 768),
img_norm_cfg=img_norm_cfg,
# size_divisor=0,
flip_ratio=0,
with_mask=False,
with_crowd=False,
with_label=True,
resize_keep_ratio=False),
test=dict(
type=dataset_type,
ann_file=data_root + 'annotations/instances_val2017.json',
img_prefix=data_root + 'val2017/',
img_scale=(1280, 768),
img_norm_cfg=img_norm_cfg,
size_divisor=32,
flip_ratio=0,
with_mask=False,
with_crowd=False,
with_label=False,
resize_keep_ratio=False,
test_mode=True))
# optimizer
lr_ratio = 1
optimizer = dict(
type='SGD',
lr=0.01 * lr_ratio,
momentum=0.9,
weight_decay=0.0001,
paramwise_options=dict(bias_lr_mult=2., bias_decay_mult=0.))
optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2))
# learning policy
lr_config = dict(
policy='step',
warmup='linear',
warmup_iters=500,
warmup_ratio=1.0 / 3 / lr_ratio,
step=[8, 11])
checkpoint_config = dict(interval=1)
# yapf:disable
log_config = dict(
interval=10,
hooks=[
dict(type='TextLoggerHook'),
# dict(type='TensorboardLoggerHook')
])
# yapf:enable
# runtime settings
total_epochs = 12
device_ids = range(2) # 由幾張卡決定
dist_params = dict(backend='nccl')
log_level = 'INFO'
work_dir = './work_dirs/trash'
load_from = None
resume_from = None
workflow = [('train', 1)]
2、訓練語句
雙GPU:python ./tools/train.py configs/polarmask/4gpu/polar_768_1x_r50.py --gpus 2 --launcher pytorch --work_dir ./tools/work_dirs/polar_768_1x_r50_4gpu --resume_from ./tools/work_dirs/polar_768_1x_r50_4gpu/epoch_2.pth
單GPU:python ./tools/train.py configs/polarmask/4gpu/polar_768_1x_r50.py --gpus 1 --launcher pytorch --work_dir ./tools/work_dirs/polar_768_1x_r50_4gpu
3、測試語句
python ./tools/test.py configs/polarmask/4gpu/polar_768_1x_r50.py ./tools/work_dirs/polar_768_1x_r50_4gpu/latest.pth --launcher pytorch --out work_dirs/trash/res.pkl --eval segm
4、出現問題
1、ModuleNotFoundError: No module named ‘mmcv.cnn.weight_init’
解決:pip install mmcv==0.5.9
2、ImportError: cannot import name ‘AsyncGenerator’
解決:```pip install prompt-toolkit==2.0.10``
3、ImportError: cannot import name ‘get_dist_info’
解決:
change /PolarMask/mmdet/datasets/loader/sampler.py line 6 from mmcv.runner.utils import get_dist_infoto from mmcv.runner import get_dist_info
from mmcv.runner import get_dist_info
4、anaconda3/lib/python3.6/sitepackages/torch/lib/libtorch_python.so: undefined symbol: PySlice_Unpack
解決:將python3.6.0升級更高(3.6.2及以上)