Split images into train-val and return as Coco objects. Args: train_split_rate: float numpy_seed: int random seed. Actually, this doesn't use numpy, but the random package from the standard library, but it is called numpy for compatibi
(self, train_split_rate: float = 0.9, numpy_seed: int = 0)
| 1280 | } |
| 1281 | |
| 1282 | def split_coco_as_train_val(self, train_split_rate: float = 0.9, numpy_seed: int = 0) -> dict: |
| 1283 | """Split images into train-val and return as Coco objects. |
| 1284 | |
| 1285 | Args: |
| 1286 | train_split_rate: float |
| 1287 | numpy_seed: int |
| 1288 | random seed. Actually, this doesn't use numpy, but the random package |
| 1289 | from the standard library, but it is called numpy for compatibility. |
| 1290 | |
| 1291 | Returns: |
| 1292 | result: Dict with keys "train_coco" and "val_coco". |
| 1293 | """ |
| 1294 | # divide images |
| 1295 | num_images = len(self.images) |
| 1296 | shuffled_images = copy.deepcopy(self.images) |
| 1297 | random.seed(numpy_seed) |
| 1298 | random.shuffle(shuffled_images) |
| 1299 | num_train = int(num_images * train_split_rate) |
| 1300 | train_images = shuffled_images[:num_train] |
| 1301 | val_images = shuffled_images[num_train:] |
| 1302 | |
| 1303 | # form train val coco objects |
| 1304 | train_coco = Coco( |
| 1305 | name=self.name if self.name else "split" + "_train", |
| 1306 | image_dir=self.image_dir, |
| 1307 | ) |
| 1308 | train_coco.images = train_images |
| 1309 | train_coco.categories = self.categories |
| 1310 | |
| 1311 | val_coco = Coco(name=self.name if self.name else "split" + "_val", image_dir=self.image_dir) |
| 1312 | val_coco.images = val_images |
| 1313 | val_coco.categories = self.categories |
| 1314 | |
| 1315 | # return result |
| 1316 | return { |
| 1317 | "train_coco": train_coco, |
| 1318 | "val_coco": val_coco, |
| 1319 | } |
| 1320 | |
| 1321 | def export_as_yolo( |
| 1322 | self, |