コード例 #1
0
class TestExtractPredictorNet(test_util.TestCase):
    @unittest.skipIf('ImageInput' not in workspace.RegisteredOperators(),
                     "Needs OpenCV")
    def test_extract_simple(self):
        from caffe2.python import brew
        from caffe2.python.model_helper import ModelHelper, ExtractPredictorNet

        model = ModelHelper(name="test", arg_scope={'order': 'NCHW'})
        [data, label] = brew.image_input(
            model,
            "reader",
            ["xx/data", "label"],
            is_test=1,
        )
        cnv = brew.conv(model, data, 'cnv', 32, 32, 4)
        a = brew.fc(model, cnv, 'a', 100, 200)
        pred = brew.fc(model, a, 'pred', 200, 5)
        brew.softmax(model, [pred, label], "softmax")

        (predict_net, export_blobs) = ExtractPredictorNet(
            net_proto=model.net.Proto(),
            input_blobs=["xx/data"],
            output_blobs=["pred"],
            renames={"xx/data": "image"},
        )
        export_blobs = set(export_blobs)

        ops = list(predict_net.Proto().op)
        for op in ops:
            self.assertFalse(op.type == "Softmax")
            self.assertFalse("xx/data" in op.input)

        # Note: image input should not be included
        self.assertEquals(ops[0].type, "Conv")
        self.assertEquals(ops[1].type, "FC")
        self.assertEquals(ops[2].type, "FC")
        self.assertEquals(len(ops), 3)

        # test rename happened
        self.assertEquals(ops[0].input[0], "image")

        # Check export blobs
        self.assertTrue("image" not in export_blobs)
        self.assertTrue("xx/data" not in export_blobs)
        self.assertEqual(set([str(p) for p in model.params]), export_blobs)

        # Check external inputs/outputs
        self.assertTrue("image" in predict_net.Proto().external_input)
        self.assertEquals(set(["pred"]),
                          set(predict_net.Proto().external_output))
        self.assertEqual(
            set(predict_net.Proto().external_input) -
            set([str(p) for p in model.params]), set(["image"]))
コード例 #2
0
    def _get_unimplemented_ops(self):
        """
        Returns a list of unimplemented ops' names.

        Arguments:

        Returns:
            List of unimplemented ops' names.
        """
        # get required op
        ops = workspace.RegisteredOperators()
        required_ops = set(ops)

        # get unimplemented ops
        unimplemented_ops = required_ops - set(self._get_supported_ops())
        return sorted(list(unimplemented_ops))
コード例 #3
0
    def _get_supported_ops(self):
        """
        Returns a list of supported ops' names.

        Arguments:

        Returns:
            List of supported ops' names.
        """
        ob = OpsBridge()
        supported_ops = set([
            name for name in dir(ob)
            if name[:1] != "_" and name not in ob.__dict__
        ])
        # common set
        supported_ops &= set(workspace.RegisteredOperators())
        return sorted(list(supported_ops))
コード例 #4
0
            scores = scores.ravel()

            boxes = np.column_stack((x, y, x, y)).astype(dtype=np.float32)
            boxes *= (2**level)
            boxes += anchor[anchor_ids, :]
            box_deltas = box_pred[0, anchor_ids, :, y, x]
            pred_boxes = box_utils.bbox_transform(boxes, box_deltas)
            pred_boxes = box_utils.clip_tiled_boxes(pred_boxes, im_info[0, :2])

            boxes_exp = np.zeros((pred_boxes.shape[0], 5), dtype=np.float32)
            boxes_exp[:, 0:4] = pred_boxes
            boxes_exp[:, 4] = scores

            # for i in range(num_cls):
            #     if stats_act[0, i] > 0:
            #         print('cls %d: %d' % (i+1, stats_act[0, i]))

            np.testing.assert_allclose(boxes_act[:, :5],
                                       boxes_exp,
                                       rtol=1e-6,
                                       atol=1e-6)
            np.testing.assert_allclose(feats_act, feats_exp)


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_detectron_ops()
    utils.c2.import_custom_ops()
    assert 'BoxesAndFeats' in workspace.RegisteredOperators()
    unittest.main()
