From 0c2090165e75284c2f2996ca804d21b14262c98f Mon Sep 17 00:00:00 2001 From: StarxSky Date: Tue, 26 May 2026 11:24:24 +0800 Subject: [PATCH 1/2] Fix: OSError: Could not load this library: /usr/local/lib/python3.12/dist-packages/torchtext/lib/libtorchtext.so --- config/detection/ssd_coco/mobilevit.yaml | 4 ++-- data/datasets/detection/coco_base.py | 14 +++++++++++--- data/datasets/segmentation/coco_segmentation.py | 2 +- data/text_tokenizer/clip_tokenizer.py | 12 +++++++++++- main_eval.py | 4 ++-- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/config/detection/ssd_coco/mobilevit.yaml b/config/detection/ssd_coco/mobilevit.yaml index 94abe0d..55416b7 100644 --- a/config/detection/ssd_coco/mobilevit.yaml +++ b/config/detection/ssd_coco/mobilevit.yaml @@ -7,8 +7,8 @@ common: auto_resume: true mixed_precision: true dataset: - root_train: "/mnt/vision_datasets/coco" - root_val: "/mnt/vision_datasets/coco" + root_train: "/content/data/train2017" + root_val: "/content/data/val2017" name: "coco_ssd" category: "detection" train_batch_size0: 32 # effective batch size is 128 (32 * 4 GPUs) diff --git a/data/datasets/detection/coco_base.py b/data/datasets/detection/coco_base.py index 1d61257..934076c 100644 --- a/data/datasets/detection/coco_base.py +++ b/data/datasets/detection/coco_base.py @@ -52,7 +52,7 @@ def __init__( logger.disable_printing() self.coco = COCO(ann_file) - self.img_dir = os.path.join(self.root, "images/{}{}".format(split, year)) + self.img_dir = self.root self.ids = ( list(self.coco.imgToAnns.keys()) if self.is_training @@ -139,9 +139,17 @@ def __getitem__( transform_fn = self.get_augmentation_transforms(size=(crop_size_h, crop_size_w)) - image_id = self.ids[img_index] + num_images = len(self.ids) + for _ in range(num_images): + image_id = self.ids[img_index] - image, img_name = self.get_image(image_id=image_id) + image, img_name = self.get_image(image_id=image_id) + if image is not None: + break + # corrupted image; try next + img_index = (img_index + 1) % num_images + else: + raise RuntimeError("All images in the dataset are corrupted.") im_width, im_height = image.size boxes, labels, mask = self.get_boxes_and_labels( diff --git a/data/datasets/segmentation/coco_segmentation.py b/data/datasets/segmentation/coco_segmentation.py index 7f442a4..fab5712 100644 --- a/data/datasets/segmentation/coco_segmentation.py +++ b/data/datasets/segmentation/coco_segmentation.py @@ -31,7 +31,7 @@ def __init__(self, opts: argparse.Namespace, *args, **kwargs) -> None: ann_file = os.path.join( self.root, "annotations/instances_{}{}.json".format(split, year) ) - self.img_dir = os.path.join(self.root, "images/{}{}".format(split, year)) + self.img_dir = self.root self.split = split self.coco = COCO(ann_file) self.coco_mask = mask diff --git a/data/text_tokenizer/clip_tokenizer.py b/data/text_tokenizer/clip_tokenizer.py index 3cae874..586d460 100644 --- a/data/text_tokenizer/clip_tokenizer.py +++ b/data/text_tokenizer/clip_tokenizer.py @@ -7,16 +7,26 @@ import torch from torch import Tensor -from torchtext.transforms import CLIPTokenizer from data.text_tokenizer import TOKENIZER_REGISTRY, BaseTokenizer from utils import logger from utils.download_utils import get_local_path +try: + from torchtext.transforms import CLIPTokenizer +except (ImportError, OSError): + CLIPTokenizer = None + @TOKENIZER_REGISTRY.register(name="clip") class ClipTokenizer(BaseTokenizer): def __init__(self, opts, *args, **kwargs): + if CLIPTokenizer is None: + logger.error( + "torchtext is not available. Please install a compatible version " + "of torchtext to use the CLIP tokenizer." + ) + merges_path = getattr(opts, "text_tokenizer.clip.merges_path", None) if merges_path is None: logger.error( diff --git a/main_eval.py b/main_eval.py index c07435a..622321c 100644 --- a/main_eval.py +++ b/main_eval.py @@ -154,5 +154,5 @@ def main_worker_detection(args: Optional[List[str]] = None, **kwargs): if __name__ == "__main__": # main_worker() - main_worker_segmentation() - # main_worker_detection() + #main_worker_segmentation() + main_worker_detection() From 132601dfdd8a5f3c5fc9b8ab56c73b68c738e7ef Mon Sep 17 00:00:00 2001 From: "StarxSky (Mochi)" <62407841+StarxSky@users.noreply.github.com> Date: Wed, 27 May 2026 16:18:45 +0800 Subject: [PATCH 2/2] Implement write_video function with OpenCV fallback Added a custom write_video function using OpenCV as a replacement for the removed torchvision.io.write_video. Included error handling for OpenCV import. --- data/transforms/video.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/data/transforms/video.py b/data/transforms/video.py index 5ff3faf..13173c7 100644 --- a/data/transforms/video.py +++ b/data/transforms/video.py @@ -16,9 +16,27 @@ import torch import torchaudio from torch.nn import functional as F -from torchvision.io import write_video from torchvision.transforms import functional as FV +try: + import cv2 + + def write_video(filename: str, video_array: torch.Tensor, fps: float): + """Write video using OpenCV (replacement for removed torchvision.io.write_video).""" + video_array = video_array.cpu().numpy() # (N, H, W, C) uint8 + n_frames = video_array.shape[0] + h, w = video_array.shape[1:3] + fourcc = cv2.VideoWriter_fourcc(*"mp4v") + out = cv2.VideoWriter(str(filename), fourcc, fps, (w, h)) + for i in range(n_frames): + frame = video_array[i] + # cv2 expects BGR + frame_bgr = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) + out.write(frame_bgr) + out.release() +except ImportError: + from torchvision.io import write_video + from data.transforms import TRANSFORMATIONS_REGISTRY, BaseTransformation from data.transforms.utils import * from options.parse_args import JsonValidator