{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "toCy3v03Dwx7" }, "source": [ "##### Copyright 2021 The TensorFlow Hub Authors.\n", "\n", "Licensed under the Apache License, Version 2.0 (the \"License\");" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:00:44.441823Z", "iopub.status.busy": "2022-12-14T22:00:44.441604Z", "iopub.status.idle": "2022-12-14T22:00:44.445520Z", "shell.execute_reply": "2022-12-14T22:00:44.444952Z" }, "id": "QKe-ubNcDvgv" }, "outputs": [], "source": [ "# Copyright 2021 The TensorFlow Hub Authors. All Rights Reserved.\n", "#\n", "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", "# you may not use this file except in compliance with the License.\n", "# You may obtain a copy of the License at\n", "#\n", "# http://www.apache.org/licenses/LICENSE-2.0\n", "#\n", "# Unless required by applicable law or agreed to in writing, software\n", "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "# See the License for the specific language governing permissions and\n", "# limitations under the License.\n", "# ==============================================================================" ] }, { "cell_type": "markdown", "metadata": { "id": "qFdPvlXBOdUN" }, "source": [ "# 用于流式动作识别的 MoViNet" ] }, { "cell_type": "markdown", "metadata": { "id": "MfBg1C5NB3X0" }, "source": [ "\n", " \n", " \n", " \n", " \n", " \n", "
在 TensorFlow.org 上查看\n", "在 Google Colab 中运行 在 GitHub 上查看源代码 下载笔记本 查看 TF Hub 模型 \n", "
" ] }, { "cell_type": "markdown", "metadata": { "id": "-vxk2Kbc_KSP" }, "source": [ "本教程运行预训练的视频分类模型来对给定视频中的活动(例如跳舞、游泳、骑自行车等)进行分类。\n", "\n", "本教程中使用的模型架构称为 [MoViNet](https://arxiv.org/pdf/2103.11511.pdf)(移动视频网络)。MoVieNet 是一系列在庞大数据集 ([Kinetics 600](https://deepmind.com/research/open-source/kinetics)) 上训练的高效视频分类模型。\n", "\n", "与 TF Hub 上提供的 [i3d 模型](https://tfhub.dev/s?q=i3d-kinetics)相比,MoViNet 还支持流式视频的逐帧推断。\n", "\n", "预训练模型可从 [TF Hub](https://tfhub.dev/google/collections/movinet/1) 获得。TF Hub 集合还包括为 [TFLite](https://tensorflow.org/lite) 优化的量化模型。\n", "\n", "这些模型的源代码可在 [TensorFlow Model Garden](https://github.com/tensorflow/models/tree/master/official/projects/movinet) 中找到。包括[本教程的较长版本](https://colab.sandbox.google.com/github/tensorflow/models/blob/master/official/projects/movinet/movinet_tutorial.ipynb),较长版本还介绍了如何构建和微调 MoViNet 模型。\n" ] }, { "cell_type": "markdown", "metadata": { "id": "3E96e1UKQ8uR" }, "source": [ "![jumping jacks plot](https://storage.googleapis.com/tf_model_garden/vision/movinet/artifacts/jumpingjacks_plot.gif)" ] }, { "cell_type": "markdown", "metadata": { "id": "8_oLnvJy7kz5" }, "source": [ "## 安装\n", "\n", "对于较小模型 (A0-A2) 的推断,CPU 对于此 Colab 来说已经足够。" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:00:44.449061Z", "iopub.status.busy": "2022-12-14T22:00:44.448626Z", "iopub.status.idle": "2022-12-14T22:01:49.617055Z", "shell.execute_reply": "2022-12-14T22:01:49.616041Z" }, "id": "GUgUMGmY1yq-" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\r", "Reading package lists... 0%\r", "\r", "Reading package lists... 100%\r", "\r", "Reading package lists... Done\r", "\r\n", "\r", "Building dependency tree... 0%\r", "\r", "Building dependency tree... 0%\r" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "Building dependency tree... 50%\r", "\r", "Building dependency tree... 50%\r" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "Building dependency tree \r", "\r\n", "\r", "Reading state information... 0%\r", "\r", "Reading state information... 0%\r", "\r", "Reading state information... Done\r", "\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "The following packages were automatically installed and are no longer required:\r\n", " libatasmart4 libblockdev-fs2 libblockdev-loop2 libblockdev-part-err2\r\n", " libblockdev-part2 libblockdev-swap2 libblockdev-utils2 libblockdev2\r\n", " libparted-fs-resize0\r\n", "Use 'sudo apt autoremove' to remove them.\r\n", "The following additional packages will be installed:\r\n", " i965-va-driver intel-media-va-driver libaacs0 libaom0 libass9 libavcodec58\r\n", " libavdevice58 libavfilter7 libavformat58 libavresample4 libavutil56\r\n", " libbdplus0 libbluray2 libbs2b0 libcdio-cdda2 libcdio-paranoia2 libcdio18\r\n", " libchromaprint1 libcodec2-0.9 libdc1394-22 libfftw3-double3 libflite1\r\n", " libgme0 libgsm1 libigdgmm11 liblilv-0-0 libmysofa1 libopenal-data libopenal1\r\n", " libopenmpt0 libpostproc55 librubberband2 libsdl2-2.0-0 libserd-0-0 libshine3\r\n", " libsnappy1v5 libsndio7.0 libsord-0-0 libsratom-0-0 libssh-gcrypt-4\r\n", " libswresample3 libswscale5 libva-drm2 libva-x11-2 libva2 libvidstab1.1\r\n", " libwebpmux3 libx264-155 libx265-179 libxvidcore4 libzvbi-common libzvbi0\r\n", " mesa-va-drivers ocl-icd-libopencl1 va-driver-all\r\n", "Suggested packages:\r\n", " ffmpeg-doc i965-va-driver-shaders libbluray-bdj libfftw3-bin libfftw3-dev\r\n", " libportaudio2 serdi sndiod sordi\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "The following NEW packages will be installed:\r\n", " ffmpeg i965-va-driver intel-media-va-driver libaacs0 libaom0 libass9\r\n", " libavcodec58 libavdevice58 libavfilter7 libavformat58 libavresample4\r\n", " libavutil56 libbdplus0 libbluray2 libbs2b0 libcdio-cdda2 libcdio-paranoia2\r\n", " libcdio18 libchromaprint1 libcodec2-0.9 libdc1394-22 libfftw3-double3\r\n", " libflite1 libgme0 libgsm1 libigdgmm11 liblilv-0-0 libmysofa1 libopenal-data\r\n", " libopenal1 libopenmpt0 libpostproc55 librubberband2 libsdl2-2.0-0\r\n", " libserd-0-0 libshine3 libsnappy1v5 libsndio7.0 libsord-0-0 libsratom-0-0\r\n", " libssh-gcrypt-4 libswresample3 libswscale5 libva-drm2 libva-x11-2 libva2\r\n", " libvidstab1.1 libwebpmux3 libx264-155 libx265-179 libxvidcore4\r\n", " libzvbi-common libzvbi0 mesa-va-drivers ocl-icd-libopencl1 va-driver-all\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0 upgraded, 56 newly installed, 0 to remove and 170 not upgraded.\r\n", "Need to get 42.5 MB of archives.\r\n", "After this operation, 156 MB of additional disk space will be used.\r\n", "\u001b[33m\r", "0% [Working]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:1 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libaom0 amd64 1.0.0.errata1-3build1 [1160 kB]\r\n", "\u001b[33m\r", "0% [1 libaom0 2408 B/1160 kB 0%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "1% [1 libaom0 585 kB/1160 kB 50%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "2% [1 libaom0 1151 kB/1160 kB 99%]\u001b[0m\u001b[33m\r", " \r", "3% [Working]\u001b[0m\r", " \r", "Get:2 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libva2 amd64 2.7.0-2 [53.5 kB]\r\n", "\u001b[33m\r", "3% [2 libva2 2412 B/53.5 kB 5%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", " \r", "3% [Waiting for headers]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:3 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libva-drm2 amd64 2.7.0-2 [7044 B]\r\n", "\u001b[33m\r", "3% [3 libva-drm2 2417 B/7044 B 34%]\u001b[0m\u001b[33m\r", " \r", "3% [Waiting for headers]\u001b[0m\r", " \r", "Get:4 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libva-x11-2 amd64 2.7.0-2 [11.9 kB]\r\n", "\u001b[33m\r", "3% [4 libva-x11-2 2412 B/11.9 kB 20%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", " \r", "4% [Waiting for headers]\u001b[0m\r", " \r", "Get:5 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/main amd64 ocl-icd-libopencl1 amd64 2.2.11-1ubuntu1 [30.3 kB]\r\n", "\u001b[33m\r", "4% [5 ocl-icd-libopencl1 2413 B/30.3 kB 8%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", " \r", "4% [Waiting for headers]\u001b[0m\r", " \r", "Get:6 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/universe amd64 libavutil56 amd64 7:4.2.7-0ubuntu0.1 [241 kB]\r\n", "\u001b[33m\r", "4% [6 libavutil56 2413 B/241 kB 1%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", " \r", "5% [Waiting for headers]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:7 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libcodec2-0.9 amd64 0.9.2-2 [7886 kB]\r\n", "\u001b[33m\r", "5% [7 libcodec2-0.9 2408 B/7886 kB 0%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "5% [7 libcodec2-0.9 262 kB/7886 kB 3%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "6% [7 libcodec2-0.9 520 kB/7886 kB 7%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "7% [7 libcodec2-0.9 810 kB/7886 kB 10%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "7% [7 libcodec2-0.9 1077 kB/7886 kB 14%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "7% [7 libcodec2-0.9 1335 kB/7886 kB 17%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "8% [7 libcodec2-0.9 1630 kB/7886 kB 21%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "9% [7 libcodec2-0.9 1949 kB/7886 kB 25%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "9% [7 libcodec2-0.9 2260 kB/7886 kB 29%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "10% [7 libcodec2-0.9 2568 kB/7886 kB 33%]\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "10% [7 libcodec2-0.9 2875 kB/7886 kB 36%] 686 kB/s 55s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "11% [7 libcodec2-0.9 3160 kB/7886 kB 40%] 686 kB/s 55s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "12% [7 libcodec2-0.9 3514 kB/7886 kB 45%] 686 kB/s 54s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "12% [7 libcodec2-0.9 3850 kB/7886 kB 49%] 686 kB/s 54s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "13% [7 libcodec2-0.9 4153 kB/7886 kB 53%] 686 kB/s 53s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "13% [7 libcodec2-0.9 4456 kB/7886 kB 57%] 686 kB/s 53s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "14% [7 libcodec2-0.9 4775 kB/7886 kB 61%] 686 kB/s 52s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "15% [7 libcodec2-0.9 5111 kB/7886 kB 65%] 686 kB/s 52s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "15% [7 libcodec2-0.9 5414 kB/7886 kB 69%] 686 kB/s 51s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "16% [7 libcodec2-0.9 5664 kB/7886 kB 72%] 686 kB/s 51s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "16% [7 libcodec2-0.9 5947 kB/7886 kB 75%] 686 kB/s 51s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "17% [7 libcodec2-0.9 6242 kB/7886 kB 79%] 686 kB/s 50s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "17% [7 libcodec2-0.9 6564 kB/7886 kB 83%] 614 kB/s 56s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "18% [7 libcodec2-0.9 6893 kB/7886 kB 87%] 614 kB/s 55s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "19% [7 libcodec2-0.9 7204 kB/7886 kB 91%] 614 kB/s 54s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "19% [7 libcodec2-0.9 7535 kB/7886 kB 96%] 614 kB/s 54s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "20% [7 libcodec2-0.9 7835 kB/7886 kB 99%] 614 kB/s 53s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "20% [Waiting for headers] 614 kB/s 53s\u001b[0m\r", " \r", "Get:8 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libgsm1 amd64 1.0.18-2 [24.4 kB]\r\n", "\u001b[33m\r", "20% [8 libgsm1 2415 B/24.4 kB 10%] 614 kB/s 53s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "21% [Waiting for headers] 614 kB/s 53s\u001b[0m\r", " \r", "Get:9 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libshine3 amd64 3.1.1-2 [23.2 kB]\r\n", "\u001b[33m\r", "21% [9 libshine3 2412 B/23.2 kB 10%] 614 kB/s 53s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "21% [Waiting for headers] 614 kB/s 53s\u001b[0m\r", " \r", "Get:10 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/main amd64 libsnappy1v5 amd64 1.1.8-1build1 [16.7 kB]\r\n", "\u001b[33m\r", "21% [10 libsnappy1v5 2413 B/16.7 kB 14%] 614 kB/s 53s\u001b[0m\u001b[33m\r", "21% [Waiting for headers] 614 kB/s 53s\u001b[0m\r", " \r", "Get:11 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/universe amd64 libswresample3 amd64 7:4.2.7-0ubuntu0.1 [57.1 kB]\r\n", "\u001b[33m\r", "21% [11 libswresample3 2412 B/57.1 kB 4%] 614 kB/s 53s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "22% [Waiting for headers] 614 kB/s 53s\u001b[0m\r", " \r", "Get:12 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/main amd64 libwebpmux3 amd64 0.6.1-2ubuntu0.20.04.1 [19.5 kB]\r\n", "\u001b[33m\r", "22% [12 libwebpmux3 2415 B/19.5 kB 12%] 614 kB/s 53s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "22% [Waiting for headers] 614 kB/s 53s\u001b[0m\r", " \r", "Get:13 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libx264-155 amd64 2:0.155.2917+git0a84d98-2 [521 kB]\r\n", "\u001b[33m\r", "22% [13 libx264-155 2410 B/521 kB 0%] 614 kB/s 53s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "23% [13 libx264-155 315 kB/521 kB 60%] 614 kB/s 53s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "24% [Waiting for headers] 614 kB/s 52s\u001b[0m\r", " \r", "Get:14 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libx265-179 amd64 3.2.1-1build1 [1060 kB]\r\n", "\u001b[33m\r", "24% [14 libx265-179 2408 B/1060 kB 0%] 614 kB/s 52s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "25% [14 libx265-179 568 kB/1060 kB 54%] 614 kB/s 51s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "26% [Waiting for headers] 614 kB/s 51s\u001b[0m\r", " \r", "Get:15 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libxvidcore4 amd64 2:1.3.7-1 [201 kB]\r\n", "\u001b[33m\r", "26% [15 libxvidcore4 2410 B/201 kB 1%] 614 kB/s 51s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "27% [Waiting for headers] 614 kB/s 50s\u001b[0m\r", " \r", "Get:16 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libzvbi-common all 0.2.35-17 [32.5 kB]\r\n", "\u001b[33m\r", "27% [16 libzvbi-common 2412 B/32.5 kB 7%] 614 kB/s 50s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "27% [Waiting for headers] 614 kB/s 50s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:17 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libzvbi0 amd64 0.2.35-17 [237 kB]\r\n", "\u001b[33m\r", "27% [17 libzvbi0 2413 B/237 kB 1%] 614 kB/s 50s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "28% [Waiting for headers] 614 kB/s 50s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:18 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/universe amd64 libavcodec58 amd64 7:4.2.7-0ubuntu0.1 [4878 kB]\r\n", "\u001b[33m\r", "28% [18 libavcodec58 2409 B/4878 kB 0%] 614 kB/s 50s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "28% [18 libavcodec58 176 kB/4878 kB 4%] 614 kB/s 50s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "29% [18 libavcodec58 339 kB/4878 kB 7%] 614 kB/s 49s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "29% [18 libavcodec58 502 kB/4878 kB 10%] 633 kB/s 48s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "29% [18 libavcodec58 700 kB/4878 kB 14%] 633 kB/s 47s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "30% [18 libavcodec58 888 kB/4878 kB 18%] 633 kB/s 47s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "30% [18 libavcodec58 1093 kB/4878 kB 22%] 633 kB/s 47s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "30% [18 libavcodec58 1253 kB/4878 kB 26%] 633 kB/s 46s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "31% [18 libavcodec58 1445 kB/4878 kB 30%] 633 kB/s 46s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "31% [18 libavcodec58 1634 kB/4878 kB 33%] 633 kB/s 46s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "31% [18 libavcodec58 1830 kB/4878 kB 38%] 633 kB/s 45s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "32% [18 libavcodec58 2039 kB/4878 kB 42%] 633 kB/s 45s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "32% [18 libavcodec58 2228 kB/4878 kB 46%] 633 kB/s 45s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "32% [18 libavcodec58 2408 kB/4878 kB 49%] 633 kB/s 44s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "33% [18 libavcodec58 2596 kB/4878 kB 53%] 633 kB/s 44s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "33% [18 libavcodec58 2793 kB/4878 kB 57%] 381 kB/s 1min 13s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "34% [18 libavcodec58 2998 kB/4878 kB 61%] 381 kB/s 1min 13s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "34% [18 libavcodec58 3198 kB/4878 kB 66%] 381 kB/s 1min 12s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "34% [18 libavcodec58 3411 kB/4878 kB 70%] 381 kB/s 1min 12s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "35% [18 libavcodec58 3629 kB/4878 kB 74%] 381 kB/s 1min 11s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "35% [18 libavcodec58 3857 kB/4878 kB 79%] 381 kB/s 1min 10s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "36% [18 libavcodec58 4061 kB/4878 kB 83%] 381 kB/s 1min 10s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "36% [18 libavcodec58 4263 kB/4878 kB 87%] 381 kB/s 1min 9s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "36% [18 libavcodec58 4476 kB/4878 kB 92%] 381 kB/s 1min 9s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "37% [18 libavcodec58 4685 kB/4878 kB 96%] 381 kB/s 1min 8s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "37% [Waiting for headers] 381 kB/s 1min 8s\u001b[0m\r", " \r", "Get:19 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libass9 amd64 1:0.14.0-2 [88.0 kB]\r\n", "\u001b[33m\r", "37% [19 libass9 6635 B/88.0 kB 8%] 381 kB/s 1min 8s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "38% [Waiting for headers] 381 kB/s 1min 7s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:20 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libbluray2 amd64 1:1.2.0-1 [138 kB]\r\n", "\u001b[33m\r", "38% [20 libbluray2 2410 B/138 kB 2%] 381 kB/s 1min 7s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "39% [Waiting for headers] 381 kB/s 1min 7s\u001b[0m\r", " \r", "Get:21 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libchromaprint1 amd64 1.4.3-3build1 [37.6 kB]\r\n", "\u001b[33m\r", "39% [21 libchromaprint1 2415 B/37.6 kB 6%] 381 kB/s 1min 7s\u001b[0m\u001b[33m\r", "39% [Waiting for headers] 381 kB/s 1min 7s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:22 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libgme0 amd64 0.6.2-1build1 [123 kB]\r\n", "\u001b[33m\r", "39% [22 libgme0 2410 B/123 kB 2%] 381 kB/s 1min 7s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "40% [Waiting for headers] 381 kB/s 1min 7s\u001b[0m\r", " \r", "Get:23 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libopenmpt0 amd64 0.4.11-1build1 [599 kB]\r\n", "\u001b[33m\r", "40% [23 libopenmpt0 2413 B/599 kB 0%] 381 kB/s 1min 7s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "41% [Waiting for headers] 381 kB/s 1min 5s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:24 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/main amd64 libssh-gcrypt-4 amd64 0.9.3-2ubuntu2.2 [202 kB]\r\n", "\u001b[33m\r", "41% [24 libssh-gcrypt-4 2414 B/202 kB 1%] 381 kB/s 1min 5s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "42% [Waiting for headers] 523 kB/s 47s\u001b[0m\r", " \r", "Get:25 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/universe amd64 libavformat58 amd64 7:4.2.7-0ubuntu0.1 [985 kB]\r\n", "\u001b[33m\r", "42% [25 libavformat58 2413 B/985 kB 0%] 523 kB/s 47s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "44% [Waiting for headers] 523 kB/s 45s\u001b[0m\r", " \r", "Get:26 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libbs2b0 amd64 3.1.0+dfsg-2.2build1 [10.2 kB]\r\n", "\u001b[33m\r", "44% [26 libbs2b0 2412 B/10.2 kB 24%] 523 kB/s 45s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "44% [Waiting for headers] 523 kB/s 45s\u001b[0m\r", " \r", "Get:27 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libflite1 amd64 2.1-release-3 [12.8 MB]\r\n", "\u001b[33m\r", "44% [27 libflite1 2410 B/12.8 MB 0%] 523 kB/s 45s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "46% [27 libflite1 965 kB/12.8 MB 8%] 523 kB/s 43s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "48% [27 libflite1 2002 kB/12.8 MB 16%] 523 kB/s 41s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "50% [27 libflite1 3013 kB/12.8 MB 24%] 523 kB/s 39s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "52% [27 libflite1 4124 kB/12.8 MB 32%] 523 kB/s 37s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "54% [27 libflite1 5192 kB/12.8 MB 41%] 523 kB/s 35s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "56% [27 libflite1 6156 kB/12.8 MB 48%] 523 kB/s 33s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "58% [27 libflite1 7253 kB/12.8 MB 57%] 523 kB/s 31s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "60% [27 libflite1 8425 kB/12.8 MB 66%] 523 kB/s 29s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "62% [27 libflite1 9519 kB/12.8 MB 74%] 523 kB/s 27s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "64% [27 libflite1 10.6 MB/12.8 MB 83%] 523 kB/s 25s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "67% [27 libflite1 11.8 MB/12.8 MB 92%] 523 kB/s 23s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "69% [27 libflite1 12.8 MB/12.8 MB 100%] 2161 kB/s 5s\u001b[0m\u001b[33m\r", "69% [Waiting for headers] 2161 kB/s 5s\u001b[0m\r", " \r", "Get:28 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libserd-0-0 amd64 0.30.2-1 [46.6 kB]\r\n", "\u001b[33m\r", "69% [28 libserd-0-0 15.1 kB/46.6 kB 32%] 2161 kB/s 5s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "69% [Waiting for headers] 2161 kB/s 5s\u001b[0m\r", " \r", "Get:29 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libsord-0-0 amd64 0.16.4-1 [19.5 kB]\r\n", "\u001b[33m\r", "69% [29 libsord-0-0 2412 B/19.5 kB 12%] 2161 kB/s 5s\u001b[0m\u001b[33m\r", "70% [Waiting for headers] 2161 kB/s 5s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:30 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libsratom-0-0 amd64 0.6.4-1 [16.9 kB]\r\n", "\u001b[33m\r", "70% [30 libsratom-0-0 2412 B/16.9 kB 14%] 2161 kB/s 5s\u001b[0m\u001b[33m\r", "70% [Waiting for headers] 2161 kB/s 5s\u001b[0m\r", " \r", "Get:31 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/universe amd64 liblilv-0-0 amd64 0.24.6-1ubuntu0.1 [40.6 kB]\r\n", "\u001b[33m\r", "70% [31 liblilv-0-0 2412 B/40.6 kB 6%] 2161 kB/s 5s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "71% [Waiting for headers] 2161 kB/s 5s\u001b[0m\r", " \r", "Get:32 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libmysofa1 amd64 1.0~dfsg0-1 [39.2 kB]\r\n", "\u001b[33m\r", "71% [32 libmysofa1 2415 B/39.2 kB 6%] 2161 kB/s 5s\u001b[0m\u001b[33m\r", "71% [Waiting for headers] 2161 kB/s 5s\u001b[0m\r", " \r", "Get:33 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/universe amd64 libpostproc55 amd64 7:4.2.7-0ubuntu0.1 [55.0 kB]\r\n", "\u001b[33m\r", "71% [33 libpostproc55 2412 B/55.0 kB 4%] 2161 kB/s 5s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "71% [Waiting for headers] 2161 kB/s 4s\u001b[0m\r", " \r", "Get:34 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/main amd64 libfftw3-double3 amd64 3.3.8-2ubuntu1 [728 kB]\r\n", "\u001b[33m\r", "71% [34 libfftw3-double3 2410 B/728 kB 0%] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "72% [34 libfftw3-double3 274 kB/728 kB 38%] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "72% [34 libfftw3-double3 544 kB/728 kB 75%] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "73% [Waiting for headers] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:35 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 librubberband2 amd64 1.8.2-1build1 [89.4 kB]\r\n", "\u001b[33m\r", "73% [35 librubberband2 2415 B/89.4 kB 3%] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "74% [Waiting for headers] 2161 kB/s 4s\u001b[0m\r", " \r", "Get:36 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/universe amd64 libswscale5 amd64 7:4.2.7-0ubuntu0.1 [157 kB]\r\n", "\u001b[33m\r", "74% [36 libswscale5 2413 B/157 kB 2%] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "74% [Waiting for headers] 2161 kB/s 4s\u001b[0m\r", " \r", "Get:37 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libvidstab1.1 amd64 1.1.0-2 [35.0 kB]\r\n", "\u001b[33m\r", "74% [37 libvidstab1.1 2412 B/35.0 kB 7%] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "75% [Waiting for headers] 2161 kB/s 4s\u001b[0m\r", " \r", "Get:38 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/universe amd64 libavfilter7 amd64 7:4.2.7-0ubuntu0.1 [1085 kB]\r\n", "\u001b[33m\r", "75% [38 libavfilter7 2408 B/1085 kB 0%] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "75% [38 libavfilter7 327 kB/1085 kB 30%] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "76% [38 libavfilter7 635 kB/1085 kB 59%] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "77% [38 libavfilter7 1003 kB/1085 kB 92%] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "77% [Waiting for headers] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:39 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/main amd64 libcdio18 amd64 2.0.0-2 [58.6 kB]\r\n", "\u001b[33m\r", "77% [39 libcdio18 2416 B/58.6 kB 4%] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "78% [Waiting for headers] 2161 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:40 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/main amd64 libcdio-cdda2 amd64 10.2+2.0.0-1 [17.6 kB]\r\n", "\u001b[33m\r", "78% [40 libcdio-cdda2 2412 B/17.6 kB 14%] 2161 kB/s 4s\u001b[0m\u001b[33m\r", "78% [Waiting for headers] 2161 kB/s 3s\u001b[0m\r", " \r", "Get:41 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/main amd64 libcdio-paranoia2 amd64 10.2+2.0.0-1 [16.2 kB]\r\n", "\u001b[33m\r", "78% [41 libcdio-paranoia2 2412 B/16.2 kB 15%] 2161 kB/s 3s\u001b[0m\u001b[33m\r", "78% [Waiting for headers] 2161 kB/s 3s\u001b[0m\r", " \r", "Get:42 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libdc1394-22 amd64 2.2.5-2.1 [79.6 kB]\r\n", "\u001b[33m\r", "78% [42 libdc1394-22 2414 B/79.6 kB 3%] 2161 kB/s 3s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "79% [Waiting for headers] 2161 kB/s 3s\u001b[0m\r", " \r", "Get:43 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libopenal-data all 1:1.19.1-1 [162 kB]\r\n", "\u001b[33m\r", "79% [43 libopenal-data 6637 B/162 kB 4%] 2161 kB/s 3s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "80% [Waiting for headers] 2161 kB/s 3s\u001b[0m\r", " \r", "Get:44 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libsndio7.0 amd64 1.5.0-3 [24.5 kB]\r\n", "\u001b[33m\r", "80% [44 libsndio7.0 2412 B/24.5 kB 10%] 2161 kB/s 3s\u001b[0m\u001b[33m\r", "80% [Waiting for headers] 2161 kB/s 3s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:45 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libopenal1 amd64 1:1.19.1-1 [492 kB]\r\n", "\u001b[33m\r", "80% [45 libopenal1 2413 B/492 kB 0%] 2161 kB/s 3s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "81% [45 libopenal1 282 kB/492 kB 57%] 2161 kB/s 3s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "81% [Waiting for headers] 2161 kB/s 3s\u001b[0m\r", " \r", "Get:46 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libsdl2-2.0-0 amd64 2.0.10+dfsg1-3 [407 kB]\r\n", "\u001b[33m\r", "81% [46 libsdl2-2.0-0 2410 B/407 kB 1%] 2161 kB/s 3s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "82% [46 libsdl2-2.0-0 315 kB/407 kB 77%] 2161 kB/s 3s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "82% [Waiting for headers] 2161 kB/s 3s\u001b[0m\r", " \r", "Get:47 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/universe amd64 libavdevice58 amd64 7:4.2.7-0ubuntu0.1 [74.3 kB]\r\n", "\u001b[33m\r", "82% [47 libavdevice58 2414 B/74.3 kB 3%] 2161 kB/s 3s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "83% [Waiting for headers] 2161 kB/s 3s\u001b[0m\r", " \r", "Get:48 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/universe amd64 libavresample4 amd64 7:4.2.7-0ubuntu0.1 [54.2 kB]\r\n", "\u001b[33m\r", "83% [48 libavresample4 2415 B/54.2 kB 4%] 2161 kB/s 3s\u001b[0m\u001b[33m\r", "83% [Waiting for headers] 2161 kB/s 3s\u001b[0m\r", " \r", "Get:49 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/universe amd64 ffmpeg amd64 7:4.2.7-0ubuntu0.1 [1453 kB]\r\n", "\u001b[33m\r", "83% [49 ffmpeg 2409 B/1453 kB 0%] 2161 kB/s 3s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "85% [49 ffmpeg 897 kB/1453 kB 62%] 763 kB/s 8s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "86% [Waiting for headers] 763 kB/s 7s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " \r", "Get:50 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libigdgmm11 amd64 20.1.1+ds1-1 [111 kB]\r\n", "\u001b[33m\r", "86% [50 libigdgmm11 2410 B/111 kB 2%] 763 kB/s 7s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "87% [Waiting for headers] 763 kB/s 7s\u001b[0m\r", " \r", "Get:51 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 intel-media-va-driver amd64 20.1.1+dfsg1-1 [1764 kB]\r\n", "\u001b[33m\r", "87% [51 intel-media-va-driver 2408 B/1764 kB 0%] 763 kB/s 7s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "88% [51 intel-media-va-driver 303 kB/1764 kB 17%] 763 kB/s 7s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "88% [51 intel-media-va-driver 614 kB/1764 kB 35%] 763 kB/s 6s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "89% [51 intel-media-va-driver 925 kB/1764 kB 52%] 763 kB/s 6s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "89% [51 intel-media-va-driver 1298 kB/1764 kB 74%] 763 kB/s 5s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "90% [51 intel-media-va-driver 1687 kB/1764 kB 96%] 763 kB/s 5s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "91% [Waiting for headers] 763 kB/s 5s\u001b[0m\r", " \r", "Get:52 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libaacs0 amd64 0.9.0-2 [50.1 kB]\r\n", "\u001b[33m\r", "91% [52 libaacs0 2412 B/50.1 kB 5%] 763 kB/s 5s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "91% [Waiting for headers] 763 kB/s 5s\u001b[0m\r", " \r", "Get:53 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 libbdplus0 amd64 0.1.2-3 [47.3 kB]\r\n", "\u001b[33m\r", "91% [53 libbdplus0 2412 B/47.3 kB 5%] 763 kB/s 5s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "92% [Waiting for headers] 763 kB/s 5s\u001b[0m\r", " \r", "Get:54 http://us-central1.gce.archive.ubuntu.com/ubuntu focal-updates/universe amd64 mesa-va-drivers amd64 21.2.6-0ubuntu0.1~20.04.2 [2970 kB]\r\n", "\u001b[33m\r", "92% [54 mesa-va-drivers 2411 B/2970 kB 0%] 763 kB/s 5s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "93% [54 mesa-va-drivers 740 kB/2970 kB 25%] 763 kB/s 4s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "94% [54 mesa-va-drivers 1396 kB/2970 kB 47%] 763 kB/s 3s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "96% [54 mesa-va-drivers 2133 kB/2970 kB 72%] 763 kB/s 2s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "97% [54 mesa-va-drivers 2920 kB/2970 kB 98%] 763 kB/s 1s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "98% [Waiting for headers] 763 kB/s 1s\u001b[0m\r", " \r", "Get:55 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 i965-va-driver amd64 2.4.0-0ubuntu1 [924 kB]\r\n", "\u001b[33m\r", "98% [55 i965-va-driver 2411 B/924 kB 0%] 763 kB/s 1s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "98% [55 i965-va-driver 479 kB/924 kB 52%] 763 kB/s 0s\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33m\r", "100% [Waiting for headers] 1028 kB/s 0s\u001b[0m\r", " \r", "Get:56 http://us-central1.gce.archive.ubuntu.com/ubuntu focal/universe amd64 va-driver-all amd64 2.7.0-2 [4020 B]\r\n", "\u001b[33m\r", "100% [56 va-driver-all 2417 B/4020 B 60%] 1028 kB/s 0s\u001b[0m\u001b[33m\r", "100% [Working] 1028 kB/s 0s\u001b[0m\r", " \r", "Fetched 42.5 MB in 50s (855 kB/s)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "Extracting templates from packages: 53%" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "Extracting templates from packages: 100%\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\u001b7\u001b[0;23r\u001b8\u001b[1A" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libaom0:amd64.\r\n", "(Reading database ... \r", "(Reading database ... 5%\r", "(Reading database ... 10%\r", "(Reading database ... 15%\r", "(Reading database ... 20%\r", "(Reading database ... 25%\r", "(Reading database ... 30%\r", "(Reading database ... 35%\r", "(Reading database ... 40%\r", "(Reading database ... 45%\r", "(Reading database ... 50%\r", "(Reading database ... 55%\r", "(Reading database ... 60%\r", "(Reading database ... 65%\r" ] }, { "name": "stdout", "output_type": "stream", "text": [ "(Reading database ... 70%\r", "(Reading database ... 75%\r", "(Reading database ... 80%\r", "(Reading database ... 85%\r", "(Reading database ... 90%\r", "(Reading database ... 95%\r", "(Reading database ... 100%\r", "(Reading database ... 140254 files and directories currently installed.)\r\n", "Preparing to unpack .../00-libaom0_1.0.0.errata1-3build1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 0%]\u001b[49m\u001b[39m [..........................................................] \u001b8Unpacking libaom0:amd64 (1.0.0.errata1-3build1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libva2:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../01-libva2_2.7.0-2_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 1%]\u001b[49m\u001b[39m [..........................................................] \u001b8Unpacking libva2:amd64 (2.7.0-2) ...\r\n", "Selecting previously unselected package libva-drm2:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../02-libva-drm2_2.7.0-2_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 2%]\u001b[49m\u001b[39m [#.........................................................] \u001b8Unpacking libva-drm2:amd64 (2.7.0-2) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libva-x11-2:amd64.\r\n", "Preparing to unpack .../03-libva-x11-2_2.7.0-2_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 3%]\u001b[49m\u001b[39m [#.........................................................] \u001b8Unpacking libva-x11-2:amd64 (2.7.0-2) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package ocl-icd-libopencl1:amd64.\r\n", "Preparing to unpack .../04-ocl-icd-libopencl1_2.2.11-1ubuntu1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 4%]\u001b[49m\u001b[39m [##........................................................] \u001b8Unpacking ocl-icd-libopencl1:amd64 (2.2.11-1ubuntu1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libavutil56:amd64.\r\n", "Preparing to unpack .../05-libavutil56_7%3a4.2.7-0ubuntu0.1_amd64.deb ...\r\n", "Unpacking libavutil56:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 5%]\u001b[49m\u001b[39m [###.......................................................] \u001b8Selecting previously unselected package libcodec2-0.9:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../06-libcodec2-0.9_0.9.2-2_amd64.deb ...\r\n", "Unpacking libcodec2-0.9:amd64 (0.9.2-2) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 6%]\u001b[49m\u001b[39m [###.......................................................] \u001b8Selecting previously unselected package libgsm1:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../07-libgsm1_1.0.18-2_amd64.deb ...\r\n", "Unpacking libgsm1:amd64 (1.0.18-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 7%]\u001b[49m\u001b[39m [####......................................................] \u001b8Selecting previously unselected package libshine3:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../08-libshine3_3.1.1-2_amd64.deb ...\r\n", "Unpacking libshine3:amd64 (3.1.1-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 8%]\u001b[49m\u001b[39m [####......................................................] \u001b8" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libsnappy1v5:amd64.\r\n", "Preparing to unpack .../09-libsnappy1v5_1.1.8-1build1_amd64.deb ...\r\n", "Unpacking libsnappy1v5:amd64 (1.1.8-1build1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libswresample3:amd64.\r\n", "Preparing to unpack .../10-libswresample3_7%3a4.2.7-0ubuntu0.1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 9%]\u001b[49m\u001b[39m [#####.....................................................] \u001b8Unpacking libswresample3:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libwebpmux3:amd64.\r\n", "Preparing to unpack .../11-libwebpmux3_0.6.1-2ubuntu0.20.04.1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 10%]\u001b[49m\u001b[39m [#####.....................................................] \u001b8Unpacking libwebpmux3:amd64 (0.6.1-2ubuntu0.20.04.1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libx264-155:amd64.\r\n", "Preparing to unpack .../12-libx264-155_2%3a0.155.2917+git0a84d98-2_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 11%]\u001b[49m\u001b[39m [######....................................................] \u001b8Unpacking libx264-155:amd64 (2:0.155.2917+git0a84d98-2) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libx265-179:amd64.\r\n", "Preparing to unpack .../13-libx265-179_3.2.1-1build1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 12%]\u001b[49m\u001b[39m [######....................................................] \u001b8Unpacking libx265-179:amd64 (3.2.1-1build1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libxvidcore4:amd64.\r\n", "Preparing to unpack .../14-libxvidcore4_2%3a1.3.7-1_amd64.deb ...\r\n", "Unpacking libxvidcore4:amd64 (2:1.3.7-1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 13%]\u001b[49m\u001b[39m [#######...................................................] \u001b8Selecting previously unselected package libzvbi-common.\r\n", "Preparing to unpack .../15-libzvbi-common_0.2.35-17_all.deb ...\r\n", "Unpacking libzvbi-common (0.2.35-17) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 14%]\u001b[49m\u001b[39m [########..................................................] \u001b8Selecting previously unselected package libzvbi0:amd64.\r\n", "Preparing to unpack .../16-libzvbi0_0.2.35-17_amd64.deb ...\r\n", "Unpacking libzvbi0:amd64 (0.2.35-17) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 15%]\u001b[49m\u001b[39m [########..................................................] \u001b8" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libavcodec58:amd64.\r\n", "Preparing to unpack .../17-libavcodec58_7%3a4.2.7-0ubuntu0.1_amd64.deb ...\r\n", "Unpacking libavcodec58:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 16%]\u001b[49m\u001b[39m [#########.................................................] \u001b8Selecting previously unselected package libass9:amd64.\r\n", "Preparing to unpack .../18-libass9_1%3a0.14.0-2_amd64.deb ...\r\n", "Unpacking libass9:amd64 (1:0.14.0-2) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libbluray2:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../19-libbluray2_1%3a1.2.0-1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 17%]\u001b[49m\u001b[39m [##########................................................] \u001b8Unpacking libbluray2:amd64 (1:1.2.0-1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libchromaprint1:amd64.\r\n", "Preparing to unpack .../20-libchromaprint1_1.4.3-3build1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 18%]\u001b[49m\u001b[39m [##########................................................] \u001b8Unpacking libchromaprint1:amd64 (1.4.3-3build1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libgme0:amd64.\r\n", "Preparing to unpack .../21-libgme0_0.6.2-1build1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 19%]\u001b[49m\u001b[39m [###########...............................................] \u001b8Unpacking libgme0:amd64 (0.6.2-1build1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libopenmpt0:amd64.\r\n", "Preparing to unpack .../22-libopenmpt0_0.4.11-1build1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 20%]\u001b[49m\u001b[39m [###########...............................................] \u001b8Unpacking libopenmpt0:amd64 (0.4.11-1build1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libssh-gcrypt-4:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../23-libssh-gcrypt-4_0.9.3-2ubuntu2.2_amd64.deb ...\r\n", "Unpacking libssh-gcrypt-4:amd64 (0.9.3-2ubuntu2.2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 21%]\u001b[49m\u001b[39m [############..............................................] \u001b8" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libavformat58:amd64.\r\n", "Preparing to unpack .../24-libavformat58_7%3a4.2.7-0ubuntu0.1_amd64.deb ...\r\n", "Unpacking libavformat58:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 22%]\u001b[49m\u001b[39m [############..............................................] \u001b8" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libbs2b0:amd64.\r\n", "Preparing to unpack .../25-libbs2b0_3.1.0+dfsg-2.2build1_amd64.deb ...\r\n", "Unpacking libbs2b0:amd64 (3.1.0+dfsg-2.2build1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 23%]\u001b[49m\u001b[39m [#############.............................................] \u001b8" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libflite1:amd64.\r\n", "Preparing to unpack .../26-libflite1_2.1-release-3_amd64.deb ...\r\n", "Unpacking libflite1:amd64 (2.1-release-3) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 24%]\u001b[49m\u001b[39m [#############.............................................] \u001b8Selecting previously unselected package libserd-0-0:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../27-libserd-0-0_0.30.2-1_amd64.deb ...\r\n", "Unpacking libserd-0-0:amd64 (0.30.2-1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libsord-0-0:amd64.\r\n", "Preparing to unpack .../28-libsord-0-0_0.16.4-1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 25%]\u001b[49m\u001b[39m [##############............................................] \u001b8Unpacking libsord-0-0:amd64 (0.16.4-1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libsratom-0-0:amd64.\r\n", "Preparing to unpack .../29-libsratom-0-0_0.6.4-1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 26%]\u001b[49m\u001b[39m [###############...........................................] \u001b8Unpacking libsratom-0-0:amd64 (0.6.4-1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package liblilv-0-0:amd64.\r\n", "Preparing to unpack .../30-liblilv-0-0_0.24.6-1ubuntu0.1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 27%]\u001b[49m\u001b[39m [###############...........................................] \u001b8Unpacking liblilv-0-0:amd64 (0.24.6-1ubuntu0.1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libmysofa1:amd64.\r\n", "Preparing to unpack .../31-libmysofa1_1.0~dfsg0-1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 28%]\u001b[49m\u001b[39m [################..........................................] \u001b8Unpacking libmysofa1:amd64 (1.0~dfsg0-1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libpostproc55:amd64.\r\n", "Preparing to unpack .../32-libpostproc55_7%3a4.2.7-0ubuntu0.1_amd64.deb ...\r\n", "Unpacking libpostproc55:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 29%]\u001b[49m\u001b[39m [#################.........................................] \u001b8Selecting previously unselected package libfftw3-double3:amd64.\r\n", "Preparing to unpack .../33-libfftw3-double3_3.3.8-2ubuntu1_amd64.deb ...\r\n", "Unpacking libfftw3-double3:amd64 (3.3.8-2ubuntu1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 30%]\u001b[49m\u001b[39m [#################.........................................] \u001b8Selecting previously unselected package librubberband2:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../34-librubberband2_1.8.2-1build1_amd64.deb ...\r\n", "Unpacking librubberband2:amd64 (1.8.2-1build1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 31%]\u001b[49m\u001b[39m [##################........................................] \u001b8" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libswscale5:amd64.\r\n", "Preparing to unpack .../35-libswscale5_7%3a4.2.7-0ubuntu0.1_amd64.deb ...\r\n", "Unpacking libswscale5:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 32%]\u001b[49m\u001b[39m [##################........................................] \u001b8" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libvidstab1.1:amd64.\r\n", "Preparing to unpack .../36-libvidstab1.1_1.1.0-2_amd64.deb ...\r\n", "Unpacking libvidstab1.1:amd64 (1.1.0-2) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libavfilter7:amd64.\r\n", "Preparing to unpack .../37-libavfilter7_7%3a4.2.7-0ubuntu0.1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 33%]\u001b[49m\u001b[39m [###################.......................................] \u001b8Unpacking libavfilter7:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libcdio18:amd64.\r\n", "Preparing to unpack .../38-libcdio18_2.0.0-2_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 34%]\u001b[49m\u001b[39m [###################.......................................] \u001b8Unpacking libcdio18:amd64 (2.0.0-2) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libcdio-cdda2:amd64.\r\n", "Preparing to unpack .../39-libcdio-cdda2_10.2+2.0.0-1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 35%]\u001b[49m\u001b[39m [####################......................................] \u001b8Unpacking libcdio-cdda2:amd64 (10.2+2.0.0-1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libcdio-paranoia2:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../40-libcdio-paranoia2_10.2+2.0.0-1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 36%]\u001b[49m\u001b[39m [####################......................................] \u001b8Unpacking libcdio-paranoia2:amd64 (10.2+2.0.0-1) ...\r\n", "Selecting previously unselected package libdc1394-22:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../41-libdc1394-22_2.2.5-2.1_amd64.deb ...\r\n", "Unpacking libdc1394-22:amd64 (2.2.5-2.1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 37%]\u001b[49m\u001b[39m [#####################.....................................] \u001b8Selecting previously unselected package libopenal-data.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../42-libopenal-data_1%3a1.19.1-1_all.deb ...\r\n", "Unpacking libopenal-data (1:1.19.1-1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 38%]\u001b[49m\u001b[39m [######################....................................] \u001b8" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libsndio7.0:amd64.\r\n", "Preparing to unpack .../43-libsndio7.0_1.5.0-3_amd64.deb ...\r\n", "Unpacking libsndio7.0:amd64 (1.5.0-3) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 39%]\u001b[49m\u001b[39m [######################....................................] \u001b8" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libopenal1:amd64.\r\n", "Preparing to unpack .../44-libopenal1_1%3a1.19.1-1_amd64.deb ...\r\n", "Unpacking libopenal1:amd64 (1:1.19.1-1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 40%]\u001b[49m\u001b[39m [#######################...................................] \u001b8Selecting previously unselected package libsdl2-2.0-0:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../45-libsdl2-2.0-0_2.0.10+dfsg1-3_amd64.deb ...\r\n", "Unpacking libsdl2-2.0-0:amd64 (2.0.10+dfsg1-3) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libavdevice58:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../46-libavdevice58_7%3a4.2.7-0ubuntu0.1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 41%]\u001b[49m\u001b[39m [#######################...................................] \u001b8Unpacking libavdevice58:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n", "Selecting previously unselected package libavresample4:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../47-libavresample4_7%3a4.2.7-0ubuntu0.1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 42%]\u001b[49m\u001b[39m [########################..................................] \u001b8Unpacking libavresample4:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package ffmpeg.\r\n", "Preparing to unpack .../48-ffmpeg_7%3a4.2.7-0ubuntu0.1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 43%]\u001b[49m\u001b[39m [#########################.................................] \u001b8Unpacking ffmpeg (7:4.2.7-0ubuntu0.1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package libigdgmm11:amd64.\r\n", "Preparing to unpack .../49-libigdgmm11_20.1.1+ds1-1_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 44%]\u001b[49m\u001b[39m [#########################.................................] \u001b8Unpacking libigdgmm11:amd64 (20.1.1+ds1-1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package intel-media-va-driver:amd64.\r\n", "Preparing to unpack .../50-intel-media-va-driver_20.1.1+dfsg1-1_amd64.deb ...\r\n", "Unpacking intel-media-va-driver:amd64 (20.1.1+dfsg1-1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 45%]\u001b[49m\u001b[39m [##########################................................] \u001b8Selecting previously unselected package libaacs0:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../51-libaacs0_0.9.0-2_amd64.deb ...\r\n", "Unpacking libaacs0:amd64 (0.9.0-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 46%]\u001b[49m\u001b[39m [##########################................................] \u001b8Selecting previously unselected package libbdplus0:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../52-libbdplus0_0.1.2-3_amd64.deb ...\r\n", "Unpacking libbdplus0:amd64 (0.1.2-3) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 47%]\u001b[49m\u001b[39m [###########################...............................] \u001b8Selecting previously unselected package mesa-va-drivers:amd64.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Preparing to unpack .../53-mesa-va-drivers_21.2.6-0ubuntu0.1~20.04.2_amd64.deb ...\r\n", "Unpacking mesa-va-drivers:amd64 (21.2.6-0ubuntu0.1~20.04.2) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 48%]\u001b[49m\u001b[39m [###########################...............................] \u001b8" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package i965-va-driver:amd64.\r\n", "Preparing to unpack .../54-i965-va-driver_2.4.0-0ubuntu1_amd64.deb ...\r\n", "Unpacking i965-va-driver:amd64 (2.4.0-0ubuntu1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selecting previously unselected package va-driver-all:amd64.\r\n", "Preparing to unpack .../55-va-driver-all_2.7.0-2_amd64.deb ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 49%]\u001b[49m\u001b[39m [############################..............................] \u001b8Unpacking va-driver-all:amd64 (2.7.0-2) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Setting up libgme0:amd64 (0.6.2-1build1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 50%]\u001b[49m\u001b[39m [#############################.............................] \u001b8Setting up libssh-gcrypt-4:amd64 (0.9.3-2ubuntu2.2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 51%]\u001b[49m\u001b[39m [#############################.............................] \u001b8Setting up libshine3:amd64 (3.1.1-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 52%]\u001b[49m\u001b[39m [##############################............................] \u001b8Setting up libgsm1:amd64 (1.0.18-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 53%]\u001b[49m\u001b[39m [##############################............................] \u001b8Setting up libx264-155:amd64 (2:0.155.2917+git0a84d98-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 54%]\u001b[49m\u001b[39m [###############################...........................] \u001b8Setting up libx265-179:amd64 (3.2.1-1build1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 55%]\u001b[49m\u001b[39m [###############################...........................] \u001b8Setting up libaom0:amd64 (1.0.0.errata1-3build1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 56%]\u001b[49m\u001b[39m [################################..........................] \u001b8Setting up libmysofa1:amd64 (1.0~dfsg0-1) ...\r\n", "Setting up libdc1394-22:amd64 (2.2.5-2.1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 57%]\u001b[49m\u001b[39m [#################################.........................] \u001b8Setting up libcdio18:amd64 (2.0.0-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 58%]\u001b[49m\u001b[39m [#################################.........................] \u001b8Setting up libxvidcore4:amd64 (2:1.3.7-1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 59%]\u001b[49m\u001b[39m [##################################........................] \u001b8Setting up libsnappy1v5:amd64 (1.1.8-1build1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 60%]\u001b[49m\u001b[39m [##################################........................] \u001b8Setting up libass9:amd64 (1:0.14.0-2) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 61%]\u001b[49m\u001b[39m [###################################.......................] \u001b8Setting up libva2:amd64 (2.7.0-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 62%]\u001b[49m\u001b[39m [####################################......................] \u001b8Setting up libigdgmm11:amd64 (20.1.1+ds1-1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 63%]\u001b[49m\u001b[39m [####################################......................] \u001b8Setting up libcodec2-0.9:amd64 (0.9.2-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 64%]\u001b[49m\u001b[39m [#####################################.....................] \u001b8Setting up intel-media-va-driver:amd64 (20.1.1+dfsg1-1) ...\r\n", "Setting up libaacs0:amd64 (0.9.0-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 65%]\u001b[49m\u001b[39m [#####################################.....................] \u001b8Setting up libfftw3-double3:amd64 (3.3.8-2ubuntu1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 66%]\u001b[49m\u001b[39m [######################################....................] \u001b8Setting up librubberband2:amd64 (1.8.2-1build1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 67%]\u001b[49m\u001b[39m [######################################....................] \u001b8Setting up libsndio7.0:amd64 (1.5.0-3) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 68%]\u001b[49m\u001b[39m [#######################################...................] \u001b8Setting up libbdplus0:amd64 (0.1.2-3) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 69%]\u001b[49m\u001b[39m [########################################..................] \u001b8Setting up libvidstab1.1:amd64 (1.1.0-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 70%]\u001b[49m\u001b[39m [########################################..................] \u001b8Setting up libflite1:amd64 (2.1-release-3) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 71%]\u001b[49m\u001b[39m [#########################################.................] \u001b8Setting up libva-drm2:amd64 (2.7.0-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 72%]\u001b[49m\u001b[39m [#########################################.................] \u001b8Setting up ocl-icd-libopencl1:amd64 (2.2.11-1ubuntu1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Setting up libbs2b0:amd64 (3.1.0+dfsg-2.2build1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 73%]\u001b[49m\u001b[39m [##########################################................] \u001b8Setting up libopenal-data (1:1.19.1-1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 74%]\u001b[49m\u001b[39m [###########################################...............] \u001b8Setting up mesa-va-drivers:amd64 (21.2.6-0ubuntu0.1~20.04.2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 75%]\u001b[49m\u001b[39m [###########################################...............] \u001b8Setting up libbluray2:amd64 (1:1.2.0-1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 76%]\u001b[49m\u001b[39m [############################################..............] \u001b8Setting up libsdl2-2.0-0:amd64 (2.0.10+dfsg1-3) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 77%]\u001b[49m\u001b[39m [############################################..............] \u001b8Setting up libva-x11-2:amd64 (2.7.0-2) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 78%]\u001b[49m\u001b[39m [#############################################.............] \u001b8Setting up libwebpmux3:amd64 (0.6.1-2ubuntu0.20.04.1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 79%]\u001b[49m\u001b[39m [#############################################.............] \u001b8Setting up libopenmpt0:amd64 (0.4.11-1build1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 80%]\u001b[49m\u001b[39m [##############################################............] \u001b8Setting up libzvbi-common (0.2.35-17) ...\r\n", "Setting up i965-va-driver:amd64 (2.4.0-0ubuntu1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 81%]\u001b[49m\u001b[39m [###############################################...........] \u001b8Setting up libserd-0-0:amd64 (0.30.2-1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 82%]\u001b[49m\u001b[39m [###############################################...........] \u001b8Setting up libzvbi0:amd64 (0.2.35-17) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 83%]\u001b[49m\u001b[39m [################################################..........] \u001b8Setting up libcdio-cdda2:amd64 (10.2+2.0.0-1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 84%]\u001b[49m\u001b[39m [################################################..........] \u001b8Setting up libcdio-paranoia2:amd64 (10.2+2.0.0-1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 85%]\u001b[49m\u001b[39m [#################################################.........] \u001b8Setting up libopenal1:amd64 (1:1.19.1-1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 86%]\u001b[49m\u001b[39m [##################################################........] \u001b8Setting up libavutil56:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 87%]\u001b[49m\u001b[39m [##################################################........] \u001b8Setting up va-driver-all:amd64 (2.7.0-2) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 88%]\u001b[49m\u001b[39m [###################################################.......] \u001b8Setting up libpostproc55:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Setting up libsord-0-0:amd64 (0.16.4-1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 89%]\u001b[49m\u001b[39m [###################################################.......] \u001b8Setting up libsratom-0-0:amd64 (0.6.4-1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 90%]\u001b[49m\u001b[39m [####################################################......] \u001b8Setting up libswscale5:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 91%]\u001b[49m\u001b[39m [####################################################......] \u001b8Setting up liblilv-0-0:amd64 (0.24.6-1ubuntu0.1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 92%]\u001b[49m\u001b[39m [#####################################################.....] \u001b8Setting up libswresample3:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 93%]\u001b[49m\u001b[39m [######################################################....] \u001b8Setting up libavresample4:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 94%]\u001b[49m\u001b[39m [######################################################....] \u001b8Setting up libavcodec58:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 95%]\u001b[49m\u001b[39m [#######################################################...] \u001b8Setting up libchromaprint1:amd64 (1.4.3-3build1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 96%]\u001b[49m\u001b[39m [#######################################################...] \u001b8Setting up libavformat58:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n", "Setting up libavfilter7:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 97%]\u001b[49m\u001b[39m [########################################################..] \u001b8Setting up libavdevice58:amd64 (7:4.2.7-0ubuntu0.1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 98%]\u001b[49m\u001b[39m [########################################################..] \u001b8Setting up ffmpeg (7:4.2.7-0ubuntu0.1) ...\r\n", "\u001b7\u001b[24;0f\u001b[42m\u001b[30mProgress: [ 99%]\u001b[49m\u001b[39m [#########################################################.] \u001b8" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Processing triggers for man-db (2.9.1-1) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Processing triggers for libc-bin (2.31-0ubuntu9.9) ...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r\n", "\u001b7\u001b[0;24r\u001b8\u001b[1A\u001b[J" ] } ], "source": [ "!sudo apt install -y ffmpeg\n", "!pip install -q mediapy" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:01:49.621156Z", "iopub.status.busy": "2022-12-14T22:01:49.620895Z", "iopub.status.idle": "2022-12-14T22:01:53.546345Z", "shell.execute_reply": "2022-12-14T22:01:53.545234Z" }, "id": "s3khsunT7kWa" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33mWARNING: Skipping opencv-python-headless as it is not installed.\u001b[0m\u001b[33m\r\n", "\u001b[0m" ] } ], "source": [ "!pip uninstall -q -y opencv-python-headless\n", "!pip install -q \"opencv-python-headless<4.3\"" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:01:53.550855Z", "iopub.status.busy": "2022-12-14T22:01:53.550091Z", "iopub.status.idle": "2022-12-14T22:01:55.906037Z", "shell.execute_reply": "2022-12-14T22:01:55.904987Z" }, "id": "dI_1csl6Q-gH" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2022-12-14 22:01:54.870835: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory\n", "2022-12-14 22:01:54.870941: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory\n", "2022-12-14 22:01:54.870971: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.\n" ] } ], "source": [ "# Import libraries\n", "import pathlib\n", "\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "import mediapy as media\n", "import numpy as np\n", "import PIL\n", "\n", "import tensorflow as tf\n", "import tensorflow_hub as hub\n", "import tqdm\n", "\n", "mpl.rcParams.update({\n", " 'font.size': 10,\n", "})" ] }, { "cell_type": "markdown", "metadata": { "id": "Pn8K9oWbmREi" }, "source": [ "获取 kinetics 600 标签列表,并打印前几个标签:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:01:55.911154Z", "iopub.status.busy": "2022-12-14T22:01:55.910347Z", "iopub.status.idle": "2022-12-14T22:01:56.150236Z", "shell.execute_reply": "2022-12-14T22:01:56.149640Z" }, "id": "2VJUAcjhkfb3" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Downloading data from https://raw.githubusercontent.com/tensorflow/models/f8af2291cced43fc9f1d9b41ddbf772ae7b0d7d2/official/projects/movinet/files/kinetics_600_labels.txt\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "8192/9209 [=========================>....] - ETA: 0s" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "9209/9209 [==============================] - 0s 0us/step\n" ] }, { "data": { "text/plain": [ "array(['abseiling', 'acting in play', 'adjusting glasses', 'air drumming',\n", " 'alligator wrestling', 'answering questions', 'applauding',\n", " 'applying cream', 'archaeological excavation', 'archery',\n", " 'arguing', 'arm wrestling', 'arranging flowers',\n", " 'assembling bicycle', 'assembling computer',\n", " 'attending conference', 'auctioning', 'backflip (human)',\n", " 'baking cookies', 'bandaging'], dtype='}\n", " <1>: float32 Tensor, shape=(None, 600)\n" ] } ], "source": [ "sig = model.signatures['serving_default']\n", "print(sig.pretty_printed_signature())" ] }, { "cell_type": "markdown", "metadata": { "id": "M4Xny1ANomi4" }, "source": [ "要在视频上运行此签名,您需要先将外部 `batch` 维度添加到视频中。" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:02:15.714357Z", "iopub.status.busy": "2022-12-14T22:02:15.713796Z", "iopub.status.idle": "2022-12-14T22:02:26.352514Z", "shell.execute_reply": "2022-12-14T22:02:26.351662Z" }, "id": "LBOFEDG1XvZE" }, "outputs": [], "source": [ "#warmup\n", "sig(image = jumpingjack[tf.newaxis, :1]);" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:02:26.356766Z", "iopub.status.busy": "2022-12-14T22:02:26.356178Z", "iopub.status.idle": "2022-12-14T22:02:32.699062Z", "shell.execute_reply": "2022-12-14T22:02:32.698280Z" }, "id": "jCeW3KycVbGn" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(600,)\n", "\n", "CPU times: user 4.03 s, sys: 33.9 ms, total: 4.07 s\n", "Wall time: 6.34 s\n" ] } ], "source": [ "%%time\n", "logits = sig(image = jumpingjack[tf.newaxis, ...])\n", "logits = logits['classifier_head'][0]\n", "\n", "print(logits.shape)\n", "print()" ] }, { "cell_type": "markdown", "metadata": { "id": "AE8doqkPpxED" }, "source": [ "定义一个 `get_top_k` 函数,将上述输出处理打包以备后用。" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:02:32.702743Z", "iopub.status.busy": "2022-12-14T22:02:32.702009Z", "iopub.status.idle": "2022-12-14T22:02:32.707358Z", "shell.execute_reply": "2022-12-14T22:02:32.706653Z" }, "id": "OozPNO6LvZ00" }, "outputs": [], "source": [ "#@title\n", "# Get top_k labels and probabilities\n", "def get_top_k(probs, k=5, label_map=KINETICS_600_LABELS):\n", " \"\"\"Outputs the top k model labels and probabilities on the given video.\n", "\n", " Args:\n", " probs: probability tensor of shape (num_frames, num_classes) that represents\n", " the probability of each class on each frame.\n", " k: the number of top predictions to select.\n", " label_map: a list of labels to map logit indices to label strings.\n", "\n", " Returns:\n", " a tuple of the top-k labels and probabilities.\n", " \"\"\"\n", " # Sort predictions to find top_k\n", " top_predictions = tf.argsort(probs, axis=-1, direction='DESCENDING')[:k]\n", " # collect the labels of top_k predictions\n", " top_labels = tf.gather(label_map, top_predictions, axis=-1)\n", " # decode lablels\n", " top_labels = [label.decode('utf8') for label in top_labels.numpy()]\n", " # top_k probabilities of the predictions\n", " top_probs = tf.gather(probs, top_predictions, axis=-1).numpy()\n", " return tuple(zip(top_labels, top_probs))" ] }, { "cell_type": "markdown", "metadata": { "id": "kTfKMT29pP_Z" }, "source": [ "将 `logits` 转换为概率,并查找视频的前 5 个类。模型确认该视频可能是 `jumping jacks`。" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:02:32.710324Z", "iopub.status.busy": "2022-12-14T22:02:32.709877Z", "iopub.status.idle": "2022-12-14T22:02:32.724105Z", "shell.execute_reply": "2022-12-14T22:02:32.723520Z" }, "id": "Z-SrNGsGV5Mt" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "jumping jacks : 0.834\n", "zumba : 0.008\n", "lunge : 0.003\n", "doing aerobics : 0.003\n", "polishing metal : 0.002\n" ] } ], "source": [ "probs = tf.nn.softmax(logits, axis=-1)\n", "for label, p in get_top_k(probs):\n", " print(f'{label:20s}: {p:.3f}')" ] }, { "cell_type": "markdown", "metadata": { "id": "ltdijoQpqjxZ" }, "source": [ "### 流式模型" ] }, { "cell_type": "markdown", "metadata": { "id": "9dqdUPQXq45b" }, "source": [ "上一部分使用了一个贯穿整个视频的模型。通常在处理视频时,您不希望在最后进行单次预测,而是希望逐帧更新预测。`stream` 版本的模型可让您实现此目的。\n", "\n", "加载 `stream` 版本的模型。" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:02:32.727179Z", "iopub.status.busy": "2022-12-14T22:02:32.726675Z", "iopub.status.idle": "2022-12-14T22:03:17.976845Z", "shell.execute_reply": "2022-12-14T22:03:17.976058Z" }, "id": "mxt0hRXFZkAM" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 43 s, sys: 2.22 s, total: 45.3 s\n", "Wall time: 45.2 s\n" ] } ], "source": [ "%%time\n", "id = 'a2'\n", "mode = 'stream'\n", "version = '3'\n", "hub_url = f'https://tfhub.dev/tensorflow/movinet/{id}/{mode}/kinetics-600/classification/{version}'\n", "model = hub.load(hub_url)" ] }, { "cell_type": "markdown", "metadata": { "id": "pDswtsGgsYGS" }, "source": [ "此模型的用法比 `base` 模型略微复杂一些。您必须跟踪模型 RNN 的内部状态。" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:17.981381Z", "iopub.status.busy": "2022-12-14T22:03:17.980810Z", "iopub.status.idle": "2022-12-14T22:03:17.985558Z", "shell.execute_reply": "2022-12-14T22:03:17.984927Z" }, "id": "0fM_Vb1VsbDm" }, "outputs": [ { "data": { "text/plain": [ "['call', 'init_states']" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(model.signatures.keys())" ] }, { "cell_type": "markdown", "metadata": { "id": "ojr1_iYCtPvp" }, "source": [ "`init_states` 签名将视频的**形状** `(batch, frames, height, width, colors)` 作为输入,并返回包含初始 RNN 状态的大型张量字典: " ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:17.988784Z", "iopub.status.busy": "2022-12-14T22:03:17.988222Z", "iopub.status.idle": "2022-12-14T22:03:17.993434Z", "shell.execute_reply": "2022-12-14T22:03:17.992854Z" }, "id": "67loYFGpo_RP" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "signature_wrapper(*, input_shape).\n", " Args:.\n", " input_shape: int32 Tensor, shape=(5,).\n", " Returns:.\n", " {'state/b0/l0/pool_buffer': <1>, 'state/b0/l0/pool_frame_count': <2>, 'state/b0/l1/pool_buffer': <3>, 'state/b0/l1/pool_frame_count': <4>, 'state/b0/l1/stream_buffer': <5>, 'state/b0/l2/pool_buffer': <6>, 'state/b0/l2/pool_frame_count': <7>, 'state/b0/l2/stream_buffer': <8>, 'state/b1/l0/pool_buffer': <9>, 'state/b1/l0/pool_frame_count': <10>, 'state/b1/l0/stream_buffer': <11>, 'state/b1/l1/pool_buffer': <12>, 'state/b1/l1/pool_frame_count': <13>, 'state/b1/l1/stream_buffer': <14>, 'state/b1/l2/pool_buffer': <15>, 'state/b1/l2/pool_frame_count': <16>, 'state/b1/l2/stream_buffer': <17>, 'state/b1/l3/pool_buffer': <18>, 'state/b1/l3/pool_frame_count': <19>, 'state/b1/l3/stream_buffer': <20>, 'state/b1/l4/pool_buffer': <21>, 'state/b1/l4/pool_frame_count': <22>, 'state/b1/l4/stream_buffer': <23>, 'state/b2/l0/pool_buffer': <24>, 'state/b2/l0/pool_frame_count': <25>, 'state/b2/l0/stream_buffer': <26>, 'state/b2/l1/pool_buffer': <27>, 'state/b2/l1/pool_frame_count': <28>, 'state/b2/l1/stream_buffer': <29>, 'state/b2/l2/pool_buffer': <30>, 'state/b2/l2/pool_frame_count': <31>, 'state/b2/l2/stream_buffer': <32>, 'state/b2/l3/pool_buffer': <33>, 'state/b2/l3/pool_frame_count': <34>, 'state/b2/l3/stream_buffer': <35>, 'state/b2/l4/pool_buffer': <36>, 'state/b2/l4/pool_frame_count': <37>, 'state/b2/l4/stream_buffer': <38>, 'state/b3/l0/pool_buffer': <39>, 'state/b3/l0/pool_frame_count': <40>, 'state/b3/l0/stream_buffer': <41>, 'state/b3/l1/pool_buffer': <42>, 'state/b3/l1/pool_frame_count': <43>, 'state/b3/l1/stream_buffer': <44>, 'state/b3/l2/pool_buffer': <45>, 'state/b3/l2/pool_frame_count': <46>, 'state/b3/l2/stream_buffer': <47>, 'state/b3/l3/pool_buffer': <48>, 'state/b3/l3/pool_frame_count': <49>, 'state/b3/l3/stream_buffer': <50>, 'state/b3/l4/pool_buffer': <51>, 'state/b3/l4/pool_frame_count': <52>, 'state/b3/l5/pool_buffer': <53>, 'state/b3/l5/pool_frame_count': <54>, 'state/b3/l5/stream_buffer': <55>, 'state/b4/l0/pool_buffer': <56>, 'state/b4/l0/pool_frame_count': <57>, 'state/b4/l0/stream_buffer': <58>, 'state/b4/l1/pool_buffer': <59>, 'state/b4/l1/pool_frame_count': <60>, 'state/b4/l2/pool_buffer': <61>, 'state/b4/l2/pool_frame_count': <62>, 'state/b4/l3/pool_buffer': <63>, 'state/b4/l3/pool_frame_count': <64>, 'state/b4/l4/pool_buffer': <65>, 'state/b4/l4/pool_frame_count': <66>, 'state/b4/l5/pool_buffer': <67>, 'state/b4/l5/pool_frame_count': <68>, 'state/b4/l5/stream_buffer': <69>, 'state/b4/l6/pool_buffer': <70>, 'state/b4/l6/pool_frame_count': <71>, 'state/head/pool_buffer': <72>, 'state/head/pool_frame_count': <73>}.\n", " <1>: float32 Tensor, shape=(None, 1, 1, 1, 40).\n", " <2>: int32 Tensor, shape=(1,).\n", " <3>: float32 Tensor, shape=(None, 1, 1, 1, 40).\n", " <4>: int32 Tensor, shape=(1,).\n", " <5>: float32 Tensor, shape=(None, 2, None, None, 40).\n", " ...\n" ] } ], "source": [ "lines = model.signatures['init_states'].pretty_printed_signature().splitlines()\n", "lines = lines[:10]\n", "lines.append(' ...')\n", "print('.\\n'.join(lines))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:17.996420Z", "iopub.status.busy": "2022-12-14T22:03:17.995850Z", "iopub.status.idle": "2022-12-14T22:03:18.225334Z", "shell.execute_reply": "2022-12-14T22:03:18.224581Z" }, "id": "v5lG3vejn5df" }, "outputs": [], "source": [ "initial_state = model.init_states(jumpingjack[tf.newaxis, ...].shape)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:18.229367Z", "iopub.status.busy": "2022-12-14T22:03:18.228877Z", "iopub.status.idle": "2022-12-14T22:03:18.233334Z", "shell.execute_reply": "2022-12-14T22:03:18.232778Z" }, "id": "J3DwmyHnuhH_" }, "outputs": [ { "data": { "text/plain": [ "dict" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(initial_state)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:18.236196Z", "iopub.status.busy": "2022-12-14T22:03:18.235681Z", "iopub.status.idle": "2022-12-14T22:03:18.239780Z", "shell.execute_reply": "2022-12-14T22:03:18.239226Z" }, "id": "K8SyiEU6tB-e" }, "outputs": [ { "data": { "text/plain": [ "['state/b0/l0/pool_buffer',\n", " 'state/b0/l0/pool_frame_count',\n", " 'state/b0/l1/pool_buffer',\n", " 'state/b0/l1/pool_frame_count',\n", " 'state/b0/l1/stream_buffer']" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(sorted(initial_state.keys()))[:5]" ] }, { "cell_type": "markdown", "metadata": { "id": "xeMCzJMBvwRF" }, "source": [ "获得 RNN 的初始状态后,您可以传递状态和视频帧作为输入(保持视频帧的 `(batch, frames, height, width, colors)` 形状)。该模型会返回一个 `(logits, state)` 对。\n", "\n", "刚看到第一帧后,模型不相信视频是“跳跃运动”:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:18.242838Z", "iopub.status.busy": "2022-12-14T22:03:18.242314Z", "iopub.status.idle": "2022-12-14T22:03:18.247502Z", "shell.execute_reply": "2022-12-14T22:03:18.246944Z" }, "id": "McSLdIgtsI3d" }, "outputs": [], "source": [ "inputs = initial_state.copy()\n", "\n", "# Add the batch axis, take the first frme, but keep the frame-axis.\n", "inputs['image'] = jumpingjack[tf.newaxis, 0:1, ...] " ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:18.250305Z", "iopub.status.busy": "2022-12-14T22:03:18.249797Z", "iopub.status.idle": "2022-12-14T22:03:25.171874Z", "shell.execute_reply": "2022-12-14T22:03:25.170985Z" }, "id": "WlH7PqLPX664" }, "outputs": [], "source": [ "# warmup\n", "model(inputs);" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:25.176083Z", "iopub.status.busy": "2022-12-14T22:03:25.175447Z", "iopub.status.idle": "2022-12-14T22:03:25.220492Z", "shell.execute_reply": "2022-12-14T22:03:25.219835Z" }, "id": "7uzNXtu7X5sr" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "golf chipping : 0.427\n", "tackling : 0.134\n", "lunge : 0.056\n", "stretching arm : 0.053\n", "passing american football (not in game): 0.039\n", "\n" ] } ], "source": [ "logits, new_state = model(inputs)\n", "logits = logits[0]\n", "probs = tf.nn.softmax(logits, axis=-1)\n", "\n", "for label, p in get_top_k(probs):\n", " print(f'{label:20s}: {p:.3f}')\n", "\n", "print()" ] }, { "cell_type": "markdown", "metadata": { "id": "oLU644FQwXSb" }, "source": [ "如果您在循环中运行模型,并在每一帧中传递更新的状态,模型会迅速收敛到正确的结果:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:25.223986Z", "iopub.status.busy": "2022-12-14T22:03:25.223426Z", "iopub.status.idle": "2022-12-14T22:03:25.701045Z", "shell.execute_reply": "2022-12-14T22:03:25.700372Z" }, "id": "Fzm7T4ImmIEg" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 516 ms, sys: 17.5 ms, total: 533 ms\n", "Wall time: 473 ms\n" ] } ], "source": [ "%%time\n", "state = initial_state.copy()\n", "all_logits = []\n", "\n", "for n in range(len(jumpingjack)):\n", " inputs = state\n", " inputs['image'] = jumpingjack[tf.newaxis, n:n+1, ...]\n", " result, state = model(inputs)\n", " all_logits.append(logits)\n", "\n", "probabilities = tf.nn.softmax(all_logits, axis=-1)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:25.704441Z", "iopub.status.busy": "2022-12-14T22:03:25.703959Z", "iopub.status.idle": "2022-12-14T22:03:25.710210Z", "shell.execute_reply": "2022-12-14T22:03:25.709590Z" }, "id": "B7UtHoSWcOT2" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "golf chipping : 0.427\n", "tackling : 0.134\n", "lunge : 0.056\n", "stretching arm : 0.053\n", "passing american football (not in game): 0.039\n" ] } ], "source": [ "for label, p in get_top_k(probabilities[-1]):\n", " print(f'{label:20s}: {p:.3f}')" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:25.713437Z", "iopub.status.busy": "2022-12-14T22:03:25.712865Z", "iopub.status.idle": "2022-12-14T22:03:25.851643Z", "shell.execute_reply": "2022-12-14T22:03:25.850948Z" }, "id": "6ffV3NhZcsrv" }, "outputs": [ { "data": { "image/png": "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3/5N77zzjt555x397W9/0wsvvKB//OMfznVmzJihoqIirV27Vp9++qluueUWjRs3Tvv27TttvldeeUVRUVGKiopScXGxJk+erKioKL3zzjuaNWuWoqKi9Morr/hm5wA4ex3yzHkAOI0pU6ZYwcHBVkREhPN18803W5ZlWddee62Vmpr6i9t47bXXrOjoaOfPq1evtiRZX375pXPs7rvvtrp162Y1NTU5x7Kysqy7777bsizLOnDggBUcHGwdOnTIZdtjx4615syZc9rf3dTUZFVWVloFBQXW4MGDrcrKSuvNN9+0evfubVVWVlqVlZUuvxNAYGAOEAC/GzNmjFasWOH8OSIiwvnvkSNHtln+vffeU35+vvbu3avGxkb98MMP+v7773XixAl169ZNktStWzf179/fuU5cXJySkpJ0wQUXuIzV1dVJknbv3i273a5LL73U5Xe1tLQoOjr6tNkvuOACXXDBBSotLdWNN96opKQkvfzyy/qXf/kXJSUlebYjAHQYChAAv4uIiNCAAQNO+95PVVVV6V//9V/1u9/9TgsXLlSvXr20fft2TZ8+XSdPnnQWoC5durisZ7PZ2h1zOBySpOPHjys4OFglJSUKDg52We6npemnqqurNWjQIEnS999/r5CQED377LNqaWlRUFCQ1q5dq9/+9rfOU3cAAgcFCECnUlJSIofDoWeeeUZBQT9OY3z11VfPebupqamy2+2qq6vT6NGj3VonISFBZWVlqqmpUWZmpsrKymS32zVixAht27ZNvXr1Uo8ePc45GwDvYxI0gE5lwIABam1t1XPPPaf9+/frb3/7m1eOsFx66aWaNGmScnJytH79elVWVqq4uFj5+fn67//+73bXCQkJ0YABA/TVV18pIyNDKSkpOnr0qPr166f09HQNGDBAsbGx55wNgPdRgAB0KsOHD9fixYu1aNEiDRkyRC+//LLy8/O9su3Vq1crJydHDz74oAYOHKgJEyZo165d6tu37xnX27Jli6655hpJ0tatW53/BhC4bJZlWf4OAQAA0JE4AgQAAIxDAQIAAMahAAEAAONQgAAAgHEoQAAAwDgUIAAAYBwKEAAAMA4FCAAAGIcCBAAAjEMBAgAAxqEAAQAA4/w/p2AQ9QzgwxAAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "id = tf.argmax(probabilities[-1])\n", "plt.plot(probabilities[:, id])\n", "plt.xlabel('Frame #')\n", "plt.ylabel(f\"p('{KINETICS_600_LABELS[id]}')\");" ] }, { "cell_type": "markdown", "metadata": { "id": "d7MZ_AfRW845" }, "source": [ "您可能会注意到,最终概率比上一部分中运行 `base` 模型的确定性要高得多。`base` 模型返回帧上预测的平均值。" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:25.854874Z", "iopub.status.busy": "2022-12-14T22:03:25.854640Z", "iopub.status.idle": "2022-12-14T22:03:25.862071Z", "shell.execute_reply": "2022-12-14T22:03:25.861357Z" }, "id": "0Wij4tsyW8dR" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "golf chipping : 0.427\n", "tackling : 0.134\n", "lunge : 0.056\n", "stretching arm : 0.053\n", "passing american football (not in game): 0.039\n" ] } ], "source": [ "for label, p in get_top_k(tf.reduce_mean(probabilities, axis=0)):\n", " print(f'{label:20s}: {p:.3f}')" ] }, { "cell_type": "markdown", "metadata": { "id": "qLUoC9ejggGo" }, "source": [ "## 让预测变成随时间变化的动画\n", "\n", "上一部分详细介绍了如何使用这些模型。本部分在此基础上生成一些不错的推断动画。 " ] }, { "cell_type": "markdown", "metadata": { "id": "OnFqOXazoWgy" }, "source": [ "下面的隐藏单元定义了本部分中使用的辅助函数。" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "cellView": "form", "execution": { "iopub.execute_input": "2022-12-14T22:03:25.865558Z", "iopub.status.busy": "2022-12-14T22:03:25.865228Z", "iopub.status.idle": "2022-12-14T22:03:25.881415Z", "shell.execute_reply": "2022-12-14T22:03:25.880753Z" }, "id": "dx55NK3ZoZeh" }, "outputs": [], "source": [ "#@title\n", "# Get top_k labels and probabilities predicted using MoViNets streaming model\n", "def get_top_k_streaming_labels(probs, k=5, label_map=KINETICS_600_LABELS):\n", " \"\"\"Returns the top-k labels over an entire video sequence.\n", "\n", " Args:\n", " probs: probability tensor of shape (num_frames, num_classes) that represents\n", " the probability of each class on each frame.\n", " k: the number of top predictions to select.\n", " label_map: a list of labels to map logit indices to label strings.\n", "\n", " Returns:\n", " a tuple of the top-k probabilities, labels, and logit indices\n", " \"\"\"\n", " top_categories_last = tf.argsort(probs, -1, 'DESCENDING')[-1, :1]\n", " # Sort predictions to find top_k\n", " categories = tf.argsort(probs, -1, 'DESCENDING')[:, :k]\n", " categories = tf.reshape(categories, [-1])\n", "\n", " counts = sorted([\n", " (i.numpy(), tf.reduce_sum(tf.cast(categories == i, tf.int32)).numpy())\n", " for i in tf.unique(categories)[0]\n", " ], key=lambda x: x[1], reverse=True)\n", "\n", " top_probs_idx = tf.constant([i for i, _ in counts[:k]])\n", " top_probs_idx = tf.concat([top_categories_last, top_probs_idx], 0)\n", " # find unique indices of categories\n", " top_probs_idx = tf.unique(top_probs_idx)[0][:k+1]\n", " # top_k probabilities of the predictions\n", " top_probs = tf.gather(probs, top_probs_idx, axis=-1)\n", " top_probs = tf.transpose(top_probs, perm=(1, 0))\n", " # collect the labels of top_k predictions\n", " top_labels = tf.gather(label_map, top_probs_idx, axis=0)\n", " # decode the top_k labels\n", " top_labels = [label.decode('utf8') for label in top_labels.numpy()]\n", "\n", " return top_probs, top_labels, top_probs_idx\n", "\n", "# Plot top_k predictions at a given time step\n", "def plot_streaming_top_preds_at_step(\n", " top_probs,\n", " top_labels,\n", " step=None,\n", " image=None,\n", " legend_loc='lower left',\n", " duration_seconds=10,\n", " figure_height=500,\n", " playhead_scale=0.8,\n", " grid_alpha=0.3):\n", " \"\"\"Generates a plot of the top video model predictions at a given time step.\n", "\n", " Args:\n", " top_probs: a tensor of shape (k, num_frames) representing the top-k\n", " probabilities over all frames.\n", " top_labels: a list of length k that represents the top-k label strings.\n", " step: the current time step in the range [0, num_frames].\n", " image: the image frame to display at the current time step.\n", " legend_loc: the placement location of the legend.\n", " duration_seconds: the total duration of the video.\n", " figure_height: the output figure height.\n", " playhead_scale: scale value for the playhead.\n", " grid_alpha: alpha value for the gridlines.\n", "\n", " Returns:\n", " A tuple of the output numpy image, figure, and axes.\n", " \"\"\"\n", " # find number of top_k labels and frames in the video\n", " num_labels, num_frames = top_probs.shape\n", " if step is None:\n", " step = num_frames\n", " # Visualize frames and top_k probabilities of streaming video\n", " fig = plt.figure(figsize=(6.5, 7), dpi=300)\n", " gs = mpl.gridspec.GridSpec(8, 1)\n", " ax2 = plt.subplot(gs[:-3, :])\n", " ax = plt.subplot(gs[-3:, :])\n", " # display the frame\n", " if image is not None:\n", " ax2.imshow(image, interpolation='nearest')\n", " ax2.axis('off')\n", " # x-axis (frame number)\n", " preview_line_x = tf.linspace(0., duration_seconds, num_frames)\n", " # y-axis (top_k probabilities)\n", " preview_line_y = top_probs\n", "\n", " line_x = preview_line_x[:step+1]\n", " line_y = preview_line_y[:, :step+1]\n", "\n", " for i in range(num_labels):\n", " ax.plot(preview_line_x, preview_line_y[i], label=None, linewidth='1.5',\n", " linestyle=':', color='gray')\n", " ax.plot(line_x, line_y[i], label=top_labels[i], linewidth='2.0')\n", "\n", "\n", " ax.grid(which='major', linestyle=':', linewidth='1.0', alpha=grid_alpha)\n", " ax.grid(which='minor', linestyle=':', linewidth='0.5', alpha=grid_alpha)\n", "\n", " min_height = tf.reduce_min(top_probs) * playhead_scale\n", " max_height = tf.reduce_max(top_probs)\n", " ax.vlines(preview_line_x[step], min_height, max_height, colors='red')\n", " ax.scatter(preview_line_x[step], max_height, color='red')\n", "\n", " ax.legend(loc=legend_loc)\n", "\n", " plt.xlim(0, duration_seconds)\n", " plt.ylabel('Probability')\n", " plt.xlabel('Time (s)')\n", " plt.yscale('log')\n", "\n", " fig.tight_layout()\n", " fig.canvas.draw()\n", "\n", " data = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8)\n", " data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))\n", " plt.close()\n", "\n", " figure_width = int(figure_height * data.shape[1] / data.shape[0])\n", " image = PIL.Image.fromarray(data).resize([figure_width, figure_height])\n", " image = np.array(image)\n", "\n", " return image\n", "\n", "# Plotting top_k predictions from MoViNets streaming model\n", "def plot_streaming_top_preds(\n", " probs,\n", " video,\n", " top_k=5,\n", " video_fps=25.,\n", " figure_height=500,\n", " use_progbar=True):\n", " \"\"\"Generates a video plot of the top video model predictions.\n", "\n", " Args:\n", " probs: probability tensor of shape (num_frames, num_classes) that represents\n", " the probability of each class on each frame.\n", " video: the video to display in the plot.\n", " top_k: the number of top predictions to select.\n", " video_fps: the input video fps.\n", " figure_fps: the output video fps.\n", " figure_height: the height of the output video.\n", " use_progbar: display a progress bar.\n", "\n", " Returns:\n", " A numpy array representing the output video.\n", " \"\"\"\n", " # select number of frames per second\n", " video_fps = 8.\n", " # select height of the image\n", " figure_height = 500\n", " # number of time steps of the given video\n", " steps = video.shape[0]\n", " # estimate duration of the video (in seconds)\n", " duration = steps / video_fps\n", " # estiamte top_k probabilities and corresponding labels\n", " top_probs, top_labels, _ = get_top_k_streaming_labels(probs, k=top_k)\n", "\n", " images = []\n", " step_generator = tqdm.trange(steps) if use_progbar else range(steps)\n", " for i in step_generator:\n", " image = plot_streaming_top_preds_at_step(\n", " top_probs=top_probs,\n", " top_labels=top_labels,\n", " step=i,\n", " image=video[i],\n", " duration_seconds=duration,\n", " figure_height=figure_height,\n", " )\n", " images.append(image)\n", "\n", " return np.array(images)" ] }, { "cell_type": "markdown", "metadata": { "id": "eLgFBslcZOQO" }, "source": [ "首先,在视频的帧上运行流式模型,然后收集 logit:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:25.884638Z", "iopub.status.busy": "2022-12-14T22:03:25.884138Z", "iopub.status.idle": "2022-12-14T22:03:26.134676Z", "shell.execute_reply": "2022-12-14T22:03:26.133918Z" }, "id": "tXWR13wthnK5" }, "outputs": [], "source": [ "init_states = model.init_states(jumpingjack[tf.newaxis].shape)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T22:03:26.138746Z", "iopub.status.busy": "2022-12-14T22:03:26.138230Z", "iopub.status.idle": "2022-12-14T22:03:26.625085Z", "shell.execute_reply": "2022-12-14T22:03:26.624405Z" }, "id": "YqSkt7l8ltwt" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\r", " 0%| | 0/13 [00:00" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# For gif format, set codec='gif'\n", "media.show_video(plot_video, fps=3)" ] }, { "cell_type": "markdown", "metadata": { "id": "LCImgZ3OdJw7" }, "source": [ "## 资源\n", "\n", "预训练模型可从 [TF Hub](https://tfhub.dev/google/collections/movinet/1) 获得。TF Hub 集合还包括为 [TFLite](https://tensorflow.org/lite) 优化的量化模型。\n", "\n", "这些模型的源代码可在 [TensorFlow Model Garden](https://github.com/tensorflow/models/tree/master/official/projects/movinet) 中找到。包括[本教程的较长版本](https://colab.sandbox.google.com/github/tensorflow/models/blob/master/official/projects/movinet/movinet_tutorial.ipynb),较长版本还介绍了如何构建和微调 MoViNet 模型。 " ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "movinet.ipynb", "toc_visible": true }, "kernelspec": { "display_name": "Python 3", "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.9.16" } }, "nbformat": 4, "nbformat_minor": 0 }