diff --git a/mmp/a4/.output/2244905_transformed.png b/mmp/a4/.output/2244905_transformed.png new file mode 100644 index 0000000..366bfd3 Binary files /dev/null and b/mmp/a4/.output/2244905_transformed.png differ diff --git a/mmp/a4/.output/2246530_transformed.png b/mmp/a4/.output/2246530_transformed.png new file mode 100644 index 0000000..3474f06 Binary files /dev/null and b/mmp/a4/.output/2246530_transformed.png differ diff --git a/mmp/a4/.output/2248597_transformed.png b/mmp/a4/.output/2248597_transformed.png new file mode 100644 index 0000000..43f96b0 Binary files /dev/null and b/mmp/a4/.output/2248597_transformed.png differ diff --git a/mmp/a4/.output/2249347_transformed.png b/mmp/a4/.output/2249347_transformed.png new file mode 100644 index 0000000..ef2d494 Binary files /dev/null and b/mmp/a4/.output/2249347_transformed.png differ diff --git a/mmp/a4/.output/2253259_transformed.png b/mmp/a4/.output/2253259_transformed.png new file mode 100644 index 0000000..59fd157 Binary files /dev/null and b/mmp/a4/.output/2253259_transformed.png differ diff --git a/mmp/a4/.output/2257498_transformed.png b/mmp/a4/.output/2257498_transformed.png new file mode 100644 index 0000000..b6d17a5 Binary files /dev/null and b/mmp/a4/.output/2257498_transformed.png differ diff --git a/mmp/a4/.output/2257580_transformed.png b/mmp/a4/.output/2257580_transformed.png new file mode 100644 index 0000000..964a722 Binary files /dev/null and b/mmp/a4/.output/2257580_transformed.png differ diff --git a/mmp/a4/.output/2260011_transformed.png b/mmp/a4/.output/2260011_transformed.png new file mode 100644 index 0000000..42eb465 Binary files /dev/null and b/mmp/a4/.output/2260011_transformed.png differ diff --git a/mmp/a4/.output/2260743_transformed.png b/mmp/a4/.output/2260743_transformed.png new file mode 100644 index 0000000..deae5d2 Binary files /dev/null and b/mmp/a4/.output/2260743_transformed.png differ diff --git a/mmp/a4/.output/2262101_transformed.png b/mmp/a4/.output/2262101_transformed.png new file mode 100644 index 0000000..ed1e11b Binary files /dev/null and b/mmp/a4/.output/2262101_transformed.png differ diff --git a/mmp/a4/.output/2263691_transformed.png b/mmp/a4/.output/2263691_transformed.png new file mode 100644 index 0000000..6af3fe3 Binary files /dev/null and b/mmp/a4/.output/2263691_transformed.png differ diff --git a/mmp/a4/.output/2264479_transformed.png b/mmp/a4/.output/2264479_transformed.png new file mode 100644 index 0000000..1e9827c Binary files /dev/null and b/mmp/a4/.output/2264479_transformed.png differ diff --git a/mmp/a4/2243119_original.png b/mmp/a4/2243119_original.png deleted file mode 100644 index 6d26061..0000000 Binary files a/mmp/a4/2243119_original.png and /dev/null differ diff --git a/mmp/a4/2243119_transformed.png b/mmp/a4/2243119_transformed.png deleted file mode 100644 index c370412..0000000 Binary files a/mmp/a4/2243119_transformed.png and /dev/null differ diff --git a/mmp/a4/2244764_original.png b/mmp/a4/2244764_original.png deleted file mode 100644 index 46f5a03..0000000 Binary files a/mmp/a4/2244764_original.png and /dev/null differ diff --git a/mmp/a4/2244764_transformed.png b/mmp/a4/2244764_transformed.png deleted file mode 100644 index 2f9957f..0000000 Binary files a/mmp/a4/2244764_transformed.png and /dev/null differ diff --git a/mmp/a4/2244924_original.png b/mmp/a4/2244924_original.png deleted file mode 100644 index b1303bf..0000000 Binary files a/mmp/a4/2244924_original.png and /dev/null differ diff --git a/mmp/a4/2244924_transformed.png b/mmp/a4/2244924_transformed.png deleted file mode 100644 index df7eb78..0000000 Binary files a/mmp/a4/2244924_transformed.png and /dev/null differ diff --git a/mmp/a4/2250234_original.png b/mmp/a4/2250234_original.png deleted file mode 100644 index e20d1c8..0000000 Binary files a/mmp/a4/2250234_original.png and /dev/null differ diff --git a/mmp/a4/2250234_transformed.png b/mmp/a4/2250234_transformed.png deleted file mode 100644 index 165585f..0000000 Binary files a/mmp/a4/2250234_transformed.png and /dev/null differ diff --git a/mmp/a4/2251430_original.png b/mmp/a4/2251430_original.png deleted file mode 100644 index 7c17386..0000000 Binary files a/mmp/a4/2251430_original.png and /dev/null differ diff --git a/mmp/a4/2251430_transformed.png b/mmp/a4/2251430_transformed.png deleted file mode 100644 index c0e4ca7..0000000 Binary files a/mmp/a4/2251430_transformed.png and /dev/null differ diff --git a/mmp/a4/2254610_original.png b/mmp/a4/2254610_original.png deleted file mode 100644 index 80757cf..0000000 Binary files a/mmp/a4/2254610_original.png and /dev/null differ diff --git a/mmp/a4/2254610_transformed.png b/mmp/a4/2254610_transformed.png deleted file mode 100644 index 3f2d148..0000000 Binary files a/mmp/a4/2254610_transformed.png and /dev/null differ diff --git a/mmp/a4/2256266_original.png b/mmp/a4/2256266_original.png deleted file mode 100644 index f2d7915..0000000 Binary files a/mmp/a4/2256266_original.png and /dev/null differ diff --git a/mmp/a4/2256266_transformed.png b/mmp/a4/2256266_transformed.png deleted file mode 100644 index e6df93b..0000000 Binary files a/mmp/a4/2256266_transformed.png and /dev/null differ diff --git a/mmp/a4/2256880_original.png b/mmp/a4/2256880_original.png deleted file mode 100644 index 0e0a5c5..0000000 Binary files a/mmp/a4/2256880_original.png and /dev/null differ diff --git a/mmp/a4/2256880_transformed.png b/mmp/a4/2256880_transformed.png deleted file mode 100644 index c6d075b..0000000 Binary files a/mmp/a4/2256880_transformed.png and /dev/null differ diff --git a/mmp/a4/2258993_original.png b/mmp/a4/2258993_original.png deleted file mode 100644 index d857141..0000000 Binary files a/mmp/a4/2258993_original.png and /dev/null differ diff --git a/mmp/a4/2258993_transformed.png b/mmp/a4/2258993_transformed.png deleted file mode 100644 index 0c421a5..0000000 Binary files a/mmp/a4/2258993_transformed.png and /dev/null differ diff --git a/mmp/a4/2260471_original.png b/mmp/a4/2260471_original.png deleted file mode 100644 index 257c345..0000000 Binary files a/mmp/a4/2260471_original.png and /dev/null differ diff --git a/mmp/a4/2260471_transformed.png b/mmp/a4/2260471_transformed.png deleted file mode 100644 index 128891f..0000000 Binary files a/mmp/a4/2260471_transformed.png and /dev/null differ diff --git a/mmp/a4/2261564_original.png b/mmp/a4/2261564_original.png deleted file mode 100644 index 4eedd86..0000000 Binary files a/mmp/a4/2261564_original.png and /dev/null differ diff --git a/mmp/a4/2261564_transformed.png b/mmp/a4/2261564_transformed.png deleted file mode 100644 index 77d85d9..0000000 Binary files a/mmp/a4/2261564_transformed.png and /dev/null differ diff --git a/mmp/a4/2262264_original.png b/mmp/a4/2262264_original.png deleted file mode 100644 index 3699f27..0000000 Binary files a/mmp/a4/2262264_original.png and /dev/null differ diff --git a/mmp/a4/2262264_transformed.png b/mmp/a4/2262264_transformed.png deleted file mode 100644 index d1c7fcc..0000000 Binary files a/mmp/a4/2262264_transformed.png and /dev/null differ diff --git a/mmp/a4/dataset.py b/mmp/a4/dataset.py index 21a0721..fd3ad9c 100644 --- a/mmp/a4/dataset.py +++ b/mmp/a4/dataset.py @@ -5,7 +5,7 @@ import numpy as np import torch from torch.utils.data import DataLoader from ..a3.annotation import read_groundtruth_file, AnnotationRect -from .label_grid import get_label_grid, draw_annotation_rects +from .label_grid import get_label_grid, iou import matplotlib.pyplot as plt import matplotlib.patches as patches from .anchor_grid import get_anchor_grid @@ -33,6 +33,7 @@ class MMP_Dataset(torch.utils.data.Dataset): self.anchor_grid = anchor_grid self.min_iou = min_iou self.is_test = is_test + self.path_to_data = path_to_data img_pattern = re.compile(r"^(\d+)\.jpg$") files = set(os.listdir(path_to_data)) @@ -126,15 +127,38 @@ def calculate_max_coverage(loader: DataLoader, min_iou: float) -> float: @param min_iou: Minimum IoU overlap that is required to count a ground truth box as covered. @return: Ratio of how mamy ground truth boxes are covered by a label grid box. Must be a value between 0 and 1. """ - raise NotImplementedError() + total_boxes = 0 + covered_boxes = 0 + dataset: MMP_Dataset = loader.dataset + anchor_grid = dataset.anchor_grid + + for img, _, img_id in islice(loader, 4): + for batch_index in range(len(img)): + gts_file = os.path.join( + dataset.path_to_data, + f"{str(img_id[batch_index].item()).zfill(8)}.gt_data.txt", + ) + + gts = read_groundtruth_file(gts_file) + total_boxes += len(gts) + for annotation in gts: + for box_idx in np.ndindex(anchor_grid.shape[:-1]): + box_annotation = AnnotationRect.fromarray(anchor_grid[box_idx]) + calculated_iou = iou(annotation, box_annotation) + if calculated_iou >= min_iou: + covered_boxes += 1 + break + return covered_boxes / total_boxes -def print_img_tensor_with_annotations( - img: torch.Tensor, annotations: Sequence["AnnotationRect"], output_file: str +def draw_image_tensor_with_annotations( + img: torch.Tensor, + annotations: Sequence["AnnotationRect"] | None, + output_file: str, ): # Convert tensor to numpy, permute dimensions - img_np = img.permute(1, 2, 0).cpu().numpy() - img_np = img_np.astype(np.uint8) + img_np = img.permute(1, 2, 0).numpy() + img_np = np.clip(img_np, 0, 1) fig, ax = plt.subplots(1) ax.imshow(img_np) @@ -152,27 +176,30 @@ def print_img_tensor_with_annotations( plt.close(fig) -def print_positive_boxes( +def denormalize_image_tensor( + img: torch.Tensor, + mean=torch.tensor([0.485, 0.456, 0.406]).view(-1, 1, 1), + std=torch.tensor([0.229, 0.224, 0.225]).view(-1, 1, 1), +) -> torch.Tensor: + img_denormalized = img * std + mean + return img_denormalized + + +def draw_positive_boxes( img_tensor: torch.Tensor, label_grid: np.ndarray, img_id: torch.Tensor, anchor_grid: np.ndarray, - path_to_data: str, ): annotations = [ AnnotationRect.fromarray(anchor_grid[idx]) for idx in np.ndindex(anchor_grid.shape[:-1]) if label_grid[idx] ] - print_img_tensor_with_annotations( + draw_image_tensor_with_annotations( img_tensor, annotations=annotations, - output_file=f"mmp/a4/{img_id}_transformed.png", - ) - draw_annotation_rects( - annotations=annotations, - image=f"{os.path.join(path_to_data, f'{str(img_id.item()).zfill(8)}.jpg')}", - output_path=f"mmp/a4/{img_id}_original.png", + output_file=f"mmp/a4/.output/{img_id}_transformed.png", ) @@ -195,12 +222,11 @@ def main(): ) for img, label, img_id in islice(dataloader, 12): - print_positive_boxes( - img_tensor=img[5], + draw_positive_boxes( + img_tensor=denormalize_image_tensor(img=img[5]), label_grid=label[5], img_id=img_id[5], anchor_grid=anchor_grid, - path_to_data=".data/mmp-public-3.2/train", )