diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..fbec5b24fdbd31e980f340678163c702eb294f9e Binary files /dev/null and b/.DS_Store differ diff --git a/.ipynb_checkpoints/2_deep_dive_image_search-checkpoint.ipynb b/.ipynb_checkpoints/2_deep_dive_image_search-checkpoint.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..0cfe42cba7e3607f6b8f3b76ecabfa207ee396d4 --- /dev/null +++ b/.ipynb_checkpoints/2_deep_dive_image_search-checkpoint.ipynb @@ -0,0 +1,821 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e916a938", + "metadata": {}, + "source": [ + "## Index\n", + "\n", + "* [Introduction](#intro)\n", + "* [Preparation](#preparation)\n", + "* [Optimization](#optimization)\n", + " * [Normalization](#normalization)\n", + " * [Object detection](#object-detection)\n", + " * [Dimensionality Reduction](#dimensionality-reduction)\n", + "* [Online Demo](#demo)\n", + "\n", + "# Deep Dive into Real-World Image Search Engine with Towhee \n", + "\n", + "In the [previous tutorial](./1_build_image_search_engine.ipynb), we built and prototyped a proof-of-concept image search engine. With test results from the previous tutorial, we find out that more complex model usually generates larger embeddings, hence leads to better search performance but slower speed.\n", + "\n", + "Now, let's try some new methods to improve performance and save resource, other than changing model. At the end, we will also learn how to deploy it as a simple online demo. With this tutorial, you are able to build a reverse image search engine more practical in production." + ] + }, + { + "cell_type": "markdown", + "id": "d4f5487d", + "metadata": {}, + "source": [ + "## Preparation \n", + "\n", + "Here is a table of search performance with different models from the previous tutorial. We will make some improvement in pipelines and compare model performance in this tutorial. Before getting started, we need to prepare dependencies, example data, and helpful functions, which have detailed explanation in the previous tutorial.\n", + "\n", + "| model | dim | mAP@10 | qps |\n", + "| -- | -- | -- | -- |\n", + "| vgg16 | 512 | 0.658 | 53 |\n", + "| resnet50 | 2048 | 0.886 | 35 |\n", + "| tf_efficientnet_b7 | 2560 | 0.983 | 16 |\n", + "\n", + "**Install dependencies**: install python dependencies with proper versions for your environment." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "35e97f15", + "metadata": {}, + "outputs": [], + "source": [ + "! python -m pip -q install towhee gradio==3.3 opencv-python" + ] + }, + { + "cell_type": "markdown", + "id": "b0d15992", + "metadata": {}, + "source": [ + "**Prepare data**: download example data, which is a subset of [ImageNet](https://www.image-net.org/)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e9247127", + "metadata": {}, + "outputs": [], + "source": [ + "! curl -L https://github.com/towhee-io/examples/releases/download/data/reverse_image_search.zip -O\n", + "! unzip -q -o reverse_image_search.zip" + ] + }, + { + "cell_type": "markdown", + "id": "a497d876", + "metadata": {}, + "source": [ + "**Start Milvus:** install and start Milvus service.\n", + "\n", + "This notebook uses [milvus 2.2.10](https://milvus.io/docs/v2.2.x/install_standalone-docker.md) and [pymilvus 2.2.11](https://milvus.io/docs/release_notes.md#2210)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "83eaaac8", + "metadata": {}, + "outputs": [], + "source": [ + "! wget https://github.com/milvus-io/milvus/releases/download/v2.2.10/milvus-standalone-docker-compose.yml -O docker-compose.yml\n", + "! docker-compose up -d\n", + "! python -m pip install -q pymilvus==2.2.11" + ] + }, + { + "cell_type": "markdown", + "id": "acd8edad", + "metadata": {}, + "source": [ + "**Helpful functions**: import necessary packages, set parameters, and build helpful functions in advance." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "58725efe", + "metadata": {}, + "outputs": [], + "source": [ + "import cv2\n", + "import numpy\n", + "import time\n", + "import csv\n", + "from glob import glob\n", + "from pathlib import Path\n", + "from statistics import mean\n", + "\n", + "from towhee import pipe, ops, DataCollection\n", + "from towhee.types.image import Image\n", + "from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility\n", + "\n", + "# Towhee parameters\n", + "MODEL = 'vgg16'\n", + "DEVICE = None # if None, use default device (cuda is enabled if available)\n", + "\n", + "# Milvus parameters\n", + "HOST = '127.0.0.1'\n", + "PORT = '19530'\n", + "TOPK = 10\n", + "DIM = 512 # dimension of embedding extracted, change with MODEL\n", + "COLLECTION_NAME = 'deep_dive_image_search_' + MODEL\n", + "INDEX_TYPE = 'IVF_FLAT'\n", + "METRIC_TYPE = 'L2'\n", + "\n", + "# patterns of image paths\n", + "INSERT_SRC = './train/*/*.JPEG'\n", + "QUERY_SRC = './test/*/*.JPEG'\n", + "\n", + "to_insert = glob(INSERT_SRC)\n", + "to_test = glob(QUERY_SRC)\n", + "\n", + "# Create milvus collection (delete first if exists)\n", + "def create_milvus_collection(collection_name, dim):\n", + " if utility.has_collection(collection_name):\n", + " utility.drop_collection(collection_name)\n", + " \n", + " fields = [\n", + " FieldSchema(name='path', dtype=DataType.VARCHAR, description='path to image', max_length=500, \n", + " is_primary=True, auto_id=False),\n", + " FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, description='image embedding vectors', dim=dim)\n", + " ]\n", + " schema = CollectionSchema(fields=fields, description='reverse image search')\n", + " collection = Collection(name=collection_name, schema=schema)\n", + "\n", + " index_params = {\n", + " 'metric_type': METRIC_TYPE,\n", + " 'index_type': INDEX_TYPE,\n", + " 'params': {\"nlist\": 2048}\n", + " }\n", + " collection.create_index(field_name='embedding', index_params=index_params)\n", + " return collection\n", + " \n", + "# Read images\n", + "decoder = ops.image_decode('rgb').get_op()\n", + "def read_images(img_paths):\n", + " imgs = []\n", + " for p in img_paths:\n", + " img = decoder(p)\n", + " imgs.append(img)\n", + "# imgs.append(Image(cv2.imread(p), 'RGB'))\n", + " return imgs\n", + "\n", + "# Get ground truth\n", + "def ground_truth(path):\n", + " train_path = str(Path(path).parent).replace('test', 'train')\n", + " return [str(Path(x).resolve()) for x in glob(train_path + '/*.JPEG')]\n", + "\n", + "# Calculate Average Precision\n", + "def get_ap(pred: list, gt: list):\n", + " ct = 0\n", + " score = 0.\n", + " for i, n in enumerate(pred):\n", + " if n in gt:\n", + " ct += 1\n", + " score += (ct / (i + 1))\n", + " if ct == 0:\n", + " ap = 0\n", + " else:\n", + " ap = score / ct\n", + " return ap" + ] + }, + { + "cell_type": "markdown", + "id": "1aadd8e8", + "metadata": {}, + "source": [ + "## Optimization \n", + "\n", + "In the previous tutorial, we have measured the search performance with **mAP** and compared performance for different models. This tutorial will show how to improve performance by normalization, implement pipeline with object detection, and reduce dimension to save resource. \n", + "\n", + "### Normalization \n", + "\n", + "A quick optimization is normalizing the embedding features before indexing them in Milvus. Thus, the L2 metric used by Milvus is equivalent to cosine similarity, which measures the similarity using the angle between vectors while ignoring the magnitude of vectors." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "54480275", + "metadata": {}, + "outputs": [], + "source": [ + "# Embedding pipeline\n", + "p_embed = (\n", + " pipe.input('img_path')\n", + " .map('img_path', 'img', ops.image_decode('rgb'))\n", + " .map('img', 'vec', ops.image_embedding.timm(model_name=MODEL, device=DEVICE))\n", + " .map('vec', 'vec', lambda x: x / numpy.linalg.norm(x, axis=0))\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "1c7f5ecd", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
img_path img vec
./train/parachute/n03888257_31784.JPEG [0.018488767, 0.069933996, 0.00011331425, ...] shape=(512,)
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Display embedding result, no need for implementation\n", + "p_display = p_embed.output('img_path', 'img', 'vec')\n", + "\n", + "DataCollection(p_display(to_insert[0])).show()" + ] + }, + { + "cell_type": "markdown", + "id": "00c3993f", + "metadata": {}, + "source": [ + "Now we have an embedding pipeline extracting normalized vectors for images. Let's build a image search engine based on the embedding pipeline and Milvus collection. We evaluate the engine by inserting candidate data and querying test images. The result table below shows mAP increases for all models. This proves that normalization is able to improve image search." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9bfeb0a2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A new collection created: deep_dive_image_search_vgg16\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "E0209 17:36:01.144905126 63043 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n", + "E0209 17:36:01.296288564 60015 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of data inserted: 1000\n", + "mAP@10: 0.7381725828294281\n" + ] + } + ], + "source": [ + "# Connect to Milvus service\n", + "connections.connect(host=HOST, port=PORT)\n", + "\n", + "# Create collection\n", + "collection = create_milvus_collection(COLLECTION_NAME, DIM)\n", + "print(f'A new collection created: {COLLECTION_NAME}')\n", + "\n", + "# Insert data\n", + "p_insert = (\n", + " p_embed.map(('img_path', 'vec'), 'mr', ops.ann_insert.milvus_client(\n", + " host=HOST,\n", + " port=PORT,\n", + " collection_name=COLLECTION_NAME\n", + " ))\n", + " .output('mr')\n", + ")\n", + "\n", + "for img_path in to_insert:\n", + " p_insert(img_path)\n", + "print('Number of data inserted:', collection.num_entities)\n", + "\n", + "# Performance\n", + "collection.load()\n", + "p_search_pre = (\n", + " p_embed.map('vec', ('search_res'), ops.ann_search.milvus_client(\n", + " host=HOST, port=PORT, limit=TOPK,\n", + " collection_name=COLLECTION_NAME))\n", + " .map('search_res', 'pred', lambda x: [str(Path(y[0]).resolve()) for y in x])\n", + "# .output('img_path', 'pred')\n", + ")\n", + "p_eval = (\n", + " p_search_pre.map('img_path', 'gt', ground_truth)\n", + " .map(('pred', 'gt'), 'ap', get_ap)\n", + " .output('ap')\n", + ")\n", + "\n", + "res = []\n", + "for img_path in to_test:\n", + " ap = p_eval(img_path).get()[0]\n", + " res.append(ap)\n", + "\n", + "mAP = mean(res)\n", + "\n", + "print(f'mAP@{TOPK}: {mAP}')" + ] + }, + { + "cell_type": "markdown", + "id": "79294a06", + "metadata": {}, + "source": [ + "| model | mAP@10 (no norm) | mAP@10 (norm) |\n", + "| -- | -- | -- |\n", + "| vgg16 | 0.658 | 0.738 |\n", + "| resnet50 | 0.886 | 0.917 |\n", + "| tf_efficientnet_b7 | 0.983 | 0.988 |" + ] + }, + { + "cell_type": "markdown", + "id": "8f1d1562", + "metadata": {}, + "source": [ + "### Object Detection \n", + "\n", + "Another common option in reverse image search is object detection. Sometimes the search engine is distracted by small objects or background in the image. Cropping the original image and querying only the main object help to resolve this issue.\n", + "\n", + "Let's take a look at a bad search. With normalized embeddings extracted by `vgg16`, the test image *'./test/rocking_chair/n04099969_23803.JPEG'* gets a list of similar images containing some incorrect results, which has an Average Precision of 0.347." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e9ddee4c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "E0209 17:36:52.111067087 67628 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n" + ] + }, + { + "data": { + "text/html": [ + "
img_path img res ap
./test/rocking_chair/n04099969_23803.JPEG 0.34722222222222215
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "p_search_img = (\n", + " p_search_pre.map('img_path', 'gt', ground_truth)\n", + " .map(('pred', 'gt'), 'ap', get_ap)\n", + " .map('pred', 'res', read_images)\n", + " .output('img_path', 'img', 'res', 'ap')\n", + ")\n", + "DataCollection(p_search_img('./test/rocking_chair/n04099969_23803.JPEG')).show()" + ] + }, + { + "cell_type": "markdown", + "id": "9ce01146", + "metadata": {}, + "source": [ + "Now let's preprocess the test image by focusing on the main object in it. Here we use YOLOv5 to get objects in the image. We select the object with the largest area in the original image, and then search across database with the object image.\n", + "\n", + "- `get_object`: a function to get the image of the largest object detecte, or the original imageif there is no object\n", + "- `p_yolo`: a pipeline to crop the largest object in the given image" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "b2590a56", + "metadata": {}, + "outputs": [], + "source": [ + "def get_max_object(img, boxes):\n", + " if len(boxes) == 0:\n", + " return img\n", + " max_area = 0\n", + " for box in boxes:\n", + " x1, y1, x2, y2 = box\n", + " area = (x2-x1)*(y2-y1)\n", + " if area > max_area:\n", + " max_area = area\n", + " max_img = img[y1:y2,x1:x2,:]\n", + " return max_img\n", + "\n", + "p_yolo = (\n", + " pipe.input('img_path')\n", + " .map('img_path', 'img', ops.image_decode('rgb'))\n", + " .map('img', ('boxes', 'class', 'score'), ops.object_detection.yolov5())\n", + " .map(('img', 'boxes'), 'object', get_max_object)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "845d8504", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://pip.repos.neuron.amazonaws.com\n", + "Requirement already satisfied: pyyaml in /home/mengjia.gu/anaconda3/lib/python3.9/site-packages (6.0)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\n", + "Using cache found in /home/data3/cache/torch/hub/ultralytics_yolov5_master\n", + "YOLOv5 🚀 2023-1-30 Python-3.9.12 torch-1.13.1+cu117 CUDA:0 (NVIDIA GeForce RTX 3080 Ti, 12054MiB)\n", + "\n", + "Fusing layers... \n", + "YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients\n", + "Adding AutoShape... \n" + ] + }, + { + "data": { + "text/html": [ + "
img object
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Display embedding result, no need for implementation\n", + "p_display = (\n", + " p_yolo.output('img', 'object')\n", + ")\n", + "DataCollection(p_display('./test/rocking_chair/n04099969_23803.JPEG')).show()" + ] + }, + { + "cell_type": "markdown", + "id": "4afcf448", + "metadata": {}, + "source": [ + "With object detection, we search for *'./test/rocking_chair/n04099969_23803.JPEG'* again across the same Milvus collection. The average precision has increased by about 45%. It is a great improvement for this query." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "2bff57cb", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://pip.repos.neuron.amazonaws.com\n", + "Requirement already satisfied: pyyaml in /home/mengjia.gu/anaconda3/lib/python3.9/site-packages (6.0)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\n", + "Using cache found in /home/data3/cache/torch/hub/ultralytics_yolov5_master\n", + "YOLOv5 🚀 2023-1-30 Python-3.9.12 torch-1.13.1+cu117 CUDA:0 (NVIDIA GeForce RTX 3080 Ti, 12054MiB)\n", + "\n", + "Fusing layers... \n", + "YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients\n", + "Adding AutoShape... \n", + "E0209 17:37:09.336641703 60015 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n", + "E0209 17:37:09.455251735 68535 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n" + ] + }, + { + "data": { + "text/html": [ + "
img object res ap
0.775
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Search\n", + "p_search_pre_yolo = (\n", + " p_yolo.map('object', 'vec', ops.image_embedding.timm(model_name=MODEL, device=DEVICE))\n", + " .map('vec', 'vec', lambda x: x / numpy.linalg.norm(x, axis=0))\n", + " .map('vec', ('search_res'), ops.ann_search.milvus_client(\n", + " host=HOST, port=PORT, limit=TOPK,\n", + " collection_name=COLLECTION_NAME))\n", + " .map('search_res', 'pred', lambda x: [str(Path(y[0]).resolve()) for y in x])\n", + "# .output('img_path', 'pred')\n", + ")\n", + "\n", + "# Evaluate with AP\n", + "p_search_img_yolo = (\n", + " p_search_pre_yolo.map('img_path', 'gt', ground_truth)\n", + " .map(('pred', 'gt'), 'ap', get_ap)\n", + " .map('pred', 'res', read_images)\n", + " .output('img', 'object', 'res', 'ap')\n", + ")\n", + "DataCollection(p_search_img_yolo('./test/rocking_chair/n04099969_23803.JPEG')).show()" + ] + }, + { + "cell_type": "markdown", + "id": "40eec2ce", + "metadata": {}, + "source": [ + "### Dimensionality Reduction \n", + "\n", + "For a system in production, it is practical to mimimize the embedding dimension in order to reduce memory consumption. [Random projection](https://en.wikipedia.org/wiki/Random_projection) is a dimensionality reduction method for a set vectors in Euclidean space. This method is fast and requires no training. Let's try it with the model `EfficientNet-B7`, which generates embeddings of a high dimension 2560." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7ebf7b56", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A new collection created: tf_efficientnet_b7_512\n" + ] + } + ], + "source": [ + "NEW_MODEL = 'tf_efficientnet_b7'\n", + "OLD_DIM = 2560\n", + "NEW_DIM = 512\n", + "NEW_COLLECTION_NAME = NEW_MODEL + '_' + str(NEW_DIM)\n", + "\n", + "numpy.random.seed(2023)\n", + "projection_matrix = numpy.random.normal(scale=1.0, size=(OLD_DIM, NEW_DIM))\n", + "\n", + "def dim_reduce(vec):\n", + " return numpy.dot(vec, projection_matrix)\n", + "\n", + "connections.connect(host=HOST, port=PORT)\n", + "new_collection = create_milvus_collection(NEW_COLLECTION_NAME, NEW_DIM)\n", + "print(f'A new collection created: {NEW_COLLECTION_NAME}')\n", + "\n", + "\n", + "# Embedding pipeline\n", + "p_embed = (\n", + " pipe.input('img_path')\n", + " .map('img_path', 'img', ops.image_decode('rgb'))\n", + " .map('img', 'vec', ops.image_embedding.timm(model_name=NEW_MODEL, device=DEVICE))\n", + " .map('vec', 'vec', dim_reduce)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "23873a37", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
img_path img vec
./train/parachute/n03888257_31784.JPEG [-3.1598568204094115, -6.1017211401300315, -16.71238753352162, ...] shape=(512,)
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Display embedding result, no need for implementation\n", + "p_display = p_embed.output('img_path', 'img', 'vec')\n", + "\n", + "DataCollection(p_display(to_insert[0])).show()" + ] + }, + { + "cell_type": "markdown", + "id": "c7519f65", + "metadata": {}, + "source": [ + "We've build a new embedding pipeline converts each image into a vector of reduced dimension. Insert and search pipelines are built on top of the embedding pipeline, like what we did in previous sections. We can apply the same evaluation method to this engine.\n", + "\n", + "The dimension of embedding vector is reduced from 2560 to 512, thereby reducing memory usage by 80%. Despite this, it maintains a reasonable performance (97% mAP for reduced vectors vs 98.3% for full vectors)." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "728dfe37", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of data inserted: 1000\n", + "mAP@10: 0.9700658698664651\n" + ] + } + ], + "source": [ + "# Insert pipeline\n", + "p_insert = (\n", + " p_embed.map(('img_path', 'vec'), 'mr', ops.ann_insert.milvus_client(\n", + " host=HOST,\n", + " port=PORT,\n", + " collection_name=NEW_COLLECTION_NAME\n", + " ))\n", + " .output('mr')\n", + ")\n", + "\n", + "# Insert data\n", + "for img_path in to_insert:\n", + " p_insert(img_path)\n", + "print('Number of data inserted:', new_collection.num_entities)\n", + "\n", + "# Search pipeline\n", + "new_collection.load()\n", + "p_search_pre = (\n", + " p_embed.map('vec', 'search_res', ops.ann_search.milvus_client(\n", + " host=HOST, port=PORT, limit=TOPK,\n", + " collection_name=NEW_COLLECTION_NAME))\n", + " .map('search_res', 'pred', lambda x: [str(Path(y[0]).resolve()) for y in x])\n", + "# .output('img_path', 'pred')\n", + ")\n", + "\n", + "# Performance\n", + "p_eval = (\n", + " p_search_pre.map('img_path', 'gt', ground_truth)\n", + " .map(('pred', 'gt'), 'ap', get_ap)\n", + " .output('ap')\n", + ")\n", + "\n", + "res = []\n", + "for img_path in to_test:\n", + " ap = p_eval(img_path).get()[0]\n", + " res.append(ap)\n", + "\n", + "mAP = mean(res)\n", + "\n", + "print(f'mAP@{TOPK}: {mAP}')" + ] + }, + { + "cell_type": "markdown", + "id": "bb38ae46", + "metadata": {}, + "source": [ + "## Online Demo \n", + "\n", + "This section shows how to use Gradio to build a simple showcase with user interface. With Gradio, we simply need to wrap the data processing pipeline via a f_search function. Please note here we search across a prepared Milvus collection *'deep_dive_image_search_vgg16'*, which stores normalized image embeddings extracted by vgg16." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "b03bdefb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "IMPORTANT: You are using gradio version 3.3, however version 3.14.0 is available, please upgrade.\n", + "--------\n", + "Running on local URL: http://127.0.0.1:7860\n", + "Running on public URL: https://c5d025b17a1dac43.gradio.app\n", + "\n", + "This share link expires in 72 hours. For free permanent hosting, check out Spaces: https://www.huggingface.co/spaces\n" + ] + }, + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(,\n", + " 'http://127.0.0.1:7860/',\n", + " 'https://c5d025b17a1dac43.gradio.app')" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gradio\n", + "\n", + "DEMO_MODEL = 'vgg16'\n", + "DEMO_COLLECTION = 'deep_dive_image_search_' + DEMO_MODEL\n", + "\n", + "def f_search(img):\n", + " p_search = (\n", + " pipe.input('img')\n", + " .map('img', 'vec', ops.image_embedding.timm(model_name=DEMO_MODEL, device=DEVICE))\n", + " .map('vec', 'vec', lambda x: x / numpy.linalg.norm(x, axis=0))\n", + " .map('vec', 'search_res', ops.ann_search.milvus_client(\n", + " host=HOST, port=PORT, limit=TOPK,\n", + " collection_name=DEMO_COLLECTION))\n", + " .map('search_res', 'pred', lambda x: [str(Path(y[0]).resolve()) for y in x])\n", + " .output('pred')\n", + " )\n", + " return p_search(img).get()[0]\n", + "\n", + "interface = gradio.Interface(f_search, \n", + " gradio.inputs.Image(type=\"pil\", source='upload'),\n", + " [gradio.outputs.Image(type=\"file\", label=None) for _ in range(TOPK)]\n", + " )\n", + "\n", + "interface.launch(inline=True, share=True)" + ] + }, + { + "cell_type": "markdown", + "id": "ad827836", + "metadata": {}, + "source": [ + "## Explore Towhee\n", + "\n", + "- Built-in pipelines for various tasks\n", + "- Microservice & onnx acceleration powered by TritonServe\n", + "- Docker image with everything ready" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "28a5b088", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/.ipynb_checkpoints/Untitled-checkpoint.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..363fcab7ed6e9634e198cf5555ceb88932c9a245 --- /dev/null +++ b/.ipynb_checkpoints/Untitled-checkpoint.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/2_deep_dive_image_search.ipynb b/2_deep_dive_image_search.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..413b2edc74623d59dc5261246d3c18422f28817c --- /dev/null +++ b/2_deep_dive_image_search.ipynb @@ -0,0 +1,1606 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e916a938", + "metadata": {}, + "source": [ + "## Index\n", + "\n", + "* [Introduction](#intro)\n", + "* [Preparation](#preparation)\n", + "* [Optimization](#optimization)\n", + " * [Normalization](#normalization)\n", + " * [Object detection](#object-detection)\n", + " * [Dimensionality Reduction](#dimensionality-reduction)\n", + "* [Online Demo](#demo)\n", + "\n", + "# Deep Dive into Real-World Image Search Engine with Towhee \n", + "\n", + "In the [previous tutorial](./1_build_image_search_engine.ipynb), we built and prototyped a proof-of-concept image search engine. With test results from the previous tutorial, we find out that more complex model usually generates larger embeddings, hence leads to better search performance but slower speed.\n", + "\n", + "Now, let's try some new methods to improve performance and save resource, other than changing model. At the end, we will also learn how to deploy it as a simple online demo. With this tutorial, you are able to build a reverse image search engine more practical in production." + ] + }, + { + "cell_type": "markdown", + "id": "d4f5487d", + "metadata": {}, + "source": [ + "## Preparation \n", + "\n", + "Here is a table of search performance with different models from the previous tutorial. We will make some improvement in pipelines and compare model performance in this tutorial. Before getting started, we need to prepare dependencies, example data, and helpful functions, which have detailed explanation in the previous tutorial.\n", + "\n", + "| model | dim | mAP@10 | qps |\n", + "| -- | -- | -- | -- |\n", + "| vgg16 | 512 | 0.658 | 53 |\n", + "| resnet50 | 2048 | 0.886 | 35 |\n", + "| tf_efficientnet_b7 | 2560 | 0.983 | 16 |\n", + "\n", + "**Install dependencies**: install python dependencies with proper versions for your environment." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "35e97f15", + "metadata": {}, + "outputs": [], + "source": [ + "# ! python -m pip -q install towhee gradio==3.3 opencv-python" + ] + }, + { + "cell_type": "markdown", + "id": "b0d15992", + "metadata": {}, + "source": [ + "**Prepare data**: download example data, which is a subset of [ImageNet](https://www.image-net.org/)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e9247127", + "metadata": {}, + "outputs": [], + "source": [ + "# ! curl -L https://github.com/towhee-io/examples/releases/download/data/reverse_image_search.zip -O\n", + "# ! unzip -q -o reverse_image_search.zip" + ] + }, + { + "cell_type": "markdown", + "id": "a497d876", + "metadata": {}, + "source": [ + "**Start Milvus:** install and start Milvus service.\n", + "\n", + "This notebook uses [milvus 2.2.10](https://milvus.io/docs/v2.2.x/install_standalone-docker.md) and [pymilvus 2.2.11](https://milvus.io/docs/release_notes.md#2210)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "83eaaac8", + "metadata": {}, + "outputs": [], + "source": [ + "# ! wget https://github.com/milvus-io/milvus/releases/download/v2.2.10/milvus-standalone-docker-compose.yml -O docker-compose.yml\n", + "# ! docker-compose up -d\n", + "# ! python -m pip install -q pymilvus==2.2.11" + ] + }, + { + "cell_type": "markdown", + "id": "acd8edad", + "metadata": {}, + "source": [ + "**Helpful functions**: import necessary packages, set parameters, and build helpful functions in advance." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "58725efe", + "metadata": {}, + "outputs": [], + "source": [ + "import cv2\n", + "import numpy\n", + "import time\n", + "import csv\n", + "from glob import glob\n", + "from pathlib import Path\n", + "from statistics import mean\n", + "\n", + "from towhee import pipe, ops, DataCollection\n", + "from towhee.types.image import Image\n", + "from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility\n", + "\n", + "# Towhee parameters\n", + "MODEL = 'vgg16'\n", + "DEVICE = None # if None, use default device (cuda is enabled if available)\n", + "\n", + "# Milvus parameters\n", + "HOST = '127.0.0.1'\n", + "PORT = '19530'\n", + "TOPK = 10\n", + "DIM = 512 # dimension of embedding extracted, change with MODEL\n", + "COLLECTION_NAME = 'deep_dive_image_search_' + MODEL\n", + "INDEX_TYPE = 'IVF_FLAT'\n", + "METRIC_TYPE = 'L2'\n", + "\n", + "# patterns of image paths\n", + "INSERT_SRC = './train/*/*.JPEG'\n", + "QUERY_SRC = './test/*/*.JPEG'\n", + "\n", + "to_insert = glob(INSERT_SRC)\n", + "to_test = glob(QUERY_SRC)\n", + "\n", + "# Create milvus collection (delete first if exists)\n", + "def create_milvus_collection(collection_name, dim):\n", + " if utility.has_collection(collection_name):\n", + " utility.drop_collection(collection_name)\n", + " \n", + " fields = [\n", + " FieldSchema(name='path', dtype=DataType.VARCHAR, description='path to image', max_length=500, \n", + " is_primary=True, auto_id=False),\n", + " FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, description='image embedding vectors', dim=dim)\n", + " ]\n", + " schema = CollectionSchema(fields=fields, description='reverse image search')\n", + " collection = Collection(name=collection_name, schema=schema)\n", + "\n", + " index_params = {\n", + " 'metric_type': METRIC_TYPE,\n", + " 'index_type': INDEX_TYPE,\n", + " 'params': {\"nlist\": 2048}\n", + " }\n", + " collection.create_index(field_name='embedding', index_params=index_params)\n", + " return collection\n", + " \n", + "# Read images\n", + "decoder = ops.image_decode('rgb').get_op()\n", + "def read_images(img_paths):\n", + " imgs = []\n", + " for p in img_paths:\n", + " img = decoder(p)\n", + " imgs.append(img)\n", + "# imgs.append(Image(cv2.imread(p), 'RGB'))\n", + " return imgs\n", + "\n", + "# Get ground truth\n", + "def ground_truth(path):\n", + " train_path = str(Path(path).parent).replace('test', 'train')\n", + " return [str(Path(x).resolve()) for x in glob(train_path + '/*.JPEG')]\n", + "\n", + "# Calculate Average Precision\n", + "def get_ap(pred: list, gt: list):\n", + " ct = 0\n", + " score = 0.\n", + " for i, n in enumerate(pred):\n", + " if n in gt:\n", + " ct += 1\n", + " score += (ct / (i + 1))\n", + " if ct == 0:\n", + " ap = 0\n", + " else:\n", + " ap = score / ct\n", + " return ap" + ] + }, + { + "cell_type": "markdown", + "id": "1aadd8e8", + "metadata": {}, + "source": [ + "## Optimization \n", + "\n", + "In the previous tutorial, we have measured the search performance with **mAP** and compared performance for different models. This tutorial will show how to improve performance by normalization, implement pipeline with object detection, and reduce dimension to save resource. \n", + "\n", + "### Normalization \n", + "\n", + "A quick optimization is normalizing the embedding features before indexing them in Milvus. Thus, the L2 metric used by Milvus is equivalent to cosine similarity, which measures the similarity using the angle between vectors while ignoring the magnitude of vectors." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "54480275", + "metadata": {}, + "outputs": [], + "source": [ + "# Embedding pipeline\n", + "p_embed = (\n", + " pipe.input('img_path')\n", + " .map('img_path', 'img', ops.image_decode('rgb'))\n", + " .map('img', 'vec', ops.image_embedding.timm(model_name=MODEL, device=DEVICE))\n", + " .map('vec', 'vec', lambda x: x / numpy.linalg.norm(x, axis=0))\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "1c7f5ecd", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:18:14,113 - 140704683062080 - _builder.py-_builder:182 - INFO: Loading pretrained weights from Hugging Face hub (timm/vgg16.tv_in1k)\n", + "2023-08-03 12:18:14,157 - 140704683062080 - connectionpool.py-connectionpool:1048 - DEBUG: Starting new HTTPS connection (1): huggingface.co:443\n", + "2023-08-03 12:18:14,927 - 140704683062080 - connectionpool.py-connectionpool:546 - DEBUG: https://huggingface.co:443 \"HEAD /timm/vgg16.tv_in1k/resolve/main/model.safetensors HTTP/1.1\" 302 0\n", + "2023-08-03 12:18:14,958 - 140704683062080 - _hub.py-_hub:180 - INFO: [timm/vgg16.tv_in1k] Safe alternative available for 'pytorch_model.bin' (as 'model.safetensors'). Loading weights using safetensors.\n", + "2023-08-03 12:18:15,079 - 123145539694592 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:15,080 - 123145556484096 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:15,081 - 123145573273600 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:15,081 - 123145590063104 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:15,081 - 123145539694592 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:15,560 - 140704683062080 - __init__.py-__init__:305 - DEBUG: matplotlib data path: /Users/www.abcom.in/Documents/milvus/.milvusenv/lib/python3.11/site-packages/matplotlib/mpl-data\n", + "2023-08-03 12:18:15,566 - 140704683062080 - __init__.py-__init__:305 - DEBUG: CONFIGDIR=/Users/www.abcom.in/.matplotlib\n", + "2023-08-03 12:18:15,568 - 140704683062080 - __init__.py-__init__:1479 - DEBUG: interactive is False\n", + "2023-08-03 12:18:15,569 - 140704683062080 - __init__.py-__init__:1480 - DEBUG: platform is darwin\n", + "2023-08-03 12:18:15,741 - 140704683062080 - __init__.py-__init__:305 - DEBUG: CACHEDIR=/Users/www.abcom.in/.matplotlib\n", + "2023-08-03 12:18:15,744 - 140704683062080 - font_manager.py-font_manager:1543 - DEBUG: Using fontManager instance from /Users/www.abcom.in/.matplotlib/fontlist-v330.json\n", + "2023-08-03 12:18:15,998 - 140704683062080 - pyplot.py-pyplot:339 - DEBUG: Loaded backend module://matplotlib_inline.backend_inline version unknown.\n", + "2023-08-03 12:18:16,001 - 140704683062080 - pyplot.py-pyplot:339 - DEBUG: Loaded backend module://matplotlib_inline.backend_inline version unknown.\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "
img_path img vec
./train/Kim_Jong_Un/Kim_Jong_Un1.JPEG[0.0, 0.0, 0.0075346665, ...] shape=(512,)
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Display embedding result, no need for implementation\n", + "p_display = p_embed.output('img_path', 'img', 'vec')\n", + "\n", + "DataCollection(p_display(to_insert[0])).show()" + ] + }, + { + "cell_type": "markdown", + "id": "00c3993f", + "metadata": {}, + "source": [ + "Now we have an embedding pipeline extracting normalized vectors for images. Let's build a image search engine based on the embedding pipeline and Milvus collection. We evaluate the engine by inserting candidate data and querying test images. The result table below shows mAP increases for all models. This proves that normalization is able to improve image search." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9bfeb0a2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A new collection created: deep_dive_image_search_vgg16\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:18:38,892 - 140704683062080 - _builder.py-_builder:182 - INFO: Loading pretrained weights from Hugging Face hub (timm/vgg16.tv_in1k)\n", + "2023-08-03 12:18:39,268 - 140704683062080 - connectionpool.py-connectionpool:546 - DEBUG: https://huggingface.co:443 \"HEAD /timm/vgg16.tv_in1k/resolve/main/model.safetensors HTTP/1.1\" 302 0\n", + "2023-08-03 12:18:39,273 - 140704683062080 - _hub.py-_hub:180 - INFO: [timm/vgg16.tv_in1k] Safe alternative available for 'pytorch_model.bin' (as 'model.safetensors'). Loading weights using safetensors.\n", + "2023-08-03 12:18:39,413 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:39,414 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:39,415 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:39,415 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:39,415 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:39,416 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:39,814 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:39,814 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:39,814 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:39,815 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:39,815 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:39,815 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:40,229 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:40,229 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:40,229 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:40,229 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:40,229 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:40,229 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:40,622 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:40,622 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:40,622 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:40,622 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:40,622 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:40,622 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:41,062 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:41,062 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:41,062 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:41,062 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:41,062 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:41,063 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:41,457 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:41,457 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:41,457 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:41,458 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:41,458 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:41,458 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:41,870 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:41,870 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:41,871 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:41,871 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:41,871 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:41,871 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:42,267 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:42,267 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:42,267 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:42,267 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:42,268 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:42,268 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:42,682 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:42,682 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:42,682 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:42,682 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:42,682 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:42,683 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:43,107 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:43,107 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:43,107 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:43,108 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:43,108 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:43,108 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:43,497 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:43,497 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:43,497 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:43,497 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:43,497 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:43,497 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:43,911 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:43,911 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:43,911 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:43,911 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:43,911 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:43,911 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:44,336 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:44,336 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:44,336 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:44,336 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:18:44,337 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:44,337 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:44,752 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:44,752 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:44,752 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:44,753 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:44,753 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:44,753 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:45,148 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:45,148 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:45,148 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:45,149 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:45,149 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:45,149 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:45,556 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:45,556 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:45,556 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:45,557 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:45,557 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:45,557 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:45,965 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:45,965 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:45,965 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:45,966 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:45,966 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:45,966 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:46,371 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:46,371 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:46,371 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:46,371 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:46,371 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:46,372 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:46,755 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:46,755 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:46,755 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:46,756 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:46,756 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:46,756 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:47,362 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:47,362 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:47,362 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:47,362 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:47,363 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:47,363 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:47,750 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:47,751 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:47,751 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:47,751 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:47,751 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:47,751 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:48,161 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:48,161 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:48,161 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:48,161 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:48,161 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:48,161 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:48,550 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:48,550 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:48,550 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:48,551 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:48,551 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:48,551 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:48,931 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:48,931 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:48,931 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:48,931 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:48,931 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:48,932 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:49,333 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:49,333 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:49,333 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:49,333 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:49,333 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:49,333 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:49,729 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:49,729 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:49,729 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:49,729 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:49,730 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:49,730 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:50,109 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:18:50,109 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:50,109 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:50,109 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:50,109 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:50,109 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:50,521 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:50,521 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:50,521 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:50,521 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:50,521 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:50,522 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:50,897 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:50,898 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:50,898 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:50,898 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:50,898 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:50,898 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:51,276 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:51,276 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:51,276 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:51,276 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:51,277 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:51,277 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:51,661 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:51,662 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:51,662 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:51,662 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:51,662 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:51,662 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:52,038 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:52,038 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:52,039 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:52,039 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:52,039 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:52,039 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:52,418 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:52,418 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:52,418 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:52,418 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:52,419 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:52,419 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:52,794 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:52,794 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:52,794 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:52,794 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:52,794 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:52,794 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:53,172 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:53,172 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:53,173 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:53,173 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:53,173 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:53,173 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:53,554 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:53,555 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:53,555 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:53,555 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:53,555 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:53,555 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:53,940 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:53,941 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:53,941 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:53,941 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:53,941 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:53,941 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:54,315 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:54,315 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:54,315 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:54,315 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:54,315 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:54,315 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:54,694 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:54,694 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:54,694 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:54,695 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:54,695 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:54,695 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:55,076 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:55,076 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:55,076 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:55,076 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:18:55,077 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:55,077 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:55,463 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:55,463 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:55,463 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:55,464 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:55,464 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:55,464 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:55,840 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:55,840 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:55,840 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:55,840 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:55,840 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:55,840 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:56,219 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:56,219 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:56,219 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:56,219 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:56,220 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:56,220 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:56,591 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:56,591 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:56,591 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:56,591 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:56,591 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:56,592 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:56,968 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:56,968 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:56,968 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:56,968 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:56,968 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:56,968 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:57,355 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:57,355 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:57,355 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:57,356 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:57,356 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:57,356 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:57,745 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:57,745 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:57,745 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:57,745 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:57,746 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:57,746 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:58,166 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:58,166 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:58,166 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:58,166 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:58,166 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:58,166 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:58,585 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:58,586 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:58,586 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:58,586 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:58,586 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:58,586 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:59,112 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:59,112 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:59,112 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:59,112 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:59,112 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:59,112 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:59,574 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:59,574 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:59,574 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:59,574 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:59,574 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:59,574 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:18:59,980 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:18:59,980 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:18:59,980 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:18:59,981 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:18:59,981 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:18:59,981 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:00,367 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:00,367 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:00,367 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:00,367 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:00,367 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:00,367 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:00,784 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:19:00,784 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:00,784 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:00,784 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:00,784 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:00,784 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:01,157 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:01,157 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:01,157 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:01,157 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:01,158 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:01,158 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:01,520 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:01,520 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:01,520 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:01,520 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:01,520 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:01,520 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:01,880 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:01,880 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:01,880 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:01,880 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:01,881 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:01,881 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:02,254 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:02,254 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:02,254 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:02,254 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:02,255 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:02,255 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:02,626 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:02,626 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:02,626 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:02,626 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:02,626 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:02,626 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:03,000 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:03,000 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:03,000 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:03,001 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:03,001 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:03,001 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:03,379 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:03,379 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:03,379 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:03,379 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:03,379 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:03,379 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:03,768 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:03,768 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:03,768 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:03,768 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:03,768 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:03,769 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:04,131 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:04,131 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:04,131 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:04,132 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:04,132 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:04,132 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:04,494 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:04,494 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:04,494 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:04,494 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:04,494 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:04,494 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:04,855 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:04,855 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:04,855 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:04,855 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:04,855 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:04,856 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:05,225 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:05,225 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:05,225 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:05,225 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:05,225 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:05,225 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:05,591 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:05,591 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:05,591 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:05,591 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:19:05,591 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:05,591 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:05,955 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:05,955 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:05,955 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:05,955 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:05,955 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:05,955 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:06,324 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:06,324 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:06,324 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:06,324 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:06,325 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:06,325 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:06,690 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:06,690 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:06,691 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:06,691 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:06,691 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:06,691 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:07,080 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:07,080 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:07,080 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:07,080 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:07,080 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:07,080 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:07,460 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:07,460 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:07,460 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:07,460 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:07,461 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:07,461 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:07,831 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:07,832 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:07,832 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:07,832 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:07,832 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:07,832 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:08,190 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:08,190 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:08,190 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:08,191 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:08,191 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:08,191 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:08,551 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:08,551 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:08,551 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:08,551 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:08,551 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:08,551 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:08,923 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:08,924 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:08,924 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:08,924 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:08,924 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:08,924 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:09,293 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:09,293 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:09,293 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:09,293 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:09,294 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:09,294 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:09,745 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:09,745 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:09,745 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:09,746 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:09,746 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:09,746 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:10,183 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:10,183 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:10,184 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:10,184 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:10,184 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:10,184 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:10,553 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:10,553 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:10,553 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:10,553 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:10,553 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:10,553 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:10,938 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:19:10,938 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:10,938 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:10,938 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:10,938 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:10,939 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:11,312 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:11,312 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:11,312 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:11,313 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:11,313 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:11,313 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:11,708 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:11,708 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:11,708 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:11,708 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:11,708 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:11,709 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:12,093 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:12,093 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:12,093 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:12,094 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:12,094 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:12,094 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:12,482 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:12,483 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:12,483 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:12,483 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:12,483 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:12,483 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:12,949 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:12,949 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:12,949 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:12,950 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:12,950 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:12,950 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:13,353 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:13,353 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:13,353 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:13,353 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:13,353 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:13,353 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:13,730 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:13,730 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:13,730 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:13,731 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:13,731 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:13,731 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:14,133 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:14,133 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:14,133 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:14,134 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:14,134 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:14,134 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:14,512 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:14,512 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:14,512 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:14,512 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:14,512 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:14,512 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:14,921 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:14,921 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:14,921 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:14,921 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:14,922 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:14,922 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:15,303 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:15,303 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:15,304 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:15,304 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:15,304 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:15,304 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:15,695 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:15,695 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:15,695 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:15,695 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:15,695 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:15,695 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:16,155 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:16,156 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:16,156 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:16,156 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:19:16,156 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:16,156 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:16,528 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:16,528 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:16,529 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:16,529 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:16,529 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:16,529 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:16,914 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:16,914 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:16,914 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:16,914 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:16,915 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:16,915 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:17,304 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:17,304 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:17,304 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:17,304 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:17,304 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:17,304 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:17,698 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:17,698 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:17,699 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:17,699 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:17,699 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:17,699 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:18,074 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:18,074 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:18,074 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:18,074 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:18,074 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:18,074 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:18,483 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:18,484 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:18,484 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:18,484 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:18,484 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:18,484 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:18,920 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:18,920 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:18,920 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:18,921 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:18,921 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:18,921 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:19,381 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:19,381 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:19,381 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:19,381 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:19,381 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:19,381 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:19,772 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:19,773 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:19,773 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:19,773 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:19,773 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:19,773 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:20,170 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:20,170 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:20,170 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:20,170 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:20,170 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:20,171 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:20,582 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:20,582 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:20,582 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:20,583 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:20,583 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:20,583 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:21,000 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:21,000 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:21,000 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:21,000 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:21,000 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:21,000 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:21,489 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:21,489 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:21,489 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:21,489 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:21,489 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:21,489 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:21,954 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:19:21,954 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:21,954 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:21,954 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:21,954 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:21,955 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:22,335 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:22,335 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:22,335 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:22,336 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:22,336 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:22,336 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:22,702 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:22,702 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:22,702 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:22,703 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:22,703 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:22,703 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:23,072 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:23,072 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:23,072 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:23,073 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:23,073 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:23,073 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:23,470 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:23,470 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:23,470 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:23,470 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:23,470 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:23,471 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:23,886 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:23,886 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:23,886 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:23,886 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:23,886 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:23,886 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:24,274 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:24,274 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:24,274 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:24,274 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:24,274 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:24,275 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:24,693 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:24,693 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:24,693 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:24,693 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:24,693 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:24,693 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:25,063 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:25,063 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:25,063 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:25,063 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:25,063 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:25,064 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:25,449 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:25,449 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:25,449 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:25,450 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:25,450 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:25,450 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:25,867 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:25,867 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:25,867 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:25,867 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:25,867 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:25,867 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:26,241 - 123145698848768 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:26,242 - 123145614901248 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:26,242 - 123145665269760 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:26,242 - 123145682059264 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:26,242 - 123145648480256 - node.py-node:167 - INFO: Begin to run Node-ann-insert/milvus-client-3\n", + "2023-08-03 12:19:26,242 - 123145631690752 - node.py-node:167 - INFO: Begin to run Node-_output\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of data inserted: 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:19:29,526 - 140704683062080 - _builder.py-_builder:182 - INFO: Loading pretrained weights from Hugging Face hub (timm/vgg16.tv_in1k)\n", + "2023-08-03 12:19:29,782 - 140704683062080 - connectionpool.py-connectionpool:546 - DEBUG: https://huggingface.co:443 \"HEAD /timm/vgg16.tv_in1k/resolve/main/model.safetensors HTTP/1.1\" 302 0\n", + "2023-08-03 12:19:29,787 - 140704683062080 - _hub.py-_hub:180 - INFO: [timm/vgg16.tv_in1k] Safe alternative available for 'pytorch_model.bin' (as 'model.safetensors'). Loading weights using safetensors.\n", + "2023-08-03 12:19:30,954 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:30,955 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:30,955 - 123145772445696 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:30,955 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:30,956 - 123145789235200 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n", + "2023-08-03 12:19:30,956 - 123145806024704 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:30,956 - 123145822814208 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:30,957 - 123145839603712 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:30,958 - 123145856393216 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:31,355 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:31,355 - 123145722077184 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:31,355 - 123145772445696 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:31,355 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:31,355 - 123145789235200 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n", + "2023-08-03 12:19:31,355 - 123145806024704 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:31,355 - 123145822814208 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:31,355 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:31,355 - 123145839603712 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:31,739 - 123145856393216 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:31,739 - 123145722077184 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:31,739 - 123145772445696 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:31,739 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:31,739 - 123145789235200 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n", + "2023-08-03 12:19:31,739 - 123145806024704 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:31,739 - 123145856393216 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:31,739 - 123145822814208 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:31,740 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:32,133 - 123145839603712 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:32,133 - 123145722077184 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:32,133 - 123145772445696 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:32,133 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:32,133 - 123145789235200 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n", + "2023-08-03 12:19:32,133 - 123145806024704 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:32,134 - 123145856393216 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:32,134 - 123145822814208 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:32,134 - 123145839603712 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:32,514 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:32,514 - 123145722077184 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:32,514 - 123145772445696 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:32,514 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:32,514 - 123145789235200 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n", + "2023-08-03 12:19:32,514 - 123145806024704 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:32,514 - 123145856393216 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:32,514 - 123145822814208 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:32,514 - 123145839603712 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:32,884 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:32,884 - 123145722077184 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:32,885 - 123145772445696 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:32,885 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:32,885 - 123145789235200 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n", + "2023-08-03 12:19:32,885 - 123145806024704 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:32,885 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:32,885 - 123145856393216 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:32,885 - 123145822814208 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:33,266 - 123145839603712 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:33,266 - 123145722077184 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:33,266 - 123145772445696 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:33,266 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:33,267 - 123145789235200 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n", + "2023-08-03 12:19:33,267 - 123145806024704 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:33,267 - 123145839603712 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:33,267 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:33,267 - 123145856393216 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:33,726 - 123145822814208 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:33,726 - 123145722077184 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:33,726 - 123145772445696 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:33,726 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:33,726 - 123145789235200 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n", + "2023-08-03 12:19:33,727 - 123145822814208 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:33,727 - 123145806024704 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:33,727 - 123145839603712 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:33,727 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:34,117 - 123145856393216 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:34,117 - 123145722077184 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:34,118 - 123145772445696 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:34,118 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:34,118 - 123145789235200 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:19:34,118 - 123145856393216 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:34,118 - 123145822814208 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:34,118 - 123145806024704 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:34,118 - 123145839603712 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:34,510 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:34,510 - 123145722077184 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:34,510 - 123145772445696 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:34,511 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:34,511 - 123145789235200 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n", + "2023-08-03 12:19:34,511 - 123145856393216 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:34,511 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:34,511 - 123145822814208 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:34,511 - 123145806024704 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:34,884 - 123145839603712 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:34,884 - 123145722077184 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:34,884 - 123145772445696 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:34,884 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:34,884 - 123145789235200 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n", + "2023-08-03 12:19:34,884 - 123145856393216 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:34,884 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:34,884 - 123145822814208 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:34,885 - 123145806024704 - node.py-node:167 - INFO: Begin to run Node-_output\n", + "2023-08-03 12:19:35,260 - 123145839603712 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:35,260 - 123145722077184 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:35,260 - 123145772445696 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:35,260 - 123145738866688 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:35,260 - 123145789235200 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n", + "2023-08-03 12:19:35,260 - 123145856393216 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:35,261 - 123145839603712 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:35,261 - 123145755656192 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:35,261 - 123145822814208 - node.py-node:167 - INFO: Begin to run Node-_output\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mAP@10: 0.6514077853363568\n" + ] + } + ], + "source": [ + "# Connect to Milvus service\n", + "connections.connect(host=HOST, port=PORT)\n", + "\n", + "# Create collection\n", + "collection = create_milvus_collection(COLLECTION_NAME, DIM)\n", + "print(f'A new collection created: {COLLECTION_NAME}')\n", + "\n", + "# Insert data\n", + "p_insert = (\n", + " p_embed.map(('img_path', 'vec'), 'mr', ops.ann_insert.milvus_client(\n", + " host=HOST,\n", + " port=PORT,\n", + " collection_name=COLLECTION_NAME\n", + " ))\n", + " .output('mr')\n", + ")\n", + "\n", + "for img_path in to_insert:\n", + " p_insert(img_path)\n", + "print('Number of data inserted:', collection.num_entities)\n", + "\n", + "# Performance\n", + "collection.load()\n", + "p_search_pre = (\n", + " p_embed.map('vec', ('search_res'), ops.ann_search.milvus_client(\n", + " host=HOST, port=PORT, limit=TOPK,\n", + " collection_name=COLLECTION_NAME))\n", + " .map('search_res', 'pred', lambda x: [str(Path(y[0]).resolve()) for y in x])\n", + "# .output('img_path', 'pred')\n", + ")\n", + "p_eval = (\n", + " p_search_pre.map('img_path', 'gt', ground_truth)\n", + " .map(('pred', 'gt'), 'ap', get_ap)\n", + " .output('ap')\n", + ")\n", + "\n", + "res = []\n", + "for img_path in to_test:\n", + " ap = p_eval(img_path).get()[0]\n", + " res.append(ap)\n", + "\n", + "mAP = mean(res)\n", + "\n", + "print(f'mAP@{TOPK}: {mAP}')" + ] + }, + { + "cell_type": "markdown", + "id": "79294a06", + "metadata": {}, + "source": [ + "| model | mAP@10 (no norm) | mAP@10 (norm) |\n", + "| -- | -- | -- |\n", + "| vgg16 | 0.658 | 0.738 |\n", + "| resnet50 | 0.886 | 0.917 |\n", + "| tf_efficientnet_b7 | 0.983 | 0.988 |" + ] + }, + { + "cell_type": "markdown", + "id": "8f1d1562", + "metadata": {}, + "source": [ + "### Object Detection \n", + "\n", + "Another common option in reverse image search is object detection. Sometimes the search engine is distracted by small objects or background in the image. Cropping the original image and querying only the main object help to resolve this issue.\n", + "\n", + "Let's take a look at a bad search. With normalized embeddings extracted by `vgg16`, the test image *'./test/rocking_chair/n04099969_23803.JPEG'* gets a list of similar images containing some incorrect results, which has an Average Precision of 0.347." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e9ddee4c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-08-03 12:19:37,260 - 140704683062080 - _builder.py-_builder:182 - INFO: Loading pretrained weights from Hugging Face hub (timm/vgg16.tv_in1k)\n", + "2023-08-03 12:19:37,565 - 140704683062080 - connectionpool.py-connectionpool:546 - DEBUG: https://huggingface.co:443 \"HEAD /timm/vgg16.tv_in1k/resolve/main/model.safetensors HTTP/1.1\" 302 0\n", + "2023-08-03 12:19:37,605 - 140704683062080 - _hub.py-_hub:180 - INFO: [timm/vgg16.tv_in1k] Safe alternative available for 'pytorch_model.bin' (as 'model.safetensors'). Loading weights using safetensors.\n", + "2023-08-03 12:19:37,748 - 123145889972224 - node.py-node:167 - INFO: Begin to run Node-_input\n", + "2023-08-03 12:19:37,749 - 123145906761728 - node.py-node:167 - INFO: Begin to run Node-image-decode-0\n", + "2023-08-03 12:19:37,749 - 123145923551232 - node.py-node:167 - INFO: Begin to run Node-image-embedding/timm-1\n", + "2023-08-03 12:19:37,750 - 123145889972224 - node.py-node:167 - INFO: Begin to run Node-lambda-2\n", + "2023-08-03 12:19:37,750 - 123145957130240 - node.py-node:167 - INFO: Begin to run Node-ann-search/milvus-client-3\n", + "2023-08-03 12:19:37,750 - 123145940340736 - node.py-node:167 - INFO: Begin to run Node-lambda-4\n", + "2023-08-03 12:19:37,750 - 123145973919744 - node.py-node:167 - INFO: Begin to run Node-ground_truth-5\n", + "2023-08-03 12:19:37,751 - 123145990709248 - node.py-node:167 - INFO: Begin to run Node-get_ap-6\n", + "2023-08-03 12:19:37,752 - 123146007498752 - node.py-node:167 - INFO: Begin to run Node-read_images-7\n", + "2023-08-03 12:19:37,752 - 123146024288256 - node.py-node:167 - INFO: Begin to run Node-_output\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "
img_path img res ap
./test/Joe_Biden/Biden11.JPEG 0.375
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "p_search_img = (\n", + " p_search_pre.map('img_path', 'gt', ground_truth)\n", + " .map(('pred', 'gt'), 'ap', get_ap)\n", + " .map('pred', 'res', read_images)\n", + " .output('img_path', 'img', 'res', 'ap')\n", + ")\n", + "DataCollection(p_search_img('./test/Joe_Biden/Biden11.JPEG')).show()" + ] + }, + { + "cell_type": "markdown", + "id": "9ce01146", + "metadata": {}, + "source": [ + "Now let's preprocess the test image by focusing on the main object in it. Here we use YOLOv5 to get objects in the image. We select the object with the largest area in the original image, and then search across database with the object image.\n", + "\n", + "- `get_object`: a function to get the image of the largest object detecte, or the original imageif there is no object\n", + "- `p_yolo`: a pipeline to crop the largest object in the given image" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "b2590a56", + "metadata": {}, + "outputs": [], + "source": [ + "def get_max_object(img, boxes):\n", + " if len(boxes) == 0:\n", + " return img\n", + " max_area = 0\n", + " for box in boxes:\n", + " x1, y1, x2, y2 = box\n", + " area = (x2-x1)*(y2-y1)\n", + " if area > max_area:\n", + " max_area = area\n", + " max_img = img[y1:y2,x1:x2,:]\n", + " return max_img\n", + "\n", + "p_yolo = (\n", + " pipe.input('img_path')\n", + " .map('img_path', 'img', ops.image_decode('rgb'))\n", + " .map('img', ('boxes', 'class', 'score'), ops.object_detection.yolov5())\n", + " .map(('img', 'boxes'), 'object', get_max_object)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "845d8504", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using cache found in /Users/www.abcom.in/.cache/torch/hub/ultralytics_yolov5_master\n", + "WARNING ⚠️ 'ultralytics.yolo.v8' is deprecated since '8.0.136' and will be removed in '8.1.0'. Please use 'ultralytics.models.yolo' instead.\n", + "WARNING ⚠️ 'ultralytics.yolo.utils' is deprecated since '8.0.136' and will be removed in '8.1.0'. Please use 'ultralytics.utils' instead.\n", + "Note this warning may be related to loading older models. You can update your model to current structure with:\n", + " import torch\n", + " ckpt = torch.load(\"model.pt\") # applies to both official and custom models\n", + " torch.save(ckpt, \"updated-model.pt\")\n", + "\n", + "YOLOv5 🚀 2023-7-20 Python-3.11.4 torch-2.0.1 CPU\n", + "\n", + "Fusing layers... \n", + "YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients\n", + "Adding AutoShape... \n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "
img object
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Display embedding result, no need for implementation\n", + "p_display = (\n", + " p_yolo.output('img', 'object')\n", + ")\n", + "DataCollection(p_display('./test/Joe_Biden/Biden11.JPEG')).show()" + ] + }, + { + "cell_type": "markdown", + "id": "4afcf448", + "metadata": {}, + "source": [ + "With object detection, we search for *'./test/rocking_chair/n04099969_23803.JPEG'* again across the same Milvus collection. The average precision has increased by about 45%. It is a great improvement for this query." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "2bff57cb", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using cache found in /Users/www.abcom.in/.cache/torch/hub/ultralytics_yolov5_master\n", + "YOLOv5 🚀 2023-7-20 Python-3.11.4 torch-2.0.1 CPU\n", + "\n", + "Fusing layers... \n", + "YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients\n", + "Adding AutoShape... \n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "
img object res ap
0.1736111111111111
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Search\n", + "p_search_pre_yolo = (\n", + " p_yolo.map('object', 'vec', ops.image_embedding.timm(model_name=MODEL, device=DEVICE))\n", + " .map('vec', 'vec', lambda x: x / numpy.linalg.norm(x, axis=0))\n", + " .map('vec', ('search_res'), ops.ann_search.milvus_client(\n", + " host=HOST, port=PORT, limit=TOPK,\n", + " collection_name=COLLECTION_NAME))\n", + " .map('search_res', 'pred', lambda x: [str(Path(y[0]).resolve()) for y in x])\n", + "# .output('img_path', 'pred')\n", + ")\n", + "\n", + "# Evaluate with AP\n", + "p_search_img_yolo = (\n", + " p_search_pre_yolo.map('img_path', 'gt', ground_truth)\n", + " .map(('pred', 'gt'), 'ap', get_ap)\n", + " .map('pred', 'res', read_images)\n", + " .output('img', 'object', 'res', 'ap')\n", + ")\n", + "DataCollection(p_search_img_yolo('./test/Joe_Biden/Biden11.JPEG')).show()" + ] + }, + { + "cell_type": "markdown", + "id": "bb38ae46", + "metadata": {}, + "source": [ + "## Online Demo \n", + "\n", + "This section shows how to use Gradio to build a simple showcase with user interface. With Gradio, we simply need to wrap the data processing pipeline via a f_search function. Please note here we search across a prepared Milvus collection *'deep_dive_image_search_vgg16'*, which stores normalized image embeddings extracted by vgg16." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "b03bdefb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running on local URL: http://127.0.0.1:7860\n", + "Running on public URL: https://c45c67783334055768.gradio.live\n", + "\n", + "This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces)\n" + ] + }, + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gradio\n", + "\n", + "DEMO_MODEL = 'vgg16'\n", + "DEMO_COLLECTION = 'deep_dive_image_search_' + DEMO_MODEL\n", + "\n", + "def f_search(img):\n", + " p_search = (\n", + " pipe.input('img')\n", + " .map('img', 'vec', ops.image_embedding.timm(model_name=DEMO_MODEL, device=DEVICE))\n", + " .map('vec', 'vec', lambda x: x / numpy.linalg.norm(x, axis=0))\n", + " .map('vec', 'search_res', ops.ann_search.milvus_client(\n", + " host=HOST, port=PORT, limit=TOPK,\n", + " collection_name=DEMO_COLLECTION))\n", + " .map('search_res', 'pred', lambda x: [str(Path(y[0]).resolve()) for y in x])\n", + " .output('pred')\n", + " )\n", + " return p_search(img).get()[0]\n", + "\n", + "interface = gradio.Interface(f_search, \n", + " gradio.inputs.Image(type=\"pil\", source='upload'),\n", + " [gradio.outputs.Image(type=\"filepath\", label=None) for _ in range(TOPK)]\n", + " )\n", + "\n", + "interface.launch(inline=True, share=True)" + ] + }, + { + "cell_type": "markdown", + "id": "ad827836", + "metadata": {}, + "source": [ + "## Explore Towhee\n", + "\n", + "- Built-in pipelines for various tasks\n", + "- Microservice & onnx acceleration powered by TritonServe\n", + "- Docker image with everything ready" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "28a5b088", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8a209034", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".milvusenv", + "language": "python", + "name": ".milvusenv" + }, + "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.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/2_deepdiveimagesearch.py b/2_deepdiveimagesearch.py new file mode 100644 index 0000000000000000000000000000000000000000..ba9ac83fe2d0a3dcac910bb0392d24f1c2282809 --- /dev/null +++ b/2_deepdiveimagesearch.py @@ -0,0 +1,226 @@ + +from milvus import default_server +from pymilvus import connections, utility +default_server.start() + +import cv2 +import numpy +import time +import csv +from glob import glob +from pathlib import Path +from statistics import mean + +from towhee import pipe, ops, DataCollection +from towhee.types.image import Image +from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility + +# Towhee parameters +MODEL = 'vgg16' +DEVICE = None # if None, use default device (cuda is enabled if available) + +# Milvus parameters +HOST = '127.0.0.1' +PORT = '19530' +TOPK = 10 +DIM = 512 # dimension of embedding extracted, change with MODEL +COLLECTION_NAME = 'deep_dive_image_search_' + MODEL +INDEX_TYPE = 'IVF_FLAT' +METRIC_TYPE = 'L2' + +# patterns of image paths +INSERT_SRC = './train/*/*.JPEG' +QUERY_SRC = './test/*/*.JPEG' + +to_insert = glob(INSERT_SRC) +to_test = glob(QUERY_SRC) + +# Create milvus collection (delete first if exists) +def create_milvus_collection(collection_name, dim): + if utility.has_collection(collection_name): + utility.drop_collection(collection_name) + + fields = [ + FieldSchema(name='path', dtype=DataType.VARCHAR, description='path to image', max_length=500, + is_primary=True, auto_id=False), + FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, description='image embedding vectors', dim=dim) + ] + schema = CollectionSchema(fields=fields, description='reverse image search') + collection = Collection(name=collection_name, schema=schema) + + index_params = { + 'metric_type': METRIC_TYPE, + 'index_type': INDEX_TYPE, + 'params': {"nlist": 2048} + } + collection.create_index(field_name='embedding', index_params=index_params) + return collection + +# Read images +decoder = ops.image_decode('rgb').get_op() +def read_images(img_paths): + imgs = [] + for p in img_paths: + img = decoder(p) + imgs.append(img) +# imgs.append(Image(cv2.imread(p), 'RGB')) + return imgs + +# Get ground truth +def ground_truth(path): + train_path = str(Path(path).parent).replace('test', 'train') + return [str(Path(x).resolve()) for x in glob(train_path + '/*.JPEG')] + +# Calculate Average Precision +def get_ap(pred: list, gt: list): + ct = 0 + score = 0. + for i, n in enumerate(pred): + if n in gt: + ct += 1 + score += (ct / (i + 1)) + if ct == 0: + ap = 0 + else: + ap = score / ct + return ap + + +# Embedding pipeline +p_embed = ( + pipe.input('img_path') + .map('img_path', 'img', ops.image_decode('rgb')) + .map('img', 'vec', ops.image_embedding.timm(model_name=MODEL, device=DEVICE)) + .map('vec', 'vec', lambda x: x / numpy.linalg.norm(x, axis=0)) +) + +# Display embedding result, no need for implementation +p_display = p_embed.output('img_path', 'img', 'vec') + +DataCollection(p_display(to_insert[0])).show() + +# Connect to Milvus service +connections.connect(host=HOST, port=PORT) + +# Create collection +collection = create_milvus_collection(COLLECTION_NAME, DIM) +print(f'A new collection created: {COLLECTION_NAME}') + +# Insert data +p_insert = ( + p_embed.map(('img_path', 'vec'), 'mr', ops.ann_insert.milvus_client( + host=HOST, + port=PORT, + collection_name=COLLECTION_NAME + )) + .output('mr') +) + +for img_path in to_insert: + p_insert(img_path) +print('Number of data inserted:', collection.num_entities) + +# Performance +collection.load() +p_search_pre = ( + p_embed.map('vec', ('search_res'), ops.ann_search.milvus_client( + host=HOST, port=PORT, limit=TOPK, + collection_name=COLLECTION_NAME)) + .map('search_res', 'pred', lambda x: [str(Path(y[0]).resolve()) for y in x]) +# .output('img_path', 'pred') +) +p_eval = ( + p_search_pre.map('img_path', 'gt', ground_truth) + .map(('pred', 'gt'), 'ap', get_ap) + .output('ap') +) + +res = [] +for img_path in to_test: + ap = p_eval(img_path).get()[0] + res.append(ap) + +mAP = mean(res) + +print(f'mAP@{TOPK}: {mAP}') + +p_search_img = ( + p_search_pre.map('img_path', 'gt', ground_truth) + .map(('pred', 'gt'), 'ap', get_ap) + .map('pred', 'res', read_images) + .output('img_path', 'img', 'res', 'ap') +) +DataCollection(p_search_img('./test/Joe_Biden/Biden11.JPEG')).show() + + +def get_max_object(img, boxes): + if len(boxes) == 0: + return img + max_area = 0 + for box in boxes: + x1, y1, x2, y2 = box + area = (x2-x1)*(y2-y1) + if area > max_area: + max_area = area + max_img = img[y1:y2,x1:x2,:] + return max_img + +p_yolo = ( + pipe.input('img_path') + .map('img_path', 'img', ops.image_decode('rgb')) + .map('img', ('boxes', 'class', 'score'), ops.object_detection.yolov5()) + .map(('img', 'boxes'), 'object', get_max_object) +) + +# Display embedding result, no need for implementation +p_display = ( + p_yolo.output('img', 'object') +) +DataCollection(p_display('./test/Joe_Biden/Biden11.JPEG')).show() + + +# Search +p_search_pre_yolo = ( + p_yolo.map('object', 'vec', ops.image_embedding.timm(model_name=MODEL, device=DEVICE)) + .map('vec', 'vec', lambda x: x / numpy.linalg.norm(x, axis=0)) + .map('vec', ('search_res'), ops.ann_search.milvus_client( + host=HOST, port=PORT, limit=TOPK, + collection_name=COLLECTION_NAME)) + .map('search_res', 'pred', lambda x: [str(Path(y[0]).resolve()) for y in x]) +# .output('img_path', 'pred') +) + +# Evaluate with AP +p_search_img_yolo = ( + p_search_pre_yolo.map('img_path', 'gt', ground_truth) + .map(('pred', 'gt'), 'ap', get_ap) + .map('pred', 'res', read_images) + .output('img', 'object', 'res', 'ap') +) +DataCollection(p_search_img_yolo('./test/Joe_Biden/Biden11.JPEG')).show() + + +import gradio + +DEMO_MODEL = 'vgg16' +DEMO_COLLECTION = 'deep_dive_image_search_' + DEMO_MODEL + +def f_search(img): + p_search = ( + pipe.input('img') + .map('img', 'vec', ops.image_embedding.timm(model_name=DEMO_MODEL, device=DEVICE)) + .map('vec', 'vec', lambda x: x / numpy.linalg.norm(x, axis=0)) + .map('vec', 'search_res', ops.ann_search.milvus_client( + host=HOST, port=PORT, limit=TOPK, + collection_name=DEMO_COLLECTION)) + .map('search_res', 'pred', lambda x: [str(Path(y[0]).resolve()) for y in x]) + .output('pred') + ) + return p_search(img).get()[0] + +interface = gradio.Interface(f_search, + gradio.inputs.Image(type="pil", source='upload'), + [gradio.outputs.Image(type="filepath", label=None) for _ in range(TOPK)] + ) + +interface.launch(inline=True, share=True) diff --git a/README.md b/README.md index 9c3fd9508e8838fc00f9f8ae782000d167e8c18f..96b45825a16eec5588984b5d29b74bca7424e8d5 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,6 @@ --- -title: Reverseimagepolitical -emoji: 🌍 -colorFrom: red -colorTo: yellow +title: reverseimagepolitical +app_file: 2_deepdiveimagesearch.py sdk: gradio -sdk_version: 3.39.0 -app_file: app.py -pinned: false +sdk_version: 3.37.0 --- - -Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..2db802d8937ae2304c70d844709567e770a06552 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,145 @@ +aiofiles==23.1.0 +aiohttp==3.8.4 +aiosignal==1.3.1 +altair==5.0.1 +anyio==3.7.1 +appnope==0.1.3 +asttokens==2.2.1 +async-timeout==4.0.2 +attrs==23.1.0 +av==10.0.0 +backcall==0.2.0 +beautifulsoup4==4.12.2 +bleach==6.0.0 +certifi==2023.5.7 +charset-normalizer==3.2.0 +click==8.1.6 +comm==0.1.3 +contourpy==1.1.0 +cycler==0.11.0 +debugpy==1.6.7 +decorator==5.1.1 +docutils==0.20.1 +environs==9.5.0 +executing==1.2.0 +fastapi==0.100.0 +ffmpy==0.3.1 +filelock==3.12.2 +fonttools==4.41.0 +frozenlist==1.4.0 +fsspec==2023.6.0 +fvcore==0.1.5.post20221221 +gitdb==4.0.10 +GitPython==3.1.32 +gradio==3.37.0 +gradio_client==0.2.10 +grpcio==1.53.0 +h11==0.14.0 +httpcore==0.17.3 +httpx==0.24.1 +huggingface-hub==0.16.4 +idna==3.4 +importlib-metadata==6.8.0 +iopath==0.1.10 +ipykernel==6.24.0 +ipython==8.14.0 +ipywidgets==8.0.7 +jaraco.classes==3.3.0 +jedi==0.18.2 +Jinja2==3.1.2 +jsonschema==4.18.4 +jsonschema-specifications==2023.7.1 +jupyter_client==8.3.0 +jupyter_core==5.3.1 +jupyterlab-widgets==3.0.8 +keyring==24.2.0 +kiwisolver==1.4.4 +linkify-it-py==2.0.2 +markdown-it-py==2.2.0 +MarkupSafe==2.1.3 +marshmallow==3.19.0 +matplotlib==3.7.2 +matplotlib-inline==0.1.6 +mdit-py-plugins==0.3.3 +mdurl==0.1.2 +milvus==2.2.11 +more-itertools==9.1.0 +mpmath==1.3.0 +multidict==6.0.4 +nest-asyncio==1.5.6 +networkx==3.1 +numpy==1.25.1 +opencv-python==4.8.0.74 +orjson==3.9.2 +packaging==23.1 +pandas==2.0.3 +parameterized==0.9.0 +parso==0.8.3 +pexpect==4.8.0 +pickleshare==0.7.5 +Pillow==10.0.0 +pkginfo==1.9.6 +platformdirs==3.9.1 +portalocker==2.7.0 +prompt-toolkit==3.0.39 +protobuf==4.23.4 +psutil==5.9.5 +ptyprocess==0.7.0 +pure-eval==0.2.2 +pydantic==1.10.11 +pydub==0.25.1 +Pygments==2.15.1 +pymilvus==2.2.11 +pyparsing==3.0.9 +python-dateutil==2.8.2 +python-dotenv==1.0.0 +python-multipart==0.0.6 +pytorchvideo==0.1.3 +pytz==2023.3 +PyYAML==6.0.1 +pyzmq==25.1.0 +readme-renderer==40.0 +referencing==0.30.0 +requests==2.31.0 +requests-toolbelt==1.0.0 +rfc3986==2.0.0 +rich==13.4.2 +rpds-py==0.9.2 +safetensors==0.3.1 +scipy==1.11.1 +seaborn==0.12.2 +semantic-version==2.10.0 +six==1.16.0 +smmap==5.0.0 +sniffio==1.3.0 +soupsieve==2.4.1 +stack-data==0.6.2 +starlette==0.27.0 +sympy==1.12 +tabulate==0.9.0 +tenacity==8.2.2 +termcolor==2.3.0 +timm==0.9.2 +toolz==0.12.0 +torch==2.0.1 +torchvision==0.15.2 +tornado==6.3.2 +towhee==1.1.1 +towhee.models==1.1.1 +tqdm==4.65.0 +traitlets==5.9.0 +twine==4.0.2 +typing_extensions==4.7.1 +tzdata==2023.3 +uc-micro-py==1.0.2 +ujson==5.8.0 +ultralytics==8.0.138 +urllib3==2.0.3 +uvicorn==0.23.1 +wcwidth==0.2.6 +webencodings==0.5.1 +websockets==11.0.3 +widgetsnbextension==4.0.8 +yacs==0.1.8 +yarl==1.9.2 +zipp==3.16.2 diff --git a/reverse_image_search.csv b/reverse_image_search.csv new file mode 100644 index 0000000000000000000000000000000000000000..ee60aba1ad9ba7db4f60d38e2f4ef5e6e08dab3a --- /dev/null +++ b/reverse_image_search.csv @@ -0,0 +1,120 @@ +id,path,label +1,./train/Kim_Jong_Un/Kim_Jong_Un1.JPEG,Kim_Jong_Un +2,./train/Kim_Jong_Un/Kim_Jong_Un10.JPEG,Kim_Jong_Un +3,./train/Kim_Jong_Un/Kim_Jong_Un6.JPEG,Kim_Jong_Un +4,./train/Kim_Jong_Un/Kim_Jong_Un7.JPEG,Kim_Jong_Un +5,./train/Kim_Jong_Un/Kim_Jong_Un8.JPEG,Kim_Jong_Un +6,./train/Kim_Jong_Un/Kim_Jong_Un4.JPEG,Kim_Jong_Un +7,./train/Kim_Jong_Un/Kim_Jong_Un5.JPEG,Kim_Jong_Un +8,./train/Kim_Jong_Un/Kim_Jong_Un9.JPEG,Kim_Jong_Un +9,./train/Kim_Jong_Un/Kim_Jong_Un2.JPEG,Kim_Jong_Un +10,./train/Kim_Jong_Un/Kim_Jong_Un3.JPEG,Kim_Jong_Un +11,./train/Barack_Obama/barack_obama1.JPEG,Barack_Obama +12,./train/Barack_Obama/barack_obama6.JPEG,Barack_Obama +13,./train/Barack_Obama/barack_obama4.JPEG,Barack_Obama +14,./train/Barack_Obama/barack obama7.JPEG,Barack_Obama +15,./train/Barack_Obama/barack_obama8.JPEG,Barack_Obama +16,./train/Barack_Obama/barack_obama10.JPEG,Barack_Obama +17,./train/Barack_Obama/barack_obama9.JPEG,Barack_Obama +18,./train/Barack_Obama/barack_obama5.JPEG,Barack_Obama +19,./train/Barack_Obama/barack_obama2.JPEG,Barack_Obama +20,./train/Barack_Obama/barack_obama3.JPEG,Barack_Obama +21,./train/Emmanuel_Macron/Emmanuel_Macron7.JPEG,Emmanuel_Macron +22,./train/Emmanuel_Macron/Emmanuel_Macron6.JPEG,Emmanuel_Macron +23,./train/Emmanuel_Macron/Emmanuel_Macron1.JPEG,Emmanuel_Macron +24,./train/Emmanuel_Macron/Emmanuel_Macron3.JPEG,Emmanuel_Macron +25,./train/Emmanuel_Macron/Emmanuel_Macron2.JPEG,Emmanuel_Macron +26,./train/Emmanuel_Macron/Emmanuel_Macron10.JPEG,Emmanuel_Macron +27,./train/Emmanuel_Macron/Emmanuel_Macron5.JPEG,Emmanuel_Macron +28,./train/Emmanuel_Macron/Emmanuel_Macron9.JPEG,Emmanuel_Macron +29,./train/Emmanuel_Macron/Emmanuel_Macron8.JPEG,Emmanuel_Macron +30,./train/Emmanuel_Macron/Emmanuel_Macron4.JPEG,Emmanuel_Macron +31,./train/Michelle_Obama/michelle_obama1.JPEG,Michelle_Obama +32,./train/Michelle_Obama/michelle_obama10.JPEG,Michelle_Obama +33,./train/Michelle_Obama/michelle_obama7.JPEG,Michelle_Obama +34,./train/Michelle_Obama/michelle_obama6.JPEG,Michelle_Obama +35,./train/Michelle_Obama/michelle_obama5.JPEG,Michelle_Obama +36,./train/Michelle_Obama/michelle_obama9.JPEG,Michelle_Obama +37,./train/Michelle_Obama/michelle_obama8.JPEG,Michelle_Obama +38,./train/Michelle_Obama/michelle_obama4.JPEG,Michelle_Obama +39,./train/Michelle_Obama/michelle_obama3.JPEG,Michelle_Obama +40,./train/Michelle_Obama/michelle_obama2.JPEG,Michelle_Obama +41,./train/Kamala_Harris/Kamala_Harris4.JPEG,Kamala_Harris +42,./train/Kamala_Harris/Kamala_Harris8.JPEG,Kamala_Harris +43,./train/Kamala_Harris/Kamala_Harris9.JPEG,Kamala_Harris +44,./train/Kamala_Harris/Kamala_Harris10.JPEG,Kamala_Harris +45,./train/Kamala_Harris/Kamala_Harris5.JPEG,Kamala_Harris +46,./train/Kamala_Harris/Kamala_Harris2.JPEG,Kamala_Harris +47,./train/Kamala_Harris/Kamala_Harris3.JPEG,Kamala_Harris +48,./train/Kamala_Harris/Kamala_Harris1.JPEG,Kamala_Harris +49,./train/Kamala_Harris/Kamala_Harris6.JPEG,Kamala_Harris +50,./train/Kamala_Harris/Kamala_Harris7.JPEG,Kamala_Harris +51,./train/Arvind_kejriwal/Arvind_kejriwal1.JPEG,Arvind_kejriwal +52,./train/Arvind_kejriwal/Arvind_kejriwal10.JPEG,Arvind_kejriwal +53,./train/Arvind_kejriwal/Arvind_kejriwal7.JPEG,Arvind_kejriwal +54,./train/Arvind_kejriwal/Arvind_kejriwal6.JPEG,Arvind_kejriwal +55,./train/Arvind_kejriwal/Arvind_kejriwal9.JPEG,Arvind_kejriwal +56,./train/Arvind_kejriwal/Arvind_kejriwal5.JPEG,Arvind_kejriwal +57,./train/Arvind_kejriwal/Arvind_kejriwal4.JPEG,Arvind_kejriwal +58,./train/Arvind_kejriwal/Arvind_kejriwal8.JPEG,Arvind_kejriwal +59,./train/Arvind_kejriwal/Arvind_kejriwal3.JPEG,Arvind_kejriwal +60,./train/Arvind_kejriwal/Arvind_kejriwal2.JPEG,Arvind_kejriwal +61,./train/Joe_Biden/Biden5.JPEG,Joe_Biden +62,./train/Joe_Biden/Biden9.JPEG,Joe_Biden +63,./train/Joe_Biden/Biden8.JPEG,Joe_Biden +64,./train/Joe_Biden/Biden4.JPEG,Joe_Biden +65,./train/Joe_Biden/Biden3.JPEG,Joe_Biden +66,./train/Joe_Biden/Biden2.JPEG,Joe_Biden +67,./train/Joe_Biden/Biden10.JPEG,Joe_Biden +68,./train/Joe_Biden/Biden1.JPEG,Joe_Biden +69,./train/Joe_Biden/Biden7.JPEG,Joe_Biden +70,./train/Joe_Biden/Biden6.JPEG,Joe_Biden +71,./train/Ben_Carson/Ben_Carson3.JPEG,Ben_Carson +72,./train/Ben_Carson/Ben_Carson2.JPEG,Ben_Carson +73,./train/Ben_Carson/Ben_Carson5.JPEG,Ben_Carson +74,./train/Ben_Carson/Ben_Carson9.JPEG,Ben_Carson +75,./train/Ben_Carson/Ben_Carson8.JPEG,Ben_Carson +76,./train/Ben_Carson/Ben_Carson4.JPEG,Ben_Carson +77,./train/Ben_Carson/Ben_Carson7.JPEG,Ben_Carson +78,./train/Ben_Carson/Ben_Carson6.JPEG,Ben_Carson +79,./train/Ben_Carson/Ben_Carson1.JPEG,Ben_Carson +80,./train/Ben_Carson/Ben_Carson10.JPEG,Ben_Carson +81,./train/Narendra_Modi/narendra_modi8.JPEG,Narendra_Modi +82,./train/Narendra_Modi/narendra_modi4.JPEG,Narendra_Modi +83,./train/Narendra_Modi/narendra_modi5.JPEG,Narendra_Modi +84,./train/Narendra_Modi/narendra_modi9.JPEG,Narendra_Modi +85,./train/Narendra_Modi/narendra_modi2.JPEG,Narendra_Modi +86,./train/Narendra_Modi/narendra_modi3.JPEG,Narendra_Modi +87,./train/Narendra_Modi/narendra_modi1.JPEG,Narendra_Modi +88,./train/Narendra_Modi/narendra_modi6.JPEG,Narendra_Modi +89,./train/Narendra_Modi/narendra_modi7.JPEG,Narendra_Modi +90,./train/Narendra_Modi/narendra_modi10.JPEG,Narendra_Modi +91,./train/Rahul_Gandhi/Rahul_Gandhi10.JPEG,Rahul_Gandhi +92,./train/Rahul_Gandhi/Rahul_Gandhi1.JPEG,Rahul_Gandhi +93,./train/Rahul_Gandhi/Rahul_Gandhi6.JPEG,Rahul_Gandhi +94,./train/Rahul_Gandhi/Rahul_Gandhi7.JPEG,Rahul_Gandhi +95,./train/Rahul_Gandhi/Rahul_Gandhi8.JPEG,Rahul_Gandhi +96,./train/Rahul_Gandhi/Rahul_Gandhi4.JPEG,Rahul_Gandhi +97,./train/Rahul_Gandhi/Rahul_Gandhi5.JPEG,Rahul_Gandhi +98,./train/Rahul_Gandhi/Rahul_Gandhi9.JPEG,Rahul_Gandhi +99,./train/Rahul_Gandhi/Rahul_Gandhi2.JPEG,Rahul_Gandhi +100,./train/Rahul_Gandhi/Rahul_Gandhi3.JPEG,Rahul_Gandhi +101,./train/Hillary_Clinton/hillary_clinton2.JPEG,Hillary_Clinton +102,./train/Hillary_Clinton/hillary_clinton3.JPEG,Hillary_Clinton +103,./train/Hillary_Clinton/hillary_clinton8.JPEG,Hillary_Clinton +104,./train/Hillary_Clinton/hillary_clinton10.JPEG,Hillary_Clinton +105,./train/Hillary_Clinton/hillary_clinton5.JPEG,Hillary_Clinton +106,./train/Hillary_Clinton/hillary_clinton9.JPEG,Hillary_Clinton +107,./train/Hillary_Clinton/hillary_clinton6.JPEG,Hillary_Clinton +108,./train/Hillary_Clinton/hillary_clinton7.JPEG,Hillary_Clinton +109,./train/Hillary_Clinton/hillary_clinton1.JPEG,Hillary_Clinton +110,./train/Bernie_Sanders/Bernie_Sanders1.JPEG,Bernie_Sanders +111,./train/Bernie_Sanders/Bernie_Sanders7.JPEG,Bernie_Sanders +112,./train/Bernie_Sanders/Bernie_Sanders6.JPEG,Bernie_Sanders +113,./train/Bernie_Sanders/Bernie_Sanders9.JPEG,Bernie_Sanders +114,./train/Bernie_Sanders/Bernie_Sanders5.JPEG,Bernie_Sanders +115,./train/Bernie_Sanders/Bernie_Sanders4.JPEG,Bernie_Sanders +116,./train/Bernie_Sanders/Bernie_Sanders8.JPEG,Bernie_Sanders +117,./train/Bernie_Sanders/Bernie_Sanders3.JPEG,Bernie_Sanders +118,./train/Bernie_Sanders/Bernie_Sanders10.JPEG,Bernie_Sanders +119,./train/Bernie_Sanders/Bernie_Sanders2.JPEG,Bernie_Sanders diff --git a/test/.DS_Store b/test/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e9734bbbc83032676cbe45dbb2c2248a0051536e Binary files /dev/null and b/test/.DS_Store differ diff --git a/test/Arvind_kejriwal/.DS_Store b/test/Arvind_kejriwal/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/test/Arvind_kejriwal/.DS_Store differ diff --git a/test/Arvind_kejriwal/Arvind_kejriwal11.JPEG b/test/Arvind_kejriwal/Arvind_kejriwal11.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..b1b70515760e177c2c9a6422cf483dc3e385afa5 Binary files /dev/null and b/test/Arvind_kejriwal/Arvind_kejriwal11.JPEG differ diff --git a/test/Barack_Obama/.DS_Store b/test/Barack_Obama/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/test/Barack_Obama/.DS_Store differ diff --git a/test/Barack_Obama/barack_obama11.JPEG b/test/Barack_Obama/barack_obama11.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..1406554984b30ef765a21195738dd5fd0091c2f2 Binary files /dev/null and b/test/Barack_Obama/barack_obama11.JPEG differ diff --git a/test/Ben_Carson/.DS_Store b/test/Ben_Carson/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/test/Ben_Carson/.DS_Store differ diff --git a/test/Ben_Carson/Ben_Carson11.JPEG b/test/Ben_Carson/Ben_Carson11.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..5d3c72a3348fa60fb9d46c0dcc6f64a047a902cd Binary files /dev/null and b/test/Ben_Carson/Ben_Carson11.JPEG differ diff --git a/test/Bernie_Sanders/.DS_Store b/test/Bernie_Sanders/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/test/Bernie_Sanders/.DS_Store differ diff --git a/test/Bernie_Sanders/Bernie_Sanders17.JPEG b/test/Bernie_Sanders/Bernie_Sanders17.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..d5a60ced9af403599b86c760f343ecfaab28571a Binary files /dev/null and b/test/Bernie_Sanders/Bernie_Sanders17.JPEG differ diff --git a/test/Emmanuel_Macron/.DS_Store b/test/Emmanuel_Macron/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/test/Emmanuel_Macron/.DS_Store differ diff --git a/test/Emmanuel_Macron/Emmanuel_Macron11.JPEG b/test/Emmanuel_Macron/Emmanuel_Macron11.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..29aacc798b74ad3eaa76e04b5cd0f0c98d516450 Binary files /dev/null and b/test/Emmanuel_Macron/Emmanuel_Macron11.JPEG differ diff --git a/test/Hillary_Clinton/.DS_Store b/test/Hillary_Clinton/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/test/Hillary_Clinton/.DS_Store differ diff --git a/test/Hillary_Clinton/Hillary_Clinton11.JPEG b/test/Hillary_Clinton/Hillary_Clinton11.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..874cc04c0e0c55a5698215fed3834658c333e57d Binary files /dev/null and b/test/Hillary_Clinton/Hillary_Clinton11.JPEG differ diff --git a/test/Joe_Biden/.DS_Store b/test/Joe_Biden/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..68aa57cdca85e636dd7a85099020e38d4c2aeacc Binary files /dev/null and b/test/Joe_Biden/.DS_Store differ diff --git a/test/Joe_Biden/Biden11.JPEG b/test/Joe_Biden/Biden11.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..f59674684b5658f90a42decd6f3bed4edc6183d4 Binary files /dev/null and b/test/Joe_Biden/Biden11.JPEG differ diff --git a/test/Kamala_Harris/.DS_Store b/test/Kamala_Harris/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/test/Kamala_Harris/.DS_Store differ diff --git a/test/Kamala_Harris/Kamala_Harris11.JPEG b/test/Kamala_Harris/Kamala_Harris11.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..0cd11d5a6f10615bd732fa641e552f0b2989a230 Binary files /dev/null and b/test/Kamala_Harris/Kamala_Harris11.JPEG differ diff --git a/test/Kim_Jong_Un/.DS_Store b/test/Kim_Jong_Un/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/test/Kim_Jong_Un/.DS_Store differ diff --git a/test/Kim_Jong_Un/Kim_Jong_Un11.JPEG b/test/Kim_Jong_Un/Kim_Jong_Un11.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..6db33ccb20b29544cf33aea35d9dc532e1988018 Binary files /dev/null and b/test/Kim_Jong_Un/Kim_Jong_Un11.JPEG differ diff --git a/test/Michelle_Obama/.DS_Store b/test/Michelle_Obama/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/test/Michelle_Obama/.DS_Store differ diff --git a/test/Michelle_Obama/Michelle_Obama11.JPEG b/test/Michelle_Obama/Michelle_Obama11.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..4dacc9fb6ea8a1f17bc231cab1d0dbd66b32f1c0 Binary files /dev/null and b/test/Michelle_Obama/Michelle_Obama11.JPEG differ diff --git a/test/Narendra_Modi/.DS_Store b/test/Narendra_Modi/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/test/Narendra_Modi/.DS_Store differ diff --git a/test/Narendra_Modi/narendra_modi11.JPEG b/test/Narendra_Modi/narendra_modi11.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..f36c3eda330a92f2ae76bbdac74a63f4e1748e64 Binary files /dev/null and b/test/Narendra_Modi/narendra_modi11.JPEG differ diff --git a/test/Rahul_Gandhi/.DS_Store b/test/Rahul_Gandhi/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/test/Rahul_Gandhi/.DS_Store differ diff --git a/test/Rahul_Gandhi/Rahul_Gandhi17.JPEG b/test/Rahul_Gandhi/Rahul_Gandhi17.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..11543fdec6706e62a001f6d4f501606729e239e6 Binary files /dev/null and b/test/Rahul_Gandhi/Rahul_Gandhi17.JPEG differ diff --git a/train/.DS_Store b/train/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2259bc99f982b9fdfd653d123b5540d0db937681 Binary files /dev/null and b/train/.DS_Store differ diff --git a/train/Arvind_kejriwal/.DS_Store b/train/Arvind_kejriwal/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/train/Arvind_kejriwal/.DS_Store differ diff --git a/train/Arvind_kejriwal/Arvind_kejriwal1.JPEG b/train/Arvind_kejriwal/Arvind_kejriwal1.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..5876203fc94de4b7a0209ee4ffc6d507e570e368 Binary files /dev/null and b/train/Arvind_kejriwal/Arvind_kejriwal1.JPEG differ diff --git a/train/Arvind_kejriwal/Arvind_kejriwal10.JPEG b/train/Arvind_kejriwal/Arvind_kejriwal10.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..4bc7206adabf8eafa63e22ac06ba573224224840 Binary files /dev/null and b/train/Arvind_kejriwal/Arvind_kejriwal10.JPEG differ diff --git a/train/Arvind_kejriwal/Arvind_kejriwal2.JPEG b/train/Arvind_kejriwal/Arvind_kejriwal2.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..103f0f02331bda615762775aa66745056c51b607 Binary files /dev/null and b/train/Arvind_kejriwal/Arvind_kejriwal2.JPEG differ diff --git a/train/Arvind_kejriwal/Arvind_kejriwal3.JPEG b/train/Arvind_kejriwal/Arvind_kejriwal3.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..b5e3c85040778a4c223484534f6e515c7f980b0b Binary files /dev/null and b/train/Arvind_kejriwal/Arvind_kejriwal3.JPEG differ diff --git a/train/Arvind_kejriwal/Arvind_kejriwal4.JPEG b/train/Arvind_kejriwal/Arvind_kejriwal4.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..6541e35f7297f407b4b17ea4161373b91852bfd0 Binary files /dev/null and b/train/Arvind_kejriwal/Arvind_kejriwal4.JPEG differ diff --git a/train/Arvind_kejriwal/Arvind_kejriwal5.JPEG b/train/Arvind_kejriwal/Arvind_kejriwal5.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..53004b85feef5e337558ed06caae1052728ac2c5 Binary files /dev/null and b/train/Arvind_kejriwal/Arvind_kejriwal5.JPEG differ diff --git a/train/Arvind_kejriwal/Arvind_kejriwal6.JPEG b/train/Arvind_kejriwal/Arvind_kejriwal6.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..8f5da768ca74ac8592193378b24d6e455be73a0c Binary files /dev/null and b/train/Arvind_kejriwal/Arvind_kejriwal6.JPEG differ diff --git a/train/Arvind_kejriwal/Arvind_kejriwal7.JPEG b/train/Arvind_kejriwal/Arvind_kejriwal7.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..69dc2528d2a3f0bbe5f52cfcdab2a096dc2e3fe4 Binary files /dev/null and b/train/Arvind_kejriwal/Arvind_kejriwal7.JPEG differ diff --git a/train/Arvind_kejriwal/Arvind_kejriwal8.JPEG b/train/Arvind_kejriwal/Arvind_kejriwal8.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..16451a019df1ef58764821ca2172bc1d2efc22e3 Binary files /dev/null and b/train/Arvind_kejriwal/Arvind_kejriwal8.JPEG differ diff --git a/train/Arvind_kejriwal/Arvind_kejriwal9.JPEG b/train/Arvind_kejriwal/Arvind_kejriwal9.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..c3d14b24fe21b2cb5122ed65574f1d569e86f032 Binary files /dev/null and b/train/Arvind_kejriwal/Arvind_kejriwal9.JPEG differ diff --git a/train/Barack_Obama/.DS_Store b/train/Barack_Obama/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/train/Barack_Obama/.DS_Store differ diff --git a/train/Barack_Obama/barack obama7.JPEG b/train/Barack_Obama/barack obama7.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..18b1cd281b723c5ad0a5bf9aadef78200820550a Binary files /dev/null and b/train/Barack_Obama/barack obama7.JPEG differ diff --git a/train/Barack_Obama/barack_obama1.JPEG b/train/Barack_Obama/barack_obama1.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..4a27af4bdeb36cf6392e210907c534a3ec31b185 Binary files /dev/null and b/train/Barack_Obama/barack_obama1.JPEG differ diff --git a/train/Barack_Obama/barack_obama10.JPEG b/train/Barack_Obama/barack_obama10.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..7aaa42c4dd0c3be7c028583f3621a9e08e620a3a Binary files /dev/null and b/train/Barack_Obama/barack_obama10.JPEG differ diff --git a/train/Barack_Obama/barack_obama2.JPEG b/train/Barack_Obama/barack_obama2.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..bef4308539f10a0fa5ad792bd3c75ee305308b8c Binary files /dev/null and b/train/Barack_Obama/barack_obama2.JPEG differ diff --git a/train/Barack_Obama/barack_obama3.JPEG b/train/Barack_Obama/barack_obama3.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..655af18c6510bad84d9c9d4ee52814b5765f5927 Binary files /dev/null and b/train/Barack_Obama/barack_obama3.JPEG differ diff --git a/train/Barack_Obama/barack_obama4.JPEG b/train/Barack_Obama/barack_obama4.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..0937fffc12f7db315822ee1b3562a28cfb4b27a0 Binary files /dev/null and b/train/Barack_Obama/barack_obama4.JPEG differ diff --git a/train/Barack_Obama/barack_obama5.JPEG b/train/Barack_Obama/barack_obama5.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..9e80e5c62f568191922d90772b9dcc91c890fe48 Binary files /dev/null and b/train/Barack_Obama/barack_obama5.JPEG differ diff --git a/train/Barack_Obama/barack_obama6.JPEG b/train/Barack_Obama/barack_obama6.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..0b8e38a7b47549ba522f318ec3e83a6830b3e3ee Binary files /dev/null and b/train/Barack_Obama/barack_obama6.JPEG differ diff --git a/train/Barack_Obama/barack_obama8.JPEG b/train/Barack_Obama/barack_obama8.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..8fce635a8967ff7e3e5f0dae473ff1f01ebf1db3 Binary files /dev/null and b/train/Barack_Obama/barack_obama8.JPEG differ diff --git a/train/Barack_Obama/barack_obama9.JPEG b/train/Barack_Obama/barack_obama9.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..fc381728fe25148f2988fca7bad1a4126a130bce Binary files /dev/null and b/train/Barack_Obama/barack_obama9.JPEG differ diff --git a/train/Ben_Carson/.DS_Store b/train/Ben_Carson/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..da5dec2c3f62ae195c02e3d7936c2f1ef7fb8aa1 Binary files /dev/null and b/train/Ben_Carson/.DS_Store differ diff --git a/train/Ben_Carson/Ben_Carson1.JPEG b/train/Ben_Carson/Ben_Carson1.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..0553334fba2d45c638ebd3a0e985cd79ecd7397c Binary files /dev/null and b/train/Ben_Carson/Ben_Carson1.JPEG differ diff --git a/train/Ben_Carson/Ben_Carson10.JPEG b/train/Ben_Carson/Ben_Carson10.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..b85bb4a2b743eeee74e76ade23ae3d4635e83791 Binary files /dev/null and b/train/Ben_Carson/Ben_Carson10.JPEG differ diff --git a/train/Ben_Carson/Ben_Carson2.JPEG b/train/Ben_Carson/Ben_Carson2.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..830e00a2425555c8625aef9764c3804e156b16b0 Binary files /dev/null and b/train/Ben_Carson/Ben_Carson2.JPEG differ diff --git a/train/Ben_Carson/Ben_Carson3.JPEG b/train/Ben_Carson/Ben_Carson3.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..36ad17a5797e690d94ecf81028e0311113e1ddd1 Binary files /dev/null and b/train/Ben_Carson/Ben_Carson3.JPEG differ diff --git a/train/Ben_Carson/Ben_Carson4.JPEG b/train/Ben_Carson/Ben_Carson4.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..dfa181b36bf618a546e5c63875da0ac6f471a2eb Binary files /dev/null and b/train/Ben_Carson/Ben_Carson4.JPEG differ diff --git a/train/Ben_Carson/Ben_Carson5.JPEG b/train/Ben_Carson/Ben_Carson5.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..c55e25fd5a78094d0aac511d25285b258bb1a9a3 Binary files /dev/null and b/train/Ben_Carson/Ben_Carson5.JPEG differ diff --git a/train/Ben_Carson/Ben_Carson6.JPEG b/train/Ben_Carson/Ben_Carson6.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..fd6864b2c2dd3fcbab076548b64f59bfaee30432 Binary files /dev/null and b/train/Ben_Carson/Ben_Carson6.JPEG differ diff --git a/train/Ben_Carson/Ben_Carson7.JPEG b/train/Ben_Carson/Ben_Carson7.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..bba2c4264763347c21df471b637d2b0484486a61 Binary files /dev/null and b/train/Ben_Carson/Ben_Carson7.JPEG differ diff --git a/train/Ben_Carson/Ben_Carson8.JPEG b/train/Ben_Carson/Ben_Carson8.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..9191962e4fd9de3bf0e7611ca2d81fd690c6967c Binary files /dev/null and b/train/Ben_Carson/Ben_Carson8.JPEG differ diff --git a/train/Ben_Carson/Ben_Carson9.JPEG b/train/Ben_Carson/Ben_Carson9.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..24146ec02f5b20166d71c4ace0035df5528f8abd Binary files /dev/null and b/train/Ben_Carson/Ben_Carson9.JPEG differ diff --git a/train/Bernie_Sanders/.DS_Store b/train/Bernie_Sanders/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/train/Bernie_Sanders/.DS_Store differ diff --git a/train/Bernie_Sanders/Bernie_Sanders1.JPEG b/train/Bernie_Sanders/Bernie_Sanders1.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..427efb067aca9fa7507f6b6881095b63a414be1b Binary files /dev/null and b/train/Bernie_Sanders/Bernie_Sanders1.JPEG differ diff --git a/train/Bernie_Sanders/Bernie_Sanders10.JPEG b/train/Bernie_Sanders/Bernie_Sanders10.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..d458566fe8cb85fac293e55438afc78d1560eac7 Binary files /dev/null and b/train/Bernie_Sanders/Bernie_Sanders10.JPEG differ diff --git a/train/Bernie_Sanders/Bernie_Sanders2.JPEG b/train/Bernie_Sanders/Bernie_Sanders2.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..367fd8fa7570384531e57919c719413a56ca503e Binary files /dev/null and b/train/Bernie_Sanders/Bernie_Sanders2.JPEG differ diff --git a/train/Bernie_Sanders/Bernie_Sanders3.JPEG b/train/Bernie_Sanders/Bernie_Sanders3.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..3ec0363b09fd3652029dc4c61e9ffd4cf5fa294c Binary files /dev/null and b/train/Bernie_Sanders/Bernie_Sanders3.JPEG differ diff --git a/train/Bernie_Sanders/Bernie_Sanders4.JPEG b/train/Bernie_Sanders/Bernie_Sanders4.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..72f568d21f7e0376d9c6f7a7410be9ea1b8e9b8a Binary files /dev/null and b/train/Bernie_Sanders/Bernie_Sanders4.JPEG differ diff --git a/train/Bernie_Sanders/Bernie_Sanders5.JPEG b/train/Bernie_Sanders/Bernie_Sanders5.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..28dd2b77f0ddab6a6d770102b69459e32cbcada0 Binary files /dev/null and b/train/Bernie_Sanders/Bernie_Sanders5.JPEG differ diff --git a/train/Bernie_Sanders/Bernie_Sanders6.JPEG b/train/Bernie_Sanders/Bernie_Sanders6.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..8e86532ddbdcc01a7d480e7efd3ed3fac11c78a9 Binary files /dev/null and b/train/Bernie_Sanders/Bernie_Sanders6.JPEG differ diff --git a/train/Bernie_Sanders/Bernie_Sanders7.JPEG b/train/Bernie_Sanders/Bernie_Sanders7.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..3413942544112bd2d741fcc70dee2b60403bd91f Binary files /dev/null and b/train/Bernie_Sanders/Bernie_Sanders7.JPEG differ diff --git a/train/Bernie_Sanders/Bernie_Sanders8.JPEG b/train/Bernie_Sanders/Bernie_Sanders8.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..05640d311c8fc9d77294ef039a012384e9d0248d Binary files /dev/null and b/train/Bernie_Sanders/Bernie_Sanders8.JPEG differ diff --git a/train/Bernie_Sanders/Bernie_Sanders9.JPEG b/train/Bernie_Sanders/Bernie_Sanders9.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..394d26e69964fac31eb8721e2949b7b2abc967df Binary files /dev/null and b/train/Bernie_Sanders/Bernie_Sanders9.JPEG differ diff --git a/train/Emmanuel_Macron/.DS_Store b/train/Emmanuel_Macron/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/train/Emmanuel_Macron/.DS_Store differ diff --git a/train/Emmanuel_Macron/Emmanuel_Macron1.JPEG b/train/Emmanuel_Macron/Emmanuel_Macron1.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..494937cea13a05fed46537b13e5d95b9d172e4a8 Binary files /dev/null and b/train/Emmanuel_Macron/Emmanuel_Macron1.JPEG differ diff --git a/train/Emmanuel_Macron/Emmanuel_Macron10.JPEG b/train/Emmanuel_Macron/Emmanuel_Macron10.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..ad0c43c0909f1856e78c5a15215c62f11d2fe653 Binary files /dev/null and b/train/Emmanuel_Macron/Emmanuel_Macron10.JPEG differ diff --git a/train/Emmanuel_Macron/Emmanuel_Macron2.JPEG b/train/Emmanuel_Macron/Emmanuel_Macron2.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..b0ce5cb5b07fc175f7e4178023286053694c5dc3 Binary files /dev/null and b/train/Emmanuel_Macron/Emmanuel_Macron2.JPEG differ diff --git a/train/Emmanuel_Macron/Emmanuel_Macron3.JPEG b/train/Emmanuel_Macron/Emmanuel_Macron3.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..3c67ae94e260907870e8d94831a77183a204ae9b Binary files /dev/null and b/train/Emmanuel_Macron/Emmanuel_Macron3.JPEG differ diff --git a/train/Emmanuel_Macron/Emmanuel_Macron4.JPEG b/train/Emmanuel_Macron/Emmanuel_Macron4.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..904cc9eb5c3dc302ace52b7804d334df97c8f9d1 Binary files /dev/null and b/train/Emmanuel_Macron/Emmanuel_Macron4.JPEG differ diff --git a/train/Emmanuel_Macron/Emmanuel_Macron5.JPEG b/train/Emmanuel_Macron/Emmanuel_Macron5.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..b36451c0b047f454505ed3185b5d5527e75ee1c3 Binary files /dev/null and b/train/Emmanuel_Macron/Emmanuel_Macron5.JPEG differ diff --git a/train/Emmanuel_Macron/Emmanuel_Macron6.JPEG b/train/Emmanuel_Macron/Emmanuel_Macron6.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..91a8a929ae2449cc4453262e4e30639108d6866a Binary files /dev/null and b/train/Emmanuel_Macron/Emmanuel_Macron6.JPEG differ diff --git a/train/Emmanuel_Macron/Emmanuel_Macron7.JPEG b/train/Emmanuel_Macron/Emmanuel_Macron7.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..978a44167543f5edacb720f0e67c16fdd4964f44 Binary files /dev/null and b/train/Emmanuel_Macron/Emmanuel_Macron7.JPEG differ diff --git a/train/Emmanuel_Macron/Emmanuel_Macron8.JPEG b/train/Emmanuel_Macron/Emmanuel_Macron8.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..5167697c72140644d288c44ebee2d091bc332322 Binary files /dev/null and b/train/Emmanuel_Macron/Emmanuel_Macron8.JPEG differ diff --git a/train/Emmanuel_Macron/Emmanuel_Macron9.JPEG b/train/Emmanuel_Macron/Emmanuel_Macron9.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..c1ab2190baa68929163da322d733b52f63bfa8f6 Binary files /dev/null and b/train/Emmanuel_Macron/Emmanuel_Macron9.JPEG differ diff --git a/train/Hillary_Clinton/.DS_Store b/train/Hillary_Clinton/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/train/Hillary_Clinton/.DS_Store differ diff --git a/train/Hillary_Clinton/hillary_clinton1.JPEG b/train/Hillary_Clinton/hillary_clinton1.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..59a62f5c0ba99d2861c84921f003f534f61d2e3e Binary files /dev/null and b/train/Hillary_Clinton/hillary_clinton1.JPEG differ diff --git a/train/Hillary_Clinton/hillary_clinton10.JPEG b/train/Hillary_Clinton/hillary_clinton10.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..4b908f061639cc7477ad9adbadd527cde2dc30b4 Binary files /dev/null and b/train/Hillary_Clinton/hillary_clinton10.JPEG differ diff --git a/train/Hillary_Clinton/hillary_clinton2.JPEG b/train/Hillary_Clinton/hillary_clinton2.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..8e4f4b55403fbe40718f4976fd41fee88e5db449 Binary files /dev/null and b/train/Hillary_Clinton/hillary_clinton2.JPEG differ diff --git a/train/Hillary_Clinton/hillary_clinton3.JPEG b/train/Hillary_Clinton/hillary_clinton3.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..3f56d5f82d059f8a6095fce2f7b59b215192a6d7 Binary files /dev/null and b/train/Hillary_Clinton/hillary_clinton3.JPEG differ diff --git a/train/Hillary_Clinton/hillary_clinton5.JPEG b/train/Hillary_Clinton/hillary_clinton5.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..055a081cf8bb8eae3d999396ae9099913059c2ff Binary files /dev/null and b/train/Hillary_Clinton/hillary_clinton5.JPEG differ diff --git a/train/Hillary_Clinton/hillary_clinton6.JPEG b/train/Hillary_Clinton/hillary_clinton6.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..1f53ed67d99d35488a41df55c1f89178d2c264ff Binary files /dev/null and b/train/Hillary_Clinton/hillary_clinton6.JPEG differ diff --git a/train/Hillary_Clinton/hillary_clinton7.JPEG b/train/Hillary_Clinton/hillary_clinton7.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..5406ce43104d3e5b3e71127177b5548d287020f8 Binary files /dev/null and b/train/Hillary_Clinton/hillary_clinton7.JPEG differ diff --git a/train/Hillary_Clinton/hillary_clinton8.JPEG b/train/Hillary_Clinton/hillary_clinton8.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..d67a0c18a9abb90c064d3ad05b2ee8187214529f Binary files /dev/null and b/train/Hillary_Clinton/hillary_clinton8.JPEG differ diff --git a/train/Hillary_Clinton/hillary_clinton9.JPEG b/train/Hillary_Clinton/hillary_clinton9.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..4c169250280d51f6f68f5082c56d7074cfe6cff7 Binary files /dev/null and b/train/Hillary_Clinton/hillary_clinton9.JPEG differ diff --git a/train/Joe_Biden/.DS_Store b/train/Joe_Biden/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/train/Joe_Biden/.DS_Store differ diff --git a/train/Joe_Biden/Biden1.JPEG b/train/Joe_Biden/Biden1.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..d424be39590187d413a9355879c90df6b9129496 Binary files /dev/null and b/train/Joe_Biden/Biden1.JPEG differ diff --git a/train/Joe_Biden/Biden10.JPEG b/train/Joe_Biden/Biden10.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..522898a47f20e8589800a59bdf896d5d32f72d11 Binary files /dev/null and b/train/Joe_Biden/Biden10.JPEG differ diff --git a/train/Joe_Biden/Biden2.JPEG b/train/Joe_Biden/Biden2.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..7c35fc51951dbee36a99b2636dc586079035299b Binary files /dev/null and b/train/Joe_Biden/Biden2.JPEG differ diff --git a/train/Joe_Biden/Biden3.JPEG b/train/Joe_Biden/Biden3.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..dae058bf1a904026689616e5e36d0c2f5641d316 Binary files /dev/null and b/train/Joe_Biden/Biden3.JPEG differ diff --git a/train/Joe_Biden/Biden4.JPEG b/train/Joe_Biden/Biden4.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..04282a3b53d0131ef9ce8eda56b66a309d16039f Binary files /dev/null and b/train/Joe_Biden/Biden4.JPEG differ diff --git a/train/Joe_Biden/Biden5.JPEG b/train/Joe_Biden/Biden5.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..47e4a1c11da190042701b474748e8ba76de7270e Binary files /dev/null and b/train/Joe_Biden/Biden5.JPEG differ diff --git a/train/Joe_Biden/Biden6.JPEG b/train/Joe_Biden/Biden6.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..035f986c1127630fc7ff61af05685dd42d93d906 Binary files /dev/null and b/train/Joe_Biden/Biden6.JPEG differ diff --git a/train/Joe_Biden/Biden7.JPEG b/train/Joe_Biden/Biden7.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..8c6fa167429a9a8b74f166a06baffc499498720a Binary files /dev/null and b/train/Joe_Biden/Biden7.JPEG differ diff --git a/train/Joe_Biden/Biden8.JPEG b/train/Joe_Biden/Biden8.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..52a9539892442c6aaaaa273f54cec6e5e72be827 Binary files /dev/null and b/train/Joe_Biden/Biden8.JPEG differ diff --git a/train/Joe_Biden/Biden9.JPEG b/train/Joe_Biden/Biden9.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..d2f5e226bfa4819330657196d354fa07c1a6e37d Binary files /dev/null and b/train/Joe_Biden/Biden9.JPEG differ diff --git a/train/Kamala_Harris/.DS_Store b/train/Kamala_Harris/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/train/Kamala_Harris/.DS_Store differ diff --git a/train/Kamala_Harris/Kamala_Harris1.JPEG b/train/Kamala_Harris/Kamala_Harris1.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..a79034084bdbaac0d1051793aeaea6f9bf77f751 Binary files /dev/null and b/train/Kamala_Harris/Kamala_Harris1.JPEG differ diff --git a/train/Kamala_Harris/Kamala_Harris10.JPEG b/train/Kamala_Harris/Kamala_Harris10.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..7bcce54dbf307dc0f94c99317fcb592607a1051d Binary files /dev/null and b/train/Kamala_Harris/Kamala_Harris10.JPEG differ diff --git a/train/Kamala_Harris/Kamala_Harris2.JPEG b/train/Kamala_Harris/Kamala_Harris2.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..700838d01ea4e1cd230642c7c4d366755dca30ef Binary files /dev/null and b/train/Kamala_Harris/Kamala_Harris2.JPEG differ diff --git a/train/Kamala_Harris/Kamala_Harris3.JPEG b/train/Kamala_Harris/Kamala_Harris3.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..d6b3eb016d6673525a9a62478ac955eaf0fa83e2 Binary files /dev/null and b/train/Kamala_Harris/Kamala_Harris3.JPEG differ diff --git a/train/Kamala_Harris/Kamala_Harris4.JPEG b/train/Kamala_Harris/Kamala_Harris4.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..fdc29e7dd9b803637cacc2258060a3855f33ffeb Binary files /dev/null and b/train/Kamala_Harris/Kamala_Harris4.JPEG differ diff --git a/train/Kamala_Harris/Kamala_Harris5.JPEG b/train/Kamala_Harris/Kamala_Harris5.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..7a0ecdd6e1c5fdf0e5f30b7c516fa30ed04a7989 Binary files /dev/null and b/train/Kamala_Harris/Kamala_Harris5.JPEG differ diff --git a/train/Kamala_Harris/Kamala_Harris6.JPEG b/train/Kamala_Harris/Kamala_Harris6.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..4f3a84c833b401c119e7ced9b66611ac0b06d7a1 Binary files /dev/null and b/train/Kamala_Harris/Kamala_Harris6.JPEG differ diff --git a/train/Kamala_Harris/Kamala_Harris7.JPEG b/train/Kamala_Harris/Kamala_Harris7.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..79df6946b54fa6b1d1bd8f65532fe5ef57e62f94 Binary files /dev/null and b/train/Kamala_Harris/Kamala_Harris7.JPEG differ diff --git a/train/Kamala_Harris/Kamala_Harris8.JPEG b/train/Kamala_Harris/Kamala_Harris8.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..fa7b6de00ce6cda27d6e7d962bd747479efc2bb6 Binary files /dev/null and b/train/Kamala_Harris/Kamala_Harris8.JPEG differ diff --git a/train/Kamala_Harris/Kamala_Harris9.JPEG b/train/Kamala_Harris/Kamala_Harris9.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..1d67cc40c4c80a6ed5db670d386d7546195ec3a2 Binary files /dev/null and b/train/Kamala_Harris/Kamala_Harris9.JPEG differ diff --git a/train/Kim_Jong_Un/.DS_Store b/train/Kim_Jong_Un/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..6aab0266b8ac373a950ac097a64e03a4c881da6d Binary files /dev/null and b/train/Kim_Jong_Un/.DS_Store differ diff --git a/train/Kim_Jong_Un/Kim_Jong_Un1.JPEG b/train/Kim_Jong_Un/Kim_Jong_Un1.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..4ccca7ec9e09f5d5e0dfff5f76cff768c1afe381 Binary files /dev/null and b/train/Kim_Jong_Un/Kim_Jong_Un1.JPEG differ diff --git a/train/Kim_Jong_Un/Kim_Jong_Un10.JPEG b/train/Kim_Jong_Un/Kim_Jong_Un10.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..3872e47f6083bc71f64c95a5329ba68c233b834d Binary files /dev/null and b/train/Kim_Jong_Un/Kim_Jong_Un10.JPEG differ diff --git a/train/Kim_Jong_Un/Kim_Jong_Un2.JPEG b/train/Kim_Jong_Un/Kim_Jong_Un2.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..cad654eb256593cffa9b2b772bb95012785e855c Binary files /dev/null and b/train/Kim_Jong_Un/Kim_Jong_Un2.JPEG differ diff --git a/train/Kim_Jong_Un/Kim_Jong_Un3.JPEG b/train/Kim_Jong_Un/Kim_Jong_Un3.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..cad654eb256593cffa9b2b772bb95012785e855c Binary files /dev/null and b/train/Kim_Jong_Un/Kim_Jong_Un3.JPEG differ diff --git a/train/Kim_Jong_Un/Kim_Jong_Un4.JPEG b/train/Kim_Jong_Un/Kim_Jong_Un4.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..dcc4c2e57dd7384364d50f03db118a604991dcd2 Binary files /dev/null and b/train/Kim_Jong_Un/Kim_Jong_Un4.JPEG differ diff --git a/train/Kim_Jong_Un/Kim_Jong_Un5.JPEG b/train/Kim_Jong_Un/Kim_Jong_Un5.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..5830276ac651c10e68fabbb590c04a0a1bc36efe Binary files /dev/null and b/train/Kim_Jong_Un/Kim_Jong_Un5.JPEG differ diff --git a/train/Kim_Jong_Un/Kim_Jong_Un6.JPEG b/train/Kim_Jong_Un/Kim_Jong_Un6.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..775b81a07314d24e2a103a9106425acd63053078 Binary files /dev/null and b/train/Kim_Jong_Un/Kim_Jong_Un6.JPEG differ diff --git a/train/Kim_Jong_Un/Kim_Jong_Un7.JPEG b/train/Kim_Jong_Un/Kim_Jong_Un7.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..82394c5dd30ee3665125a87bf5a606b1c025c394 Binary files /dev/null and b/train/Kim_Jong_Un/Kim_Jong_Un7.JPEG differ diff --git a/train/Kim_Jong_Un/Kim_Jong_Un8.JPEG b/train/Kim_Jong_Un/Kim_Jong_Un8.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..ffccaec72193ceb7a3f807761e251d10a9c8c054 Binary files /dev/null and b/train/Kim_Jong_Un/Kim_Jong_Un8.JPEG differ diff --git a/train/Kim_Jong_Un/Kim_Jong_Un9.JPEG b/train/Kim_Jong_Un/Kim_Jong_Un9.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..85b851053b397b9124eab37deb824671a8555471 Binary files /dev/null and b/train/Kim_Jong_Un/Kim_Jong_Un9.JPEG differ diff --git a/train/Michelle_Obama/.DS_Store b/train/Michelle_Obama/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/train/Michelle_Obama/.DS_Store differ diff --git a/train/Michelle_Obama/michelle_obama1.JPEG b/train/Michelle_Obama/michelle_obama1.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..e286e0f4583f99e428c01688ec18b4e2c09f7032 Binary files /dev/null and b/train/Michelle_Obama/michelle_obama1.JPEG differ diff --git a/train/Michelle_Obama/michelle_obama10.JPEG b/train/Michelle_Obama/michelle_obama10.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..5a2abd065bb043243e40f87386e27f9de903121e Binary files /dev/null and b/train/Michelle_Obama/michelle_obama10.JPEG differ diff --git a/train/Michelle_Obama/michelle_obama2.JPEG b/train/Michelle_Obama/michelle_obama2.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..647868481e3ac592cc0fc555e611251bf8d62260 Binary files /dev/null and b/train/Michelle_Obama/michelle_obama2.JPEG differ diff --git a/train/Michelle_Obama/michelle_obama3.JPEG b/train/Michelle_Obama/michelle_obama3.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..77ffbefb37293095572c94863967acba4d5f633b Binary files /dev/null and b/train/Michelle_Obama/michelle_obama3.JPEG differ diff --git a/train/Michelle_Obama/michelle_obama4.JPEG b/train/Michelle_Obama/michelle_obama4.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..788d0332f0b768d893f8604266c1e0d0346a0420 Binary files /dev/null and b/train/Michelle_Obama/michelle_obama4.JPEG differ diff --git a/train/Michelle_Obama/michelle_obama5.JPEG b/train/Michelle_Obama/michelle_obama5.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..068ca23c2ea80a99aabbf919e6692ddcf407c043 Binary files /dev/null and b/train/Michelle_Obama/michelle_obama5.JPEG differ diff --git a/train/Michelle_Obama/michelle_obama6.JPEG b/train/Michelle_Obama/michelle_obama6.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..55c1b1fa4877f739d2baae65da11421cda96f82e Binary files /dev/null and b/train/Michelle_Obama/michelle_obama6.JPEG differ diff --git a/train/Michelle_Obama/michelle_obama7.JPEG b/train/Michelle_Obama/michelle_obama7.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..1b3773c35231bd57ca3db9e0275c621cd49bf53c Binary files /dev/null and b/train/Michelle_Obama/michelle_obama7.JPEG differ diff --git a/train/Michelle_Obama/michelle_obama8.JPEG b/train/Michelle_Obama/michelle_obama8.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..0ea32254124d6a14b970028f535441b005dfd223 Binary files /dev/null and b/train/Michelle_Obama/michelle_obama8.JPEG differ diff --git a/train/Michelle_Obama/michelle_obama9.JPEG b/train/Michelle_Obama/michelle_obama9.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..356c2bf1bf68d29e703e106bbba9f907707b1aab Binary files /dev/null and b/train/Michelle_Obama/michelle_obama9.JPEG differ diff --git a/train/Narendra_Modi/.DS_Store b/train/Narendra_Modi/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/train/Narendra_Modi/.DS_Store differ diff --git a/train/Narendra_Modi/narendra_modi1.JPEG b/train/Narendra_Modi/narendra_modi1.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..8472e4ef4c84a62bcee162f405579d7661f2ee92 Binary files /dev/null and b/train/Narendra_Modi/narendra_modi1.JPEG differ diff --git a/train/Narendra_Modi/narendra_modi10.JPEG b/train/Narendra_Modi/narendra_modi10.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..26662be565ce2ba842cbc547443228ebee0d582c Binary files /dev/null and b/train/Narendra_Modi/narendra_modi10.JPEG differ diff --git a/train/Narendra_Modi/narendra_modi2.JPEG b/train/Narendra_Modi/narendra_modi2.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..25f72065a23a236ff4c226fd61a95d5e4bd2a112 Binary files /dev/null and b/train/Narendra_Modi/narendra_modi2.JPEG differ diff --git a/train/Narendra_Modi/narendra_modi3.JPEG b/train/Narendra_Modi/narendra_modi3.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..d6e6456ed68646fa2db9bdbd34cf143730440047 Binary files /dev/null and b/train/Narendra_Modi/narendra_modi3.JPEG differ diff --git a/train/Narendra_Modi/narendra_modi4.JPEG b/train/Narendra_Modi/narendra_modi4.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..05f63e362969772ed0387b1c8f6b053f34a679f4 Binary files /dev/null and b/train/Narendra_Modi/narendra_modi4.JPEG differ diff --git a/train/Narendra_Modi/narendra_modi5.JPEG b/train/Narendra_Modi/narendra_modi5.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..11f4731eef6eb34065b23471a351f8322a7dc003 Binary files /dev/null and b/train/Narendra_Modi/narendra_modi5.JPEG differ diff --git a/train/Narendra_Modi/narendra_modi6.JPEG b/train/Narendra_Modi/narendra_modi6.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..b09648a804454a1e0c8a0cf96c453cc9169e4ff0 Binary files /dev/null and b/train/Narendra_Modi/narendra_modi6.JPEG differ diff --git a/train/Narendra_Modi/narendra_modi7.JPEG b/train/Narendra_Modi/narendra_modi7.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..aabc2bac2e227d608cf8a17b9ab05560dfb8a690 Binary files /dev/null and b/train/Narendra_Modi/narendra_modi7.JPEG differ diff --git a/train/Narendra_Modi/narendra_modi8.JPEG b/train/Narendra_Modi/narendra_modi8.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..ee089a39e550141822c0717dd746d65499f631a9 Binary files /dev/null and b/train/Narendra_Modi/narendra_modi8.JPEG differ diff --git a/train/Narendra_Modi/narendra_modi9.JPEG b/train/Narendra_Modi/narendra_modi9.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..7c692c9e754c3a8b8a0612ea4ee147afc5b69562 Binary files /dev/null and b/train/Narendra_Modi/narendra_modi9.JPEG differ diff --git a/train/Rahul_Gandhi/.DS_Store b/train/Rahul_Gandhi/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/train/Rahul_Gandhi/.DS_Store differ diff --git a/train/Rahul_Gandhi/Rahul_Gandhi1.JPEG b/train/Rahul_Gandhi/Rahul_Gandhi1.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..2b786c018326c4ae846a5356ce159411cfaba368 Binary files /dev/null and b/train/Rahul_Gandhi/Rahul_Gandhi1.JPEG differ diff --git a/train/Rahul_Gandhi/Rahul_Gandhi10.JPEG b/train/Rahul_Gandhi/Rahul_Gandhi10.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..09854eb4bd9d65535fd2db2b10a7c29a2940f6ab Binary files /dev/null and b/train/Rahul_Gandhi/Rahul_Gandhi10.JPEG differ diff --git a/train/Rahul_Gandhi/Rahul_Gandhi2.JPEG b/train/Rahul_Gandhi/Rahul_Gandhi2.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..782abafec8b453437305774a22dcfac182c7e844 Binary files /dev/null and b/train/Rahul_Gandhi/Rahul_Gandhi2.JPEG differ diff --git a/train/Rahul_Gandhi/Rahul_Gandhi3.JPEG b/train/Rahul_Gandhi/Rahul_Gandhi3.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..a75b7291887bfa8e0e1c264cbdbaddc04a7108c6 Binary files /dev/null and b/train/Rahul_Gandhi/Rahul_Gandhi3.JPEG differ diff --git a/train/Rahul_Gandhi/Rahul_Gandhi4.JPEG b/train/Rahul_Gandhi/Rahul_Gandhi4.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..0fd170a79cce3d922ae489ea6297f74c35e7b4a2 Binary files /dev/null and b/train/Rahul_Gandhi/Rahul_Gandhi4.JPEG differ diff --git a/train/Rahul_Gandhi/Rahul_Gandhi5.JPEG b/train/Rahul_Gandhi/Rahul_Gandhi5.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..d55bee6fd1de03b3e020afd5e355253e1c766d14 Binary files /dev/null and b/train/Rahul_Gandhi/Rahul_Gandhi5.JPEG differ diff --git a/train/Rahul_Gandhi/Rahul_Gandhi6.JPEG b/train/Rahul_Gandhi/Rahul_Gandhi6.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..72eed3192d26c6d2071a01da57ffff371c259778 Binary files /dev/null and b/train/Rahul_Gandhi/Rahul_Gandhi6.JPEG differ diff --git a/train/Rahul_Gandhi/Rahul_Gandhi7.JPEG b/train/Rahul_Gandhi/Rahul_Gandhi7.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..13e9a0191c5ab8a417a967c701ed193515eceb5f Binary files /dev/null and b/train/Rahul_Gandhi/Rahul_Gandhi7.JPEG differ diff --git a/train/Rahul_Gandhi/Rahul_Gandhi8.JPEG b/train/Rahul_Gandhi/Rahul_Gandhi8.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..2db4d86903e3d24315d616f02f4e5491a779326d Binary files /dev/null and b/train/Rahul_Gandhi/Rahul_Gandhi8.JPEG differ diff --git a/train/Rahul_Gandhi/Rahul_Gandhi9.JPEG b/train/Rahul_Gandhi/Rahul_Gandhi9.JPEG new file mode 100644 index 0000000000000000000000000000000000000000..fd51096511e30988ba9b0073817bb42a70884677 Binary files /dev/null and b/train/Rahul_Gandhi/Rahul_Gandhi9.JPEG differ