示例#1
0
def main():
    parser = get_parser()
    parser.add_argument("--out-stride",
                        type=int,
                        default=16,
                        help="network output stride (default: 8)")

    # PASCAL VOC
    parser.add_argument(
        "--dataset",
        type=str,
        default="context",
        choices=["pascal", "coco", "cityscapes"],
        help="dataset name (default: pascal)",
    )

    parser.add_argument(
        "--use-sbd",
        action="store_true",
        default=True,
        help="whether to use SBD dataset (default: True)",
    )
    parser.add_argument("--base-size",
                        type=int,
                        default=513,
                        help="base image size")
    parser.add_argument("--crop-size",
                        type=int,
                        default=513,
                        help="crop image size")
    parser.add_argument(
        "--loss-type",
        type=str,
        default="ce",
        choices=["ce", "focal"],
        help="loss func type (default: ce)",
    )
    # training hyper params

    # PASCAL VOC
    parser.add_argument(
        "--epochs",
        type=int,
        default=300,
        metavar="N",
        help="number of epochs to train (default: auto)",
    )

    # PASCAL VOC
    parser.add_argument(
        "--batch-size",
        type=int,
        default=8,
        metavar="N",
        help="input batch size for training (default: auto)",
    )
    # cuda, seed and logging
    parser.add_argument(
        "--imagenet_pretrained_path",
        type=str,
        default=
        "checkpoint/resnet_backbone_pretrained_imagenet_wo_pascalcontext.pth.tar",
    )

    parser.add_argument(
        "--resume",
        type=str,
        default=
        "checkpoint/deeplab_pascal_context_02_unseen_GMMN_final.pth.tar",
        help="put the path to resuming file if needed",
    )

    parser.add_argument("--checkname", type=str, default="context_eval")

    # evaluation option
    parser.add_argument("--eval-interval",
                        type=int,
                        default=5,
                        help="evaluation interval (default: 1)")

    # keep empty
    parser.add_argument("--unseen_classes_idx", type=int, default=[])

    # 2 unseen
    unseen_names = ["cow", "motorbike"]
    # 4 unseen
    # unseen_names = ['cow', 'motorbike', 'sofa', 'cat']
    # 6 unseen
    # unseen_names = ['cow', 'motorbike', 'sofa', 'cat', 'boat', 'fence']
    # 8 unseen
    # unseen_names = ['cow', 'motorbike', 'sofa', 'cat', 'boat', 'fence', 'bird', 'tvmonitor']
    # 10 unseen
    # unseen_names = ['cow', 'motorbike', 'sofa', 'cat', 'boat', 'fence', 'bird', 'tvmonitor', 'aeroplane', 'keyboard']

    unseen_classes_idx_metric = []
    for name in unseen_names:
        unseen_classes_idx_metric.append(CLASSES_NAMES.index(name))

    ### FOR METRIC COMPUTATION IN ORDER TO GET PERFORMANCES FOR TWO SETS
    seen_classes_idx_metric = np.arange(60)

    seen_classes_idx_metric = np.delete(seen_classes_idx_metric,
                                        unseen_classes_idx_metric).tolist()
    parser.add_argument("--seen_classes_idx_metric",
                        type=int,
                        default=seen_classes_idx_metric)
    parser.add_argument("--unseen_classes_idx_metric",
                        type=int,
                        default=unseen_classes_idx_metric)

    parser.add_argument("--nonlinear_last_layer",
                        type=bool,
                        default=False,
                        help="non linear prediction")
    parser.add_argument("--random_last_layer",
                        type=bool,
                        default=False,
                        help="randomly init last layer")

    args = parser.parse_args()
    args.cuda = not args.no_cuda and torch.cuda.is_available()
    if args.cuda:
        try:
            args.gpu_ids = [int(s) for s in args.gpu_ids.split(",")]
        except ValueError:
            raise ValueError(
                "Argument --gpu_ids must be a comma-separated list of integers only"
            )

    args.sync_bn = args.cuda and len(args.gpu_ids) > 1

    # default settings for epochs, batch_size and lr
    if args.epochs is None:
        epoches = {
            "coco": 30,
            "cityscapes": 200,
            "pascal": 50,
        }
        args.epochs = epoches[args.dataset.lower()]

    if args.batch_size is None:
        args.batch_size = 4 * len(args.gpu_ids)

    if args.test_batch_size is None:
        args.test_batch_size = args.batch_size

    if args.lr is None:
        lrs = {
            "coco": 0.1,
            "cityscapes": 0.01,
            "pascal": 0.007,
        }
        args.lr = lrs[args.dataset.lower()] / (
            4 * len(args.gpu_ids)) * args.batch_size

    if args.checkname is None:
        args.checkname = "deeplab-resnet"
    print(args)
    torch.manual_seed(args.seed)
    trainer = Trainer(args)
    print("Starting Epoch:", trainer.args.start_epoch)
    print("Total Epoches:", trainer.args.epochs)
    trainer.validation(0, args)
