| 15 | |
| 16 | |
| 17 | class BasePreprocessing: |
| 18 | def __init__( |
| 19 | self, |
| 20 | data_dir: str = "./data/raw/", |
| 21 | save_dir: str = "./data/processed/", |
| 22 | modes: tuple = ("train", "validation", "test"), |
| 23 | n_jobs: int = -1, |
| 24 | ): |
| 25 | self.data_dir = Path(data_dir) |
| 26 | self.save_dir = Path(save_dir) |
| 27 | self.n_jobs = n_jobs |
| 28 | self.modes = modes |
| 29 | |
| 30 | if not self.data_dir.exists(): |
| 31 | logger.error("data folder doesn't exist") |
| 32 | raise FileNotFoundError |
| 33 | if self.save_dir.exists() is False: |
| 34 | self.save_dir.mkdir(parents=True, exist_ok=True) |
| 35 | |
| 36 | self.files = {} |
| 37 | for data_type in self.modes: |
| 38 | self.files.update({data_type: []}) |
| 39 | |
| 40 | @logger.catch |
| 41 | def preprocess(self): |
| 42 | self.n_jobs = multiprocessing.cpu_count() if self.n_jobs == -1 else self.n_jobs |
| 43 | for mode in self.modes: |
| 44 | database = [] |
| 45 | logger.info(f"Tasks for {mode}: {len(self.files[mode])}") |
| 46 | parallel_results = Parallel(n_jobs=self.n_jobs, verbose=10)( |
| 47 | delayed(self.process_file)(file, mode) for file in self.files[mode] |
| 48 | ) |
| 49 | for filebase in parallel_results: |
| 50 | if filebase is not None: |
| 51 | database.append(filebase) |
| 52 | self.save_database(database, mode) |
| 53 | self.fix_bugs_in_labels() |
| 54 | # self.joint_database() |
| 55 | self.compute_color_mean_std( |
| 56 | train_database_path=(self.save_dir / "validation_database.yaml") |
| 57 | ) |
| 58 | |
| 59 | def preprocess_sequential(self): |
| 60 | for mode in self.modes: |
| 61 | database = [] |
| 62 | for filepath in tqdm(self.files[mode], unit="file"): |
| 63 | filebase = self.process_file(filepath, mode) |
| 64 | if filebase is not None: |
| 65 | database.append(filebase) |
| 66 | self.save_database(database, mode) |
| 67 | self.fix_bugs_in_labels() |
| 68 | # self.joint_database() |
| 69 | self.compute_color_mean_std( |
| 70 | train_database_path=(self.save_dir / "validation_database.yaml") |
| 71 | ) |
| 72 | |
| 73 | def process_file(self, filepath, mode): |
| 74 | """process_file. |
nothing calls this directly
no outgoing calls
no test coverage detected