コード例 #5
0
        anchors = []
        for lvl in range(min_level, max_level+1):
            field_stride = 2 ** lvl
            anchor_sizes = (cfg.FPN.RPN_ANCHOR_START_SIZE * 2.**(lvl - min_level), )
            anchor_aspect_ratios = cfg.FPN.RPN_ASPECT_RATIOS
            anchor = generate_anchors(
                stride=field_stride,
                sizes=anchor_sizes,
                aspect_ratios=anchor_aspect_ratios
            )
            anchors.append(anchor.astype(np.float32))

        boxes = self._run_cpu_testing(cls_probs, box_preds, anchors, im_info)

        utils.vis.vis_one_image(im[:, :, ::-1],
                                '{:s}-cd-output'.format(im_name),
                                osp.join(root_dir, 'tests'),
                                boxes,
                                segms=None,
                                keypoints=None,
                                thresh=0.,
                                box_alpha=0.8,
                                dataset=dataset,
                                show_class=False) 

if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_detectron_ops()
    utils.c2.import_custom_ops()
    assert 'GenerateProposalsSingleImage' in workspace.RegisteredOperators()
    unittest.main()
コード例 #6
0
            workspace.FeedBlob('X', X)
            workspace.FeedBlob('im_info', im_info)
            workspace.FeedBlob('data', data)
        workspace.RunOperatorOnce(op)
        Y = workspace.FetchBlob('Y')
        return Y

    def test_image(self):
        this_dir = osp.dirname(__file__)
        X = cv2.imread(osp.join(this_dir, 'zerg.jpg')).astype(np.float32)
        # to C, H, W
        X = np.transpose(X, (2, 0, 1))
        im_info = np.array([[508., 944., 1.], [127., 236., 1.]],
                           dtype=np.float32)
        data = np.zeros([2, 1, 1000, 1000], dtype=np.float32)
        Y = self._run_resize_memory_init_op_gpu(X, im_info, data)

        Y_dump1 = np.transpose(Y[0, :], (1, 2, 0))
        Y_dump2 = np.transpose(Y[1, :], (1, 2, 0))
        cv2.imwrite(osp.join(this_dir, 'z1-output.jpg'), Y_dump1)
        cv2.imwrite(osp.join(this_dir, 'z2-output.jpg'), Y_dump2)

        return True


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_custom_ops()
    assert 'ResizeMemoryInit' in workspace.RegisteredOperators()
    unittest.main()
コード例 #7
0
        B = np.random.randn(2, 3, 5).astype(np.float32)
        self._run_test(A, B, check_grad=True)

    def test_large_forward(self):
        A = np.random.randn(2, 256, 42, 100).astype(np.float32)
        B = np.random.randn(2, 256, 35, 87).astype(np.float32)
        self._run_test(A, B)

        A = np.random.randn(2, 256, 42, 87).astype(np.float32)
        B = np.random.randn(2, 256, 35, 87).astype(np.float32)
        self._run_test(A, B)

    def test_size_exceptions(self):
        A = np.random.randn(2, 256, 42, 86).astype(np.float32)
        B = np.random.randn(2, 256, 35, 87).astype(np.float32)
        with self.assertRaises(RuntimeError):
            self._run_test(A, B)

        A = np.random.randn(2, 255, 42, 88).astype(np.float32)
        B = np.random.randn(2, 256, 35, 87).astype(np.float32)
        with self.assertRaises(RuntimeError):
            self._run_test(A, B)


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    c2_utils.import_detectron_ops()
    assert 'SpatialNarrowAs' in workspace.RegisteredOperators()
    logging_utils.setup_logging(__name__)
    unittest.main()
