Пример #1
0
    def __init__(self, obj_proposal_module=None, gpu_id=0, model='hand5', cpu_mode=False):
        #Caffe Setting
        self._model = model
        self._gpu_id = gpu_id
        self._cpu_mode = cpu_mode

        #Objec Proposal Module
        if obj_proposal_module is None:
            self._obj_proposal_module = Selective_Search()
        else:
            self._obj_proposal_module = obj_proposal_module
        
        #Config Caffe Model Path
        self._prototxt = os.path.join(cfg.ROOT_DIR, 'models', NETS[self._model][0], 'test.prototxt')
        self._caffemodel = os.path.join(cfg.ROOT_DIR, 'data', 'fast_rcnn_models',
                            NETS[self._model][1])

        if not os.path.isfile(self._caffemodel):
            raise IOError(('{:s} not found !!').formata(self._caffemodel))
        
        #Config CPU or GPU Mode
        if cpu_mode:
            caffe.set_mode_cpu()
        else:
            caffe.set_mode_gpu()
            caffe.set_device(self._gpu_id)
        
        #Create Caffe
        self._net = caffe.Net(self._prototxt, self._caffemodel, caffe.TEST)
        print '\n\nLoaded network {:s}'.format(self._caffemodel)
Пример #2
0
class Fast_RCNN_Caffe(object):
    def __init__(self, obj_proposal_module=None, gpu_id=0, model='hand5', cpu_mode=False):
        #Caffe Setting
        self._model = model
        self._gpu_id = gpu_id
        self._cpu_mode = cpu_mode

        #Objec Proposal Module
        if obj_proposal_module is None:
            self._obj_proposal_module = Selective_Search()
        else:
            self._obj_proposal_module = obj_proposal_module
        
        #Config Caffe Model Path
        self._prototxt = os.path.join(cfg.ROOT_DIR, 'models', NETS[self._model][0], 'test.prototxt')
        self._caffemodel = os.path.join(cfg.ROOT_DIR, 'data', 'fast_rcnn_models',
                            NETS[self._model][1])

        if not os.path.isfile(self._caffemodel):
            raise IOError(('{:s} not found !!').formata(self._caffemodel))
        
        #Config CPU or GPU Mode
        if cpu_mode:
            caffe.set_mode_cpu()
        else:
            caffe.set_mode_gpu()
            caffe.set_device(self._gpu_id)
        
        #Create Caffe
        self._net = caffe.Net(self._prototxt, self._caffemodel, caffe.TEST)
        print '\n\nLoaded network {:s}'.format(self._caffemodel)
    

    def detect_object(self, image):
        #print 'fast_rcnn_caffe call'
        return self.internal_detect_object(image, ('hand5',))

    def internal_detect_object(self, image, classes):
        # Load Object proposals
        #timer = Timer()
        #timer.tic()
        obj_proposals = self._obj_proposal_module.get_object_proposals(image)
        #timer.toc()
        # Show Object proposals information
        #print 'it took {:.3f}s for image ceate {:d} obj_proposals'.format(timer.total_time, obj_proposals.shape[0])

        # Detect all object classes and regress object bounds
        #timer = Timer()
        #timer.tic()
        scores, boxes = im_detect(self._net, image, obj_proposals)
        #timer.toc()
        #print ('Detection took {:.3f}s for '
        #       '{:d} object proposals').format(timer.total_time, boxes.shape[0])

        # Visualize detections for each class
        CONF_THRESH = 0.9
        NMS_THRESH = 0.3
        #Dictionary Result for Detection
        class_detections = {}
        #Extract detect result for each Class
        for cls in classes:
            cls_ind = CLASSES.index(cls)
            cls_boxes = boxes[:, 4*cls_ind:4*(cls_ind + 1)]
            cls_scores = scores[:, cls_ind]
            keep = np.where(cls_scores >= CONF_THRESH)[0]
            cls_boxes = cls_boxes[keep, :]
            cls_scores = cls_scores[keep]
            dets = np.hstack((cls_boxes,
                              cls_scores[:, np.newaxis])).astype(np.float32)
            keep = nms(dets, NMS_THRESH)
            dets = dets[keep, :]
            #print 'All {} detections with p({} | box) >= {:.1f}'.format(cls, cls, CONF_THRESH)
            #get current class detect result
            detections = self.validate_detections(image, cls, dets, thresh=CONF_THRESH)
            if len(detections) is not 0:
                class_detections[cls] = detections

        #Return Detection Result
        return class_detections

    def validate_detections(self, img, class_name, dets, thresh=0.5):
        """detected bounding boxes."""
        
        customize_dets = dets[(dets[:, -1] >= thresh)]
        #print 'Customize dets: {} len: {}'.format(customize_dets, len(customize_dets))
        return customize_dets
        
        """