当前位置:   article > 正文

YOLO-World初体验:Ultralytics版本,可直接上手,离线运行

YOLO-World初体验:Ultralytics版本,可直接上手,离线运行

YOLOv8官方新增了对YOLO-World的支持,本文利用其提供的模型及接口进行了体验。

关于YOLO-World的详细介绍,见:YOLO-World:实时开放词汇目标检测-CSDN博客

目录

1. 前言

2. 安装(更新)

Ultralytics安装:

CLIP安装:

3. 上手体验

模型下载:

不设定词汇表,进行推理:

运行效果:


1. 前言

        关于Demo:

        尽管YOLO-World官方给出了在线试用的Demo:https://huggingface.co/spaces/stevengrove/YOLO-World ,但还是不如在自己电脑上离线运行一遍来得直接。恰好,近期Ultralytics(YOLOv8)也新增了对YOLO-World的支持,我们不如直接体验一把。

        关于YOLO-World:

        其是一个使用开放词汇进行目标检测的新框架,且是以YOLOv8框架为detector,所以其特点就继承了YOLO系列,也即轻量、快速、性能好。另外,既然是文本和图片一起作为输入,那么就需要有一个文本embedding的模块,这里用的是CLIP,其将用户输入的词汇列表转换为特征向量,与输入图像一起进行推理。

2. 安装(更新)

        由于YOLO-World主要包括两部分内容:YOLO-style的检测器、用于文本embedding的CLIP。因此,我们需要安装一个Ultralytics库、一个CLIP库。

Ultralytics安装:

  1. # 新安装:
  2. pip install ultralytics
  3. # 已有Ultralytics,更新:
  4. pip install -U ultralytics

CLIP安装:

        这里需要注意,不能直接“pip install clip”,这样安装的库无法使用;我们需要使用如下方式:

pip install openai-clip

3. 上手体验

模型下载:

这里选用yolov8s-world.pt:https://github.com/ultralytics/assets/releases/download/v8.1.0/yolov8s-world.pt

当然,也可以使用其他模型,可自行从Ultralytics的官网下载:。

不设定词汇表,进行推理:

这里没有用到CLIP,因为没有设定词汇,也就不需要进行text embedding了

yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640

设定词汇,进行推理:

  1. from ultralytics import YOLO
  2. if __name__ == '__main__':
  3. # Initialize a YOLO-World model
  4. model = YOLO('yolov8/yolov8s-world.pt') # or choose yolov8m/l-world.pt
  5. # Define custom classes
  6. model.set_classes(["person"])
  7. # Execute prediction for specified categories on an image
  8. results = model.predict('image_01.jpg')
  9. # Show results
  10. results[0].show()

这里,我们设定了只包括一个词汇的词汇表:["person"],那么自然,我们也可以根据需要设定多个词汇。由于设定了词汇表,所以就会用到CLIP,它会将各个词汇进行嵌入,转换为text feature。

上述代码中用到了set_classes(),其实现如下:

  1. def set_classes(self, text):
  2. """Perform a forward pass with optional profiling, visualization, and embedding extraction."""
  3. try:
  4. import clip
  5. except ImportError:
  6. check_requirements("git+https://github.com/openai/CLIP.git")
  7. import clip
  8. model, _ = clip.load("ViT-B/32")
  9. device = next(model.parameters()).device
  10. text_token = clip.tokenize(text).to(device)
  11. txt_feats = model.encode_text(text_token).to(dtype=torch.float32)
  12. txt_feats = txt_feats / txt_feats.norm(p=2, dim=-1, keepdim=True)
  13. self.txt_feats = txt_feats.reshape(-1, len(text), txt_feats.shape[-1])
  14. self.model[-1].nc = len(text)

运行效果:

["person"]:

["trian"]:

 ["person", "motorcycle"]:

 运行过程中,时间消耗也是极小的,这也符合YOLO系列的风格。

Speed: 0.9ms preprocess, 43.5ms inference, 1.1ms postprocess per image at shape (1, 3, 448, 640)

 可以预见的是,YOLO-World会是未来实时开放词汇检测领域的一个重量级选手。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/128637
推荐阅读
相关标签
  

闽ICP备14008679号