{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "1682fb28-95ae-4966-834c-84304531006f", "metadata": {}, "source": [ "# Visual-language assistant with Video-LLaVA and OpenVINO\n", "\n", "Video-LLaVA (Learning United Visual Representation by Alignment Before Projection, [paper](https://arxiv.org/pdf/2311.10122.pdf)) is a Large Vision-Language Model (LVLM) that breaks new ground by understanding both images and videos through a single, unified visual representation. While LLaVA excels at image-based tasks, Video-LLaVA expands this fluency to the dynamic world of videos, enabling seamless comprehension and reasoning across both visual domains. This means it can answer questions, generate text, and perform other tasks with equal ease, regardless of whether it's presented with a still image or a moving scene.\n", "\n", "In this tutorial we consider how to use Video-LLaVA model to build multimodal chatbot. For demonstration purposes we will use [Video-LLaVA-7B](https://huggingface.co/LanguageBind/Video-LLaVA-7B) model for conversion.\n", "\n", "The tutorial consists from following steps:\n", "\n", "- Install prerequisites\n", "- Prepare input processor and tokenizer\n", "- Download original model\n", "- Compress model weights to 4 and 8 bits using NNCF\n", "- Convert model to OpenVINO Intermediate Representation (IR) format\n", "- Prepare OpenVINO-based inference pipeline\n", "- Run OpenVINO model\n", "\n", "\n", "#### Table of contents:\n", "\n", "- [About model](#About-model)\n", "- [Prerequisites](#Prerequisites)\n", "- [Build model and convert it to OpenVINO IR format](#Build-model-and-convert-it-to-OpenVINO-IR-format)\n", " - [Prepare helpers for model conversion](#Prepare-helpers-for-model-conversion)\n", " - [Convert and Optimize Model](#Convert-and-Optimize-Model)\n", " - [Instantiate PyTorch model $\\Uparrow$(#Table-of-content:)](#Instantiate-PyTorch-model-\\Uparrow(#Table-of-content:))\n", " - [Compress Model weights to 4 and 8 bits using NNCF $\\Uparrow$(#Table-of-content:)](#Compress-Model-weights-to-4-and-8-bits-using-NNCF-\\Uparrow(#Table-of-content:))\n", " - [Convert model to OpenVINO IR format $\\Uparrow$(#Table-of-content:)](#Convert-model-to-OpenVINO-IR-format-\\Uparrow(#Table-of-content:))\n", "- [Prepare OpenVINO based inference pipeline](#Prepare-OpenVINO-based-inference-pipeline)\n", "- [Run model inference](#Run-model-inference)\n", " - [Select inference device](#Select-inference-device)\n", " - [Load OpenVINO model](#Load-OpenVINO-model)\n", " - [Prepare input data](#Prepare-input-data)\n", " - [Test model inference](#Test-model-inference)\n", "- [Interactive demo](#Interactive-demo)\n", "\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "b802ee93-aae9-45e8-839b-eb0beeb5f15b", "metadata": {}, "source": [ "## About model\n", "[back to top ⬆️](#Table-of-contents:)\n", "\n", "Video-LLaVA connects pre-trained [CLIP ViT-L/14](https://openai.com/research/clip) visual encoders and large language model using a simple projection matrix\n", "\n", "![](https://github.com/itrushkin/openvino_notebooks/assets/76161256/193f6bc4-b3c5-4508-8fe5-c5e5036aab12)\n", "\n", "\n", "\n", "More details about model can be found in original [paper](https://arxiv.org/pdf/2311.10122.pdf) and [repo](https://github.com/PKU-YuanGroup/Video-LLaVA)." ] }, { "attachments": {}, "cell_type": "markdown", "id": "5ae5da98-0d3d-424b-afe2-0907fdb849da", "metadata": {}, "source": [ "## Prerequisites\n", "[back to top ⬆️](#Table-of-contents:)\n", "\n", "Install required dependencies" ] }, { "cell_type": "code", "execution_count": 1, "id": "1917249a-e452-46c5-ba03-8c417e7bace4", "metadata": { "ExecuteTime": { "end_time": "2023-11-03T14:15:21.466964700Z", "start_time": "2023-11-03T14:15:21.231032100Z" } }, "outputs": [], "source": [ "%pip install -q torch \"torchvision<0.17.0\" \"transformers>=4.31.0,<4.35.0\" \"pytorchvideo\" \"einops\" \"peft==0.6.2\" --extra-index-url https://download.pytorch.org/whl/cpu\n", "%pip install -q opencv_python decord sentencepiece protobuf \"openvino>=2023.2.0\" \"nncf>=2.7.0\" \"gradio>=4.19\"" ] }, { "cell_type": "code", "execution_count": 2, "id": "5b8128a3-bc08-43de-804c-7242c5fda869", "metadata": { "ExecuteTime": { "end_time": "2023-11-03T14:15:21.466964700Z", "start_time": "2023-11-03T14:15:21.231032100Z" } }, "outputs": [], "source": [ "from pathlib import Path\n", "import sys\n", "\n", "repo_dir = Path(\"Video-LLaVA\")\n", "\n", "if not repo_dir.exists():\n", " !git clone https://github.com/PKU-YuanGroup/Video-LLaVA.git\n", "\n", "sys.path.insert(0, str(repo_dir.resolve()))" ] }, { "attachments": {}, "cell_type": "markdown", "id": "460904f4-c902-40b7-8b4c-244d86d0a670", "metadata": {}, "source": [ "
\n", "Warning: this tutorial requires the ffmpeg package. To install it for your system, visit the official FFmpeg download page.\n", "
" ] }, { "cell_type": "code", "execution_count": 3, "id": "d1e7b52f-bcfd-4180-82cf-6beb125bdb5c", "metadata": { "ExecuteTime": { "end_time": "2023-11-03T14:15:25.083172Z", "start_time": "2023-11-03T14:15:21.231032100Z" }, "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/itrushkin/.virtualenvs/videollava/lib/python3.10/site-packages/torch/cuda/__init__.py:611: UserWarning: Can't initialize NVML\n", " warnings.warn(\"Can't initialize NVML\")\n", "/home/itrushkin/.virtualenvs/videollava/lib/python3.10/site-packages/torch/cuda/__init__.py:740: UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount(). Did you run some cuda functions before calling NumCudaDevices() that might have already set an error? Error 804: forward compatibility was attempted on non supported HW (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.)\n", " return torch._C._cuda_getDeviceCount() if nvml_count < 0 else nvml_count\n", "/home/itrushkin/.virtualenvs/videollava/lib/python3.10/site-packages/bitsandbytes/cextension.py:34: UserWarning: The installed version of bitsandbytes was compiled without GPU support. 8-bit optimizers, 8-bit multiplication, and GPU quantization are unavailable.\n", " warn(\"The installed version of bitsandbytes was compiled without GPU support. \"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "/home/itrushkin/.virtualenvs/videollava/lib/python3.10/site-packages/bitsandbytes/libbitsandbytes_cpu.so: undefined symbol: cadam32bit_grad_fp32\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/itrushkin/.virtualenvs/videollava/lib/python3.10/site-packages/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension: /home/itrushkin/.virtualenvs/videollava/lib/python3.10/site-packages/torchvision/image.so: undefined symbol: _ZN3c104cuda20CUDACachingAllocator12recordStreamERKNS_7DataPtrENS0_10CUDAStreamE\n", " warn(f\"Failed to load image Python extension: {e}\")\n", "/home/itrushkin/.virtualenvs/videollava/lib/python3.10/site-packages/torchvision/transforms/_functional_video.py:6: UserWarning: The 'torchvision.transforms._functional_video' module is deprecated since 0.12 and will be removed in 0.14. Please use the 'torchvision.transforms.functional' module instead.\n", " warnings.warn(\n", "/home/itrushkin/.virtualenvs/videollava/lib/python3.10/site-packages/torchvision/transforms/_transforms_video.py:25: UserWarning: The 'torchvision.transforms._transforms_video' module is deprecated since 0.12 and will be removed in 0.14. Please use the 'torchvision.transforms' module instead.\n", " warnings.warn(\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "554596cb371042ebb9df938d5ab6f1b7", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Loading checkpoint shards: 0%| | 0/2 [00:00**Note**: There is no speedup for INT4 compressed models on dGPU.\n", "\n", "#### Convert model to OpenVINO IR format [$\\Uparrow$](#Table-of-content:)\n", "[back to top ⬆️](#Table-of-contents:)\n", "\n", "Convert model to OpenVINO format using conversion helper function defined above.\n", "\n", "Please select below whether you would like to run INT4 weight compression instead of INT8 weight compression." ] }, { "cell_type": "code", "execution_count": 5, "id": "aca80991", "metadata": { "ExecuteTime": { "end_time": "2023-11-03T14:37:00.167129100Z", "start_time": "2023-11-03T14:37:00.141353600Z" }, "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a994439f981b4d78a0e6b9123d3994d1", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Dropdown(description='Compression mode:', options=('INT4', 'INT8'), value='INT4')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import ipywidgets as widgets\n", "\n", "compression_mode = widgets.Dropdown(\n", " options=[\"INT4\", \"INT8\"],\n", " value=\"INT4\",\n", " description=\"Compression mode:\",\n", " disabled=False,\n", ")\n", "\n", "compression_mode" ] }, { "cell_type": "code", "execution_count": 6, "id": "001bab2b-b36b-4e95-b454-593dd71fb596", "metadata": { "ExecuteTime": { "end_time": "2023-11-03T14:44:15.693843800Z", "start_time": "2023-11-03T14:37:01.826679700Z" }, "scrolled": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "dce4b5bb4dcf4bb7898c269384fdf8b4", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Loading checkpoint shards: 0%| | 0/2 [00:00\n" ], "text/plain": [] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:nncf:Statistics of the bitwidth distribution:\n", "+--------------+-----------------+--------------------+\n", "| Num bits (N) | % all weight | % internal weights |\n", "+==============+=================+====================+\n", "| 8 | 22% (58 / 225) | 20% (56 / 223) |\n", "+--------------+-----------------+--------------------+\n", "| 4 | 78% (167 / 225) | 80% (167 / 223) |\n", "+--------------+-----------------+--------------------+\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3cc1be2cf3e746d5bb9fe24d533eed19", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Applying weight compression to second stage Video-LLaVA model\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "85211010a53343a098445c97ea953848", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:nncf:Statistics of the bitwidth distribution:\n", "+--------------+-----------------+--------------------+\n", "| Num bits (N) | % all weight | % internal weights |\n", "+==============+=================+====================+\n", "| 8 | 23% (58 / 226) | 20% (56 / 224) |\n", "+--------------+-----------------+--------------------+\n", "| 4 | 77% (168 / 226) | 80% (168 / 224) |\n", "+--------------+-----------------+--------------------+\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "066d12b12fba4b8c928cd40cb051a397", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Video-LLaVA model successfully converted\n" ] } ], "source": [ "if compression_mode.value == \"INT4\":\n", " compressed_model_dir = Path(\"videollava/INT4_compressed_weights\")\n", " videollava_wc_parameters = dict(mode=nncf.CompressWeightsMode.INT4_ASYM, group_size=128, ratio=0.8)\n", "else:\n", " compressed_model_dir = Path(\"videollava/INT8_compressed_weights\")\n", " videollava_wc_parameters = dict(mode=nncf.CompressWeightsMode.INT8)\n", "\n", "if not compressed_model_dir.exists():\n", " compressed_model_dir.mkdir(exist_ok=True, parents=True)\n", " model = LlavaLlamaForCausalLM.from_pretrained(model_id)\n", " model.resize_token_embeddings(len(tokenizer))\n", "\n", " if hasattr(config, \"max_sequence_length\"):\n", " context_len = config.max_sequence_length\n", " else:\n", " context_len = 2048\n", " image_tower = model.get_image_tower()\n", " if not image_tower.is_loaded:\n", " image_tower.load_model()\n", " video_tower = model.get_video_tower()\n", " if not video_tower.is_loaded:\n", " video_tower.load_model()\n", "\n", " model.eval()\n", " with torch.no_grad():\n", " convert_videollava(\n", " model,\n", " compressed_model_dir,\n", " videollava_wc_parameters=videollava_wc_parameters,\n", " )\n", " del model\n", " gc.collect();" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a1675134-3f4a-46c9-9e21-f162c155ebf5", "metadata": {}, "source": [ "## Prepare OpenVINO based inference pipeline\n", "[back to top ⬆️](#Table-of-contents:)\n", "\n", "`OVLlavaLlamaForCausalLM` class provides ease-to-use interface for using model in generation scenario. It is based on `transformers.generation.GenerationMixin` that gives us opportunity to reuse all reach capabilities for generation implemented in HuggingFace Transformers library. More details about this interface can be found in [HuggingFace documentation](https://huggingface.co/docs/transformers/main_classes/text_generation).\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "99c35e39-2748-4500-b3c9-e793c36a8d0b", "metadata": { "ExecuteTime": { "end_time": "2023-11-03T14:29:15.077528700Z", "start_time": "2023-11-03T14:29:15.033990300Z" } }, "outputs": [], "source": [ "from transformers.generation import GenerationConfig, GenerationMixin\n", "from transformers.modeling_outputs import CausalLMOutputWithPast\n", "import numpy as np\n", "import torch\n", "\n", "\n", "class OVLlavaLlamaForCausalLM(GenerationMixin):\n", " def __init__(self, core, model_dir, device):\n", " self.model = core.read_model(model_dir / \"videollava_with_past.xml\")\n", " self.model_input_embed = core.compile_model(model_dir / \"videollava_input_embed.xml\", device)\n", " self.input_names = {key.get_any_name(): idx for idx, key in enumerate(self.model.inputs)}\n", " self.output_names = {key.get_any_name(): idx for idx, key in enumerate(self.model.outputs)}\n", " self.key_value_input_names = [key for key in self.input_names if \"key_values\" in key]\n", " self.key_value_output_names = [key for key in self.output_names if \"present\" in key]\n", " compiled_model = core.compile_model(self.model, device)\n", " self.request = compiled_model.create_infer_request()\n", " self.config = transformers.AutoConfig.from_pretrained(model_dir)\n", " self.generation_config = GenerationConfig.from_model_config(config)\n", " self.main_input_name = \"input_ids\"\n", " self.device = torch.device(\"cpu\")\n", " self.num_pkv = 2\n", "\n", " def can_generate(self):\n", " \"\"\"Returns True to validate the check that the model using `GenerationMixin.generate()` can indeed generate.\"\"\"\n", " return True\n", "\n", " def __call__(\n", " self,\n", " input_ids: torch.LongTensor,\n", " images: torch.Tensor,\n", " attention_mask: Optional[torch.LongTensor] = None,\n", " prefix_mask: Optional[torch.LongTensor] = None,\n", " past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None,\n", " **kwargs,\n", " ) -> CausalLMOutputWithPast:\n", " return self.forward(input_ids, images, attention_mask, prefix_mask, past_key_values)\n", "\n", " def forward(\n", " self,\n", " input_ids: torch.LongTensor,\n", " images: torch.Tensor,\n", " attention_mask: Optional[torch.LongTensor] = None,\n", " prefix_mask: Optional[torch.LongTensor] = None,\n", " past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None,\n", " **kwargs,\n", " ) -> CausalLMOutputWithPast:\n", " \"\"\"General inference method\"\"\"\n", " inputs = {}\n", " if past_key_values is not None:\n", " # Flatten the past_key_values\n", " attention_mask = torch.ones(\n", " (input_ids.shape[0], past_key_values[-1][-1].shape[-2] + 1),\n", " dtype=input_ids.dtype,\n", " )\n", " past_key_values = (past_key_value for pkv_per_layer in past_key_values for past_key_value in pkv_per_layer)\n", " # Add the past_key_values to the decoder inputs\n", " inputs = dict(zip(self.key_value_input_names, past_key_values))\n", "\n", " else:\n", " return self.forward_with_image(input_ids, images, attention_mask)\n", " inputs[\"input_ids\"] = np.array(input_ids)\n", "\n", " if \"attention_mask\" in self.input_names:\n", " inputs[\"attention_mask\"] = np.array(attention_mask)\n", "\n", " # Run inference\n", " self.request.start_async(inputs, share_inputs=True)\n", " self.request.wait()\n", "\n", " logits = torch.from_numpy(self.request.get_tensor(\"logits\").data)\n", "\n", " # Tuple of length equal to : number of layer * number of past_key_value per decoder layer (2 corresponds to the self-attention layer)\n", " past_key_values = tuple(self.request.get_tensor(key).data for key in self.key_value_output_names)\n", " # Tuple of tuple of length `n_layers`, with each tuple of length equal to 2 (k/v of self-attention)\n", "\n", " past_key_values = tuple(past_key_values[i : i + self.num_pkv] for i in range(0, len(past_key_values), self.num_pkv))\n", " return CausalLMOutputWithPast(logits=logits, past_key_values=past_key_values)\n", "\n", " def forward_with_image(self, input_ids, images, attention_mask):\n", " \"\"\"First step inference method, that resolves multimodal data\"\"\"\n", " _, _, attention_mask, _, input_embeds, _ = preprocess_fn(\n", " input_ids=input_ids,\n", " position_ids=None,\n", " attention_mask=attention_mask,\n", " past_key_values=None,\n", " labels=None,\n", " images=images,\n", " )\n", " outs = self.model_input_embed({\"inputs_embeds\": input_embeds, \"attention_mask\": attention_mask})\n", " logits = outs[0]\n", " pkv = list(outs.values())[1:]\n", " pkv = tuple(pkv[i : i + self.num_pkv] for i in range(0, len(pkv), self.num_pkv))\n", " return CausalLMOutputWithPast(logits=torch.from_numpy(logits), past_key_values=pkv)\n", "\n", " def prepare_inputs_for_generation(self, input_ids, past_key_values=None, **kwargs):\n", " \"\"\"\n", " This function is used during running GenerationMixin.generate for preparing model specific inputs for\n", " each generation step\n", " \"\"\"\n", " past_len = 0\n", " if past_key_values is not None:\n", " input_ids = input_ids[:, -1].unsqueeze(-1)\n", " past_len = past_key_values[-1][-1].shape[-2]\n", " attention_mask = kwargs.get(\n", " \"attention_mask\",\n", " torch.ones(input_ids.shape[0], input_ids.shape[1] + past_len),\n", " )\n", " if not kwargs.get(\"use_cache\", True):\n", " raise NotImplementedError(\"MPT with prefix_lm=True does not support use_cache=False.\")\n", " else:\n", " prefix_mask = None\n", " return {\n", " \"input_ids\": input_ids,\n", " \"attention_mask\": attention_mask,\n", " \"prefix_mask\": prefix_mask,\n", " \"past_key_values\": past_key_values,\n", " \"images\": kwargs.get(\"images\", None),\n", " }\n", "\n", " def _reorder_cache(self, past_key_values: Tuple[Tuple[torch.Tensor]], beam_idx: torch.Tensor) -> Tuple[Tuple[torch.Tensor]]:\n", " \"\"\"\n", " This function is used to re-order the `past_key_values` cache if [`~PreTrainedModel.beam_search`] or\n", " [`~PreTrainedModel.beam_sample`] is called.\n", " This is required to match `past_key_values` with the correct beam_idx at every generation step.\n", " \"\"\"\n", "\n", " # from transformers.models.gpt2.modeling_gpt2.GPT2LMHeadModel._reorder_cache\n", " return tuple(tuple(np.take(past_state, beam_idx, 0) for past_state in layer_past) for layer_past in past_key_values)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "0a55e773-4a15-4497-afbe-b56fa22f7ee3", "metadata": {}, "source": [ "## Run model inference\n", "[back to top ⬆️](#Table-of-contents:)\n", "\n", "Now, when we have model and defined generation pipeline, we can run model inference.\n", "\n", "### Select inference device\n", "[back to top ⬆️](#Table-of-contents:)\n", "\n", "Select device from dropdown list for running inference using OpenVINO.\n", "\n", ">**Note**: There is no speedup for INT4 compressed models on dGPU." ] }, { "cell_type": "code", "execution_count": 8, "id": "c8497081-24e6-49b8-83d9-f4aced2d690a", "metadata": { "ExecuteTime": { "end_time": "2023-11-03T14:29:15.379698600Z", "start_time": "2023-11-03T14:29:15.373212200Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "37d4c7744020409bbc9fb97c85a47bdd", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Dropdown(description='Device:', index=1, options=('CPU', 'AUTO'), value='AUTO')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import ipywidgets as widgets\n", "\n", "core = ov.Core()\n", "\n", "device = widgets.Dropdown(\n", " options=core.available_devices + [\"AUTO\"],\n", " value=\"AUTO\",\n", " description=\"Device:\",\n", " disabled=False,\n", ")\n", "\n", "device" ] }, { "attachments": {}, "cell_type": "markdown", "id": "75301dbc-d10a-413d-89f3-3a2ed065bf96", "metadata": {}, "source": [ "### Load OpenVINO model\n", "[back to top ⬆️](#Table-of-contents:)\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "10e5dcb5-ae8a-4ae6-95ca-8bb2ad976a32", "metadata": { "ExecuteTime": { "end_time": "2023-11-03T14:29:16.852049700Z", "start_time": "2023-11-03T14:29:15.382225100Z" } }, "outputs": [], "source": [ "ov_model = OVLlavaLlamaForCausalLM(core, compressed_model_dir, device.value)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "035e62ea-ea37-43b1-b47b-63a12ff4ca51", "metadata": {}, "source": [ "### Prepare input data\n", "[back to top ⬆️](#Table-of-contents:)\n", "\n", "For preparing input data, we will use tokenizer and image processor defined in the begging of our tutorial. For alignment with original PyTorch implementation we will use PyTorch tensors as input." ] }, { "cell_type": "code", "execution_count": 10, "id": "36a31244-384e-4ee9-8d60-6fdd281eb7e0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Question: Are the instruments in the pictures used in the video?\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import display, Video, Image\n", "\n", "\n", "examples_dir = Path(\"Video-LLaVA/videollava/serve/examples\")\n", "video_file = examples_dir / \"sample_demo_22.mp4\"\n", "image_file = examples_dir / \"sample_img_22.png\"\n", "\n", "\n", "video_tensor = video_processor.preprocess(str(video_file), return_tensors=\"pt\")[\"pixel_values\"][0]\n", "image_tensor = image_processor.preprocess(str(image_file), return_tensors=\"pt\")[\"pixel_values\"][0]\n", "images_tensor = [video_tensor, image_tensor]\n", "\n", "text_message = \"Are the instruments in the pictures used in the video?\"\n", "print(f\"Question: {text_message}\")\n", "display(Video(video_file, embed=True))\n", "Image(image_file, embed=True)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "2030c809-e74c-45ad-bd5e-3f4177213a22", "metadata": {}, "source": [ "### Test model inference\n", "[back to top ⬆️](#Table-of-contents:)\n", "\n", "Generation process for long response maybe time consuming, for accessing partial result as soon as it is generated without waiting when whole process finished, Streaming API can be used. Token streaming is the mode in which the generative system returns the tokens one by one as the model generates them. This enables showing progressive generations to the user rather than waiting for the whole generation. Streaming is an essential aspect of the end-user experience as it reduces latency, one of the most critical aspects of a smooth experience. You can find more details about how streaming work in [HuggingFace documentation](https://huggingface.co/docs/text-generation-inference/conceptual/streaming).\n", "\n", "Also for simplification of preparing input in conversational mode, we will use Conversation Template helper provided by model authors for accumulating history of provided messages and images." ] }, { "cell_type": "code", "execution_count": 11, "id": "b990ec8a-e69a-4b2f-a3b0-e8d4acd27af1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Answer:\n", "['video', 'image']\n", "Yes, the instruments in the pictures are used in the video. The man is playing a drum set, which includes a bass drum, snare drum, and cymbals. The cymbals are used to produce different sounds, such as crashes and hi-hats. The man is also seen playing a guitar, which is another instrument used in the video.\n" ] } ], "source": [ "from videollava.mm_utils import tokenizer_image_token, KeywordsStoppingCriteria\n", "from videollava.constants import IMAGE_TOKEN_INDEX\n", "from transformers import TextStreamer\n", "from videollava.conversation import conv_templates, SeparatorStyle\n", "\n", "# Prepare\n", "streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)\n", "conv_mode = \"llava_v1\"\n", "\n", "conv = conv_templates[conv_mode].copy()\n", "roles = (\"user\", \"assistant\")\n", "\n", "if mm_use_im_start_end:\n", " inp = DEFAULT_VIDEO_START_TOKEN + DEFAULT_IMAGE_TOKEN * 8 + DEFAULT_VIDEO_END_TOKEN + \"\\n\" + text_message\n", "else:\n", " inp = DEFAULT_IMAGE_TOKEN * 8 + \"\\n\" + text_message\n", "conv.append_message(conv.roles[0], inp)\n", "conv.append_message(conv.roles[1], None)\n", "\n", "prompt = conv.get_prompt()\n", "input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors=\"pt\").unsqueeze(0)\n", "\n", "\n", "stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2\n", "keywords = [stop_str]\n", "stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids)\n", "streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)\n", "print(\"Answer:\")\n", "\n", "output_ids = ov_model.generate(\n", " input_ids,\n", " images=images_tensor,\n", " do_sample=True,\n", " temperature=0.2,\n", " max_new_tokens=1024,\n", " streamer=streamer,\n", " use_cache=True,\n", " stopping_criteria=[stopping_criteria],\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "bcdd3765-868b-4697-861c-34affc929016", "metadata": {}, "source": [ "## Interactive demo\n", "[back to top ⬆️](#Table-of-contents:)\n" ] }, { "cell_type": "code", "execution_count": 12, "id": "f1ce960e-8b89-44ab-a600-19d836f5dc3e", "metadata": {}, "outputs": [], "source": [ "import torch\n", "import gradio as gr\n", "\n", "from videollava.constants import DEFAULT_IMAGE_TOKEN, IMAGE_TOKEN_INDEX\n", "from videollava.conversation import conv_templates, SeparatorStyle\n", "\n", "\n", "def generate(image, video, textbox_in):\n", " if video is not None:\n", " textbox_in = DEFAULT_IMAGE_TOKEN * 8 + \"\\n\" + textbox_in\n", " if image is not None:\n", " textbox_in += \"\\n\" + DEFAULT_IMAGE_TOKEN\n", " elif image is not None:\n", " textbox_in = DEFAULT_IMAGE_TOKEN + \"\\n\" + textbox_in\n", "\n", " conv_mode = \"llava_v1\"\n", " conv = conv_templates[conv_mode].copy()\n", " conv.append_message(conv.roles[0], textbox_in)\n", " conv.append_message(conv.roles[1], None)\n", " prompt = conv.get_prompt()\n", " images_tensor = []\n", " if image is not None:\n", " images_tensor.append(image_processor(image, return_tensors=\"pt\")[\"pixel_values\"][0])\n", " if video is not None:\n", " images_tensor.append(video_processor(video, return_tensors=\"pt\")[\"pixel_values\"][0])\n", " input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors=\"pt\").unsqueeze(0)\n", "\n", " stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2\n", " keywords = [stop_str]\n", " stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids)\n", "\n", " generate_kwargs = dict(\n", " input_ids=input_ids,\n", " images=images_tensor,\n", " max_new_tokens=1024,\n", " temperature=0.2,\n", " do_sample=True,\n", " use_cache=True,\n", " stopping_criteria=[stopping_criteria],\n", " )\n", "\n", " output_ids = ov_model.generate(**generate_kwargs)\n", "\n", " input_token_len = input_ids.shape[1]\n", " outputs = tokenizer.batch_decode(output_ids[:, input_token_len:], skip_special_tokens=True)[0]\n", " outputs = outputs.strip()\n", " if outputs.endswith(stop_str):\n", " outputs = outputs[: -len(stop_str)]\n", " outputs = outputs.strip()\n", "\n", " return outputs\n", "\n", "\n", "demo = gr.Interface(\n", " generate,\n", " [\n", " gr.Image(label=\"Input Image\", type=\"filepath\"),\n", " gr.Video(label=\"Input Video\"),\n", " gr.Textbox(label=\"Question\"),\n", " ],\n", " gr.Textbox(lines=10),\n", " examples=[\n", " [\n", " f\"{examples_dir}/extreme_ironing.jpg\",\n", " None,\n", " \"What is unusual about this image?\",\n", " ],\n", " [\n", " f\"{examples_dir}/waterview.jpg\",\n", " None,\n", " \"What are the things I should be cautious about when I visit here?\",\n", " ],\n", " [\n", " f\"{examples_dir}/desert.jpg\",\n", " None,\n", " \"If there are factual errors in the questions, point it out; if not, proceed answering the question. What’s happening in the desert?\",\n", " ],\n", " [\n", " None,\n", " f\"{examples_dir}/sample_demo_1.mp4\",\n", " \"Why is this video funny?\",\n", " ],\n", " [\n", " None,\n", " f\"{examples_dir}/sample_demo_3.mp4\",\n", " \"Can you identify any safety hazards in this video?\",\n", " ],\n", " [\n", " None,\n", " f\"{examples_dir}/sample_demo_9.mp4\",\n", " \"Describe the video.\",\n", " ],\n", " [\n", " None,\n", " f\"{examples_dir}/sample_demo_22.mp4\",\n", " \"Describe the activity in the video.\",\n", " ],\n", " [\n", " f\"{examples_dir}/sample_img_22.png\",\n", " f\"{examples_dir}/sample_demo_22.mp4\",\n", " \"Are the instruments in the pictures used in the video?\",\n", " ],\n", " [\n", " f\"{examples_dir}/sample_img_13.png\",\n", " f\"{examples_dir}/sample_demo_13.mp4\",\n", " \"Does the flag in the image appear in the video?\",\n", " ],\n", " [\n", " f\"{examples_dir}/sample_img_8.png\",\n", " f\"{examples_dir}/sample_demo_8.mp4\",\n", " \"Are the image and the video depicting the same place?\",\n", " ],\n", " ],\n", " title=\"Video-LLaVA🚀\",\n", " allow_flagging=\"never\",\n", ")\n", "try:\n", " demo.queue().launch(debug=True)\n", "except Exception:\n", " demo.queue().launch(share=True, debug=True)\n", "# if you are launching remotely, specify server_name and server_port\n", "# demo.launch(server_name='your server name', server_port='server port in int')\n", "# Read more in the docs: https://gradio.app/docs/" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" }, "openvino_notebooks": { "imageUrl": "https://camo.githubusercontent.com/ef232f43135222dc7cfc6e27ae26ac64edf6918512a8a4f78077e4f86c27883c/68747470733a2f2f7a312e617831782e636f6d2f323032332f31312f30372f70696c347371482e706e67", "tags": { "categories": [ "Model Demos", "AI Trends" ], "libraries": [], "other": [], "tasks": [ "Visual Question Answering", "Video-to-Text", "Text Generation" ] } }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }