Example #1
0
def test_map_semantic_img_fast_pytorch_uint16_stress_test():
    """
	Test fast method on large example. Map 60,000 classes to a 
	different 60,000 classes with a fast array conversion.

	np.int16 cannot hold anything over 32767 / 32768.

	Should take less than 1 millisecond.
	"""
    semantic_img = np.array(range(60000)).reshape(3000, 20).astype(np.int64)
    semantic_img = torch.from_numpy(semantic_img).type(torch.LongTensor)

    label_mapping = {}
    for i in range(60000):
        label_mapping[i] = i + 1

    label_mapping_copy = copy.deepcopy(label_mapping)
    label_mapping_arr = form_label_mapping_array_pytorch(label_mapping)
    label_mapping_arr_copy = label_mapping_arr.clone()
    assert label_mapping == label_mapping_copy
    start = time.time()
    mapped_img = map_semantic_img_fast_pytorch(semantic_img, label_mapping_arr)
    end = time.time()
    assert torch.allclose(label_mapping_arr_copy, label_mapping_arr)

    assert mapped_img.shape == torch.Size([3000, 20])
    assert mapped_img.dtype == torch.int64

    print(f'Took {end-start} sec.')
    gt_mapped_img = np.array(range(60000)).reshape(3000, 20).astype(
        np.uint16) + 1

    assert np.allclose(gt_mapped_img, mapped_img.numpy())
Example #2
0
def test_form_label_mapping_array_pytorch_fromzero():
    """
	Count from zero, with 8-bit unsigned int data type.
	"""
    label_mapping = {0: 1, 1: 2, 3: 4}
    label_mapping_arr = form_label_mapping_array_pytorch(label_mapping)

    assert label_mapping_arr.shape == torch.Size([4])
    assert label_mapping_arr.dtype == torch.int64

    gt_label_mapping_arr = np.array([1, 2, 0, 4], dtype=np.uint8)
    assert np.allclose(label_mapping_arr.numpy(), gt_label_mapping_arr)
Example #3
0
def test_map_semantic_img_fast_pytorch():
    """
	Test fast method on simple conversion from 2x3 grayscale -> 2x3 grayscale.
	"""
    semantic_img = np.array([[254, 0, 1], [7, 8, 9]], dtype=np.uint8)
    semantic_img = torch.from_numpy(semantic_img).type(torch.LongTensor)

    label_mapping = {254: 253, 0: 255, 1: 0, 7: 6, 8: 7, 9: 8}
    label_mapping_arr = form_label_mapping_array_pytorch(label_mapping)
    mapped_img = map_semantic_img_fast_pytorch(semantic_img, label_mapping_arr)
    gt_mapped_img = np.array([[253, 255, 0], [6, 7, 8]], dtype=np.uint8)

    assert np.allclose(gt_mapped_img, mapped_img.numpy())
    assert mapped_img.dtype == torch.int64
Example #4
0
def test_form_label_mapping_array_pytorch_from_nonzero():
    """
	"""
    label_mapping = {655: 300, 654: 255, 653: 100}
    label_mapping_arr = form_label_mapping_array_pytorch(label_mapping)

    assert label_mapping_arr.shape == torch.Size([656])
    assert label_mapping_arr.dtype == torch.int64

    gt_label_mapping_arr = np.zeros((656), dtype=np.uint16)
    gt_label_mapping_arr[655] = 300
    gt_label_mapping_arr[654] = 255
    gt_label_mapping_arr[653] = 100
    print(label_mapping)
    assert np.allclose(label_mapping_arr.numpy(), gt_label_mapping_arr)
Example #5
0
    def _form_label_mapping_arrs(self) -> Mapping[str, np.ndarray]:
        """ Cache conversion maps so we will later be able to perform fast grayscale->grayscale mapping
		for training data transformation.
		
		Each map is implemented as an integer array (given integer index, give back integer value stored at that location).
		
		Returns:
		    label_mapping_arr_dict: map dataset names to numpy arrays.
		"""
        label_mapping_arr_dict = {}
        from mseg.utils.mask_utils import form_label_mapping_array_pytorch

        for dataset in self.train_datasets:
            label_mapping_arr_dict[dataset] = form_label_mapping_array_pytorch(
                self.id_to_uid_maps[dataset])

        return label_mapping_arr_dict