🔨 [Update] dataloader with reversable padding size
Browse files
yolo/tools/data_augmentation.py
CHANGED
@@ -17,12 +17,12 @@ class AugmentationComposer:
|
|
17 |
if hasattr(transform, "set_parent"):
|
18 |
transform.set_parent(self)
|
19 |
|
20 |
-
def __call__(self, image, boxes):
|
21 |
for transform in self.transforms:
|
22 |
image, boxes = transform(image, boxes)
|
23 |
-
image, boxes = self.pad_resize(image, boxes)
|
24 |
image = TF.to_tensor(image)
|
25 |
-
return image, boxes
|
26 |
|
27 |
|
28 |
# TODO: RandomCrop, Resize, ... etc.
|
@@ -36,7 +36,7 @@ class PadAndResize:
|
|
36 |
def __call__(self, image, boxes):
|
37 |
original_size = max(image.size)
|
38 |
scale = self.image_size / original_size
|
39 |
-
square_img = Image.new("RGB", (original_size, original_size), (
|
40 |
left = (original_size - image.width) // 2
|
41 |
top = (original_size - image.height) // 2
|
42 |
square_img.paste(image, (left, top))
|
@@ -48,7 +48,8 @@ class PadAndResize:
|
|
48 |
boxes[:, 3] = (boxes[:, 3] * image.width + left) / self.image_size * scale
|
49 |
boxes[:, 4] = (boxes[:, 4] * image.height + top) / self.image_size * scale
|
50 |
|
51 |
-
|
|
|
52 |
|
53 |
|
54 |
class HorizontalFlip:
|
|
|
17 |
if hasattr(transform, "set_parent"):
|
18 |
transform.set_parent(self)
|
19 |
|
20 |
+
def __call__(self, image, boxes=torch.zeros(0, 5)):
|
21 |
for transform in self.transforms:
|
22 |
image, boxes = transform(image, boxes)
|
23 |
+
image, boxes, rev_tensor = self.pad_resize(image, boxes)
|
24 |
image = TF.to_tensor(image)
|
25 |
+
return image, boxes, rev_tensor
|
26 |
|
27 |
|
28 |
# TODO: RandomCrop, Resize, ... etc.
|
|
|
36 |
def __call__(self, image, boxes):
|
37 |
original_size = max(image.size)
|
38 |
scale = self.image_size / original_size
|
39 |
+
square_img = Image.new("RGB", (original_size, original_size), (128, 128, 128))
|
40 |
left = (original_size - image.width) // 2
|
41 |
top = (original_size - image.height) // 2
|
42 |
square_img.paste(image, (left, top))
|
|
|
48 |
boxes[:, 3] = (boxes[:, 3] * image.width + left) / self.image_size * scale
|
49 |
boxes[:, 4] = (boxes[:, 4] * image.height + top) / self.image_size * scale
|
50 |
|
51 |
+
rev_tensor = torch.tensor([scale, left, top, left, top])
|
52 |
+
return resized_img, boxes, rev_tensor
|
53 |
|
54 |
|
55 |
class HorizontalFlip:
|
yolo/tools/data_loader.py
CHANGED
@@ -149,7 +149,7 @@ class YoloDataset(Dataset):
|
|
149 |
|
150 |
def __getitem__(self, idx) -> Union[Image.Image, torch.Tensor]:
|
151 |
img, bboxes = self.get_data(idx)
|
152 |
-
img, bboxes = self.transform(img, bboxes)
|
153 |
return img, bboxes
|
154 |
|
155 |
def __len__(self) -> int:
|
@@ -261,7 +261,7 @@ class StreamDataLoader:
|
|
261 |
if isinstance(frame, np.ndarray):
|
262 |
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
263 |
frame = Image.fromarray(frame)
|
264 |
-
frame, _ = self.transform(frame, torch.zeros(0, 5))
|
265 |
frame = frame[None]
|
266 |
if not self.is_stream:
|
267 |
self.queue.put(frame)
|
|
|
149 |
|
150 |
def __getitem__(self, idx) -> Union[Image.Image, torch.Tensor]:
|
151 |
img, bboxes = self.get_data(idx)
|
152 |
+
img, bboxes, _ = self.transform(img, bboxes)
|
153 |
return img, bboxes
|
154 |
|
155 |
def __len__(self) -> int:
|
|
|
261 |
if isinstance(frame, np.ndarray):
|
262 |
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
263 |
frame = Image.fromarray(frame)
|
264 |
+
frame, _, rev_tensor = self.transform(frame, torch.zeros(0, 5))
|
265 |
frame = frame[None]
|
266 |
if not self.is_stream:
|
267 |
self.queue.put(frame)
|