示例#2
0
def main():
    parser = get_parser()
    parser.add_argument(
        "--imagenet_pretrained",
        type=bool,
        default=True,
        help="imagenet pretrained backbone",
    )

    parser.add_argument(
        "--out-stride", type=int, default=16, help="network output stride (default: 8)"
    )

    # PASCAL VOC
    parser.add_argument(
        "--dataset",
        type=str,
        default="context",
        choices=["pascal", "coco", "cityscapes", "context"],
        help="dataset name (default: pascal)",
    )

    parser.add_argument("--base-size", type=int, default=312, help="base image size")
    parser.add_argument("--crop-size", type=int, default=312, help="crop image size")
    parser.add_argument(
        "--loss-type",
        type=str,
        default="ce",
        choices=["ce", "focal"],
        help="loss func type (default: ce)",
    )
    # training hyper params

    # PASCAL VOC
    parser.add_argument(
        "--epochs",
        type=int,
        default=200,
        metavar="N",
        help="number of epochs to train (default: auto)",
    )

    # PASCAL VOC
    parser.add_argument(
        "--batch-size",
        type=int,
        default=10,
        metavar="N",
        help="input batch size for training (default: auto)",
    )
    # 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="context_2_unseen",
        help="set the checkpoint name",
    )

    parser.add_argument(
        "--imagenet_pretrained_path",
        type=str,
        default="checkpoint/resnet_backbone_pretrained_imagenet_wo_pascalcontext.pth.tar",
        help="set the checkpoint name",
    )

    # evaluation option
    parser.add_argument(
        "--eval-interval", type=int, default=10, help="evaluation interval (default: 1)"
    )

    # 2 unseen
    unseen_names = ["cow", "motorbike"]
    # 4 unseen
    # unseen_names = ['cow', 'motorbike', 'sofa', 'cat']
    # 6 unseen
    # unseen_names = ['cow', 'motorbike', 'sofa', 'cat', 'boat', 'fence']
    # 8 unseen
    # unseen_names = ['cow', 'motorbike', 'sofa', 'cat', 'boat', 'fence', 'bird', 'tvmonitor']
    # 10 unseen
    # unseen_names = ['cow', 'motorbike', 'sofa', 'cat', 'boat', 'fence', 'bird', 'tvmonitor', 'aeroplane', 'keyboard']

    unseen_classes_idx = []
    for name in unseen_names:
        unseen_classes_idx.append(CLASSES_NAMES.index(name))
    print(unseen_classes_idx)
    # all classes
    parser.add_argument("--unseen_classes_idx", type=int, default=unseen_classes_idx)
    args = parser.parse_args()
    args.cuda = not args.no_cuda and torch.cuda.is_available()
    if args.cuda:
        try:
            args.gpu_ids = [int(s) for s in args.gpu_ids.split(",")]
        except ValueError:
            raise ValueError(
                "Argument --gpu_ids must be a comma-separated list of integers only"
            )

    args.sync_bn = args.cuda and len(args.gpu_ids) > 1

    # default settings for epochs, batch_size and lr
    if args.epochs is None:
        epoches = {
            "coco": 30,
            "cityscapes": 200,
            "pascal": 50,
            "pascal": 150,
        }
        args.epochs = epoches[args.dataset.lower()]

    if args.batch_size is None:
        args.batch_size = 4 * len(args.gpu_ids)

    if args.test_batch_size is None:
        args.test_batch_size = args.batch_size

    if args.lr is None:
        lrs = {
            "coco": 0.1,
            "cityscapes": 0.01,
            "pascal": 0.007,
        }
        args.lr = lrs[args.dataset.lower()] / (4 * len(args.gpu_ids)) * args.batch_size

    if args.checkname is None:
        args.checkname = "deeplab-resnet"
    print(args)
    torch.manual_seed(args.seed)
    trainer = Trainer(args)
    print("Starting Epoch:", trainer.args.start_epoch)
    print("Total Epoches:", trainer.args.epochs)
    for epoch in range(trainer.args.start_epoch, trainer.args.epochs):
        trainer.training(epoch)
        if not trainer.args.no_val and epoch % args.eval_interval == (
            args.eval_interval - 1
        ):
            trainer.validation(epoch)
    trainer.writer.close()