コード例 #8
0
        rois = rois / im_info[0, 2]
        scores = rois[:, [0]]
        scores[:] = 1.
        boxes = rois[:, 1:]
        cls_boxes = np.hstack([boxes, scores])

        utils.vis.vis_one_image(im[:, :, ::-1],
                                '{:s}-gd-output'.format(im_name),
                                current_dir,
                                cls_boxes,
                                segms=None,
                                keypoints=None,
                                thresh=0.,
                                box_alpha=0.8,
                                dataset=dataset,
                                show_class=False)


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_detectron_ops()
    utils.c2.import_custom_ops()
    assert 'SelectTopN' in workspace.RegisteredOperators()
    assert 'SelectTopNSingle' in workspace.RegisteredOperators()
    assert 'BoxesAndFeats' in workspace.RegisteredOperators()
    assert 'ClassBasedBoxes' in workspace.RegisteredOperators()
    assert 'ClassBasedBoxesSingle' in workspace.RegisteredOperators()
    assert 'NMS' in workspace.RegisteredOperators()
    assert 'ReduceBoxesAndFeats' in workspace.RegisteredOperators()
    assert 'ReduceSumGPU' in workspace.RegisteredOperators()
    unittest.main()
コード例 #9
0
        Y_exp = np.array([0, 1, 0, 3, 0], dtype=np.float32)
        Y_act = self._run_zero_even_op_gpu(X)
        np.testing.assert_allclose(Y_act[0::2], Y_exp[0::2])

    def test_gpu_preserves_vals_at_odd_inds(self):
        X = np.array([0, 1, 2, 3, 4], dtype=np.float32)
        Y_exp = np.array([0, 1, 0, 3, 0], dtype=np.float32)
        Y_act = self._run_zero_even_op_gpu(X)
        np.testing.assert_allclose(Y_act[1::2], Y_exp[1::2])

    def test_gpu_handles_even_length_arrays(self):
        X = np.random.rand(64).astype(np.float32)
        Y_exp = np.copy(X)
        Y_exp[0::2] = 0.0
        Y_act = self._run_zero_even_op_gpu(X)
        np.testing.assert_allclose(Y_act, Y_exp)

    def test_gpu_handles_odd_length_arrays(self):
        X = np.random.randn(77).astype(np.float32)
        Y_exp = np.copy(X)
        Y_exp[0::2] = 0.0
        Y_act = self._run_zero_even_op_gpu(X)
        np.testing.assert_allclose(Y_act, Y_exp)


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    c2_utils.import_custom_ops()
    assert 'ZeroEven' in workspace.RegisteredOperators()
    unittest.main()
コード例 #10
0
        rois = self._run_cpu_testing(cls_preds, cls_probs, box_preds, anchors, im_info)
        rois = rois / im_info[0, 2]
        scores = rois[:, [0]]
        scores[:] = 1.
        boxes = rois[:, 1:]
        cls_boxes = np.hstack([boxes, scores])

        utils.vis.vis_one_image(im[:, :, ::-1],
                                '{:s}-cd-output'.format(im_name),
                                current_dir,
                                cls_boxes,
                                segms=None,
                                keypoints=None,
                                thresh=0.,
                                box_alpha=0.8,
                                dataset=dataset,
                                show_class=False) 

if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_detectron_ops()
    utils.c2.import_custom_ops()
    assert 'SelectTopN' in workspace.RegisteredOperators()
    assert 'SelectTopNSingle' in workspace.RegisteredOperators()
    assert 'BoxesOnly' in workspace.RegisteredOperators()
    assert 'ClassBasedBoxesCombined' in workspace.RegisteredOperators()
    assert 'NMSOnly' in workspace.RegisteredOperators()
    assert 'ReduceBoxesOnly' in workspace.RegisteredOperators()
    assert 'ReduceSumGPU' in workspace.RegisteredOperators()
    assert 'Distribute' in workspace.RegisteredOperators()
    unittest.main()
コード例 #11
0
        M = fun(unary, im)
        print(M.shape, M.max(), M.min(), M.mean())
        print(M.shape, M.max(), M.min(), M.mean())

        aM = np.argmax(M, axis=1)
        res = np.zeros((H, W, 3), dtype=np.uint8)
        for h in range(H):
            for w in range(W):
                l = aM[0, h, w]
                # l = lbl[h, w]
                # print(M[0, :, h, w])
                for key in label.keys():
                    if l == label[key][0]:
                        color = label[key][1]
                res[h, w, :] = color
        cv2.imwrite('build/im' + idx + '.png', res)

    def test_handles_arrays(self):
        self._test_handles_arrays('1', self._run_dense_crf_op)
        self._test_handles_arrays('2', self._run_dense_crf_op)

    def test_handles_arrays_gpu(self):
        self._test_handles_arrays('3', self._run_dense_crf_op_gpu)


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    c2_utils.import_custom_ops()
    assert 'DenseCRF' in workspace.RegisteredOperators()
    unittest.main()
