|
|
@ -32,12 +32,12 @@ from joblib import load |
|
|
|
import paddlers |
|
|
|
import paddlers |
|
|
|
from .functions import normalize, horizontal_flip, permute, vertical_flip, center_crop, is_poly, \ |
|
|
|
from .functions import normalize, horizontal_flip, permute, vertical_flip, center_crop, is_poly, \ |
|
|
|
horizontal_flip_poly, horizontal_flip_rle, vertical_flip_poly, vertical_flip_rle, crop_poly, \ |
|
|
|
horizontal_flip_poly, horizontal_flip_rle, vertical_flip_poly, vertical_flip_rle, crop_poly, \ |
|
|
|
crop_rle, expand_poly, expand_rle, resize_poly, resize_rle, de_haze, select_bands, \ |
|
|
|
crop_rle, expand_poly, expand_rle, resize_poly, resize_rle, dehaze, select_bands, \ |
|
|
|
to_intensity, to_uint8, img_flip, img_simple_rotate |
|
|
|
to_intensity, to_uint8, img_flip, img_simple_rotate |
|
|
|
|
|
|
|
|
|
|
|
__all__ = [ |
|
|
|
__all__ = [ |
|
|
|
"Compose", |
|
|
|
"Compose", |
|
|
|
"ImgDecoder", |
|
|
|
"DecodeImg", |
|
|
|
"Resize", |
|
|
|
"Resize", |
|
|
|
"RandomResize", |
|
|
|
"RandomResize", |
|
|
|
"ResizeByShort", |
|
|
|
"ResizeByShort", |
|
|
@ -50,19 +50,19 @@ __all__ = [ |
|
|
|
"RandomCrop", |
|
|
|
"RandomCrop", |
|
|
|
"RandomScaleAspect", |
|
|
|
"RandomScaleAspect", |
|
|
|
"RandomExpand", |
|
|
|
"RandomExpand", |
|
|
|
"Padding", |
|
|
|
"Pad", |
|
|
|
"MixupImage", |
|
|
|
"MixupImage", |
|
|
|
"RandomDistort", |
|
|
|
"RandomDistort", |
|
|
|
"RandomBlur", |
|
|
|
"RandomBlur", |
|
|
|
"RandomSwap", |
|
|
|
"RandomSwap", |
|
|
|
"Defogging", |
|
|
|
"Dehaze", |
|
|
|
"DimReducing", |
|
|
|
"ReduceDim", |
|
|
|
"BandSelecting", |
|
|
|
"SelectBand", |
|
|
|
"ArrangeSegmenter", |
|
|
|
"ArrangeSegmenter", |
|
|
|
"ArrangeChangeDetector", |
|
|
|
"ArrangeChangeDetector", |
|
|
|
"ArrangeClassifier", |
|
|
|
"ArrangeClassifier", |
|
|
|
"ArrangeDetector", |
|
|
|
"ArrangeDetector", |
|
|
|
"RandomFlipOrRotation", |
|
|
|
"RandomFlipOrRotate", |
|
|
|
] |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
interp_dict = { |
|
|
|
interp_dict = { |
|
|
@ -119,7 +119,7 @@ class Transform(object): |
|
|
|
return sample |
|
|
|
return sample |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ImgDecoder(Transform): |
|
|
|
class DecodeImg(Transform): |
|
|
|
""" |
|
|
|
""" |
|
|
|
Decode image(s) in input. |
|
|
|
Decode image(s) in input. |
|
|
|
Args: |
|
|
|
Args: |
|
|
@ -127,7 +127,7 @@ class ImgDecoder(Transform): |
|
|
|
""" |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, to_rgb=True, to_uint8=True): |
|
|
|
def __init__(self, to_rgb=True, to_uint8=True): |
|
|
|
super(ImgDecoder, self).__init__() |
|
|
|
super(DecodeImg, self).__init__() |
|
|
|
self.to_rgb = to_rgb |
|
|
|
self.to_rgb = to_rgb |
|
|
|
self.to_uint8 = to_uint8 |
|
|
|
self.to_uint8 = to_uint8 |
|
|
|
|
|
|
|
|
|
|
@ -254,7 +254,7 @@ class Compose(Transform): |
|
|
|
'Length of transforms must not be less than 1, but received is {}' |
|
|
|
'Length of transforms must not be less than 1, but received is {}' |
|
|
|
.format(len(transforms))) |
|
|
|
.format(len(transforms))) |
|
|
|
self.transforms = transforms |
|
|
|
self.transforms = transforms |
|
|
|
self.decode_image = ImgDecoder(to_uint8=to_uint8) |
|
|
|
self.decode_image = DecodeImg(to_uint8=to_uint8) |
|
|
|
self.arrange_outputs = None |
|
|
|
self.arrange_outputs = None |
|
|
|
self.apply_im_only = False |
|
|
|
self.apply_im_only = False |
|
|
|
|
|
|
|
|
|
|
@ -544,7 +544,7 @@ class ResizeByLong(Transform): |
|
|
|
return sample |
|
|
|
return sample |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RandomFlipOrRotation(Transform): |
|
|
|
class RandomFlipOrRotate(Transform): |
|
|
|
""" |
|
|
|
""" |
|
|
|
Flip or Rotate an image in different ways with a certain probability. |
|
|
|
Flip or Rotate an image in different ways with a certain probability. |
|
|
|
|
|
|
|
|
|
|
@ -561,7 +561,7 @@ class RandomFlipOrRotation(Transform): |
|
|
|
|
|
|
|
|
|
|
|
# 定义数据增强 |
|
|
|
# 定义数据增强 |
|
|
|
train_transforms = T.Compose([ |
|
|
|
train_transforms = T.Compose([ |
|
|
|
T.RandomFlipOrRotation( |
|
|
|
T.RandomFlipOrRotate( |
|
|
|
probs = [0.3, 0.2] # 进行flip增强的概率是0.3,进行rotate增强的概率是0.2,不变的概率是0.5 |
|
|
|
probs = [0.3, 0.2] # 进行flip增强的概率是0.3,进行rotate增强的概率是0.2,不变的概率是0.5 |
|
|
|
probsf = [0.3, 0.25, 0, 0, 0] # flip增强时,使用水平flip、垂直flip的概率分别是0.3、0.25,水平且垂直flip、对角线flip、反对角线flip概率均为0,不变的概率是0.45 |
|
|
|
probsf = [0.3, 0.25, 0, 0, 0] # flip增强时,使用水平flip、垂直flip的概率分别是0.3、0.25,水平且垂直flip、对角线flip、反对角线flip概率均为0,不变的概率是0.45 |
|
|
|
probsr = [0, 0.65, 0]), # rotate增强时,顺时针旋转90度的概率是0,顺时针旋转180度的概率是0.65,顺时针旋转90度的概率是0,不变的概率是0.35 |
|
|
|
probsr = [0, 0.65, 0]), # rotate增强时,顺时针旋转90度的概率是0,顺时针旋转180度的概率是0.65,顺时针旋转90度的概率是0,不变的概率是0.35 |
|
|
@ -574,7 +574,7 @@ class RandomFlipOrRotation(Transform): |
|
|
|
probs=[0.35, 0.25], |
|
|
|
probs=[0.35, 0.25], |
|
|
|
probsf=[0.3, 0.3, 0.2, 0.1, 0.1], |
|
|
|
probsf=[0.3, 0.3, 0.2, 0.1, 0.1], |
|
|
|
probsr=[0.25, 0.5, 0.25]): |
|
|
|
probsr=[0.25, 0.5, 0.25]): |
|
|
|
super(RandomFlipOrRotation, self).__init__() |
|
|
|
super(RandomFlipOrRotate, self).__init__() |
|
|
|
# Change various probabilities into probability intervals, to judge in which mode to flip or rotate |
|
|
|
# Change various probabilities into probability intervals, to judge in which mode to flip or rotate |
|
|
|
self.probs = [probs[0], probs[0] + probs[1]] |
|
|
|
self.probs = [probs[0], probs[0] + probs[1]] |
|
|
|
self.probsf = self.get_probs_range(probsf) |
|
|
|
self.probsf = self.get_probs_range(probsf) |
|
|
@ -1092,7 +1092,7 @@ class RandomExpand(Transform): |
|
|
|
label_padding_value(int, optional): Filling value for the mask. Defaults to 255. |
|
|
|
label_padding_value(int, optional): Filling value for the mask. Defaults to 255. |
|
|
|
|
|
|
|
|
|
|
|
See Also: |
|
|
|
See Also: |
|
|
|
paddlers.transforms.Padding |
|
|
|
paddlers.transforms.Pad |
|
|
|
""" |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, |
|
|
|
def __init__(self, |
|
|
@ -1120,7 +1120,7 @@ class RandomExpand(Transform): |
|
|
|
x = np.random.randint(0, w - im_w) |
|
|
|
x = np.random.randint(0, w - im_w) |
|
|
|
target_size = (h, w) |
|
|
|
target_size = (h, w) |
|
|
|
offsets = (x, y) |
|
|
|
offsets = (x, y) |
|
|
|
sample = Padding( |
|
|
|
sample = Pad( |
|
|
|
target_size=target_size, |
|
|
|
target_size=target_size, |
|
|
|
pad_mode=-1, |
|
|
|
pad_mode=-1, |
|
|
|
offsets=offsets, |
|
|
|
offsets=offsets, |
|
|
@ -1129,7 +1129,7 @@ class RandomExpand(Transform): |
|
|
|
return sample |
|
|
|
return sample |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Padding(Transform): |
|
|
|
class Pad(Transform): |
|
|
|
def __init__(self, |
|
|
|
def __init__(self, |
|
|
|
target_size=None, |
|
|
|
target_size=None, |
|
|
|
pad_mode=0, |
|
|
|
pad_mode=0, |
|
|
@ -1148,7 +1148,7 @@ class Padding(Transform): |
|
|
|
label_padding_value(int, optional): Filling value for the mask. Defaults to 255. |
|
|
|
label_padding_value(int, optional): Filling value for the mask. Defaults to 255. |
|
|
|
size_divisor(int): Image width and height after padding is a multiple of coarsest_stride. |
|
|
|
size_divisor(int): Image width and height after padding is a multiple of coarsest_stride. |
|
|
|
""" |
|
|
|
""" |
|
|
|
super(Padding, self).__init__() |
|
|
|
super(Pad, self).__init__() |
|
|
|
if isinstance(target_size, (list, tuple)): |
|
|
|
if isinstance(target_size, (list, tuple)): |
|
|
|
if len(target_size) != 2: |
|
|
|
if len(target_size) != 2: |
|
|
|
raise ValueError( |
|
|
|
raise ValueError( |
|
|
@ -1525,20 +1525,20 @@ class RandomBlur(Transform): |
|
|
|
return sample |
|
|
|
return sample |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Defogging(Transform): |
|
|
|
class Dehaze(Transform): |
|
|
|
""" |
|
|
|
""" |
|
|
|
Defog input image(s). |
|
|
|
Dehaze input image(s). |
|
|
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
Args: |
|
|
|
gamma (bool, optional): Use gamma correction or not. Defaults to False. |
|
|
|
gamma (bool, optional): Use gamma correction or not. Defaults to False. |
|
|
|
""" |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, gamma=False): |
|
|
|
def __init__(self, gamma=False): |
|
|
|
super(Defogging, self).__init__() |
|
|
|
super(Dehaze, self).__init__() |
|
|
|
self.gamma = gamma |
|
|
|
self.gamma = gamma |
|
|
|
|
|
|
|
|
|
|
|
def apply_im(self, image): |
|
|
|
def apply_im(self, image): |
|
|
|
image = de_haze(image, self.gamma) |
|
|
|
image = dehaze(image, self.gamma) |
|
|
|
return image |
|
|
|
return image |
|
|
|
|
|
|
|
|
|
|
|
def apply(self, sample): |
|
|
|
def apply(self, sample): |
|
|
@ -1548,19 +1548,20 @@ class Defogging(Transform): |
|
|
|
return sample |
|
|
|
return sample |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DimReducing(Transform): |
|
|
|
class ReduceDim(Transform): |
|
|
|
""" |
|
|
|
""" |
|
|
|
Use PCA to reduce input image(s) dimension. |
|
|
|
Use PCA to reduce the dimension of input image(s). |
|
|
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
Args: |
|
|
|
joblib_path (str): Path of *.joblib about PCA. |
|
|
|
joblib_path (str): Path of *.joblib file of PCA. |
|
|
|
""" |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, joblib_path): |
|
|
|
def __init__(self, joblib_path): |
|
|
|
super(DimReducing, self).__init__() |
|
|
|
super(ReduceDim, self).__init__() |
|
|
|
ext = joblib_path.split(".")[-1] |
|
|
|
ext = joblib_path.split(".")[-1] |
|
|
|
if ext != "joblib": |
|
|
|
if ext != "joblib": |
|
|
|
raise ValueError("`joblib_path` must be *.joblib, not *.{}.".format(ext)) |
|
|
|
raise ValueError("`joblib_path` must be *.joblib, not *.{}.".format( |
|
|
|
|
|
|
|
ext)) |
|
|
|
self.pca = load(joblib_path) |
|
|
|
self.pca = load(joblib_path) |
|
|
|
|
|
|
|
|
|
|
|
def apply_im(self, image): |
|
|
|
def apply_im(self, image): |
|
|
@ -1577,16 +1578,16 @@ class DimReducing(Transform): |
|
|
|
return sample |
|
|
|
return sample |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BandSelecting(Transform): |
|
|
|
class SelectBand(Transform): |
|
|
|
""" |
|
|
|
""" |
|
|
|
Select the band of the input image(s). |
|
|
|
Select a set of bands of input image(s). |
|
|
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
Args: |
|
|
|
band_list (list, optional): Bands of selected (Start with 1). Defaults to [1, 2, 3]. |
|
|
|
band_list (list, optional): Bands to select (the band index starts with 1). Defaults to [1, 2, 3]. |
|
|
|
""" |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, band_list=[1, 2, 3]): |
|
|
|
def __init__(self, band_list=[1, 2, 3]): |
|
|
|
super(BandSelecting, self).__init__() |
|
|
|
super(SelectBand, self).__init__() |
|
|
|
self.band_list = band_list |
|
|
|
self.band_list = band_list |
|
|
|
|
|
|
|
|
|
|
|
def apply_im(self, image): |
|
|
|
def apply_im(self, image): |
|
|
|