示例#3
0
def main():
    parser = get_parser()
    parser.add_argument(
        "--imagenet_pretrained",
        type=bool,
        default=True,
        help="imagenet pretrained backbone",
    )

    parser.add_argument("--out-stride",
                        type=int,
                        default=16,
                        help="network output stride (default: 8)")

    # PASCAL VOC
    parser.add_argument(
        "--dataset",
        type=str,
        default="pascal",
        choices=["pascal", "coco", "cityscapes"],
        help="dataset name (default: pascal)",
    )

    parser.add_argument(
        "--use-sbd",
        action="store_true",
        default=True,
        help="whether to use SBD dataset (default: True)",
    )
    parser.add_argument("--base-size",
                        type=int,
                        default=312,
                        help="base image size")
    parser.add_argument("--crop-size",
                        type=int,
                        default=312,
                        help="crop image size")
    parser.add_argument(
        "--loss-type",
        type=str,
        default="ce",
        choices=["ce", "focal"],
        help="loss func type (default: ce)",
    )
    # training hyper params

    # PASCAL VOC
    parser.add_argument(
        "--epochs",
        type=int,
        default=200,
        metavar="N",
        help="number of epochs to train (default: auto)",
    )

    # PASCAL VOC
    parser.add_argument(
        "--batch-size",
        type=int,
        default=16,
        metavar="N",
        help="input batch size for training (default: auto)",
    )
    # checking point
    parser.add_argument(
        "--resume",
        type=str,
        default=None,
        help="put the path to resuming file if needed",
    )

    parser.add_argument(
        "--imagenet_pretrained_path",
        type=str,
        default=
        "checkpoint/resnet_backbone_pretrained_imagenet_wo_pascalvoc.pth.tar",
        help="set the checkpoint name",
    )

    parser.add_argument(
        "--checkname",
        type=str,
        default="pascal_2_unseen",
        help="set the checkpoint name",
    )

    parser.add_argument(
        '--config',
        type=str,
        default='***.yaml',
        help='configuration file for train/val',
    )

    # evaluation option
    parser.add_argument("--eval-interval",
                        type=int,
                        default=10,
                        help="evaluation interval (default: 1)")
    # only seen classes
    # 10 unseen
    # parser.add_argument('--unseen_classes_idx', type=int, default=[10, 14, 1, 18, 8, 20, 19, 5, 9, 16])
    # 8 unseen
    # parser.add_argument('--unseen_classes_idx', type=int, default=[10, 14, 1, 18, 8, 20, 19, 5])
    # 6 unseen
    # parser.add_argument('--unseen_classes_idx', type=int, default=[10, 14, 1, 18, 8, 20])
    # 4 unseen
    # parser.add_argument('--unseen_classes_idx', type=int, default=[10, 14, 1, 18])
    # 2 unseen
    # parser.add_argument("--unseen_classes_idx", type=int, default=[10, 14])

    args = parser.parse_args()
    args.cuda = not args.no_cuda and torch.cuda.is_available()
    if args.cuda:
        try:
            args.gpu_ids = [int(s) for s in args.gpu_ids.split(",")]
        except ValueError:
            raise ValueError(
                "Argument --gpu_ids must be a comma-separated list of integers only"
            )

    args.sync_bn = args.cuda and len(args.gpu_ids) > 1

    # default settings for epochs, batch_size and lr
    if args.epochs is None:
        epoches = {
            "coco": 30,
            "cityscapes": 200,
            "pascal": 50,
        }
        args.epochs = epoches[args.dataset.lower()]

    if args.batch_size is None:
        args.batch_size = 4 * len(args.gpu_ids)

    if args.test_batch_size is None:
        args.test_batch_size = args.batch_size

    if args.lr is None:
        lrs = {
            "coco": 0.1,
            "cityscapes": 0.01,
            "pascal": 0.007,
        }
        args.lr = lrs[args.dataset.lower()] / (
            4 * len(args.gpu_ids)) * args.batch_size

    if args.checkname is None:
        args.checkname = "deeplab-resnet"
    print(args)
    torch.manual_seed(args.seed)
    trainer = Trainer(args)
    print("Starting Epoch:", trainer.args.start_epoch)
    print("Total Epoches:", trainer.args.epochs)
    for epoch in range(trainer.args.start_epoch, trainer.args.epochs):
        trainer.training(epoch)
        if not trainer.args.no_val and epoch % args.eval_interval == (
                args.eval_interval - 1):
            trainer.validation(epoch)
    trainer.writer.close()
