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--- /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 | ![](\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFwAAABcCAYAAADj79JYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA690lEQVR4nGW9d7xmVXX//157n+e5ZeZObzCDozRBAkhTQAUSKRYCNtREsUZQqoiKCahfEsCYKEYjKCpGEVQwGNHYKEHBgiJV+gADzDBMZ+otz3P2Xr8/1trnPONvfI3Mvfe55+yz9iqf9Vlr7SPH/MO3NIigClUIRM0kBIIQNJMRsgq1CAL0sT8qIEGQDBkFETQDogQJEICs5CBEhTpmqhxIAjELGiAoJLGPlj8aBLICQhAQbe+HCIKiEhAAVTSIX09RUWKOECGQySgiAQUiAUGRACCA3UMAiaDZvksQRBRBBu4dCP6MAkAAyUgOqGQkiF/NriguG1BbePBr50CoNaCq9iFVWyQgOSNkUEUkI5qpM2QRVOy2JEVVyWo3CkFAQDUj2TdFFRWIKYKakLP4IwtEhYSCfz8kJShEbMM0iAtBCKqNsCJCCIFKFVAEJWq0f0sCCaYQKlQ5AqlddygbqCAZ9bUGCbbJiH3IVUE0twqhthYUCGrrEiFINLmJgBRhB7tHFjTbwwZV20HFBSFClEAgUEkkFi0IgSygOQHqi7OfVSKoZjIZEVuQYlpCME3RaLIS+xaqrj4iVBJIQYl+XQ1CCtk+CPQ14+Zjv49Zlappu6uWabDroGSQbA+sVR+C2D0FNOVGeyWY5gcEFUiaIbuQpWh8sUGFmEGSCRZ7DtvzZPdSUx7TtoxSnlsICiFUAdFMACQr4honATIRgpBUmVK7SXRTyykhQAwmbBH7vqg0O12+l6ObPVCLuwx1LVE1zVYhSyCLW1lWcoCgShR1uzMN12QWSdlcMdcGZk2kgAa7tqi5RMnBFYFGWIKAmqBNawOVCjma1We7KMVhiAiVRrIriwYlxKL7Zja2HnNv9l37n4iQUUKdFVzDQwim7ZoIqmRN5p9DIEhFwIQDgviNEhmRYIJ2U3LlaQQfFNKAv81RkNB+MqsSirlncxeECk2QANFgGh7cMmIgZUUlU2v2+/iCJNvGZEWCXT8irvK1mTbarlVbq1ASSiCkZDEsB0SDhRR3e0nteVVAcyAnyDmbL5fKnjor4q4aUVQSSrIN6ASxG0qg1kxCiWLBLeGmp+pmDAEhijZBRLN60NRidK25oaDZBC3mvyET3L1pFOpgVlE0TqrY/G5o/KwgQSietPGV2VwMgEomFcsPQFATrpmCrz1a0AXI/mEzBXLOrp1AiH5b01YRmp9JEMTlEi3YuSULqglIFphFEULjOovFh6i2r1OK74FHVACJ5BA8EGojyIwgIZp2SRwwVSWE4M8sjclKVvOhQSAGECFksY3UQCjanjN1TgP+zu5j/toeqlxXgIhCgBDMCqJvgHpAkqBozuTatN5Qi4eGkBuLULUA3ApHG3+uBjmaZ8rq2oJpdpCqeeZMcX00iA1MdjknNAsBUWotbtV+sRZ1y1RS9p1yIRQt1lrdXzsYEovsoslsoTxQCZpqflmykrT452BLdLMOZKKYNqpY7JCsVNAELi3a4GsJKZFV3aRdXUQIIdFDGaHHSD1JoEtHzRJUS6D1dYua5Rl2IydDIwHFvsgeHD24qtqzijiyM1UVR2lmEr5ENfQmYlCymlJxv2yaocGgGiEjCFEEzYmKTBUqplRaH+3oAM1kc/WA0EVIRSaOZIq/LqaYs0OqALlxKdHclKkokegB1fynBFtrdHTYF6ETpBF+Lign1yhdXnn9Z3nBumUsnD2fnd78Pi5KC8mj01th+PIDxY1hFuOuQF1+ePAvpm/uxd2t5zCG291HaDTI6Hco7opiWOWLPkqymAoa6AJDahpWiQWurkAXJYRsJqtqiYIEN9dACjv68uywSwjmsx27ChCzxQe7hmFww+HmSmJjQa7RWjQ5U2XQ7Bbk2q8egKfXUyxadS9PT21j43OrWHb5RVz6p+s5fmgSzRmyErBn0oHg2cBV10BVjwW+IXlAccBCQcTigAUm/3cL3VvEZl5CG/8sITYWEYKSQySJkEIkBggooplKMl2JBBWiZtBgKUIOtshsu65qn28AnWZzD9kSIoNKBukMEXjSpJ58BTNZF4U750B2pBBEEInmlsRQiQbz97Ou/RyaOuxDhxWa0AS//9NN7HHFhXwxPstIb4pAIpYtdSTSuL+CxkQoyC8ghJIMiaOApCQyWpKj4JbgyK94gdYl0boIVWUqw5QISaXxWQFlUpUkhjsjQgxKkEwIgShKhT1wJlvkbpXEg6dDSjWsrTE4bi+aCYmAZiFJaBGQQnCsHcT9pjiycJycYzAr0gyaGA2Rfdc/yCzJdHKfEVGejIEYhHUbVvCHfzuPK8fvZ97kNuqY0GhB0+FIAxnFBZXJtkZpHI9revDMXSBYwiae6dgmautuxO4R2h8328hUFvoS6CP0gLpogcTG5GIWKpRAphOUSoprcPPXYp4CGJrRYGl4KJHcsTmiaIRoqk+hFMrDZ9VmY4pxF4sMIRCS0iGiOTBvdIR9Lj+bBVTMAcYk0lFB8iRrZYSOREaAW75xOefd/QNO6tSQ84A7cmIlq/t3433ILUozx2tWVzal4V5KVhqyw9mCVBrxmhAa2CfmGfpYxtkn0ncQltXMNUcFyUYBSEV0rFVEGbI0GZiQHf0oMYtrK0idnAHJzr0oyTVBYiSJrTIFdyiiqKcmFlM9K9YaKtAQmNPfwv6P3MysJbNJkhnVgKiyd2eIIIlYJ5Zr5XlDnz/97rfsfsUlnD+/JuVMJFPnPlrwuAanDtyqUjY9aCCkNlkkqoZSSoD3IA+WwTcyfuUHrlEhNzg0hEHNNIRQAlLAsO9wJZAyVYhoVjQqSaGngcpv2pdM1qrRCmOtyjZHyEYmiQZLgxsATcNrFF+ZUKoSmMQRjwQkGNlFFRCJfOKw2aTtPRjqMDYyyp0f/Th7PP5HhnPg9ySmUaFUbKTPS0JNR4VJCQx3Z3DE5y/l5GdG6EigT003RONcYii3baxXpMXsKp4Oirhlhkary/oH/xtKOC0annJ2TbbvJ8E10QSfCEzWhgHVeQ5xOlVEHfYJHYkeHfz6WT3IhQZiFcDo7E9ZYkPFZjfXiPE1DXbOYijDE6qgyoytT5P7NdXYMNNGR6hzzT6XXMiS//kNkzGwZ3cIFZgIiWnSYU2O9ER4cvG+6NRmbjv7TK6atY7UT3STu05/Rila7H+yB0CgScaaCCme9DSx0RxTEzQF/MFyo0FSfsHNI6OecZkwogQykRqh9mCRJVMhVMEumlA6TZBzk5PCZzvWzUqOgsZgMhchi31Oc92YZgmyNJyKEgL0o5FEoepw6lEvZtuW9URVeprQEBnpTqOe1mGPH93OTkkYIbPCqfpeGGVLDtyx8VnuW7g3/dznxn88j+uOWAAdoE7EXGJH9g2QHSwxYySfqjbQEieuGjqggcSxMXQkB0KIloyoGJXa2ETZVnwDlFodBkm2gKNiwna/q46fa8fVghJL+uvXEIRY4Ks/jLjLqTUTiFQilpFmMe69BEvfiJG6IkrgjTvX5O3bmDZnIZNTk4R+zfMb15GHOmzv9Vnf7bPhvWexa4i8hsgukpnScZ4LXY6eHOfOreu5df5SpmSCa950Ah8c2QpVJElssHkJqnlA8IVhbNyFtnmAZnFMLp6J5vIZh/OaGyff/tFG3orHAwEhkPwCGSAGoooHyIHMUfMOUKosMoph+ogSXcghOfpxoRqX4fEj4hUJQywpWnI1FYFQsWTnGXTnLaTTEaQ7xMYNG5kWu8ResiSnF5h/wvE8sf/BzE7wIgkcSCTkCVZpj+N6mxkSs7KU+sQrPkdICQ09x/ytXAYfB0ybSzJkzxrKTwxxlaQMdcoBRyaK414tBJ0JNJViAi0rRtFW/7cnChE847TsdNghkhS6Mme6qubP1fxfJVCVCGmsEkEzyXMA28GSKCUrd2WnROkztmklmoW+QgpDLJreoTexnS0b1kJ/kkoTvaysX7GKvc7/Zx7ZY3/6mpmnkX0k8oBOsLJfs/u6x9juLu+PK5/kZZMbqbTjBQppBKqFyxfzBmQnJ6VkmibgEMyZS7ACjbj1h4JHBnVbEXJW1+hsZFJQVBNCZErwWifUWpIbrxuWBeABwunZYlJ9J4tUrN7ZVn4GcmECQQUlmWJ7AqGeCYpimW6uOPOEAwi9KQJKqnvcd/u9jPZrVn7zSpZdfinjt97E2n86i9k7L2L6yCj7f/GLPD5rIVMizJUupzLE0igsy5GawKT0qUVZVY1Suw/WnJv7ihSf7iYfxJUVJGijqAW355ypc24037ekFXeJpsX8Q+E9UiZSMSab6Y1vpZ8NsaQQyYrz5xA0GQWAmjlSEoNMJdDxCkzWaLXM4IjIsbUWAijsCKmCBKcBlBRso+Pm9aR+ZtaCBTDVQ/t9dN5sZMY8On++h94tN/PspZ8nP/wI8r83MHdoHlmE/a79AcuqPnXOzGY6u6TMvgiPaOQuqVh78qd4NoxR6WRJPhsh6sCaGqLNA2ROLZw2FGuqF2OptQpBNDQ+qElJKeDdbiBA1R1hxr2/5LA7f8IlhwwzOb7V6FM1RFJnoSY3hVsLFgb+Y7DibExmatE3pLCAtuKIhDYLDWKJkG2VOhMoaBSiW8AZR+xC3ZtgfLJHZ9oYvS3bmDtzNhMP3UcIgQlNJIGsfTZ9+2tsqrfS7XSos7LXd2/msZlj1DLFrDDMLKl4xdB0diXx9E4vJnehlq4jM1fAkpfrAJdS/Dee+Hj1vHxXBHJS54QgWCOEDvwa7hCU7GB+1sQ2Jq8+j2cfv5ubH72Te6+9gU/unMmaqSWTBWpcA5EB7kPoZKWL0A3SuJgqCkJN14NjcCyq2cisLCAazM9L9gYH35icSdJHmaKqIr3tU3TdxaXuMHU/s+nLn6WjkTE6jGufWHV4dNECpuoJ+ikzMVnDsHLA1T9i+bz59LTmuXnTecGLX8rG866hqxH1Oq9ZXnDYlxshtqyip/WePxhv4npearGDSd0OuMQJloJOBBjfvo3LPnI8u2/ZygsOfjX19D343m9/wbyp5/mnvUYxaqcCrDqinnp3ROggrtE1QZThoASt6aoyFE2M0eNEGCB4oJBDJaESt2gzy44Kiyc2WH/K8DDjW7YzcyiycPZ8pi+ax6b9j2BK+1QhsKQzxvi0IY787vcZ37qN/tQk1VCXztBMApk9vnYVd8+YTf9Fh7P82FexvE5k7RtSaggQzyy11PAKSWWKgft045JoksQWrWey81GhaHSDdUoE9B16xcRqtBN5rhK6up29Dj+ChbN35fwvfobl3/8mx42vB5JlnCWIBkM9FUpXYQihygb5hkKk4/4wiFCXm3lQVM3maprEAcftZZVKConXvHguU5MTqEBPAo8vW45In6EYeeV5H2Ncla1aM0xg8VbhySMPY/6Gdax7bhWifabqSRgeJg51mfaBszj87NN4aNqL6MYOUhWaw6v3mhylBYfH2iiWsYjqbRiFc5OG4pWS9JQqfjBsSMksXaeMakxdXr7fbuRlDzG2zxFsvfUGpsafZ++3nMw8Fe68+1b2DKv54PYV1AoT2TqfkmYSXpBWax7qqSLSUPWGKkoiY5VqJATXaK+WixDdHwZP7wWokjD68XdRf/urMLmdKsO8eQvYPJmY1u0wNH0We3WmMyIVS8/7J0Q6zO0sZuYzy5k1byYTW6fIdY/UT0SEI9/6Nh5YvoxHJkeppRDajc4VAsJBiViS5j7A6IyqRTDFKYshPXNBuf2+qpJSatoUilZ1pYNMrOXHP/0Fl595Bl/5yVc54+prGbrrNqqffodDFu6J1JP88NorWbTbfJY+/yyikX60VoM6KzWRLErfOY9+43Zsg7ObZsO45ewFi4SQiTmTDdw3nAYIc+67g6Rdpv/2V4xffCFTG9fT04QgrN68hU5XyDrOojjE8vvvZvtrjkHzBL/9z68xa6pmeMY0JsbHSTnxyJ//TJcet2ydQegkd11tstNUakJxHdqQcOLkm1CTQ9seskPVqDjGko0arxzMlJvUHKa05lW3Xs85F5/D3899IZOPPcoL99yTk2/4Mcd99GMcO282r3z3p5gcnc5t/3cHR+o6uqJMIYznwCSBWqEnkENBLULt8SGLmWT0HsNMw/0gBGMtxVyP9dIZfs8C4fHfMyU96pyZtvwh1l/8UaZPTVJpn6oW1qzewEuu+h+mZdg2Kcw/9R+4A2XRD64jL15KFWB4bIxljz3ISGeIn9zwSybCELl2TqnkB02O4JoeSu3QJZnV8/lotMSAVy6FE8rHPf6E8okdrq/K9NDlzZddwgF7vZA9br2WqU9eymeOezlP33ELcw59Kac+/Dtuv+YrzD7ifayQIZY9/hwzr/k0/eRhQhJTITOhpZISSOo9Kb7j0aN3agqueGbnDTcNZDRT7aAseuR3HPrcI+Rc0QkQVVmybgOrPnASMyZrqMd5btVKngwwdfaZLP34OUwMj3D8jT9jKASmxieY6mfqumbDMys58LBDWTm8yLY5uEBco6Xp5vSEN3slqxQiSvgpPr1g7eDtGoNqLqWC5sGhmE7y6DSVJ1j+yCM8+KVv8dTZn2b2VV/gnLn7IP92OVueWc8/XXoNa1WpVz/O1qFpbJm/E+9/49tYevM3EFECHVCv66k12hRMlMVwUETpClRq+h9pd71hGQsnAfQ0c9Avr2B6ngIy23OmHwIxwsx+zfKz/o6RlFg4fz4hR9JBhzE6VDFdI089+RxKj6AWpisCBx57LNdfcxXLtydIta9XwTtvU6O0rV82IWcP6v5cf7Hekjy23ytCN+acrC0nXmEBanjNCq79xzP5zYKFjL39TTz6lSt5wW9/yON77s7EtVfzVKWMdYRVv/sZ0+fNY+PwEF/5n++x0zN3s8cjf4Ccyc72jQeosUJCkhLZhSBKR5RR8eKGCN1YzHAg1Xd2cf5kny6JSipGJTCJsC1Z+j+sFbM2TXDf6e9gNAZUpkihZtXqjQwPV8xdspCchpjqTZDSJI89cB8jC3dixew9UKkgRirtI9Eam0WxgO2CFXeFRTmbVNFb7ESiQcQ80ErtitZw50jhUhqDJgehr5GNP/sy2yUwtmYlnZfszfiP/4//+85POez8f2LNr//IB085kbddeR27z53H7Bu/yawVd3LA4a/lNR++gF3/9F2WbHqWUNfmGnKXngiTKdATbyMjE9Qq9lFgWKxGGrPSJRO9siwe/mumOODKc5gZIzn3mPCH6BJ4Pls+Ktpjt/EJnj37HcyUwLTJTKgTjz3wMDOHutCfQrtDbN20kV2W7MJdN/+aFVNDJBKqiT7inVrJKVkXUHaaVZ00K5mmNwAWd2PYzIOnV4UUEFcir9q35qAoISkzQo/JPEUS5Zb/+CJX/vM/M+2YYzn42u+zfvUWdnnPGfxgr1dw5NEH85YfXMfrr7mO933hUuavfpS1X/s2R33jOi6+8K3Mm9rCUN0la4+qBiTSy0rfGvgQ544jxvk7JUZE6WBMon0m0IkzmJ63QsoEiWyRSCwFWw2skT5BoCIyZ9N2njj9nYRhpVNPMG1sGs+uXE13JKC9Ho88/ASL99+fBydHUW8NgThQDizF69ZdNOFEdqT6ZAd3UqCh10EdAqS6bRUJRfLFRCaB8X5g97rL7gteyAJqHvrO9xh9619z5b1/ZNW9v+XHGpkMwvLXncSVHzmdb332C+zyoqXsdsHFfHfLs3zhg+/nin/9H46fFzj1qZvp1dlYwmCaOIWQHZYkj9YlkFZSonumI1BJRuoe87/2SYIOMQQMaWYEvLfRuqCCRtaGSDcYJTpr43YeP/1kNmzdymg/oXmKzRu2MVwJh73sAO742c08PWFpd8xxByin7kqq0HaCyUAENN9dQ6lhOvEmTkIYR2SFGVGnOopff+Up39HSslUcfhAhVpHRLRvpPvxrXr91OT97/M8c8YazWHzfbzj2jz/nd3c+zbUnHMG8usvssTEOXbiYF/3v9bxnr30YpcdeJ51NXL2OZ+/6Ba+cN5ffHv8hNsgMkD6ZSEdqOgQqse6r4toiiSmEREUVoM6Z4Yfv4dCbLyMC86gZRugR6KoFty5KH5qmnrmiRiErrJ03l/0vv4Z128fpq/Lo/X/moDe/if++7pc8Mboz3uxAmRBptThTymIqSnAOHBUvq7nIpHDg7v7w5tRs/JAgTSJvOlf6LTylMhpU6fdrxsfms+mQE7hp7t6ce9iJzJg2xMqnn2H7sSfz8v0X8J/Pr+FT61fwseeW8fi6DTz56zs49iPnQ4w8fs+v2DxrHgsPP5FlTz3O/Ms+wOzJTVQMIaokqZrGyOzQr6TCwatHOVsC1PvTL6k1UauyXWFCE8Oasf7DwAReNxRLrNaJMkIgaWTG+g3c/7ajmTU8QrdXs/Ql+7H2qad5fHgnouPnZu5HSgJWcmFtmELTUMsyaZpYG07QhS1eiLAg6/ZCkbHVpZ0saqY6sEpGDIGaHglhzb6v5gurn4Fbf8gLzrmIi4dGWH30O7lkj/352Zmf5MJLvkV6/ZFs/PKXGVm0J5VW9J58mLDzPCbnLmIlwhwZYcZ/fYQTFkE/JCTDhCqZQB2UngpTjnetFURRCVZVes8nWSNDVrSmYhORyWjClpBBOiZ09ZZkhRW5ZigoQ0QW6DAP/P2xrF67ivzoI/z0/vVEjfSDz/04GlWxACjR+1GcCWnoWC+SqDOkOJtq6X0JrMF9uDbJjsUDcWrDC6M7pKO+ycEbJbNUbDzmDH44sY17n7mdkSNOZPun/5kZuUPntt/TZYitBx2LPr2CWbM67PUPFzA7dHjyWxczNncGs076MMsksFgTL9q2ktOXjpFyHxSmxNKyycKteTah3lqQUCb6k9y3+CC2SmS71EQJbEpCT0pXdKJDYIK2j6YWYX3ukwVSqJmnXcIlF/PIf3yWNXTR4EjIm5TEi4+alZTNekDRZISaxXkP0t7bThZUbWLEoK4JX30eqWU6g/dLZkKZVxEvNCSPwk0TkYdWTYK+5V+Ia9YyP07x3d89wozzL+HZyef5zeXn8p6/O441Bx7CIdVm/uqvX8pbvvot3jtrN864+1YuefffUB96PGsk89//+nHk0bv46P6zrSouoEQLlGLjiTlZj1VfwVjpDuHED/DQG85lKgZ6qlRENlkhjxG1rDVKZBxr8q/UvPDanKlzzboKltSB7Ue+HQ3R5okKYMile9bxh1MKWjjXQuzlNjcohW4lUYYSCsHmTh0E6lR6xx2lDGZCGtTbgR20l3YAhRQS2yXy7OTOhJWr6f/5Nt74pqPYfMLbmb8ZfnrNd3jRu07msfMuZOttP+EVrz6I195/E7eMjfH0uZ9m36OOZfE5X2GCIR7+xpdYcd45nDK0il4NU5rJGWq3NA2tdgsg2idIYuvi3bnz0HfTD5FetMi1AmVSClNjvny1ZDoSiRIJBDboMNAlM8HTBxyxY0cv0s4XOSXYEE0hNBAxhODkmQ5UJI3ZVM1WGszOdErwiUEhho4/g/n+0BJGZiriGFLFeAq7bECCzf09cdArmHn71Wz79S85bdeFvP3jp7FQA7decD5LD9idXM3imFvu41sv/WtWPLWav/r0udy6YRW9665i5USP2X//Ye7SHps2b2Li85/hsFu+xySBHCoUK6GpKLW3L+MsoEikCkLvwFdxv47Rzz0kRNN0hXH3uUMIXQKbtKZDNGo4BhbLDL6h25gQISQTUukAU79+0+hTgmbKTcaoySFoHsyCFcPvwSCgE0Wi1mZd/LhqImNwNQwCdykdQ8mGpppu1QGcTK54dP5fsyVtYCTNYPrWLez2rlN43x77sWTuDF7802+x5Quf5oTFi/jqa1/Hgtmz+NvvfZNlK/5Mf6rPtv4wm8I0bqPPU1FZsOxu9vrJv9NJmb4qdR2oNZBcUzyCun/PBDK9vz+HJ2WEbZ6JqkQ258BWhSlJDKF0CWzUKZ5bvDvLhmZSD0XSuVfSC4KG2rUTLFPUhoBq/+SmZKZVSefVh6paFzKg601ypJKb5Adv6S5FCS/btdWJ0mUE0QOFNk396r7p3gMP47VzFtJ99UFcefQRvPzMD7D2tE+w/E3v5L7b7yUuWsJTb3kbp81/IU+ecR550SK6SaiW3cHw3LnMO/h4JrOycte9eXh4GktWPke85Uo0BFIUeqI2leYVFnuuRNfbh7bNXsKqnQ7mCSqmXEZDBLZJ4Hms11BQJroj6Bvfx8IPnsP1ox2267ABhOBZpRe7i8Jqct5Da+On3O+Euh0f0eTJe5ne85mmxi0VR6VtFlqagLBw6NCnVDJisI7RYIxaIHiRwC7VD6AauffQ01jwp5XcNDXK0rlw/+rNpH0P4oArvslus0eZ+9pXscuvr2PsyVVU22qeX7on2/54Ey/YeQE7HXoEEvose+wuho58Bfcf9Ep+8eR93PvDrzLVq8m1jbAEGptHGkNWOjEw8cZ3s/E1p/N4HKGvypRMISrUGllNZgLYePQ7mDlvJlN3/I7tH7rUBgoKb6rQtEqXRMeJqCzR+I9clMyHCbJ101oy49hbrJJVarAGI8W13IsRHhsGuJRSpSgwEPef+FQt4IvtZksGHly6C8+/+Ci+/3838PZ9X013fDt7fekCfrJiGXcceSI3XncTk7li84dP5frz/x9f/9UvGX7h3jx80amMrL6PJa89lcUxcuvPf8KPH3yMMLwP27c+x4M3fh0Z6rjdeQD1jizxxKxOBgO37b4368MIT4dRtjHK1lCTAyTpsDbAtjkL6Yjw5B03snnrRNsO0nB1UpxHg8OBtkA8wK2oQKk/UARpYNwr/OIjNwPX9y0oX5c+n/YCrvqxRGLbeG9jsNHBOgiF7nn0gJfzjuNO5IcP/p5dVz7Gf1/4Of5h5X0smjOXVV+5mCfP+SSjLzuEM3Pi8W9/nctu+xGfeWo5b9pvXz7y9KMsPPXzPDH2cpQxAko/zWfTui43/+dHkGSoKbvlRxdQFiEFmOgE+igTZ32eFYe/mTtnLqKn05lSYRJhy+giFixayKN/uIU1LzyEUIknJ/68Uqj3djNLgmOJj5fanCGUkmnKQDzzdjZVrGGztEX4/5tW+xkBfic54pSr1TClNoGgFrUZ/mD+J0uhS+2G0jBrilQ14b8+xov+9kzWXvtZvnnX/Tz63Go++bqjuPLg11J983OoZP7w0U9x5403MnTs0Zzyja/x7LPP8YZTvkwnKDNmzmTpi3bn9pt/zLZNm5g+0iPE6Rz01n+wyJ4drhKsrSICmgjZfHXEtK1360844KFfEMlsmr8z0xfM57GnH2P89Cus/dlVRb0vUMUGECRHEAehARs7yT6q7e7WHl09u7QSRcOFaysrKWl++Zy2ncONhjfkTLb2tOicgQLk4NxGEXKkOEHVjNZdZp72DfZ4/E8sOfIN/O/r38yKbTWHXvRDpi74BONvOZXxux7ity/+G6qxDttvu40bTvg7XnX0++ltXcOmVU+y7IE7+MV132DmgsUMTxtmqOqybct2ZPtGSruYAdZMDoJ473YQE6E1OwndY07kqb/6G54PQ+iWLSx++EGez9MsULrzoJS/BENBSpOyB4z/1mxQtAxaSWELvbFTRTzZGajqFPzu/qhtwJeB+7stBcTatELpIcKSAwWRRKD0xtkuRZ+sDSHQDZl1k1uJ9z/MYSe9kZtWP8asJx9havsafjPeoz7jXSz/1Gf44OnH894/P8wr3/hubn/0YWRojE2rn6NmnIMO2pXMJNNYSZrazNotEwzNnM5N3/smQ92EVAYkkvqJDD4qqK59PllKXxObXv1WNh35Th4K8IhU5DhsrXGO84tGmpv0VFrcT5MbIdlsv29TQQ3l54NO2mMAntIXwQpYcR5LoII0vZqGIFVzY6KoUsbANcTGv1sDhPdtSx9V6KtQ1YE73vUp1p32d+S/fhe/ufhCnvjRt1mzYgOjrz8e9t2fe372Qzau2saaI47htqVHoUkYnrOAft3lzrufInTGeGzZc9R1j7ERZXLLGubOnc/PvvRvxAApQq5s47NYUSJmLKnwbLArgY4qW/Z7GcNv+Qh3DA+T99nJ5ty9dotrr6GJkokAPnDbpOyqlINp7JAC00+kzOyrUbDZiLasO0bLovVlAFjVp/GOOu3qsn3eYquu+C0dWfhyG5eLZppRIcWGg1HJHHnTDSwdeZKXX3U9Hz3iUKY2b+FffnEz+754L6459Eie7k3yqu9exzeu+xWHv2p/rv/f+9hpRkWYPo1ljy/jkTvvRLXPxOQ2KsmENE5fA8PT5nDEO05DqmjzPZqoSFS0zUF2jktCiXSGulx/2SnMTrB9qOLIUy5HosHMgsZCCKiDbZtEzY3m2vkuAyiFgX97PmKbp0gMPtqtjetDcqPRJcB2/ISOoMbANBjRzKPt4yv2IY43W28YnHiyr4MMcdvRJ3DPqorl55zLuTf8kkziste/jm2xz6atW9hrZAYH77sTn7vgrcyIwsi0mWzpBZ7fFnj4Tw8QY0UcmsZxx70ODWPUcQiJSprcxt0/uprhKKgfr4RYNhoRKhVi6pM10Fe4/ounEXWY7aND7H7A8Tt0JZQJ5obL9iSpzNcL0hSPGxTp6b7FzPLc3oWgNJ1rnjAQQkn3Ww2vDX64Qbk7y2SHTrkB8MGJcnETa/x4tgGnktLmPAVEHnj7h/m/+59m+UWf56xvXst4zjzz719lt699m5X1JHccdhzLb/wVL917EWtXP01fKw7ZczrTpgm9OtHpDHHbb+5gZGSE6WOL6HRnUGvi+fXP8vPLP0dHMkkydQg2uJWhFqhDRVBlpNOhqgLDnUTo9dnjqDcYZMvlPC9L5fFaafC+P9G2l5CUkVQ6TXxI1zl6aZKxli2kDQNO83oSJCXddwyafVKCgj/FJnsplKwkTw5CG2nVKhcSyrlPzh07WSOpz71vP531dz+KjM1jbVYu+K/Psctuu/Ce+37PnO4cll7xXXaeM8avvvMxTjh8Ll+47PvU4+Pk1ONlB+/GxOYNTE5sYXJyEonTqLqzidUQmc3c/I1LGJp4Hk2J4dBlQjIpCClWiCbGJzYwPG0uvd4UJ3VmE3KXKFWDKJr24UJEeSVGGwKqzbhNVua/czb3U+oGlugkYjCNb9y3apNANe6Ilq+y7tmm+FAaWKLhVG9Ra8yx+Qyk3LTYeTCx0lwOFarD3PTOD3PL+9/H6/7162h3AU/+9DruvOdh9vzp1dw/Zw6/O/Oj/OTGOzh4v32I/XHG+0qIXX79q7uIQ5UdrpA2k/s1i3eaCdUIOcxgsu5w49WX8+wDf2Brfzt0hlFV+gF6sUOQYV7wkqOYE4Z4rr+VLRNbm/hUJhhslrXwKYbvTePxSWeFpE1fuvlsb6Gg5UfMIqSVg2FNxAMkA7ItX4eCF5tMs/g1AcmKBuvZsNGK3JiWzaCnhrzRUmbSZGUvMo+/75N0br+Kvd5xNndddytffcdJTFsyh4Ou+g/2e3YznTPOYs2qtXzo7PfQ6Vbsu98SOt1A7I5BNQOpxlAJPPXsOlLqcdD++zE8PAthmAf/cDt3/fgq+tSEIHQy3ibXY+PTd7CuXzPzxQdDx86jIkTKCDoFgZSskYTVQ23cUUQIndg0AZmPtkFf8c0roCLnugU6jVIOMrClddmsJzTkugjNmXyDQD4PcMVNW65TjRqQUDUZajk3xdxOokdk2dgxjDxwB3r8G4ibt/LBeQsZX7WOdMopPJS2cPVp72WsO8wnzj2dB/78DHPnzqETu3zg3W+nCsPECNNHxghScfc999Orp6g60xkeXcCs4Ypff/OLxOiD4cND/PjrH2XdutUs3esAnn7gj2SNiKMuqw+JHVLWCN6MXh3xNCPdpYUt+XFR2VoiikSb87eaYzraDLNwNOVP+XnOhZ4txdeWWLHirbbBwaChNiZiaa19RgeytSLsoBUhKcsXLqbeIOw0Nck//+JnbO0Pcd/b38Pwa1+GfuB8Zm+f5P6vXMhQFckZ1q2dYuHCeXz9v76PaqDqjFCnzLRp01myy0KCKBLG6U+sZ83zNXRH+dGXzmPbtudZ/sA9vPXcb/O20y9l4ay96HQ6dMSmpAunUUplBmVL/4I5WsmNfjYJTMaGuFS0GYAwTrx8YfJqGFd24K5aoecyGCsYplbdYWcMV9pBMC5HVLMVef2ovYwHF0mop+A5WGN9RklZyNrn/lcew7rLLuTbP/8tq9ME//vkw/zmokvpLt2JjTvvysjTK9h4+8+5+MJzOeyVB7Ny5TNUQx1OeuvxjAx1yHWi1++zZmPN0MgMUnchsTuTOkXGFd520klUc3Zil733pVf3SLUyY/Y8Qur7ITpezChowKOcQWcnrzJNoGworlxciKEzdWdt+N25lsZDlOBY5Ff8v21f5e7Gx2+bEDtQKA3+NxlkotTr1P22d26kYmpOZmX1ZMTbf0UJ0uW+c65gy1VXcNbVN7B+zwNZd8MviBs2cMjZF7DzO89m3c/+m/6KlRx16L6MdKYTFP7n+l+yZcsWQuyw627zSP1J9nnJYkKuIXSI3S5vOfoQtiw4wIOSUmNwNQuM736INY82wd2esXRIaXEM3n9efG0721NgXWjcbSksoJGmnfkvig+NLIq2a2iCsUF2xQ/ncparIeQLOeP0bVnQgPtp7pXdIqwP1vTAB0KzJPp1YuMH/p2fnnwcB570ftaf+Bbu+tcPM9GbYnS/l7BxdCce+49PMpr7fPjD70XrKYZHFalGkFixbNnzSFVxzz1PkLNSxYoD95jDxJKXA4FKEogdGRWHhuitvIeRALFOg2OoNiFcWD3XRDyB0x18QUs+oW1Ld6GwaXIWS9td8oO/PrAHxQ2L0VVqcW7gsyVFMBG2eLzsYWyIIDvkILRq5L3cKuJlIjdZAhPbtrPlkNN45Gvns3bmEsZ23psHPn0KPLOSv7nks6xIwq8u+BCVjPDBM06h35tCYsVJJx5DjJGX7L47nc50Uu4hU88z84Cjrb8lhLafRGADkT+sfIQn1j+NhEDI7VmzpaneenFcubFWaSv+uhYVOtqF3qC4xnVb0VibSo02rsiSRGceXc21ZPNNCYgBKIPHbU97y0k3IoVtaEqmbjLlYITYXhg/kEuUEJ0gC4Hthx9M3ZvJzhtX8prPXMpwP/Hklz9F3rCW137hSmZUFb8/753MrIQFsxeD1nz/+p+jEnnw0Sf9jK1R3vDud0BnqEmhTRaeG2rmwGM/RDX+PDUD51U1bX0e+PysFaUIpAR+U5oYTZtTAxTKjwsup9FUs2/7XcWCbBmv0VxamIVQ+OFSQN5xmMiOoNba/41h7cZ3DayiRfEW/Qcb0YvVCELSDv13/SOPfuc/+e2v/sDIcScTqw5/vPBMNm3cxsalf8XMIWHnnebyrpNPYKQ7TFVFXrz7EqoqMt7r8erDd2NzmGvWV9MwfMHHVSQlxnbamV3ecJ5ldqE01kvjFqRI2Z9BBRvRLlMaCMk7fMv4yaDHyare9uDK57x3Q1gpjWUUmdpJnqo+nG/F1Jzc7zbJUNHjdhijpLkg3rVUND01PAUDXVXNoZAS6CZIFeRTP0++8RqWHHkE095zHqJdRtNmDnjvaWzqLODnHzyJqk6cffZ7iSo8/MgTIEJFn/jC/eiXpMSPyQ4iZGzKv1RtZi1YbFyJtVi13SQDVqjQgGpN2U+pMM4joFjTZUkOiwcIDeVaziVo4puWoTHfFL9nEOsOC4gwUOpzf6MMOnWVgjysjcv4lkLC7MgalmCEH+VkA7CWMCTtQ1S0zmzpdtm2aH9uv+hs8sz5LD75LO6/6DyY2M4Rn7qIYYTbPvk+JPc5/7zTCFVEJHLia17GVHe6Q7323FvNijTHXEr7LMUatbXDonGNf7UFt8UF8Y8HS5oKHPxLa263sCQ3ntMUQTfuqvS9WLhpjom1a3rGhJlZRhrfZxcNzSCRxZTU0JoiELRNCEIIhOBHXeQA3llq2W1kzWHHMbVtM8/c+n16S18AErj33z7CtrrPSz/xOeZ1pnPfZ89D6z4fP+f99Cc201+wT3M6c7tmF6JrLrCDOytCLkSV9ZMETz2kCWoSabLmco2mcFHIa1V2KK0NyG0wFhZNL1lm+WHIWjRcoVQuFIKfXRW8F9pcjBUf2vSfpldOM2SviaqjXE3OY+DcTEiIIx5VqEgsOu0ytt/zG3obt7HoTacw1s+kx+5hYmQY3f1ARrZu5XcXnUWg4hPnvod+Z9geSiOqidL1Kp7U6AA2NnO3FjgtKkhpVVAXtFPPErATUk0GZbDKT9JxHTIo0DT5qE8ba6vNvlOukO3GFYUNZbLWOIEEkpEQm7Q+S4JobTjWJO/G5CxbOULLWnVNCyhTcUa/ubV44dV6j1zTAuMx0HnzJ7n/ivMZfekhbOt3WfODrzNrYhN7vucDVIe/ljk9uOOS03lm42RruiRnGkrMMLcQGm2zDSgJkcnYkJc2Tfi2tuKCBArB5IewlxmiFlj4LtjGkAnl4K4BsFFqrYNBtiwxDN4QwiBd0vq0rIhWqAoxdlA1ZN2Mw7kvFQlkCY7FywnxFc3p9OqF1nK2twc+3Xlnto69iDu++DEO/H+Xsm5S+MNn/pGheoJdX/N6tr9gT0bGJ9goM52yCc167ezvgeywVTAQ2kMszal6UjzweU8OG61UV6YgCLVbDZ4Y5QEotqPrKji9cVODwh74b9tL5MygPwals785pRIQsZE6g4uKveWjDBjZdaLaYQkalUB0siiQ+2XYX8DJJM1+dm3dZem7PkbeuJZpYTOHfPo71NV07r/gdKYBL/3QGUw/5k3UwQ6QzwPj2RLdXQTxiORaK8WtJV+aFY1DM45YMk2aGKSeugcJZE1orpps1PA0NJ5ZClIxMfp+DliXPyrtBgjeH25tuF5QlfIGHM/KEk7c+6+E0g5g/jA3h48XelLRJEgy1hCxbCzGys269Lf4iRFZoUpMambkpE9x88UX8ny9mQP+5Uv0qw53ffpMRkOgs9f+5j9L1d0fThxRWXpdzpbKVk0H66JCkeSHce1AnxbrVpoDisNgQCwdtYUvKmgjN+7MsHZqUEg50LI0+he831SKSptuA5UGIm3TceQJUJMOl8WqIJLcdw+4mDKaIaVFN5Jz8g3ywCxqh/+qPZYopJ0Ws3HPlzG6/glWb9rEPuf9B6KZX33k/axJY826WhfhD9acahyxo/u8kb5o4ABGLs86aPTWFu0FB8qRVC1asw+1zUJFToNHog5u4uDY92AnuSo2VKWUspL9OFM0xnvsaA9pMZybKUfbaBKE5CdSDHDCbtK2wEysBM2BWLlRJj+8rMG8wjSJzP+bd3HDV77A8v/+L2TOKNNe926GgpDiSCvo7LRDyYbLqqUIVL0B3j5fqb0CYbDVocXlNChMPJErsHWAqHUQp9j7etzSHV4WjOoEhl+v7Re3E3sMhISm2VAEjQMLKpjTUZEdzOKjFMSGHSQaUim0bstJ+FlVnhL33fVkf7sVsU0GimlPihKqmj3O+ypblz/EA1/7HDsftD+z/+5URAaPsivuLPmmAhKcNQ7O4gXLmhVSqHYYbG3u6u5WHYEF33iykmtDbJoV48SsmUKbpM8FHbyBU7W5ricE9q9swVYiYFB7R620tbuPdRrSjpIOXpx330zpYcmNSRVBlOSppT4hNjy7+IYNHh1mmEnc141P1Mx+/78xvuwx8sYVjCyYZ/dtIEXrio0Dyu3GNW6shWbB/Y8oaK53CIQm9B0Lv3amrAXZ4ig8PaEclFleIWPuo25E3aQ4vsOhrcrh+ykNlyBqA/oyQDx5KQFIbQQO7QaVF1YYj+KRyuGaYU/DtMmyKKyZKBGCojkiuXJB+ORvEIalw9TQKBv2ezW3X/ZltqSCnMTjQnmlR2llsLl7oaACs77ibjT6swS838/9uYQGDBSE0jy3Kkl7A9DXfbeU+GZ+3wCH30et/W0gBULKsK3HkpB8zE09IIpGkDaNjQ0lWxBkvUOfdenbI3paP/ASC1V8pt7fTAKgNSKRVHujTbTXvKhGS7KyUsdEDsrMo/6WVcPT2BZmNQFKc02pp5aHLGslSjOXY6f522cluV/2uIRa4tNyJNoABF+kY2/PL5SmsdMQiW94LgF5wGKCWVTpuMo5N8SgAiGEog3Od0t78faBGiiLvf6qlKbK6TeCvSaq9OqV5prcvPow+wJVy70iQUqpqwT51iWYH8zse8a/0gsjPqxKq7UeZwaTjJxrv567uhDappzc+tjo9lJ64ps2kewMoseJqoo7oKHG5bqracZKJLf8kitcYR0NkQkpFdCh5SFKpNU2wEhbaCgnPKjUOzyk+qkJlu6rnxtSGz+NzbKXcQxbpAczWstC/T4Fq1r0oqLD+HiPfiGCWuTl57x6YynBqQV7DnNRRsqJgsayScUt2LvRJNtGNG/XGvD/qpiQ1O+l4uZqu11eO5abEOZxz15JgnjSF4KQE4Nv8ConJvhfh3Hi74csmmCuItlLOwuvGQT1injD/Irjc/eT9cCGaBm0jR2Hg/6S0aCehbYvcFHx7i7swIIUY7P5pvwlT3BhK95enCllvUYQOVkRwd+Y6PUckMJb52a2SaM9VxkDMMsU80Sl2b5A4qzEHZGjab0Tdo7mm/cducAxAWubhv7/UEuBbxqbLAqsy7RoeZMOuXk6CCRWYn4tlPOvIGvfNgoLuuqno2nKjTsLChIVok8AF1lLyYjbtZVj+BrLE23ykAJt7cytVjiDz1r8d3Er5W+hanOjTgNFY3fBuXX8HhzLRu9Y8SnTFMEa0QvSoAHuOxSV/6IqXR6sHNpefjJYhLIMUNHaE2RNft6TL0r6DbXZCEsswuZcTmsIbNv4HFU9jvfiI81BYK1eNW+C1WZf/uIzrcnbtHVbqWpruqFpliw+vc5lTr4UIUqO7W7Q3zRo8omN/xbKGr3/0HOQxu6a4inOhkmwFLkwYKUgAU1Ns/RPl/PLCwQsDyciSI5oVdrgDKpIeUldOUdKzFXZWdiOqT3qh1Cx/E+/I09N+hsDi55JE2cKimg3vsQiyycaKkDFOSF/LrFtCR46SgxQVSqfsY/Rgqbm1F5fHCYHKxmqJusGwzS6tPzhcSAnbQob3pdiD24aFv/iNYcFn7bJhkK7EZoJ/h4IexWWYePWIhIhtZ1bOYdGs8yXGwzVbPcp75cUf8VY3d/O1AO/RKfNa4mnVrIt7zOAnxFt3o7SarDayZmDv65FxUz4ktytqdIvHbVZGwEbCCgHhxk0zNkU0BKm5MrZKqpl55ZjtLVS1+qyME0Ffknj/4rGuet27S7v/ClJgCcmLQg0IRY4lhWom6xOQrANkNS8ZEklWh4AaA6QhzjwpI9SS98Qx8CuJ8pDYsmaSHN2edE0ik8Wsfkl37AsOzR54B7CYG6xUvwda36WVXAiqkV0bVwJNrhI83qGEm+yNQuVudYgQpW1NYFCOMnAYiwQ+KtrpQgvINGpKTEWsHmV94DQKaaq1jhkrxkwt0GGGIWcY4OVgypUGXJEJEOlhCV72ns3Bw9wcRxfArNI1dANJVW3o0jEc7jicwLkZBqNIaBGSbLFnHK6j7rb00LgKLYmw6Rm2QVVSXZs7k37GNYvlta8nFabCbgBKrNkib5IO9a0DZpe6LccR2nT42LG4k+Nl9PcHAu7KMaEIUFJCZp3nCPkkCyQDpzGEKVVxMLV+MLs2lhts6UUlOa16FI+N4C4SoqO+ftC2RY6VyRYsqZKjH4im1uSetCl6UzLTUFa/C2Hvq2kZrSktJR4XJLCtHqgC/5CufIhg/IBexdNW/Vu3oWg7BC0ClRoDLPAztxuiEhAs715r8SEpmHU8XEpCKh6KE4l2zOzNk1ODcrBhwFC8bf+vGUlDewLhXoVOwORNkYZmqJxP7lO/laT8vyOsdUZxOJqB/x2Vt+eQU5FtXUrBJt7bLpCsXfZoMl8uv+NUtnX/k73gmJKR62QrSrffA/PWlPDI7cvcHacHMpEGe37H8SqK1IYQIMJO1LTWnY5NMK2IneLuMpMUsHbtpm2ZuP2tUUxEnYYNEiCBcxyIlAUhA6B6H+dDTVpFcBj+UZZU8kFxHoM7bxd9bFBLPCkXDvX4YXT0HIbxk8UdrClWnFkggpKadLXkri7qwkN/raXmxY044ILRnmmzAAed3gXADWGsbiD4BlmK/zy/gg7jW0H6sFdYoGxrc4bMi2F7OZa5ckKw+fPg6q/lNp/xz7U/Fw8i26KOU2eOYjshP8PTBbX0JSe16cAAAAASUVORK5CYII=\") | [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 | ![](\"data:image/png;base64,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\") | ![](\"data:image/png;base64,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\") | 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 |
![](\"data:image/png;base64,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\") | ![](\"data:image/png;base64,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\") |
"
+ ],
+ "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": [
+ ""
+ ],
+ "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 | ![](\"data:image/png;base64,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\") | [-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
+}