🧑🍳 Zero-Shot Object Detection with YOLO-World Cookbook
This commit is contained in:
1 parent
15b099cb71
commit
382b4e0801
2 files changed
+895
No files matched your search
@@ -0,0 +1,894 @@
|
||||
{
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": [],
|
||||
"gpuType": "T4"
|
||||
},
|
||||
"kernelspec": {
|
||||
"name": "python3",
|
||||
"display_name": "Python 3"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
},
|
||||
"accelerator": "GPU"
|
||||
},
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"# Zero-Shot Object Detection with YOLO-World\n",
|
||||
"---\n",
|
||||
"[](https://colab.research.google.com/github/roboflow/supervision/blob/develop/docs/notebooks/zero-shot-object-detection-with-yolo-world.ipynb)\n",
|
||||
"[](https://blog.roboflow.com/what-is-yolo-world/)\n",
|
||||
"[](https://github.com/AILab-CVC/YOLO-World)\n",
|
||||
"[](https://arxiv.org/abs/2401.17270)\n",
|
||||
"\n",
|
||||
"Click the `Open in Colab` button to run the cookbook on Google Colab.\n",
|
||||
"\n",
|
||||
"<br>\n",
|
||||
"\n",
|
||||
"YOLO-World was designed to solve a limitation of existing zero-shot object detection models: speed. Whereas other state-of-the-art models use Transformers, a powerful but typically slower architecture, YOLO-World uses the faster CNN-based YOLO architecture.\n",
|
||||
"\n",
|
||||
"According to the paper YOLO-World reached between 35.4 AP with 52.0 FPS for the large version and 26.2 AP with 74.1 FPS for the small version. While the V100 is a powerful GPU, achieving such high FPS on any device is impressive.\n",
|
||||
"\n",
|
||||
""
|
||||
],
|
||||
"metadata": {
|
||||
"id": "kR-PyK7YXPVZ"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Before you start\n",
|
||||
"\n",
|
||||
"Let's make sure that we have access to GPU. We can use `nvidia-smi` command to do that. In case of any problems navigate to `Edit` -> `Notebook settings` -> `Hardware accelerator`, set it to `GPU`, and then click `Save`."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "T-lkdAZUY73s"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "mP1Bv5jBXNbw",
|
||||
"outputId": "43cc5b50-9958-447d-f597-9ee510e52792"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"Fri Feb 16 12:46:14 2024 \n",
|
||||
"+---------------------------------------------------------------------------------------+\n",
|
||||
"| NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 |\n",
|
||||
"|-----------------------------------------+----------------------+----------------------+\n",
|
||||
"| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |\n",
|
||||
"| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |\n",
|
||||
"| | | MIG M. |\n",
|
||||
"|=========================================+======================+======================|\n",
|
||||
"| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n",
|
||||
"| N/A 65C P8 13W / 70W | 0MiB / 15360MiB | 0% Default |\n",
|
||||
"| | | N/A |\n",
|
||||
"+-----------------------------------------+----------------------+----------------------+\n",
|
||||
" \n",
|
||||
"+---------------------------------------------------------------------------------------+\n",
|
||||
"| Processes: |\n",
|
||||
"| GPU GI CI PID Type Process name GPU Memory |\n",
|
||||
"| ID ID Usage |\n",
|
||||
"|=======================================================================================|\n",
|
||||
"| No running processes found |\n",
|
||||
"+---------------------------------------------------------------------------------------+\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"!nvidia-smi"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"**NOTE:** To make it easier for us to manage datasets, images and models we create a `HOME` constant."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "nySApmvdZDEd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"import os\n",
|
||||
"HOME = os.getcwd()\n",
|
||||
"print(HOME)"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "JGXqXrQfY2yo",
|
||||
"outputId": "161ad18e-a296-4f27-b9c4-2c1fb68a2fc3"
|
||||
},
|
||||
"execution_count": 2,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"/content\n"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Install required packages\n",
|
||||
"\n",
|
||||
"In this guide, we utilize two Python packages: `inference`, for executing zero-shot object detection using YOLO-World, and `supervision`, for post-processing and visualizing the detected objects."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "h1jNp-i3ZL0D"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"!pip install -q inference-gpu[yolo-world]==0.9.12rc1"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "zfc06V9QZFup"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"!pip install -q supervision==0.19.0rc3"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "44LZf5qb3bet"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Imports"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "dnEI8EOpalbe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"import cv2\n",
|
||||
"import supervision as sv\n",
|
||||
"\n",
|
||||
"from tqdm import tqdm\n",
|
||||
"from inference.models.yolo_world.yolo_world import YOLOWorld"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "UIcZyEhuacFT"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Download example data"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "ULzC4SZdbO-L"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"!wget -P {HOME} -q https://media.roboflow.com/notebooks/examples/dog.jpeg\n",
|
||||
"!wget -P {HOME} -q https://media.roboflow.com/supervision/cookbooks/yellow-filling.mp4"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "29c6jMS1a7NS"
|
||||
},
|
||||
"execution_count": 6,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"SOURCE_IMAGE_PATH = f\"{HOME}/dog.jpeg\"\n",
|
||||
"SOURCE_VIDEO_PATH = f\"{HOME}/yellow-filling.mp4\""
|
||||
],
|
||||
"metadata": {
|
||||
"id": "Kvq4jtTjg31-"
|
||||
},
|
||||
"execution_count": 7,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"**NOTE:** If you want to run the cookbook using your own file as input, simply upload video to Google Colab and replace `SOURCE_IMAGE_PATH` and `SOURCE_VIDEO_PATH` with the path to your file."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "M0_JmZ08gyYg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Run Object Detection\n",
|
||||
"\n",
|
||||
"The Inference package provides the YOLO-World model in three versions: `S`, `M`, and `L`. You can load them by defining model_id as `yolo_world/s`, `yolo_world/m`, and `yolo_world/l`, respectively. The `ROBOFLOW_API_KEY` is not required to utilize this model.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "NLP6DK4YbVpm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"model = YOLOWorld(model_id=\"yolo_world/l\")"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "osrplWqebju0"
|
||||
},
|
||||
"execution_count": 8,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"YOLO-World is a zero-shot model, enabling object detection without any training. You only need to define a prompt as a list of classes (things) you are searching for."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "vzZgYhZodzgS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"classes = [\"person\", \"backpack\", \"dog\", \"eye\", \"nose\", \"ear\", \"tongue\"]\n",
|
||||
"model.set_classes(classes)"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "UZTYuZlAdYhC",
|
||||
"outputId": "89dba6b8-5f80-4802-fe85-27b4b5c66bb3"
|
||||
},
|
||||
"execution_count": 9,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stderr",
|
||||
"text": [
|
||||
"100%|████████████████████████████████████████| 338M/338M [00:03<00:00, 106MiB/s]\n"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"We perform detection on our sample image. Then, we convert the result into a [`sv.Detections`](https://supervision.roboflow.com/latest/detection/core/) object, which will be useful in the later parts of the cookbook."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "fXLWvBQNgoV_"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"image = cv2.imread(SOURCE_IMAGE_PATH)\n",
|
||||
"results = model.infer(image)\n",
|
||||
"detections = sv.Detections.from_inference(results)"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "ZinEbFJsdp9m"
|
||||
},
|
||||
"execution_count": 10,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"The results we've obtained can be easily visualized with [`sv.BoundingBoxAnnotator`](https://supervision.roboflow.com/latest/annotators/#supervision.annotators.core.BoundingBoxAnnotator) and [`sv.LabelAnnotator`](https://supervision.roboflow.com/latest/annotators/#supervision.annotators.core.LabelAnnotator). We can adjust parameters such as line thickness, text scale, line and text color allowing for a highly tailored visualization experience."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "jiYw1EXzhpbu"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"BOUNDING_BOX_ANNOTATOR = sv.BoundingBoxAnnotator(thickness=2)\n",
|
||||
"LABEL_ANNOTATOR = sv.LabelAnnotator(text_thickness=2, text_scale=1, text_color=sv.Color.BLACK)"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "37CMTxw0jSyH"
|
||||
},
|
||||
"execution_count": 11,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"annotated_image = image.copy()\n",
|
||||
"annotated_image = BOUNDING_BOX_ANNOTATOR.annotate(annotated_image, detections)\n",
|
||||
"annotated_image = LABEL_ANNOTATOR.annotate(annotated_image, detections)\n",
|
||||
"sv.plot_image(annotated_image, (10, 10))"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 807
|
||||
},
|
||||
"id": "YkVoWxchher5",
|
||||
"outputId": "ff1dce17-5584-496a-9113-e4d5123489b4"
|
||||
},
|
||||
"execution_count": 12,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "display_data",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<Figure size 1000x1000 with 1 Axes>"
|
||||
],
|
||||
"image/png": "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 truncated
|
||||
},
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Adjusting Confidence Level"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "KrferzhUnOk1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"Note that many classes from our prompt were not detected. This is because the default confidence threshold in Inference is set to `0.5`. Let's try significantly lowering this value. We've observed that the confidence returned by YOLO-World is significantly lower when querying for classes outside the [COCO](https://universe.roboflow.com/microsoft/coco) dataset."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "-aBRGrJnlvjN"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"image = cv2.imread(SOURCE_IMAGE_PATH)\n",
|
||||
"results = model.infer(image, confidence=0.003)\n",
|
||||
"detections = sv.Detections.from_inference(results)"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "XKAJJQVLiE6y"
|
||||
},
|
||||
"execution_count": 13,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"By default, `sv.LabelAnnotator` displays only the names of objects. To also view the confidence levels associated with each detection, we must define custom `labels` and pass them to `sv.LabelAnnotator`."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "E2UGr46TmiaQ"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"labels = [\n",
|
||||
" f\"{classes[class_id]} {confidence:0.3f}\"\n",
|
||||
" for class_id, confidence\n",
|
||||
" in zip(detections.class_id, detections.confidence)\n",
|
||||
"]\n",
|
||||
"\n",
|
||||
"annotated_image = image.copy()\n",
|
||||
"annotated_image = BOUNDING_BOX_ANNOTATOR.annotate(annotated_image, detections)\n",
|
||||
"annotated_image = LABEL_ANNOTATOR.annotate(annotated_image, detections, labels=labels)\n",
|
||||
"sv.plot_image(annotated_image, (10, 10))"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 807
|
||||
},
|
||||
"id": "Zw9tE3fKl4R3",
|
||||
"outputId": "857333d8-7279-4a5c-9bb8-8be8584b82c2"
|
||||
},
|
||||
"execution_count": 14,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "display_data",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<Figure size 1000x1000 with 1 Axes>"
|
||||
],
|
||||
"image/png": "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 truncated
|
||||
},
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Using Non-Max Suppression (NMS) to Eliminate Double Detections\n",
|
||||
"\n",
|
||||
"To eliminate duplicates, we will use [Non-Max Suppression (NMS)](https://blog.roboflow.com/how-to-code-non-maximum-suppression-nms-in-plain-numpy). NMS evaluates the extent to which detections overlap using the Intersection over Union metric and, upon exceeding a defined threshold, treats them as duplicates. Duplicates are then discarded, starting with those of the lowest confidence. The value should be within the range `[0, 1]`. The smaller the value, the more restrictive the NMS.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "t88HE-7FofwJ"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"image = cv2.imread(SOURCE_IMAGE_PATH)\n",
|
||||
"results = model.infer(image, confidence=0.003)\n",
|
||||
"detections = sv.Detections.from_inference(results).with_nms(threshold=0.1)"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "pyyjlCkAl9g6"
|
||||
},
|
||||
"execution_count": 15,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"labels = [\n",
|
||||
" f\"{classes[class_id]} {confidence:0.3f}\"\n",
|
||||
" for class_id, confidence\n",
|
||||
" in zip(detections.class_id, detections.confidence)\n",
|
||||
"]\n",
|
||||
"\n",
|
||||
"annotated_image = image.copy()\n",
|
||||
"annotated_image = BOUNDING_BOX_ANNOTATOR.annotate(annotated_image, detections)\n",
|
||||
"annotated_image = LABEL_ANNOTATOR.annotate(annotated_image, detections, labels=labels)\n",
|
||||
"sv.plot_image(annotated_image, (10, 10))"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 807
|
||||
},
|
||||
"id": "no-BoxjTpJt1",
|
||||
"outputId": "30322755-e956-4093-e302-785258476849"
|
||||
},
|
||||
"execution_count": 16,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "display_data",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<Figure size 1000x1000 with 1 Axes>"
|
||||
],
|
||||
"image/png": "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 truncated
|
||||
},
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Video Processing"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "S-LLI26VvF7B"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"The [`get_video_frames_generator`](https://supervision.roboflow.com/latest/utils/video/#supervision.utils.video.get_video_frames_generator) enables us to easily iterate over video frames. Let's create a video generator for our sample input file and display its first frame on the screen."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "E0rhepjGv9oe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"generator = sv.get_video_frames_generator(SOURCE_VIDEO_PATH)\n",
|
||||
"frame = next(generator)\n",
|
||||
"\n",
|
||||
"sv.plot_image(frame, (10, 10))"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 472
|
||||
},
|
||||
"id": "J2Tm9lcGpLF1",
|
||||
"outputId": "94629d68-9266-474e-e311-cd311457816f"
|
||||
},
|
||||
"execution_count": 17,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "display_data",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<Figure size 1000x1000 with 1 Axes>"
|
||||
],
|
||||
"image/png": "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 truncated
|
||||
},
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"Let's update our list of classes. This time we are looking for `yellow filling`. The rest of the code performing detection, filtering and visualization remains unchanged."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "Su3lwi6D62sR"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"classes = [\"yellow filling\"]\n",
|
||||
"model.set_classes(classes)"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "bddF-z6WwAkD"
|
||||
},
|
||||
"execution_count": 23,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"results = model.infer(frame, confidence=0.002)\n",
|
||||
"detections = sv.Detections.from_inference(results).with_nms(threshold=0.1)"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "xQ0kV9huwmoM"
|
||||
},
|
||||
"execution_count": 38,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"annotated_image = frame.copy()\n",
|
||||
"annotated_image = BOUNDING_BOX_ANNOTATOR.annotate(annotated_image, detections)\n",
|
||||
"annotated_image = LABEL_ANNOTATOR.annotate(annotated_image, detections)\n",
|
||||
"sv.plot_image(annotated_image, (10, 10))"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 472
|
||||
},
|
||||
"id": "AfWCMuq5wsuY",
|
||||
"outputId": "2a1ede5e-8e19-4d65-90a7-4579f0115183"
|
||||
},
|
||||
"execution_count": 39,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "display_data",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<Figure size 1000x1000 with 1 Axes>"
|
||||
],
|
||||
"image/png": "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 truncated
|
||||
},
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Filtering Detectuions by Area"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "CwI09wuYCztj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"Our prompt allowed us to locate all filled holes, but we also accidentally marked the entire high-level element. To address this issue, we'll filter detections based on their relative area in relation to the entire video frame. If a detection occupies more than 10% of the frame's total area, it will be discarded."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "TVAulRgE-idz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"We can use [`VideoInfo.from_video_path`](https://supervision.roboflow.com/develop/utils/video/#supervision.utils.video.VideoInfo) to learn basic information about our video, such as duration, resolution, or FPS."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "OX4l0ofl_Pe4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"video_info = sv.VideoInfo.from_video_path(SOURCE_VIDEO_PATH)\n",
|
||||
"video_info"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "LV99lGQJ_JzT",
|
||||
"outputId": "0683435f-a3cb-418f-b1b9-f94d299192f3"
|
||||
},
|
||||
"execution_count": 40,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"VideoInfo(width=1280, height=720, fps=25, total_frames=442)"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 40
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"Knowing the frame's resolution allows us to easily calculate its total area, expressed in pixels."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "IGckLMVR_4kp"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"width, height = video_info.resolution_wh\n",
|
||||
"frame_area = width * height\n",
|
||||
"frame_area"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "8aJBl-Rc_xUP",
|
||||
"outputId": "c4b2798b-c5c6-429c-8886-02b4f7af3924"
|
||||
},
|
||||
"execution_count": 41,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"921600"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 41
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"On the other hand, by using [`sv.Detections.area`](https://supervision.roboflow.com/develop/detection/core/#supervision.detection.core.Detections.area) property, we can learn the area of each individual bounding box."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "Y_LO4ODXAntj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"results = model.infer(frame, confidence=0.002)\n",
|
||||
"detections = sv.Detections.from_inference(results).with_nms(threshold=0.1)\n",
|
||||
"detections.area"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "B9PQhXf__TNW",
|
||||
"outputId": "dc096dd6-a93d-4599-e6d8-9d475a54b999"
|
||||
},
|
||||
"execution_count": 45,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([ 7.5408e+05, 92844, 11255, 12969, 9875.9, 8007.7, 5433.5])"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 45
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"Now, we can combine these two pieces of information to construct a filtering condition for detections with an area greater than 10% of the entire frame."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "LAnsLumrBZNw"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"(detections.area / frame_area) < 0.10"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "lD9ONsS9BRov",
|
||||
"outputId": "100d1d15-eba3-47ed-823b-b8756e13c123"
|
||||
},
|
||||
"execution_count": 46,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([False, False, True, True, True, True, True])"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 46
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"detections = detections[(detections.area / frame_area) < 0.10]\n",
|
||||
"\n",
|
||||
"annotated_image = frame.copy()\n",
|
||||
"annotated_image = BOUNDING_BOX_ANNOTATOR.annotate(annotated_image, detections)\n",
|
||||
"annotated_image = LABEL_ANNOTATOR.annotate(annotated_image, detections)\n",
|
||||
"sv.plot_image(annotated_image, (10, 10))"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 472
|
||||
},
|
||||
"id": "XzE7wjwE_bOR",
|
||||
"outputId": "5df62911-a001-46a4-a16c-8cdab7608e2e"
|
||||
},
|
||||
"execution_count": 47,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "display_data",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<Figure size 1000x1000 with 1 Axes>"
|
||||
],
|
||||
"image/png": "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 truncated
|
||||
},
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Final Result"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "7SjPoFnLC9aI"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"Finally, we are ready to process our entire video. Now in truth we can appreciate the speed of YOLO-World."
|
||||
],
|
||||
"metadata": {
|
||||
"id": "WxwNMXGECodq"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"TARGET_VIDEO_PATH = f\"{HOME}/yellow-filling-output.mp4\""
|
||||
],
|
||||
"metadata": {
|
||||
"id": "p0aooVpaCSH3"
|
||||
},
|
||||
"execution_count": 49,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"frame_generator = sv.get_video_frames_generator(SOURCE_VIDEO_PATH)\n",
|
||||
"video_info = sv.VideoInfo.from_video_path(SOURCE_VIDEO_PATH)\n",
|
||||
"\n",
|
||||
"width, height = video_info.resolution_wh\n",
|
||||
"frame_area = width * height\n",
|
||||
"frame_area\n",
|
||||
"\n",
|
||||
"with sv.VideoSink(target_path=TARGET_VIDEO_PATH, video_info=video_info) as sink:\n",
|
||||
" for frame in tqdm(frame_generator, total=video_info.total_frames):\n",
|
||||
" results = model.infer(frame, confidence=0.002)\n",
|
||||
" detections = sv.Detections.from_inference(results).with_nms(threshold=0.1)\n",
|
||||
" detections = detections[(detections.area / frame_area) < 0.10]\n",
|
||||
"\n",
|
||||
" annotated_frame = frame.copy()\n",
|
||||
" annotated_frame = BOUNDING_BOX_ANNOTATOR.annotate(annotated_frame, detections)\n",
|
||||
" annotated_frame = LABEL_ANNOTATOR.annotate(annotated_frame, detections)\n",
|
||||
" sink.write_frame(annotated_frame)"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "A8TzekpEwtTO",
|
||||
"outputId": "cf71b8e7-00af-4b7b-c912-9157ced6b6c4"
|
||||
},
|
||||
"execution_count": 50,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stderr",
|
||||
"text": [
|
||||
"100%|██████████| 442/442 [00:31<00:00, 13.90it/s]\n"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
" Keep in mind that the video preview below works only in the web version of the cookbooks and not in Google Colab.\n",
|
||||
"\n",
|
||||
"<video controls>\n",
|
||||
" <source\n",
|
||||
" src=\"https://storage.googleapis.com/com-roboflow-marketing/supervision/cookbooks/yellow-filling-output-1280x720.mp4\"\n",
|
||||
" type=\"video/mp4\"\n",
|
||||
" >\n",
|
||||
"</video>"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "vMp9mSj1DGJ9"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Vendored
+1
@@ -13,6 +13,7 @@
|
||||
<div class="custom-grid">
|
||||
<p class="card repo-card" data-url="/develop/notebooks/quickstart" data-name="Supervision Quickstart" data-labels="ANNOTATOR,DETECTION,SAM" data-version="v0.18.0" data-author="SkalskiP,onuralpszr"></p>
|
||||
<p class="card repo-card" data-url="/develop/notebooks/count-objects-crossing-the-line" data-name="Count Objects Crossing the Line" data-labels="ANNOTATORS,LINE ZONE,TRACKING" data-version="v0.18.0" data-author="SkalskiP"></p>
|
||||
<p class="card repo-card" data-url="/develop/notebooks/zero-shot-object-detection-with-yolo-world" data-name="Zero-Shot Object Detection with YOLO-World" data-labels="ANNOTATORS,DETECTION,INFERENCE" data-version="v0.19.0" data-author="SkalskiP"></p>
|
||||
<p class="card repo-card" data-url="/develop/notebooks/download-supervision-assets" data-name="Downloading Supervision Assets" data-labels="ASSETS" data-version="v0.18.0" data-author="nickherrig"></p>
|
||||
<p class="card repo-card" data-url="/develop/notebooks/annotate-video-with-detections" data-name="Annotate Video with Detections" data-labels="INFERENCE,YOLOV8" data-version="v0.18.0" data-author="nickherrig"></p>
|
||||
<p class="card repo-card" data-url="/develop/notebooks/object-tracking" data-name="Object Tracking" data-labels="TRACKING, ANNOTATOR" data-version="v0.18.0" data-author="nickherrig"></p>
|
||||
|
||||
Reference in new issue
Block a user