예제 #1
0
def main():
    args = parse()
    np.random.seed(args.seed)
    print('arguments: ', args)

    # Model setup
    if args.dataset == 'coco2017':
        train_data = COCODataset()
    test_data = COCODataset(json_file='instances_val2017.json',
                            name='val2017',
                            id_list_file='val2017.txt')
    if args.extractor == 'vgg16':
        mask_rcnn = MaskRCNNVGG16(n_fg_class=80,
                                  pretrained_model=args.pretrained,
                                  roi_size=args.roi_size,
                                  roi_align=args.roialign)
    elif args.extractor == 'resnet50':
        mask_rcnn = MaskRCNNResNet(n_fg_class=80,
                                   pretrained_model=args.pretrained,
                                   roi_size=args.roi_size,
                                   n_layers=50,
                                   roi_align=args.roialign)
    elif args.extractor == 'resnet101':
        mask_rcnn = MaskRCNNResNet(n_fg_class=80,
                                   pretrained_model=args.pretrained,
                                   roi_size=args.roi_size,
                                   n_layers=101,
                                   roi_align=args.roialign)
    mask_rcnn.use_preset('evaluate')
    model = MaskRCNNTrainChain(mask_rcnn,
                               gamma=args.gamma,
                               roi_size=args.roi_size)

    # Trainer setup
    if args.gpu >= 0:
        chainer.cuda.get_device_from_id(args.gpu).use()
        model.to_gpu()
    optimizer = chainer.optimizers.MomentumSGD(lr=args.lr, momentum=0.9)
    #optimizer = chainer.optimizers.Adam()#alpha=0.001, beta1=0.9, beta2=0.999 , eps=0.00000001)
    optimizer.setup(model)
    optimizer.add_hook(chainer.optimizer.WeightDecay(rate=0.0001))

    train_data = TransformDataset(train_data, Transform(mask_rcnn))
    test_data = TransformDataset(test_data, Transform(mask_rcnn))
    train_iter = chainer.iterators.SerialIterator(train_data, batch_size=1)
    test_iter = chainer.iterators.SerialIterator(test_data,
                                                 batch_size=1,
                                                 repeat=False,
                                                 shuffle=False)
    updater = SubDivisionUpdater(train_iter, optimizer, device=args.gpu)
    trainer = training.Trainer(updater, (args.iteration, 'iteration'),
                               out=args.out)

    # Extensions
    trainer.extend(extensions.snapshot_object(model.mask_rcnn,
                                              'snapshot_model.npz'),
                   trigger=(args.snapshot, 'iteration'))
    trainer.extend(extensions.ExponentialShift('lr', 10),
                   trigger=ManualScheduleTrigger([args.lr_initialchange],
                                                 'iteration'))
    trainer.extend(extensions.ExponentialShift('lr', 0.1),
                   trigger=(args.lr_step, 'iteration'))
    if args.resume is not None:
        chainer.serializers.load_npz(args.resume, model.mask_rcnn)
    log_interval = 40, 'iteration'
    plot_interval = 160, 'iteration'
    print_interval = 40, 'iteration'

    trainer.extend(extensions.Evaluator(test_iter, model, device=args.gpu),
                   trigger=(args.validation, 'iteration'))
    trainer.extend(chainer.training.extensions.observe_lr(),
                   trigger=log_interval)
    trainer.extend(extensions.LogReport(trigger=log_interval))
    trainer.extend(extensions.PrintReport([
        'iteration',
        'epoch',
        'elapsed_time',
        'lr',
        'main/loss',
        'main/avg_loss',
        'main/roi_loc_loss',
        'main/roi_cls_loss',
        'main/roi_mask_loss',
        'main/rpn_loc_loss',
        'main/rpn_cls_loss',
        'validation/main/loss',
    ]),
                   trigger=print_interval)
    trainer.extend(extensions.ProgressBar(update_interval=1000))
    trainer.extend(extensions.dump_graph('main/loss'))
    try:
        trainer.run()
    except:
        traceback.print_exc()
import numpy as np
import os
path = os.path.join(os.path.dirname(__file__), '../')
import sys
sys.path.append(path)
from mask_rcnn_resnet import MaskRCNNResNet
from chainer import serializers
import pickle

model = MaskRCNNResNet(n_fg_class=80,
                       roi_size=14,
                       pretrained_model='auto',
                       anchor_scales=[2, 4, 8, 16, 32],
                       n_layers=50,
                       class_ids=[[1]])