コード例 #12
0
        c = X.shape[1]
        nd = nc - 1
        assert c % nd == 0
        a = int(c / nd)
        h = X.shape[2]
        w = X.shape[3]
        X = X.reshape(n*a, nd, h, w)
        zerosX = np.zeros((n*a, 1, h, w), dtype=np.float32)
        Xhat = np.concatenate([zerosX, X], axis=1)
        maxX = Xhat.max(axis=1, keepdims=True)
        Xhat -= maxX
        Xhat = np.exp(Xhat)
        sumX = Xhat.sum(axis=1, keepdims=True)
        Y_exp = Xhat / sumX
        Y_exp = Y_exp.reshape(n, a * (nd + 1), h, w)
        np.testing.assert_allclose(Y_act, Y_exp, atol=1e-7)

    def test_one_res(self):
        X = np.random.rand(2, 1, 7, 7).astype(np.float32)
        self._test_single_res(X)

    def test_mult_res(self):
        X = np.random.rand(20, 6, 8, 8).astype(np.float32)
        self._test_mult_res(X, 3)

if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_custom_ops()
    assert 'AddSpatialSoftmax' in workspace.RegisteredOperators()
    unittest.main()
コード例 #13
0
from caffe2.proto import caffe2_pb2
from caffe2.python import core
from caffe2.python import workspace

import utils.c2


class MulConvFCOpTest(unittest.TestCase):
    def _run_mul_conv_fc_op_gpu(self, X1, X2):
        with core.DeviceScope(core.DeviceOption(caffe2_pb2.CUDA, 0)):
            op = core.CreateOperator('MulConvFC', ['X1', 'X2'], ['Y'])
            workspace.FeedBlob('X1', X1)
            workspace.FeedBlob('X2', X2)
        workspace.RunOperatorOnce(op)
        Y = workspace.FetchBlob('Y')
        return Y

    def test_res(self):
        X1 = np.random.rand(20, 512, 7, 7).astype(np.float32)
        X2 = np.random.rand(20, 512).astype(np.float32)
        Y_act = self._run_mul_conv_fc_op_gpu(X1, X2)
        Y_exp = X1 * X2.reshape(20, 512, 1, 1)
        np.testing.assert_allclose(Y_act, Y_exp)


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_custom_ops()
    assert 'MulConvFC' in workspace.RegisteredOperators()
    unittest.main()
コード例 #14
0
            for i in range(lx):
                workspace.FeedBlob('X%d' % i, Xs[i])
        workspace.RunOperatorOnce(op)
        Y = workspace.FetchBlob('Y')
        return Y

    def test_res(self):
        iter = 3
        a = 1
        x = 2048
        Xs = []
        for i in range(iter):
            Xs.append(np.random.rand(2, a * x).astype(np.float32))
        attention = np.random.rand(2, iter * a).astype(np.float32)
        Y_act = self._run_reduce_with_attention_region_op_gpu(Xs, attention, iter)
        A = attention.reshape(2, iter, a)
        As = np.split(A, iter, axis=1)
        As = [ sa.reshape(2, a, 1) for sa in As ]
        Xs = [ xs.reshape(2, a, x) for xs in Xs ]
        Y_exp = np.zeros_like(Xs[0])
        for i in range(iter):
            Y_exp += Xs[i] * As[i]
        Y_exp = Y_exp.reshape(2, a * x)
        np.testing.assert_allclose(Y_act, Y_exp, atol=1e-7)

if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_custom_ops()
    assert 'ReduceWithAttentionRegion' in workspace.RegisteredOperators()
    unittest.main()
コード例 #15
0
try:
  from .libcaffe2_python import *
except ImportError as e:
  print(str(e))
  print('Pycaffe is not available. Exiting.')
  sys.exit(1)
