-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathpreprocessing.py
65 lines (54 loc) · 2 KB
/
preprocessing.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import tensorflow as tf
def parse_aug_fn(dataset):
"""
Image Augmentation(影像增強) function
"""
x = tf.cast(dataset['image'], tf.float32) / 255. # 影像標準化
x = flip(x) # 隨機水平翻轉
# 觸發顏色轉換機率50%
x = tf.cond(tf.random.uniform([], 0, 1) > 0.5, lambda: color(x), lambda: x)
# 觸發影像旋轉機率0.25%
x = tf.cond(tf.random.uniform([], 0, 1) > 0.75, lambda: rotate(x), lambda: x)
# 觸發影像縮放機率50%
x = tf.cond(tf.random.uniform([], 0, 1) > 0.5, lambda: zoom(x), lambda: x)
# 將輸出標籤轉乘One-hot編碼
y = tf.one_hot(dataset['label'], 10)
return x, y
def parse_fn(dataset):
x = tf.cast(dataset['image'], tf.float32) / 255. # 影像標準化
# 將輸出標籤轉乘One-hot編碼
y = tf.one_hot(dataset['label'], 10)
return x, y
def flip(x):
"""
flip image(翻轉影像)
"""
x = tf.image.random_flip_left_right(x) # 隨機左右翻轉影像
return x
def color(x):
"""
Color change(改變顏色)
"""
x = tf.image.random_hue(x, 0.08) # 隨機調整影像色調
x = tf.image.random_saturation(x, 0.6, 1.6) # 隨機調整影像飽和度
x = tf.image.random_brightness(x, 0.05) # 隨機調整影像亮度
x = tf.image.random_contrast(x, 0.7, 1.3) # 隨機調整影像對比度
return x
def rotate(x):
"""
Rotation image(影像旋轉)
"""
# 隨機選轉n次(通過minval和maxval設定n的範圍),每次選轉90度
x = tf.image.rot90(x,tf.random.uniform(shape=[],minval=1,maxval=4,dtype=tf.int32))
return x
def zoom(x, scale_min=0.6, scale_max=1.4):
"""
Zoom Image(影像縮放)
"""
h, w, c = x.shape
scale = tf.random.uniform([], scale_min, scale_max) # 隨機縮放比例
sh = h * scale # 縮放後影像長度
sw = w * scale # 縮放後影像寬度
x = tf.image.resize(x, (sh, sw)) # 影像縮放
x = tf.image.resize_with_crop_or_pad(x, h, w) # 影像裁減和填補
return x