modeldir = "modelfiles"
if os.path.exists(modeldir) == False:
    os.mkdir(modeldir)

# resnet50, end-to-end, C4
d_model_file = "modelfiles/model_final.pkl"
c_model_file = "modelfiles/e2e_mask_rcnn_R-50-C4_1x_d2c.npz"

with open(d_model_file, 'rb') as f:
    d = pickle.load(f, encoding='latin-1')['blobs']
d_key = sorted(d)

parsecount = 0
for bl in d_key:
    if 'res' in bl:
예제 #3
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--gpu', type=int, default=-1)
    parser.add_argument('--modelfile')
    parser.add_argument('--image', type=str)
    parser.add_argument('--roi_size',
                        '-r',
                        type=int,
                        default=7,
                        help='ROI size for mask head input')
    parser.add_argument('--roialign',
                        action='store_false',
                        default=True,
                        help='default: True')
    parser.add_argument('--contour',
                        action='store_true',
                        default=False,
                        help='visualize contour')
    parser.add_argument('--background',
                        action='store_true',
                        default=False,
                        help='background(no-display mode)')
    parser.add_argument('--extractor',
                        choices=('resnet50', 'resnet101'),
                        default='resnet50',
                        help='extractor network')
    args = parser.parse_args()
    if args.background:
        import matplotlib
        matplotlib.use('Agg')
    import matplotlib.pyplot as plot
    from utils.vis_bbox import vis_bbox
    from chainercv.datasets import voc_bbox_label_names
    from mask_rcnn_resnet import MaskRCNNResNet
    from chainercv import utils
    if args.extractor == 'resnet50':
        model = MaskRCNNResNet(n_fg_class=80,
                               roi_size=args.roi_size,
                               n_layers=50,
                               roi_align=args.roialign)
    elif args.extractor == 'resnet101':
        model = MaskRCNNResNet(n_fg_class=80,
                               roi_size=args.roi_size,
                               n_layers=101,
                               roi_align=args.roialign)
    chainer.serializers.load_npz(args.modelfile, model)
    if args.gpu >= 0:
        chainer.cuda.get_device_from_id(args.gpu).use()
        model.to_gpu()
    img = utils.read_image(args.image, color=True)
    bboxes, rois, labels, scores, masks = model.predict([img])
    print(bboxes, rois)
    bbox, roi, label, score, mask = bboxes[0], rois[0], np.asarray(
        labels[0], dtype=np.int32), scores[0], masks[0]
    #print(bbox, np.asarray(label,dtype=np.int32), score, mask)

    coco_label_names = (
        'background',  # class zero
        'person',
        'bicycle',
        'car',
        'motorcycle',
        'airplane',
        'bus',
        'train',
        'truck',
        'boat',
        'traffic light',
        'fire hydrant',
        'street sign',
        'stop sign',
        'parking meter',
        'bench',
        'bird',
        'cat',
        'dog',
        'horse',
        'sheep',
        'cow',
        'elephant',
        'bear',
        'zebra',
        'giraffe',
        'hat',
        'backpack',
        'umbrella',
        'shoe',
        'eye glasses',
        'handbag',
        'tie',
        'suitcase',
        'frisbee',
        'skis',
        'snowboard',
        'sports ball',
        'kite',
        'baseball bat',
        'baseball glove',
        'skateboard',
        'surfboard',
        'tennis racket',
        'bottle',
        'plate',
        'wine glass',
        'cup',
        'fork',
        'knife',
        'spoon',
        'bowl',
        'banana',
        'apple',
        'sandwich',
        'orange',
        'broccoli',
        'carrot',
        'hot dog',
        'pizza',
        'donut',
        'cake',
        'chair',
        'couch',
        'potted plant',
        'bed',
        'mirror',
        'dining table',
        'window',
        'desk',
        'toilet',
        'door',
        'tv',
        'laptop',
        'mouse',
        'remote',
        'keyboard',
        'cell phone',
        'microwave',
        'oven',
        'toaster',
        'sink',
        'refrigerator',
        'blender',
        'book',
        'clock',
        'vase',
        'scissors',
        'teddy bear',
        'hair drier',
        'toothbrush')
    vis_bbox(img,
             roi,
             roi,
             label=label,
             score=score,
             mask=mask,
             label_names=coco_label_names,
             contour=args.contour,
             labeldisplay=True)
    #plot.show()
    filename = "output.png"
    plot.savefig(filename)