# libcaffe2_python contains a global Workspace that we need to properly delete
# when exiting. Otherwise, cudart will cause segfaults sometimes.
atexit.register(OnModuleExit)

from caffe2.proto import caffe2_pb2
from collections import Counter, defaultdict
from caffe2.python import utils, workspace

_REGISTERED_OPERATORS = set(
    s.decode() for s in workspace.RegisteredOperators())

def IsOperator(op_type):
  return (op_type in _REGISTERED_OPERATORS)

def GetGradientName(name):
  """The function that returns the gradient name for a blob."""
  return name + '_grad'

def IsGradientName(name):
  return name.endswith('_grad')

def GetOriginalName(name):
  """THe function that returns the original name for a gradient blob."""
  if not name.endswith('_grad'):
    raise RuntimeError('The blob ' + name + ' is not a legal gradient name.')
コード例 #16
0
        return rois

    def test_do_detection(self):
        cls_preds, cls_probs, box_preds, anchors, im_info, im, im_name, current_dir, dataset = self._test_std()
        rois = self._run_op(cls_preds, cls_probs, box_preds, anchors, im_info)
        rois = rois / im_info[0, 2]
        scores = rois[:, [0]]
        scores[:] = 1.
        boxes = rois[:, 1:]
        cls_boxes = np.hstack([boxes, scores])

        utils.vis.vis_one_image(im[:, :, ::-1],
                                '{:s}-rd-output'.format(im_name),
                                current_dir,
                                cls_boxes,
                                segms=None,
                                keypoints=None,
                                thresh=0.,
                                box_alpha=0.8,
                                dataset=dataset,
                                show_class=False) 


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=-2'])
    utils.c2.import_detectron_ops()
    utils.c2.import_custom_ops()
    assert 'RetinanetDetection' in workspace.RegisteredOperators()
    unittest.main()
コード例 #17
0
        rois = rois / im_info[0, 2]
        scores = rois[:, [0]]
        scores[:] = 1.
        boxes = rois[:, 1:]
        cls_boxes = np.hstack([boxes, scores])

        utils.vis.vis_one_image(im[:, :, ::-1],
                                '{:s}-gd-output'.format(im_name),
                                current_dir,
                                cls_boxes,
                                segms=None,
                                keypoints=None,
                                thresh=0.,
                                box_alpha=0.8,
                                dataset=dataset,
                                show_class=False)


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_detectron_ops()
    utils.c2.import_custom_ops()
    assert 'SelectTopN' in workspace.RegisteredOperators()
    assert 'SelectTopNSingle' in workspace.RegisteredOperators()
    assert 'SelectBottomNSingle' in workspace.RegisteredOperators()
    assert 'BoxesOnly' in workspace.RegisteredOperators()
    assert 'ClassBasedBoxesOnly' in workspace.RegisteredOperators()
    assert 'NMSOnly' in workspace.RegisteredOperators()
    assert 'ReduceBoxesOnly' in workspace.RegisteredOperators()
    assert 'ReduceSumGPU' in workspace.RegisteredOperators()
    unittest.main()
コード例 #18
0
        score_index = i * 20 + pred_class
        
#        print(label, type(label), label.shape)
        if label==pred_class:
            loss += -np.log(sigmoid(scores[0, score_index, 0, 0]))
        else:
            dis = 1
            gt_center_index = (pred_class-14) * 2
            if gt_centers[0, gt_center_index, 0, 0]!=-1:
                gt_cx = gt_centers[0, gt_center_index, 0, 0]
                gt_cy = gt_centers[0, gt_center_index+1, 0, 0]
                
                anchor_x1, anchor_y1, anchor_x2, anchor_y2 = rois[0, i*5+1: i*5+5, 0, 0]
                anchor_cx = anchor_x1 + (anchor_x2 - anchor_x1)/2
                anchor_cy = anchor_y1 + (anchor_y2 - anchor_y1)/2
                im_w = im_info[0, 0, 0, 0]
                im_h = im_info[0, 1, 0, 0]
                dis = np.sqrt( (gt_cx-anchor_cx)**2 + (gt_cy-anchor_cy)**2 )/ np.sqrt(im_w**2 + im_h**2)
            loss += -np.log(1-sigmoid(scores[0, score_index, 0, 0])) * dis
    print('loss:', loss)
                
       
