Skip to content
Snippets Groups Projects

Use a single padding method

Merged Mélodie Boillet requested to merge single-padding-method into main
2 files
+ 19
133
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 2
48
@@ -6,10 +6,9 @@ import pickle
import cv2
import numpy as np
import torch
from torch import randint
from dan.manager.dataset import DatasetManager, GenericDataset, apply_preprocessing
from dan.utils import pad_image, pad_images, pad_sequences_1D, token_to_ind
from dan.utils import pad_images, pad_sequences_1D, token_to_ind
class OCRDatasetManager(DatasetManager):
@@ -47,20 +46,6 @@ class OCRDatasetManager(DatasetManager):
dataset.charset = self.charset
dataset.tokens = self.tokens
dataset.convert_labels()
if (
"padding" in dataset.params["config"]
and dataset.params["config"]["padding"]["min_height"] == "max"
):
dataset.params["config"]["padding"]["min_height"] = max(
[s["img"].shape[0] for s in self.train_dataset.samples]
)
if (
"padding" in dataset.params["config"]
and dataset.params["config"]["padding"]["min_width"] == "max"
):
dataset.params["config"]["padding"]["min_width"] = max(
[s["img"].shape[1] for s in self.train_dataset.samples]
)
class OCRDataset(GenericDataset):
@@ -116,34 +101,6 @@ class OCRDataset(GenericDataset):
[0, sample["img"].shape[0]],
[0, sample["img"].shape[1]],
]
# Padding constraints to handle model needs
if "padding" in self.params["config"] and self.params["config"]["padding"]:
if (
self.set_name == "train"
or not self.params["config"]["padding"]["train_only"]
):
min_pad = self.params["config"]["padding"]["min_pad"]
max_pad = self.params["config"]["padding"]["max_pad"]
pad_width = (
randint(min_pad, max_pad, (1,))
if min_pad is not None and max_pad is not None
else None
)
pad_height = (
randint(min_pad, max_pad, (1,))
if min_pad is not None and max_pad is not None
else None
)
sample["img"], sample["img_position"] = pad_image(
sample["img"],
new_width=self.params["config"]["padding"]["min_width"],
new_height=self.params["config"]["padding"]["min_height"],
pad_width=pad_width,
pad_height=pad_height,
padding_mode=self.params["config"]["padding"]["mode"],
return_position=True,
)
return sample
def convert_labels(self):
@@ -178,11 +135,8 @@ class OCRCollateFunction:
labels = pad_sequences_1D(labels, padding_value=self.label_padding_value)
labels = torch.tensor(labels).long()
padding_mode = (
self.config["padding_mode"] if "padding_mode" in self.config else "br"
)
imgs = [batch_data[i]["img"] for i in range(len(batch_data))]
imgs = pad_images(imgs, padding_mode=padding_mode)
imgs = pad_images(imgs)
imgs = torch.tensor(imgs).float().permute(0, 3, 1, 2)
formatted_batch_data = {
Loading