ultralytics / ultralytics

NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite
https://docs.ultralytics.com
GNU Affero General Public License v3.0
23.75k stars 4.74k forks source link

yoloworld offline use , set_classes adds specified weight path parameters #11681

Closed reynaldliu closed 1 week ago

reynaldliu commented 1 week ago

Search before asking

Description

The program needs to be used offline when there is no network. It is expected that set_classes can specify the path of the clip model so that the clip weight file can be downloaded at the specified location in advance when offline. The current default location is ~/.cache/clip. It is expected that this can be changed. Location


class WorldModel(DetectionModel):
    """YOLOv8 World Model."""

    def __init__(self, cfg="yolov8s-world.yaml", ch=3, nc=None, verbose=True):
        """Initialize YOLOv8 world model with given config and parameters."""
        self.txt_feats = torch.randn(1, nc or 80, 512)  # placeholder
        super().__init__(cfg=cfg, ch=ch, nc=nc, verbose=verbose)

    def set_classes(self, text):
        """Perform a forward pass with optional profiling, visualization, and embedding extraction."""
        try:
            import clip
        except ImportError:
            check_requirements("git+https://github.com/openai/CLIP.git")
            import clip

        model, _ = clip.load("ViT-B/32")
        device = next(model.parameters()).device
        text_token = clip.tokenize(text).to(device)

Use case

No response

Additional

No response

Are you willing to submit a PR?

github-actions[bot] commented 1 week ago

👋 Hello @reynaldliu, thank you for your interest in Ultralytics YOLOv8 🚀! We recommend a visit to the Docs for new users where you can find many Python and CLI usage examples and where many of the most common questions may already be answered.

If this is a 🐛 Bug Report, please provide a minimum reproducible example to help us debug it.

If this is a custom training ❓ Question, please provide as much information as possible, including dataset image examples and training logs, and verify you are following our Tips for Best Training Results.

Join the vibrant Ultralytics Discord 🎧 community for real-time conversations and collaborations. This platform offers a perfect space to inquire, showcase your work, and connect with fellow Ultralytics users.

Install

Pip install the ultralytics package including all requirements in a Python>=3.8 environment with PyTorch>=1.8.

pip install ultralytics

Environments

YOLOv8 may be run in any of the following up-to-date verified environments (with all dependencies including CUDA/CUDNN, Python and PyTorch preinstalled):

Status

Ultralytics CI

If this badge is green, all Ultralytics CI tests are currently passing. CI tests verify correct operation of all YOLOv8 Modes and Tasks on macOS, Windows, and Ubuntu every 24 hours and on every commit.

glenn-jocher commented 1 week ago

@reynaldliu hello! Thanks for reaching out with your request about modifying the default path for loading the clip model weights for offline usage.

You can achieve this by manually specifying the path when loading the model using clip.load(). You can pass an additional jit parameter pointing to your pre-downloaded weights file. Here's a modified snippet of your code:

import clip

def set_classes(self, text, clip_model_path):
    """Load custom CLIP model from a specific path."""
    model, _ = clip.load("ViT-B/32", jit=clip_model_path)
    device = next(model.parameters()).device
    text_token = clip.tokenize(text).to(device)

When calling set_classes, provide the local path to your pre-downloaded CLIP model file as the clip_model_path argument:

model.set_classes("Some classes text", clip_model_path="/local/path/to/your/clip/model.pt")

This should allow your application to run offline by leveraging the CLIP weights stored at a specified location. If you have any further questions or need additional assistance, please don't hesitate to ask! 🌐🚀