if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    c2_utils.import_custom_ops()
    assert 'SsDistanceLoss' in workspace.RegisteredOperators()
    unittest.main()
#    ss_test = SsDistanceLossOpTest()
#    ss_test.test_small_forward_and_gradient()
    
    
コード例 #19
0
    def test_res(self):
        rpn_rois, rpn_roi_probs, gt_boxes, gt_classes, im_info, im, im_name, root_dir, dataset = self._test_std(
        )
        rois, labels, bbox_targets, bbox_inside_weights, bbox_outside_weights = self._run_cpu_generate_labels(
            rpn_rois, gt_boxes, gt_classes, im_info)
        labels = labels.reshape(cfg.TRAIN.BATCH_SIZE_PER_IM, 1)
        rois_idx, rois_shuffled = self._run_distribute(rois)
        assert (rois_shuffled[rois_idx] == rois).all()

        boxes_to_viz = np.hstack([rois[:, 1:5], labels.astype(np.float32)])
        utils.vis.vis_one_image(im[:, :, ::-1],
                                '{:s}-lb-output'.format(im_name),
                                osp.join(root_dir, 'tests'),
                                boxes_to_viz,
                                segms=None,
                                keypoints=None,
                                thresh=0.,
                                box_alpha=0.8,
                                dataset=dataset,
                                show_class=False)


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_detectron_ops()
    utils.c2.import_custom_ops()
    assert 'GenerateProposalsSingleImage' in workspace.RegisteredOperators()
    assert 'GenerateProposalLabelsSingleImage' in workspace.RegisteredOperators(
    )
    assert 'DistributeFPN' in workspace.RegisteredOperators()
    unittest.main()
コード例 #20
0
import utils.c2


class ConcatAttentionOpTest(unittest.TestCase):
    def _run_concat_attention_op_gpu(self, X1, X2):
        with core.DeviceScope(core.DeviceOption(caffe2_pb2.CUDA, 0)):
            op = core.CreateOperator('ConcatAttention', ['X1', 'X2'], ['Y'])
            workspace.FeedBlob('X1', X1)
            workspace.FeedBlob('X2', X2)
        workspace.RunOperatorOnce(op)
        Y = workspace.FetchBlob('Y')
        return Y

    def test_res(self):
        X1 = np.random.rand(2, 270, 7, 7).astype(np.float32)
        X2 = np.random.rand(2, 270, 7, 7).astype(np.float32)
        Y_act = self._run_concat_attention_op_gpu(X1, X2)
        Y_exp = np.empty((2, 540, 7, 7), dtype=np.float32)
        Y_exp[:, 0::2, :, :] = X1
        Y_exp[:, 1::2, :, :] = X2

        np.testing.assert_allclose(Y_act, Y_exp)


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_custom_ops()
    assert 'ConcatAttention' in workspace.RegisteredOperators()
    unittest.main()
コード例 #21
0
        A = np.random.randn(2, 3, 5, 7).astype(np.float32)
        I = np.array([0, 1], dtype=np.int32)
        self._run_op_test(A, I, check_grad=True)

        A = np.random.randn(2, 3, 5, 7).astype(np.float32)
        I = np.array([1, 0], dtype=np.int32)
        self._run_op_test(A, I, check_grad=True)

        A = np.random.randn(10, 3, 5, 7).astype(np.float32)
        I = np.array(np.random.permutation(10), dtype=np.int32)
        self._run_op_test(A, I, check_grad=True)

    def test_size_exceptions(self):
        A = np.random.randn(2, 256, 42, 86).astype(np.float32)
        I = np.array(np.random.permutation(10), dtype=np.int32)
        with self.assertRaises(RuntimeError):
            self._run_op_test(A, I)

    # See doc string in _run_speed_test
    # def test_perf(self):
    #     with core.DeviceScope(core.DeviceOption(caffe2_pb2.CUDA, 0)):
    #         self._run_speed_test()


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_detectron_ops()
    assert 'BatchPermutation' in workspace.RegisteredOperators()
    utils.logging.setup_logging(__name__)
    unittest.main()