예제 #4
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--gpu', type=int, default=0)
    parser.add_argument('--modelfile')
    parser.add_argument('--image', type=str)
    parser.add_argument('--roi_size',
                        '-r',
                        type=int,
                        default=14,
                        help='ROI size for mask head input')
    parser.add_argument('--roialign',
                        action='store_false',
                        default=True,
                        help='default: True')
    parser.add_argument('--contour',
                        action='store_true',
                        default=False,
                        help='visualize contour')
    parser.add_argument('--background',
                        action='store_true',
                        default=False,
                        help='background(no-display mode)')
    parser.add_argument('--bn2affine',
                        action='store_true',
                        default=False,
                        help='batchnorm to affine')
    parser.add_argument('--extractor',
                        choices=('resnet50', 'resnet101'),
                        default='resnet50',
                        help='extractor network')
    args = parser.parse_args()

    #network class id --> coco label id
    test_class_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, \
    27, 28, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, \
    57, 58, 59, 60, 61, 62, 63, 64, 65, 67, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 90]

    if args.background:
        import matplotlib
        matplotlib.use('Agg')
    import matplotlib.pyplot as plot
    from utils.vis_bbox import vis_bbox
    from chainercv.datasets import voc_bbox_label_names
    from mask_rcnn_resnet import MaskRCNNResNet
    from chainercv import utils
    if args.extractor == 'resnet50':
        model = MaskRCNNResNet(n_fg_class=80,
                               roi_size=args.roi_size,
                               pretrained_model=args.modelfile,
                               n_layers=50,
                               roi_align=args.roialign,
                               class_ids=test_class_ids)
    elif args.extractor == 'resnet101':
        model = MaskRCNNResNet(n_fg_class=80,
                               roi_size=args.roi_size,
                               pretrained_model=args.modelfile,
                               n_layers=101,
                               roi_align=args.roialign,
                               class_ids=test_class_ids)

    chainer.serializers.load_npz(args.modelfile, model)
    if args.gpu >= 0:
        chainer.cuda.get_device_from_id(args.gpu).use()
        model.to_gpu()
    if args.bn2affine:
        bn_to_affine(model)
    img = utils.read_image(args.image, color=True)
    bboxes, labels, scores, masks = model.predict([img])
    bbox, label, score, mask = bboxes[0], np.asarray(
        labels[0], dtype=np.int32), scores[0], masks[0]
    #print(bbox, np.asarray(label,dtype=np.int32), score, mask)

    coco_label_names = (
        'background',  # class zero
        'person',
        'bicycle',
        'car',
        'motorcycle',
        'airplane',
        'bus',
        'train',
        'truck',
        'boat',
        'traffic light',
        'fire hydrant',
        'street sign',
        'stop sign',
        'parking meter',
        'bench',
        'bird',
        'cat',
        'dog',
        'horse',
        'sheep',
        'cow',
        'elephant',
        'bear',
        'zebra',
        'giraffe',
        'hat',
        'backpack',
        'umbrella',
        'shoe',
        'eye glasses',
        'handbag',
        'tie',
        'suitcase',
        'frisbee',
        'skis',
        'snowboard',
        'sports ball',
        'kite',
        'baseball bat',
        'baseball glove',
        'skateboard',
        'surfboard',
        'tennis racket',
        'bottle',
        'plate',
        'wine glass',
        'cup',
        'fork',
        'knife',
        'spoon',
        'bowl',
        'banana',
        'apple',
        'sandwich',
        'orange',
        'broccoli',
        'carrot',
        'hot dog',
        'pizza',
        'donut',
        'cake',
        'chair',
        'couch',
        'potted plant',
        'bed',
        'mirror',
        'dining table',
        'window',
        'desk',
        'toilet',
        'door',
        'tv',
        'laptop',
        'mouse',
        'remote',
        'keyboard',
        'cell phone',
        'microwave',
        'oven',
        'toaster',
        'sink',
        'refrigerator',
        'blender',
        'book',
        'clock',
        'vase',
        'scissors',
        'teddy bear',
        'hair drier',
        'toothbrush')
    vis_bbox(img,
             bbox,
             label=label,
             score=score,
             mask=mask,
             label_names=coco_label_names,
             contour=args.contour,
             labeldisplay=True)
    plot.show()
    filename = "output.png"
    plot.savefig(filename)