option.py 5.78 KB
Newer Older
Hang Zhang's avatar
Hang Zhang committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
###########################################################################
# Created by: Hang Zhang 
# Email: zhang.hang@rutgers.edu 
# Copyright (c) 2017
###########################################################################

import os
import argparse
import torch

class Options():
    def __init__(self):
        parser = argparse.ArgumentParser(description='PyTorch \
            Segmentation')
        # model and dataset 
        parser.add_argument('--model', type=str, default='encnet',
                            help='model name (default: encnet)')
        parser.add_argument('--backbone', type=str, default='resnet50',
                            help='backbone name (default: resnet50)')
        parser.add_argument('--dataset', type=str, default='ade20k',
                            help='dataset name (default: pascal12)')
        parser.add_argument('--data-folder', type=str,
                            default=os.path.join(os.environ['HOME'], 'data'),
                            help='training dataset folder (default: \
                            $(HOME)/data)')
Hang Zhang's avatar
Hang Zhang committed
26
        parser.add_argument('--workers', type=int, default=16,
Hang Zhang's avatar
Hang Zhang committed
27
                            metavar='N', help='dataloader threads')
Hang Zhang's avatar
Hang Zhang committed
28
        parser.add_argument('--base-size', type=int, default=520,
Hang Zhang's avatar
Hang Zhang committed
29
                            help='base image size')
Hang Zhang's avatar
Hang Zhang committed
30
        parser.add_argument('--crop-size', type=int, default=480,
Hang Zhang's avatar
Hang Zhang committed
31
                            help='crop image size')
Hang Zhang's avatar
Hang Zhang committed
32
        parser.add_argument('--train-split', type=str, default='train',
Hang Zhang's avatar
Hang Zhang committed
33
                            help='dataset train split (default: train)')
Hang Zhang's avatar
Hang Zhang committed
34
35
36
        # training hyper params
        parser.add_argument('--aux', action='store_true', default= False,
                            help='Auxilary Loss')
Hang Zhang's avatar
Hang Zhang committed
37
38
        parser.add_argument('--aux-weight', type=float, default=0.2,
                            help='Auxilary loss weight (default: 0.2)')
Hang Zhang's avatar
Hang Zhang committed
39
40
        parser.add_argument('--se-loss', action='store_true', default= False,
                            help='Semantic Encoding Loss SE-loss')
Hang Zhang's avatar
Hang Zhang committed
41
42
        parser.add_argument('--se-weight', type=float, default=0.2,
                            help='SE-loss weight (default: 0.2)')
Hang Zhang's avatar
Hang Zhang committed
43
44
45
46
        parser.add_argument('--epochs', type=int, default=None, metavar='N',
                            help='number of epochs to train (default: auto)')
        parser.add_argument('--start_epoch', type=int, default=0,
                            metavar='N', help='start epochs (default:0)')
Hang Zhang's avatar
Hang Zhang committed
47
        parser.add_argument('--batch-size', type=int, default=16,
Hang Zhang's avatar
Hang Zhang committed
48
49
                            metavar='N', help='input batch size for \
                            training (default: auto)')
Hang Zhang's avatar
Hang Zhang committed
50
        parser.add_argument('--test-batch-size', type=int, default=16,
Hang Zhang's avatar
Hang Zhang committed
51
                            metavar='N', help='input batch size for \
Hang Zhang's avatar
Hang Zhang committed
52
                            testing (default: same as batch size)')
Hang Zhang's avatar
Hang Zhang committed
53
        # optimizer params
Hang Zhang's avatar
Hang Zhang committed
54
55
        parser.add_argument('--lr', type=float, default=None, metavar='LR',
                            help='learning rate (default: auto)')
Hang Zhang's avatar
Hang Zhang committed
56
        parser.add_argument('--lr-scheduler', type=str, default='poly',
Hang Zhang's avatar
Hang Zhang committed
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
                            help='learning rate scheduler (default: poly)')
        parser.add_argument('--momentum', type=float, default=0.9,
                            metavar='M', help='momentum (default: 0.9)')
        parser.add_argument('--weight-decay', type=float, default=1e-4,
                            metavar='M', help='w-decay (default: 1e-4)')
        # cuda, seed and logging
        parser.add_argument('--no-cuda', action='store_true', default=
                            False, help='disables CUDA training')
        parser.add_argument('--seed', type=int, default=1, metavar='S',
                            help='random seed (default: 1)')
        # checking point
        parser.add_argument('--resume', type=str, default=None,
                            help='put the path to resuming file if needed')
        parser.add_argument('--checkname', type=str, default='default',
                            help='set the checkpoint name')
        parser.add_argument('--model-zoo', type=str, default=None,
                            help='evaluating on model zoo model')
        # finetuning pre-trained models
        parser.add_argument('--ft', action='store_true', default= False,
                            help='finetuning on a different dataset')
        # evaluation option
        parser.add_argument('--eval', action='store_true', default= False,
                            help='evaluating mIoU')
Hang Zhang's avatar
Hang Zhang committed
80
81
        parser.add_argument('--test-val', action='store_true', default= False,
                            help='generate masks on val set')
Hang Zhang's avatar
Hang Zhang committed
82
83
84
85
86
87
88
89
90
91
92
93
94
95
        parser.add_argument('--no-val', action='store_true', default= False,
                            help='skip validation during training')
        # test option
        parser.add_argument('--test-folder', type=str, default=None,
                            help='path to test image folder')
        # the parser
        self.parser = parser

    def parse(self):
        args = self.parser.parse_args()
        args.cuda = not args.no_cuda and torch.cuda.is_available()
        # default settings for epochs, batch_size and lr
        if args.epochs is None:
            epoches = {
Hang Zhang's avatar
Hang Zhang committed
96
                'coco': 30,
Hang Zhang's avatar
Hang Zhang committed
97
                'pascal_aug': 80,
Hang Zhang's avatar
Hang Zhang committed
98
                'pascal_voc': 50,
Hang Zhang's avatar
Hang Zhang committed
99
                'pcontext': 80,
Hang Zhang's avatar
Hang Zhang committed
100
101
                'ade20k': 180,
                'citys': 240,
Hang Zhang's avatar
Hang Zhang committed
102
103
104
105
            }
            args.epochs = epoches[args.dataset.lower()]
        if args.lr is None:
            lrs = {
Hang Zhang's avatar
Hang Zhang committed
106
                'coco': 0.004,
Hang Zhang's avatar
Hang Zhang committed
107
                'pascal_aug': 0.001,
Hang Zhang's avatar
Hang Zhang committed
108
                'pascal_voc': 0.0001,
Hang Zhang's avatar
Hang Zhang committed
109
                'pcontext': 0.001,
Hang Zhang's avatar
Hang Zhang committed
110
111
                'ade20k': 0.004,
                'citys': 0.004,
Hang Zhang's avatar
Hang Zhang committed
112
113
            }
            args.lr = lrs[args.dataset.lower()] / 16 * args.batch_size
Hang Zhang's avatar
Hang Zhang committed
114
        print(args)
Hang Zhang's avatar
Hang Zhang committed
115
        return args