|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""Records previous preprocessing operations and allows them to be repeated. |
|
|
|
Used with object_detection.core.preprocessor. Passing a PreprocessorCache |
|
into individual data augmentation functions or the general preprocess() function |
|
will store all randomly generated variables in the PreprocessorCache. When |
|
a preprocessor function is called multiple times with the same |
|
PreprocessorCache object, that function will perform the same augmentation |
|
on all calls. |
|
""" |
|
|
|
from collections import defaultdict |
|
|
|
|
|
class PreprocessorCache(object): |
|
"""Dictionary wrapper storing random variables generated during preprocessing. |
|
""" |
|
|
|
|
|
ROTATION90 = 'rotation90' |
|
HORIZONTAL_FLIP = 'horizontal_flip' |
|
VERTICAL_FLIP = 'vertical_flip' |
|
PIXEL_VALUE_SCALE = 'pixel_value_scale' |
|
IMAGE_SCALE = 'image_scale' |
|
RGB_TO_GRAY = 'rgb_to_gray' |
|
ADJUST_BRIGHTNESS = 'adjust_brightness' |
|
ADJUST_CONTRAST = 'adjust_contrast' |
|
ADJUST_HUE = 'adjust_hue' |
|
ADJUST_SATURATION = 'adjust_saturation' |
|
DISTORT_COLOR = 'distort_color' |
|
STRICT_CROP_IMAGE = 'strict_crop_image' |
|
CROP_IMAGE = 'crop_image' |
|
PAD_IMAGE = 'pad_image' |
|
CROP_TO_ASPECT_RATIO = 'crop_to_aspect_ratio' |
|
RESIZE_METHOD = 'resize_method' |
|
PAD_TO_ASPECT_RATIO = 'pad_to_aspect_ratio' |
|
BLACK_PATCHES = 'black_patches' |
|
ADD_BLACK_PATCH = 'add_black_patch' |
|
SELECTOR = 'selector' |
|
SELECTOR_TUPLES = 'selector_tuples' |
|
SELF_CONCAT_IMAGE = 'self_concat_image' |
|
SSD_CROP_SELECTOR_ID = 'ssd_crop_selector_id' |
|
SSD_CROP_PAD_SELECTOR_ID = 'ssd_crop_pad_selector_id' |
|
|
|
|
|
_VALID_FNS = [ROTATION90, HORIZONTAL_FLIP, VERTICAL_FLIP, PIXEL_VALUE_SCALE, |
|
IMAGE_SCALE, RGB_TO_GRAY, ADJUST_BRIGHTNESS, ADJUST_CONTRAST, |
|
ADJUST_HUE, ADJUST_SATURATION, DISTORT_COLOR, STRICT_CROP_IMAGE, |
|
CROP_IMAGE, PAD_IMAGE, CROP_TO_ASPECT_RATIO, RESIZE_METHOD, |
|
PAD_TO_ASPECT_RATIO, BLACK_PATCHES, ADD_BLACK_PATCH, SELECTOR, |
|
SELECTOR_TUPLES, SELF_CONCAT_IMAGE, SSD_CROP_SELECTOR_ID, |
|
SSD_CROP_PAD_SELECTOR_ID] |
|
|
|
def __init__(self): |
|
self._history = defaultdict(dict) |
|
|
|
def clear(self): |
|
"""Resets cache.""" |
|
self._history = defaultdict(dict) |
|
|
|
def get(self, function_id, key): |
|
"""Gets stored value given a function id and key. |
|
|
|
Args: |
|
function_id: identifier for the preprocessing function used. |
|
key: identifier for the variable stored. |
|
Returns: |
|
value: the corresponding value, expected to be a tensor or |
|
nested structure of tensors. |
|
Raises: |
|
ValueError: if function_id is not one of the 23 valid function ids. |
|
""" |
|
if function_id not in self._VALID_FNS: |
|
raise ValueError('Function id not recognized: %s.' % str(function_id)) |
|
return self._history[function_id].get(key) |
|
|
|
def update(self, function_id, key, value): |
|
"""Adds a value to the dictionary. |
|
|
|
Args: |
|
function_id: identifier for the preprocessing function used. |
|
key: identifier for the variable stored. |
|
value: the value to store, expected to be a tensor or nested structure |
|
of tensors. |
|
Raises: |
|
ValueError: if function_id is not one of the 23 valid function ids. |
|
""" |
|
if function_id not in self._VALID_FNS: |
|
raise ValueError('Function id not recognized: %s.' % str(function_id)) |
|
self._history[function_id][key] = value |
|
|