budijuarto commited on
Commit
7e5d57c
·
verified ·
1 Parent(s): 094ac5e

Upload src/egg_damage/augmentations.py

Browse files
Files changed (1) hide show
  1. src/egg_damage/augmentations.py +71 -0
src/egg_damage/augmentations.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import random
4
+ from typing import Any
5
+
6
+ from PIL import Image, ImageEnhance, ImageOps
7
+
8
+
9
+ IMAGENET_MEAN = (0.485, 0.456, 0.406)
10
+ IMAGENET_STD = (0.229, 0.224, 0.225)
11
+
12
+
13
+ def build_train_transform(config: dict[str, Any]):
14
+ from torchvision import transforms
15
+
16
+ size = int(config["preprocessing"]["image_size"])
17
+ aug = config.get("augmentation", {})
18
+ ops: list[Any] = [transforms.Resize((size, size))]
19
+ if aug.get("enabled", True):
20
+ if aug.get("horizontal_flip", True):
21
+ ops.append(transforms.RandomHorizontalFlip(p=0.5))
22
+ ops.append(
23
+ transforms.RandomAffine(
24
+ degrees=float(aug.get("rotation_degrees", 10)),
25
+ translate=(float(aug.get("translate", 0.03)), float(aug.get("translate", 0.03))),
26
+ scale=(float(aug.get("scale_min", 0.95)), float(aug.get("scale_max", 1.05))),
27
+ fill=255,
28
+ )
29
+ )
30
+ jitter = aug.get("color_jitter", {})
31
+ if jitter.get("enabled", True):
32
+ ops.append(
33
+ transforms.ColorJitter(
34
+ brightness=float(jitter.get("brightness", 0.12)),
35
+ contrast=float(jitter.get("contrast", 0.12)),
36
+ saturation=float(jitter.get("saturation", 0.08)),
37
+ hue=float(jitter.get("hue", 0.02)),
38
+ )
39
+ )
40
+ ops.extend([transforms.ToTensor(), transforms.Normalize(IMAGENET_MEAN, IMAGENET_STD)])
41
+ return transforms.Compose(ops)
42
+
43
+
44
+ def build_eval_transform(config: dict[str, Any]):
45
+ from torchvision import transforms
46
+
47
+ size = int(config["preprocessing"]["image_size"])
48
+ return transforms.Compose(
49
+ [
50
+ transforms.Resize((size, size)),
51
+ transforms.ToTensor(),
52
+ transforms.Normalize(IMAGENET_MEAN, IMAGENET_STD),
53
+ ]
54
+ )
55
+
56
+
57
+ def augment_pil_for_classical(image: Image.Image, augment_id: int, seed: int = 42) -> Image.Image:
58
+ rng = random.Random(seed + augment_id * 9973)
59
+ img = image.copy()
60
+ variant = augment_id % 6
61
+ if variant in {1, 4}:
62
+ img = ImageOps.mirror(img)
63
+ if variant in {2, 3, 5}:
64
+ img = img.rotate(rng.uniform(-9.0, 9.0), resample=Image.Resampling.BILINEAR, fillcolor=255)
65
+ if variant in {3, 4}:
66
+ img = ImageEnhance.Brightness(img).enhance(rng.uniform(0.9, 1.1))
67
+ img = ImageEnhance.Contrast(img).enhance(rng.uniform(0.9, 1.12))
68
+ if variant == 5:
69
+ img = ImageEnhance.Sharpness(img).enhance(rng.uniform(0.9, 1.2))
70
+ return img
71
+