未验证 提交 a0a381fc 编写于 作者: B Bai Yifan 提交者: GitHub

fix random.shuffle (#1204)

上级 5cbd9353
...@@ -79,9 +79,9 @@ def bbox_area(src_bbox): ...@@ -79,9 +79,9 @@ def bbox_area(src_bbox):
def generate_sample(sampler, image_width, image_height): def generate_sample(sampler, image_width, image_height):
scale = random.uniform(sampler.min_scale, sampler.max_scale) scale = np.random.uniform(sampler.min_scale, sampler.max_scale)
aspect_ratio = random.uniform(sampler.min_aspect_ratio, aspect_ratio = np.random.uniform(sampler.min_aspect_ratio,
sampler.max_aspect_ratio) sampler.max_aspect_ratio)
aspect_ratio = max(aspect_ratio, (scale**2.0)) aspect_ratio = max(aspect_ratio, (scale**2.0))
aspect_ratio = min(aspect_ratio, 1 / (scale**2.0)) aspect_ratio = min(aspect_ratio, 1 / (scale**2.0))
...@@ -97,8 +97,8 @@ def generate_sample(sampler, image_width, image_height): ...@@ -97,8 +97,8 @@ def generate_sample(sampler, image_width, image_height):
xmin_bound = 1 - bbox_width xmin_bound = 1 - bbox_width
ymin_bound = 1 - bbox_height ymin_bound = 1 - bbox_height
xmin = random.uniform(0, xmin_bound) xmin = np.random.uniform(0, xmin_bound)
ymin = random.uniform(0, ymin_bound) ymin = np.random.uniform(0, ymin_bound)
xmax = xmin + bbox_width xmax = xmin + bbox_width
ymax = ymin + bbox_height ymax = ymin + bbox_height
sampled_bbox = bbox(xmin, ymin, xmax, ymax) sampled_bbox = bbox(xmin, ymin, xmax, ymax)
...@@ -141,25 +141,29 @@ def data_anchor_sampling(sampler, bbox_labels, image_width, image_height, ...@@ -141,25 +141,29 @@ def data_anchor_sampling(sampler, bbox_labels, image_width, image_height,
min_resize_val = scale_array[rand_idx_size] / 2.0 min_resize_val = scale_array[rand_idx_size] / 2.0
max_resize_val = min(2.0 * scale_array[rand_idx_size], max_resize_val = min(2.0 * scale_array[rand_idx_size],
2 * math.sqrt(wid * hei)) 2 * math.sqrt(wid * hei))
scale_choose = random.uniform(min_resize_val, max_resize_val) scale_choose = np.random.uniform(min_resize_val, max_resize_val)
sample_bbox_size = wid * resize_width / scale_choose sample_bbox_size = wid * resize_width / scale_choose
w_off_orig = 0.0 w_off_orig = 0.0
h_off_orig = 0.0 h_off_orig = 0.0
if sample_bbox_size < max(image_height, image_width): if sample_bbox_size < max(image_height, image_width):
if wid <= sample_bbox_size: if wid <= sample_bbox_size:
w_off_orig = random.uniform(xmin + wid - sample_bbox_size, xmin) w_off_orig = np.random.uniform(xmin + wid - sample_bbox_size,
xmin)
else: else:
w_off_orig = random.uniform(xmin, xmin + wid - sample_bbox_size) w_off_orig = np.random.uniform(xmin,
xmin + wid - sample_bbox_size)
if hei <= sample_bbox_size: if hei <= sample_bbox_size:
h_off_orig = random.uniform(ymin + hei - sample_bbox_size, ymin) h_off_orig = np.random.uniform(ymin + hei - sample_bbox_size,
ymin)
else: else:
h_off_orig = random.uniform(ymin, ymin + hei - sample_bbox_size) h_off_orig = np.random.uniform(ymin,
ymin + hei - sample_bbox_size)
else: else:
w_off_orig = random.uniform(image_width - sample_bbox_size, 0.0) w_off_orig = np.random.uniform(image_width - sample_bbox_size, 0.0)
h_off_orig = random.uniform(image_height - sample_bbox_size, 0.0) h_off_orig = np.random.uniform(image_height - sample_bbox_size, 0.0)
w_off_orig = math.floor(w_off_orig) w_off_orig = math.floor(w_off_orig)
h_off_orig = math.floor(h_off_orig) h_off_orig = math.floor(h_off_orig)
...@@ -418,36 +422,36 @@ def crop_image_sampling(img, bbox_labels, sample_bbox, image_width, ...@@ -418,36 +422,36 @@ def crop_image_sampling(img, bbox_labels, sample_bbox, image_width,
def random_brightness(img, settings): def random_brightness(img, settings):
prob = random.uniform(0, 1) prob = np.random.uniform(0, 1)
if prob < settings.brightness_prob: if prob < settings.brightness_prob:
delta = random.uniform(-settings.brightness_delta, delta = np.random.uniform(-settings.brightness_delta,
settings.brightness_delta) + 1 settings.brightness_delta) + 1
img = ImageEnhance.Brightness(img).enhance(delta) img = ImageEnhance.Brightness(img).enhance(delta)
return img return img
def random_contrast(img, settings): def random_contrast(img, settings):
prob = random.uniform(0, 1) prob = np.random.uniform(0, 1)
if prob < settings.contrast_prob: if prob < settings.contrast_prob:
delta = random.uniform(-settings.contrast_delta, delta = np.random.uniform(-settings.contrast_delta,
settings.contrast_delta) + 1 settings.contrast_delta) + 1
img = ImageEnhance.Contrast(img).enhance(delta) img = ImageEnhance.Contrast(img).enhance(delta)
return img return img
def random_saturation(img, settings): def random_saturation(img, settings):
prob = random.uniform(0, 1) prob = np.random.uniform(0, 1)
if prob < settings.saturation_prob: if prob < settings.saturation_prob:
delta = random.uniform(-settings.saturation_delta, delta = np.random.uniform(-settings.saturation_delta,
settings.saturation_delta) + 1 settings.saturation_delta) + 1
img = ImageEnhance.Color(img).enhance(delta) img = ImageEnhance.Color(img).enhance(delta)
return img return img
def random_hue(img, settings): def random_hue(img, settings):
prob = random.uniform(0, 1) prob = np.random.uniform(0, 1)
if prob < settings.hue_prob: if prob < settings.hue_prob:
delta = random.uniform(-settings.hue_delta, settings.hue_delta) delta = np.random.uniform(-settings.hue_delta, settings.hue_delta)
img_hsv = np.array(img.convert('HSV')) img_hsv = np.array(img.convert('HSV'))
img_hsv[:, :, 0] = img_hsv[:, :, 0] + delta img_hsv[:, :, 0] = img_hsv[:, :, 0] + delta
img = Image.fromarray(img_hsv, mode='HSV').convert('RGB') img = Image.fromarray(img_hsv, mode='HSV').convert('RGB')
...@@ -455,7 +459,7 @@ def random_hue(img, settings): ...@@ -455,7 +459,7 @@ def random_hue(img, settings):
def distort_image(img, settings): def distort_image(img, settings):
prob = random.uniform(0, 1) prob = np.random.uniform(0, 1)
# Apply different distort order # Apply different distort order
if prob > 0.5: if prob > 0.5:
img = random_brightness(img, settings) img = random_brightness(img, settings)
...@@ -471,14 +475,14 @@ def distort_image(img, settings): ...@@ -471,14 +475,14 @@ def distort_image(img, settings):
def expand_image(img, bbox_labels, img_width, img_height, settings): def expand_image(img, bbox_labels, img_width, img_height, settings):
prob = random.uniform(0, 1) prob = np.random.uniform(0, 1)
if prob < settings.expand_prob: if prob < settings.expand_prob:
if settings.expand_max_ratio - 1 >= 0.01: if settings.expand_max_ratio - 1 >= 0.01:
expand_ratio = random.uniform(1, settings.expand_max_ratio) expand_ratio = np.random.uniform(1, settings.expand_max_ratio)
height = int(img_height * expand_ratio) height = int(img_height * expand_ratio)
width = int(img_width * expand_ratio) width = int(img_width * expand_ratio)
h_off = math.floor(random.uniform(0, height - img_height)) h_off = math.floor(np.random.uniform(0, height - img_height))
w_off = math.floor(random.uniform(0, width - img_width)) w_off = math.floor(np.random.uniform(0, width - img_width))
expand_bbox = bbox(-w_off / img_width, -h_off / img_height, expand_bbox = bbox(-w_off / img_width, -h_off / img_height,
(width - w_off) / img_width, (width - w_off) / img_width,
(height - h_off) / img_height) (height - h_off) / img_height)
......
...@@ -18,7 +18,6 @@ from __future__ import print_function ...@@ -18,7 +18,6 @@ from __future__ import print_function
import image_util import image_util
from paddle.utils.image_util import * from paddle.utils.image_util import *
import random
from PIL import Image from PIL import Image
from PIL import ImageDraw from PIL import ImageDraw
import numpy as np import numpy as np
...@@ -98,7 +97,7 @@ def preprocess(img, bbox_labels, mode, settings, image_path): ...@@ -98,7 +97,7 @@ def preprocess(img, bbox_labels, mode, settings, image_path):
# sampling # sampling
batch_sampler = [] batch_sampler = []
prob = random.uniform(0., 1.) prob = np.random.uniform(0., 1.)
if prob > settings.data_anchor_sampling_prob: if prob > settings.data_anchor_sampling_prob:
scale_array = np.array([16, 32, 64, 128, 256, 512]) scale_array = np.array([16, 32, 64, 128, 256, 512])
batch_sampler.append( batch_sampler.append(
...@@ -109,7 +108,7 @@ def preprocess(img, bbox_labels, mode, settings, image_path): ...@@ -109,7 +108,7 @@ def preprocess(img, bbox_labels, mode, settings, image_path):
settings.resize_width, settings.resize_height) settings.resize_width, settings.resize_height)
img = np.array(img) img = np.array(img)
if len(sampled_bbox) > 0: if len(sampled_bbox) > 0:
idx = int(random.uniform(0, len(sampled_bbox))) idx = int(np.random.uniform(0, len(sampled_bbox)))
img, sampled_labels = image_util.crop_image_sampling( img, sampled_labels = image_util.crop_image_sampling(
img, bbox_labels, sampled_bbox[idx], img_width, img_height, img, bbox_labels, sampled_bbox[idx], img_width, img_height,
settings.resize_width, settings.resize_height, settings.resize_width, settings.resize_height,
...@@ -140,7 +139,7 @@ def preprocess(img, bbox_labels, mode, settings, image_path): ...@@ -140,7 +139,7 @@ def preprocess(img, bbox_labels, mode, settings, image_path):
img = np.array(img) img = np.array(img)
if len(sampled_bbox) > 0: if len(sampled_bbox) > 0:
idx = int(random.uniform(0, len(sampled_bbox))) idx = int(np.random.uniform(0, len(sampled_bbox)))
img, sampled_labels = image_util.crop_image( img, sampled_labels = image_util.crop_image(
img, bbox_labels, sampled_bbox[idx], img_width, img_height, img, bbox_labels, sampled_bbox[idx], img_width, img_height,
settings.resize_width, settings.resize_height, settings.resize_width, settings.resize_height,
...@@ -153,7 +152,7 @@ def preprocess(img, bbox_labels, mode, settings, image_path): ...@@ -153,7 +152,7 @@ def preprocess(img, bbox_labels, mode, settings, image_path):
img = np.array(img) img = np.array(img)
if mode == 'train': if mode == 'train':
mirror = int(random.uniform(0, 2)) mirror = int(np.random.uniform(0, 2))
if mirror == 1: if mirror == 1:
img = img[:, ::-1, :] img = img[:, ::-1, :]
for i in six.moves.xrange(len(sampled_labels)): for i in six.moves.xrange(len(sampled_labels)):
...@@ -225,7 +224,7 @@ def train_generator(settings, file_list, batch_size, shuffle=True): ...@@ -225,7 +224,7 @@ def train_generator(settings, file_list, batch_size, shuffle=True):
file_dict = load_file_list(file_list) file_dict = load_file_list(file_list)
while True: while True:
if shuffle: if shuffle:
random.shuffle(file_dict) np.random.shuffle(file_dict)
images, face_boxes, head_boxes, label_ids = [], [], [], [] images, face_boxes, head_boxes, label_ids = [], [], [], []
label_offs = [0] label_offs = [0]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册