def load_image(self, image_index): """ Load an image at the image_index. """ path = os.path.join( self.data_dir, 'JPEGImages', self.image_names[image_index] + self.image_extension) return read_image_bgr(path)
def load_image(self, image_index): """!@brief Load an image at the image_index. """ image_info = self.coco.loadImgs(self.image_ids[image_index])[0] path = os.path.join(self.data_dir, 'images', self.set_name, image_info['file_name']) return read_image_bgr(path)
def load_image(self, image_index): """ Load an image at the image_index. """ return read_image_bgr(self.image_path(image_index))
'horse': 12, 'motorbike': 13, 'person': 14, 'pottedplant': 15, 'sheep': 16, 'sofa': 17, 'train': 18, 'tvmonitor': 19 } labels_to_names = {} for key, value in voc_classes.items(): labels_to_names[value] = key # load image image_paths = glob.glob('datasets/voc_test/VOC2007/JPEGImages/*.jpg') for image_path in image_paths: image = read_image_bgr(image_path) # copy to draw on draw = image.copy() # preprocess image for network image = preprocess_image(image) image, scale = resize_image(image) # process image start = time.time() # locations, feature_shapes = model.predict_on_batch(np.expand_dims(image, axis=0)) boxes, scores, labels = model.predict_on_batch( np.expand_dims(image, axis=0)) print("processing time: ", time.time() - start)
def load_image(self, image_index): return read_image_bgr(self.image_path(image_index))
) num_classes = generator.num_classes() classes = list(generator.classes.keys()) model, prediction_model, debug_model = centernet(num_classes=num_classes, nms=True, flip_test=flip_test, freeze_bn=False, score_threshold=score_threshold) prediction_model.load_weights(model_path, by_name=True, skip_mismatch=True) for f in os.listdir(PROCESS_PATH): if f.endswith(DATA_SUFFIX): image = read_image_bgr(PROCESS_PATH + f) src_image = image.copy() c = np.array([image.shape[1] / 2., image.shape[0] / 2.], dtype=np.float32) s = max(image.shape[0], image.shape[1]) * 1.0 tgt_w = generator.input_size tgt_h = generator.input_size trans_input = get_affine_transform(c, s, (tgt_w, tgt_h)) image = cv2.warpAffine(image, trans_input, (tgt_w, tgt_h), flags=cv2.INTER_LINEAR) image = image.astype(np.float32) image[..., 0] -= 103.939 image[..., 1] -= 116.779 image[..., 2] -= 123.68
def load_image(self, image_index): """!@brief Load an image at the image_index. """ return read_image_bgr(self.images[image_index])
def load_image(self, image_index): return read_image_bgr(self.images[image_index])
def produce(self, *, inputs: Inputs, timeout: float = None, iterations: int = None) -> CallResult[Outputs]: """ Produce image detection predictions. Parameters ---------- inputs : numpy ndarray of size (n_images, dimension) containing the d3m Index, image name, and bounding box for each image. Returns ------- outputs : A d3m dataframe container with the d3m index, image name, bounding boxes as a string (8 coordinate format), and confidence scores. """ iou_threshold = 0.5 # Bounding box overlap threshold for false positive or true positive score_threshold = 0.05 # The score confidence threshold to use for detections max_detections = 100 # Maxmimum number of detections to use per image # Convert training model to inference model inference_model = models.convert_model(self.training_model) # Generate image paths image_cols = inputs.metadata.get_columns_with_semantic_type('https://metadata.datadrivendiscovery.org/types/FileName') self.base_dir = [inputs.metadata.query((metadata_base.ALL_ELEMENTS, t))['location_base_uris'][0].replace('file:///', '/') for t in image_cols] self.image_paths = np.array([[os.path.join(self.base_dir, filename) for filename in inputs.iloc[:,col]] for self.base_dir, col in zip(self.base_dir, image_cols)]).flatten() self.image_paths = pd.Series(self.image_paths) # Initialize output objects box_list = [] score_list = [] image_name_list = [] # Predict bounding boxes and confidence scores for each image image_list = [x for i, x in enumerate(self.image_paths.tolist()) if self.image_paths.tolist().index(x) == i] start_time = time.time() print('Starting testing...', file = sys.__stdout__) for i in image_list: image = read_image_bgr(i) # preprocess image for network image = preprocess_image(image) image, scale = resize_image(image) boxes, scores, labels = inference_model.predict_on_batch(np.expand_dims(image, axis = 0)) # correct for image scale boxes /= scale for box, score in zip(boxes[0], scores[0]): if score < 0.5: break b = box.astype(int) box_list.append(b) score_list.append(score) image_name_list.append(i * len(b)) print(f'Testing complete. Testing took {time.time()-start_time} seconds.', file = sys.__stdout__) ## Convert predicted boxes from a list of arrays to a list of strings boxes = np.array(box_list).tolist() boxes = list(map(lambda x : [x[0], x[1], x[0], x[3], x[2], x[3], x[2], x[1]], boxes)) # Convert to 8 coordinate format for D3M boxes = list(map(lambda x : ",".join(map(str, x)), boxes)) # Create mapping between image names and D3M index input_df = pd.DataFrame({ 'd3mIndex': inputs.d3mIndex, 'image': [os.path.basename(list) for list in self.image_paths] }) d3mIdx_image_mapping = input_df.set_index('image').T.to_dict('list') # Extract values for image name keys and get missing image predictions (if they exist) image_name_list = [os.path.basename(list) for list in image_name_list] d3mIdx = [d3mIdx_image_mapping.get(key) for key in image_name_list] empty_predictions_image_names = [k for k,v in d3mIdx_image_mapping.items() if v not in d3mIdx] d3mIdx = [item for sublist in d3mIdx for item in sublist] # Flatten list of lists ## Assemble in a Pandas DataFrame results = pd.DataFrame({ 'd3mIndex': d3mIdx, 'bounding_box': boxes, 'confidence': score_list }) # D3M metrics evaluator needs at least one prediction per image. If RetinaNet does not return # predictions for an image, create a dummy empty prediction row to add to results_df for that # missing image. if len(empty_predictions_image_names) != 0: # Create data frame of empty predictions for missing each image and concat with results. # Sort results_df. empty_predictions_df = self._fill_empty_predictions(empty_predictions_image_names, d3mIdx_image_mapping) results_df = pd.concat([results, empty_predictions_df]).sort_values('d3mIndex') # Convert to DataFrame container results_df = d3m_DataFrame(results_df) ## Assemble first output column ('d3mIndex) col_dict = dict(results_df.metadata.query((metadata_base.ALL_ELEMENTS, 0))) col_dict['structural_type'] = type("1") col_dict['name'] = 'd3mIndex' col_dict['semantic_types'] = ('http://schema.org/Integer', 'https://metadata.datadrivendiscovery.org/types/PrimaryKey') results_df.metadata = results_df.metadata.update((metadata_base.ALL_ELEMENTS, 0), col_dict) ## Assemble second output column ('bounding_box') col_dict = dict(results_df.metadata.query((metadata_base.ALL_ELEMENTS, 1))) col_dict['structural_type'] = type("1") col_dict['name'] = 'bounding_box' col_dict['semantic_types'] = ('http://schema.org/Text', 'https://metadata.datadrivendiscovery.org/types/PredictedTarget', 'https://metadata.datadrivendiscovery.org/types/BoundingPolygon') results_df.metadata = results_df.metadata.update((metadata_base.ALL_ELEMENTS, 1), col_dict) ## Assemble third output column ('confidence') col_dict = dict(results_df.metadata.query((metadata_base.ALL_ELEMENTS, 2))) col_dict['structural_type'] = type("1") col_dict['name'] = 'confidence' col_dict['semantic_types'] = ('http://schema.org/Integer', 'https://metadata.datadrivendiscovery.org/types/Score') results_df.metadata = results_df.metadata.update((metadata_base.ALL_ELEMENTS, 2), col_dict) return CallResult(results_df)