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:
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)
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)