コード例 #22
0
    def calulate_Y(self, X, cout):
        """X shape: (N, H, W)
        """
        n, h, w = X.shape
        Y = np.zeros((n, cout, h, w), dtype=np.float32)
        for i in range(n):
            Y[i, :, :, :] = X[i, :, :]
        # test Y if correct
#        for i in range(n):
#            for c in range(cout):
#                print((Y[i, c, :, :]==X[i, :, :]).all())
        Y = np.log(Y)
        return Y
    
def calulate_Y( X, cout):
    n, c, h, w = X.shape
    Y = np.zeros((n, cout, h, w), dtype=np.float32)
    sum_onehot = np.zeros((n, h, w), dtype=np.float32)
    for i in range(c):
        sum_onehot[:, :, :] += X[:, i, :, :]
    for j in range(cout):
        Y[:, j, :, :] = sum_onehot
    return Y

if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    c2_utils.import_custom_ops()
    assert 'PoseLine' in workspace.RegisteredOperators()
    unittest.main()
   
    
コード例 #23
0
        Y = workspace.FetchBlob('Y')
        return Y

    def test_image(self):
        this_dir = osp.dirname(__file__)
        X = cv2.imread(osp.join(this_dir, 'zerg.jpg')).astype(np.float32)
        # to C, H, W
        X = np.transpose(X, (2, 0, 1))
        X = np.expand_dims(X, 0).astype(np.float32)
        rois = np.array(
            [[0., 10., 20., 400., 200.], [0., 300., 100., 470., 250.],
             [0., -100., -20., 500., 300.]],
            dtype=np.float32)
        Y = self._run_crop_and_resize_op_gpu(X, rois)

        Y_dump1 = np.transpose(Y[0, :], (1, 2, 0))
        Y_dump2 = np.transpose(Y[1, :], (1, 2, 0))
        Y_dump3 = np.transpose(Y[2, :], (1, 2, 0))
        cv2.imwrite(osp.join(this_dir, 'car1-output.jpg'), Y_dump1)
        cv2.imwrite(osp.join(this_dir, 'car2-output.jpg'), Y_dump2)
        cv2.imwrite(osp.join(this_dir, 'car3-output.jpg'), Y_dump3)

        return True


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_custom_ops()
    assert 'CropAndResize' in workspace.RegisteredOperators()
    unittest.main()
コード例 #24
0
            workspace.FeedBlob('X', X)
            workspace.FeedBlob('repeats', repeats)
        workspace.RunOperatorOnce(op)
        Y = workspace.FetchBlob('Y')
        return Y

    def test_random_input(self):
        X = np.random.rand(3, 5)
        Y_exp = np.repeat(np.copy(X), 3, axis=0)
        Y_act = self._run_repeat_op(X, np.array([3], dtype=np.int32))
        np.testing.assert_allclose(Y_act, Y_exp)

    def test_gpu_random_input(self):
        X = np.random.rand(3, 5)
        Y_exp = np.repeat(np.copy(X), 3, axis=0)
        Y_act = self._run_repeat_op_gpu(X, np.array([3], dtype=np.int32))
        np.testing.assert_allclose(Y_act, Y_exp)

    def test_gradient(self):
        G = np.random.rand(12, 5).astype(np.float32)
        Y_exp = self._run_repeat_grad_op_np(G.copy(), 3)
        Y_act = self._run_repeat_grad_op(G, 3)
        np.testing.assert_allclose(Y_act, Y_exp)


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    c2_utils.import_custom_ops()
    assert 'Repeat' in workspace.RegisteredOperators()
    unittest.main()
コード例 #25
0
ファイル: core.py プロジェクト: zxsted/caffe2
def _GetRegisteredOperators():
    return set(s.decode() for s in workspace.RegisteredOperators())
