diff --git a/docs/quick_start.md b/docs/quick_start.md index aefbeff652236edac79f0199881a6f203668408e..38a67e12750c636d09bdc0c1263ece049214b17d 100644 --- a/docs/quick_start.md +++ b/docs/quick_start.md @@ -1,6 +1,6 @@ # 10分钟快速上手使用 -本文档在一个小数据集上展示了如何通过PaddleX进行训练,您可以阅读PaddleX的**使用教程**来了解更多模型任务的训练使用方式。本示例同步在AIStudio上,可直接[在线体验模型训练](https://aistudio.baidu.com/aistudio/projectdetail/423472) +本文档在一个小数据集上展示了如何通过PaddleX进行训练,您可以阅读PaddleX的**使用教程**来了解更多模型任务的训练使用方式。本示例同步在AIStudio上,可直接[在线体验模型训练](https://aistudio.baidu.com/aistudio/projectdetail/439860) ## 1. 准备蔬菜分类数据集 ``` diff --git a/paddlex/cv/transforms/cls_transforms.py b/paddlex/cv/transforms/cls_transforms.py index e83a71db0f5e0179d9dcc613140a07b3c97c15f0..525fa2dcb09b317dac542c019a38a5b4a51caa55 100644 --- a/paddlex/cv/transforms/cls_transforms.py +++ b/paddlex/cv/transforms/cls_transforms.py @@ -385,15 +385,12 @@ class RandomDistort: 'saturation': self.saturation_prob, 'hue': self.hue_prob, } - im = im.astype('uint8') - im = Image.fromarray(im) for id in range(len(ops)): params = params_dict[ops[id].__name__] prob = prob_dict[ops[id].__name__] params['im'] = im if np.random.uniform(0, 1) < prob: im = ops[id](**params) - im = np.asarray(im).astype('float32') if label is None: return (im, ) else: diff --git a/paddlex/cv/transforms/det_transforms.py b/paddlex/cv/transforms/det_transforms.py index 607c0a6b53013dd89b22cd3e94a1b7551c0b0649..2914fdb42a027860be30f661ed3d39fb3f75fe46 100644 --- a/paddlex/cv/transforms/det_transforms.py +++ b/paddlex/cv/transforms/det_transforms.py @@ -541,15 +541,13 @@ class RandomDistort: 'saturation': self.saturation_prob, 'hue': self.hue_prob } - im = im.astype('uint8') - im = Image.fromarray(im) for id in range(4): params = params_dict[ops[id].__name__] prob = prob_dict[ops[id].__name__] params['im'] = im + if np.random.uniform(0, 1) < prob: im = ops[id](**params) - im = np.asarray(im).astype('float32') if label_info is None: return (im, im_info) else: @@ -598,7 +596,7 @@ class MixupImage: img1.astype('float32') * factor img[:img2.shape[0], :img2.shape[1], :] += \ img2.astype('float32') * (1.0 - factor) - return img.astype('uint8') + return img.astype('float32') def __call__(self, im, im_info=None, label_info=None): """ diff --git a/paddlex/cv/transforms/ops.py b/paddlex/cv/transforms/ops.py index 9af31e8b0cf631050623786bf86803dde8bd2b9b..dd517d4ccb7c113cfd00460e5df27125248bb602 100644 --- a/paddlex/cv/transforms/ops.py +++ b/paddlex/cv/transforms/ops.py @@ -111,32 +111,41 @@ def bgr2rgb(im): return im[:, :, ::-1] -def brightness(im, brightness_lower, brightness_upper): - brightness_delta = np.random.uniform(brightness_lower, brightness_upper) - im = ImageEnhance.Brightness(im).enhance(brightness_delta) +def hue(im, hue_lower, hue_upper): + delta = np.random.uniform(hue_lower, hue_upper) + u = np.cos(delta * np.pi) + w = np.sin(delta * np.pi) + bt = np.array([[1.0, 0.0, 0.0], [0.0, u, -w], [0.0, w, u]]) + tyiq = np.array([[0.299, 0.587, 0.114], [0.596, -0.274, -0.321], + [0.211, -0.523, 0.311]]) + ityiq = np.array([[1.0, 0.956, 0.621], [1.0, -0.272, -0.647], + [1.0, -1.107, 1.705]]) + t = np.dot(np.dot(ityiq, bt), tyiq).T + im = np.dot(im, t) return im -def contrast(im, contrast_lower, contrast_upper): - contrast_delta = np.random.uniform(contrast_lower, contrast_upper) - im = ImageEnhance.Contrast(im).enhance(contrast_delta) +def saturation(im, saturation_lower, saturation_upper): + delta = np.random.uniform(saturation_lower, saturation_upper) + gray = im * np.array([[[0.299, 0.587, 0.114]]], dtype=np.float32) + gray = gray.sum(axis=2, keepdims=True) + gray *= (1.0 - delta) + im *= delta + im += gray return im -def saturation(im, saturation_lower, saturation_upper): - saturation_delta = np.random.uniform(saturation_lower, saturation_upper) - im = ImageEnhance.Color(im).enhance(saturation_delta) +def contrast(im, contrast_lower, contrast_upper): + delta = np.random.uniform(contrast_lower, contrast_upper) + im *= delta return im -def hue(im, hue_lower, hue_upper): - hue_delta = np.random.uniform(hue_lower, hue_upper) - im = np.array(im.convert('HSV')) - im[:, :, 0] = im[:, :, 0] + hue_delta - im = Image.fromarray(im, mode='HSV').convert('RGB') +def brightness(im, brightness_lower, brightness_upper): + delta = np.random.uniform(brightness_lower, brightness_upper) + im += delta return im - def rotate(im, rotate_lower, rotate_upper): rotate_delta = np.random.uniform(rotate_lower, rotate_upper) im = im.rotate(int(rotate_delta)) diff --git a/paddlex/cv/transforms/seg_transforms.py b/paddlex/cv/transforms/seg_transforms.py index 0635da99868f64f771a4a9b1dff444d3c847a4de..0b535e75b5cde07c6f81b916d6535eb5ca5c2aca 100644 --- a/paddlex/cv/transforms/seg_transforms.py +++ b/paddlex/cv/transforms/seg_transforms.py @@ -889,15 +889,12 @@ class RandomDistort: 'saturation': self.saturation_prob, 'hue': self.hue_prob } - im = im.astype('uint8') - im = Image.fromarray(im) for id in range(4): params = params_dict[ops[id].__name__] prob = prob_dict[ops[id].__name__] params['im'] = im if np.random.uniform(0, 1) < prob: im = ops[id](**params) - im = np.asarray(im).astype('float32') if label is None: return (im, im_info) else: