henry000 commited on
Commit
15f0a98
·
1 Parent(s): 64acfd1

🔨 [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), (255, 255, 255))
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
- return resized_img, boxes
 
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)