コード例 #26
0
            ['Y_hat', 'Y', 'inside_weights', 'outside_weights'], ['loss'],
            scale=scale,
            beta=beta)

        gc = gradient_checker.GradientChecker(stepsize=0.005,
                                              threshold=0.005,
                                              device_option=core.DeviceOption(
                                                  caffe2_pb2.CUDA, 0))

        res, grad, grad_estimated = gc.CheckSimple(
            op, [Y_hat, Y, inside_weights, outside_weights], 0, [0])

        self.assertTrue(grad.shape == grad_estimated.shape,
                        'Fail check: grad.shape != grad_estimated.shape')

        # To inspect the gradient and estimated gradient:
        # np.set_printoptions(precision=3, suppress=True)
        # print('grad:')
        # print(grad)
        # print('grad_estimated:')
        # print(grad_estimated)

        self.assertTrue(res)


if __name__ == '__main__':
    c2_utils.import_detectron_ops()
    assert 'SmoothL1Loss' in workspace.RegisteredOperators()
    logging_utils.setup_logging(__name__)
    unittest.main()
コード例 #27
0
from __future__ import print_function
from __future__ import unicode_literals

import atexit
import sys
from collections import namedtuple

from ._import_c_extension import *

from caffe2.proto import caffe2_pb2
from collections import Counter, defaultdict
from caffe2.python import utils, workspace

import logging

_REGISTERED_OPERATORS = set(s.decode() for s in workspace.RegisteredOperators())

def IsOperator(op_type):
    return (op_type in _REGISTERED_OPERATORS)

# The name scope and device scope when creating a new operator.
_NAMESCOPE = ''
_DEVICESCOPE = None


class NameScope(object):
    """Helper class to create embedded name scopes."""
    # SEPARATOR is defined to be "/" so it is consistent with TensorFlow's
    # visualization tools.
    SEPARATOR = '/'
    def __init__(self, prefix):
コード例 #28
0
            op = core.CreateOperator('SelectTopN', ['X'], ['YI', 'YV'],
                                     top_n=top_n)
            workspace.FeedBlob('X', X)
        workspace.RunOperatorOnce(op)
        YI = workspace.FetchBlob('YI')
        YV = workspace.FetchBlob('YV')
        return YI, YV

    def test_res(self):
        top_n = 1000
        X = np.random.rand(1, 720, 20, 30).astype(np.float32) * 100.
        YI_act, YV_act = self._run_select_top_n_op_gpu(X, top_n)
        YI_act.sort()
        YV_act.sort()

        Xr = X.ravel()
        YI_exp = np.argpartition(Xr, top_n)[:top_n]
        YV_exp = Xr[YI_exp]
        YI_exp.sort()
        YV_exp.sort()

        np.testing.assert_allclose(YI_act, YI_exp)
        np.testing.assert_allclose(YV_act, YV_exp)


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_custom_ops()
    assert 'SelectTopN' in workspace.RegisteredOperators()
    unittest.main()
コード例 #29
0
        return Y_hat

    def _run_resize_pil(self, X, h, w):
        X_hat = X[0, :]
        X_hat = np.transpose(X_hat, (1, 2, 0))
        X_hat = Image.fromarray(X_hat.astype(np.uint8))
        Y_hat = X_hat.resize((w, h), Image.BILINEAR)
        Y_hat = np.array(Y_hat)
        Y_hat = np.transpose(Y_hat.astype(np.float32), (2, 0, 1))
        Y_hat = np.expand_dims(Y_hat, 0)
        return Y_hat

    def test_image(self):
        this_dir = osp.dirname(__file__)
        X = cv2.imread(osp.join(this_dir, 'zerg.jpg'))
        X = np.transpose(X, (2, 0, 1))
        X = np.expand_dims(X, 0).astype(np.float32)
        Y = self._run_resize_bilinear_op_gpu(X, 508, 944)
        Y_dump = np.transpose(Y[0, :], (1, 2, 0))
        cv2.imwrite(osp.join(this_dir, 'zerg-output.jpg'), Y_dump)
        # Y_hat = self._run_resize_cv2(X, 508, 944)

        return True


if __name__ == '__main__':
    workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
    utils.c2.import_custom_ops()
    assert 'ResizeBilinear' in workspace.RegisteredOperators()
    unittest.main()