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