示例#4
0
def main():
    parser = get_parser()
    parser.add_argument("--out-stride",
                        type=int,
                        default=16,
                        help="network output stride (default: 8)")

    # PASCAL VOC
    parser.add_argument(
        "--dataset",
        type=str,
        default="context",
        choices=["pascal", "coco", "cityscapes"],
        help="dataset name (default: pascal)",
    )

    parser.add_argument(
        "--use-sbd",
        action="store_true",
        default=False,
        help="whether to use SBD dataset (default: True)",
    )
    parser.add_argument("--base-size",
                        type=int,
                        default=312,
                        help="base image size")
    parser.add_argument("--crop-size",
                        type=int,
                        default=312,
                        help="crop image size")
    parser.add_argument(
        "--loss-type",
        type=str,
        default="ce",
        choices=["ce", "focal"],
        help="loss func type (default: ce)",
    )
    # training hyper params

    # PASCAL VOC
    parser.add_argument(
        "--epochs",
        type=int,
        default=20,
        metavar="N",
        help="number of epochs to train (default: auto)",
    )

    # PASCAL VOC
    parser.add_argument(
        "--batch-size",
        type=int,
        default=8,
        metavar="N",
        help="input batch size for training (default: auto)",
    )
    # checking point

    parser.add_argument(
        "--imagenet_pretrained_path",
        type=str,
        default=
        "checkpoint/resnet_backbone_pretrained_imagenet_wo_pascalcontext.pth.tar",
    )

    parser.add_argument(
        "--resume",
        type=str,
        default=
        "run/context/context_4_unseen_not_filter_unseen_classes/experiment_0/190_model.pth.tar",
        help="put the path to resuming file if needed",
    )

    parser.add_argument(
        "--checkname",
        type=str,
        default=
        "gmmn_context_w2c300_linear_weighted100_hs256_4_unseen_not_filtering",
    )

    # false if embedding resume
    parser.add_argument("--global_avg_pool_bn", type=bool, default=True)

    # evaluation option
    parser.add_argument("--eval-interval",
                        type=int,
                        default=1,
                        help="evaluation interval (default: 1)")

    # keep empty
    parser.add_argument("--unseen_classes_idx", type=int, default=[])

    # 2 unseen
    # unseen_names = ["cow", "motorbike"]
    # 4 unseen
    unseen_names = ['cow', 'motorbike', 'sofa', 'cat']
    # 6 unseen
    # unseen_names = ['cow', 'motorbike', 'sofa', 'cat', 'boat', 'fence']
    # 8 unseen
    # unseen_names = ['cow', 'motorbike', 'sofa', 'cat', 'boat', 'fence', 'bird', 'tvmonitor']
    # 10 unseen
    # unseen_names = ['cow', 'motorbike', 'sofa', 'cat', 'boat', 'fence', 'bird', 'tvmonitor', 'aeroplane', 'keyboard']

    unseen_classes_idx_metric = []
    for name in unseen_names:
        unseen_classes_idx_metric.append(CLASSES_NAMES.index(name))

    ### FOR METRIC COMPUTATION IN ORDER TO GET PERFORMANCES FOR TWO SETS
    seen_classes_idx_metric = np.arange(33)

    seen_classes_idx_metric = np.delete(seen_classes_idx_metric,
                                        unseen_classes_idx_metric).tolist()
    parser.add_argument("--seen_classes_idx_metric",
                        type=int,
                        default=seen_classes_idx_metric)
    parser.add_argument("--unseen_classes_idx_metric",
                        type=int,
                        default=unseen_classes_idx_metric)

    parser.add_argument("--unseen_weight",
                        type=int,
                        default=10,
                        help="number of output channels")

    parser.add_argument("--random_last_layer",
                        type=bool,
                        default=True,
                        help="randomly init last layer")

    parser.add_argument(
        "--real_seen_features",
        type=bool,
        default=True,
        help="real features for seen classes",
    )
    parser.add_argument(
        "--load_embedding",
        type=str,
        default="my_w2c",
        choices=["attributes", "w2c", "w2c_bg", "my_w2c", "fusion", None],
    )
    parser.add_argument("--w2c_size", type=int, default=600)

    ### GENERATOR ARGS
    parser.add_argument("--noise_dim", type=int, default=600)
    parser.add_argument("--embed_dim", type=int, default=600)
    parser.add_argument("--hidden_size", type=int, default=256)
    parser.add_argument("--feature_dim", type=int, default=256)
    parser.add_argument("--lr_generator", type=float, default=0.0002)
    parser.add_argument("--batch_size_generator", type=int, default=128)
    parser.add_argument("--saved_validation_images", type=int, default=10)

    parser.add_argument(
        "--filter_unseen_classes",
        type=bool,
        default=False,
        help="filter unseen classes",
    )

    parser.add_argument(
        '--config',
        type=str,
        default='configs/context_finetune.yaml',
        help='configuration file for train/val',
    )

    args = parser.parse_args()
    args.cuda = not args.no_cuda and torch.cuda.is_available()
    if args.cuda:
        try:
            args.gpu_ids = [int(s) for s in args.gpu_ids.split(",")]
        except ValueError:
            raise ValueError(
                "Argument --gpu_ids must be a comma-separated list of integers only"
            )

    args.sync_bn = args.cuda and len(args.gpu_ids) > 1

    # default settings for epochs, batch_size and lr
    if args.epochs is None:
        epoches = {
            "coco": 30,
            "cityscapes": 200,
            "pascal": 50,
        }
        args.epochs = epoches[args.dataset.lower()]

    if args.batch_size is None:
        args.batch_size = 4 * len(args.gpu_ids)

    if args.test_batch_size is None:
        args.test_batch_size = args.batch_size

    if args.lr is None:
        lrs = {
            "coco": 0.1,
            "cityscapes": 0.01,
            "pascal": 0.007,
        }
        args.lr = lrs[args.dataset.lower()] / (
            4 * len(args.gpu_ids)) * args.batch_size

    if args.checkname is None:
        args.checkname = "deeplab-resnet"
    print(args)
    torch.manual_seed(args.seed)
    trainer = Trainer(args)
    print("Starting Epoch:", trainer.args.start_epoch)
    print("Total Epoches:", trainer.args.epochs)
    # trainer.validation(trainer.args.start_epoch, args)
    for epoch in range(trainer.args.start_epoch, trainer.args.epochs):
        trainer.training(epoch, args)
        if not trainer.args.no_val and epoch % args.eval_interval == (
                args.eval_interval - 1):
            trainer.validation(epoch, args)

    trainer.writer.close()
示例#5
0
def main():
    parser = get_parser()
    parser.add_argument("--out-stride",
                        type=int,
                        default=16,
                        help="network output stride (default: 8)")

    # PASCAL VOC
    parser.add_argument(
        "--dataset",
        type=str,
        default="pascal",
        choices=["pascal", "coco", "cityscapes"],
        help="dataset name (default: pascal)",
    )

    parser.add_argument(
        "--use-sbd",
        action="store_true",
        default=False,
        help="whether to use SBD dataset (default: True)",
    )
    parser.add_argument("--base-size",
                        type=int,
                        default=513,
                        help="base image size")
    parser.add_argument("--crop-size",
                        type=int,
                        default=513,
                        help="crop image size")
    parser.add_argument(
        "--loss-type",
        type=str,
        default="ce",
        choices=["ce", "focal"],
        help="loss func type (default: ce)",
    )
    # training hyper params

    # PASCAL VOC
    parser.add_argument(
        "--epochs",
        type=int,
        default=300,
        metavar="N",
        help="number of epochs to train (default: auto)",
    )

    # PASCAL VOC
    parser.add_argument(
        "--batch-size",
        type=int,
        default=8,
        metavar="N",
        help="input batch size for training (default: auto)",
    )
    # cuda, seed and logging
    # checking point
    parser.add_argument(
        "--imagenet_pretrained_path",
        type=str,
        default=
        "checkpoint/resnet_backbone_pretrained_imagenet_wo_pascalvoc.pth.tar",
    )
    # checking point
    parser.add_argument(
        "--resume",
        type=str,
        default=
        "run/pascal/gmmn_pascal_w2c300_linear_weighted100_hs256_2_unseen/experiment_0/26_model.pth.tar",
        help="put the path to resuming file if needed",
    )

    parser.add_argument("--checkname", type=str, default="pascal_eval")

    # evaluation option
    parser.add_argument("--eval-interval",
                        type=int,
                        default=5,
                        help="evaluation interval (default: 1)")
    ### FOR IMAGE SELECTION IN ORDER TO TAKE OFF IMAGE WITH UNSEEN CLASSES FOR TRAINING AND VALIDATION
    # keep empty
    parser.add_argument("--unseen_classes_idx", type=int, default=[])

    ### FOR METRIC COMPUTATION IN ORDER TO GET PERFORMANCES FOR TWO SETS
    seen_classes_idx_metric = np.arange(20)

    # 2 unseen
    unseen_classes_idx_metric = [10, 14]
    # 4 unseen
    # unseen_classes_idx_metric = [10, 14, 1, 18]
    # 6 unseen
    # unseen_classes_idx_metric = [10, 14, 1, 18, 8, 20]
    # 8 unseen
    # unseen_classes_idx_metric = [10, 14, 1, 18, 8, 20, 19, 5]
    # 10 unseen
    # unseen_classes_idx_metric = [10, 14, 1, 18, 8, 20, 19, 5, 9, 16]
    # 5 unseen
    unseen_classes_idx_metric = [15, 16, 17, 18, 19]

    seen_classes_idx_metric = np.delete(seen_classes_idx_metric,
                                        unseen_classes_idx_metric).tolist()
    parser.add_argument("--seen_classes_idx_metric",
                        type=int,
                        default=seen_classes_idx_metric)
    parser.add_argument("--unseen_classes_idx_metric",
                        type=int,
                        default=unseen_classes_idx_metric)

    parser.add_argument("--nonlinear_last_layer",
                        type=bool,
                        default=False,
                        help="non linear prediction")
    parser.add_argument("--random_last_layer",
                        type=bool,
                        default=False,
                        help="randomly init last layer")

    args = parser.parse_args()
    args.cuda = not args.no_cuda and torch.cuda.is_available()
    if args.cuda:
        try:
            args.gpu_ids = [int(s) for s in args.gpu_ids.split(",")]
        except ValueError:
            raise ValueError(
                "Argument --gpu_ids must be a comma-separated list of integers only"
            )

    args.sync_bn = args.cuda and len(args.gpu_ids) > 1

    # default settings for epochs, batch_size and lr
    if args.epochs is None:
        epoches = {
            "coco": 30,
            "cityscapes": 200,
            "pascal": 50,
        }
        args.epochs = epoches[args.dataset.lower()]

    if args.batch_size is None:
        args.batch_size = 4 * len(args.gpu_ids)

    if args.test_batch_size is None:
        args.test_batch_size = args.batch_size

    if args.lr is None:
        lrs = {
            "coco": 0.1,
            "cityscapes": 0.01,
            "pascal": 0.007,
        }
        args.lr = lrs[args.dataset.lower()] / (
            4 * len(args.gpu_ids)) * args.batch_size

    if args.checkname is None:
        args.checkname = "deeplab-resnet"
    print(args)
    torch.manual_seed(args.seed)
    trainer = Trainer(args)
    print("Starting Epoch:", trainer.args.start_epoch)
    print("Total Epoches:", trainer.args.epochs)
    trainer.validation(0, args)