{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"<br>\n\n<br><center><img src=\"https://i.ibb.co/zr0kVr8/0-S4-LF1-Obk-Vh2ke-I.jpg\" width=100%></center>\n\n<h2 style=\"text-align: center; font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: underline; text-transform: none; letter-spacing: 2px; color: #DA9186; background-color: #ffffff;\">Google Universal Image Embedding<br><br>Explore Open-Source Public Datasets</h2>\n<h5 style=\"text-align: center; font-family: Verdana; font-size: 12px; font-style: normal; font-weight: bold; text-decoration: None; text-transform: none; letter-spacing: 1px; color: black; background-color: #ffffff;\">CREATED BY: DARIEN SCHETTLER</h5>\n\n<br>\n\n---\n\n<br>\n\n<center><div class=\"alert alert-block alert-danger\" style=\"margin: 2em; line-height: 1.7em; font-family: Verdana;\">\n    <b style=\"font-size: 18px;\">🛑 &nbsp; WARNING:</b><br><br><b>THIS IS A WORK IN PROGRESS</b><br>\n</div></center>\n\n\n<center><div class=\"alert alert-block alert-warning\" style=\"margin: 2em; line-height: 1.7em; font-family: Verdana;\">\n    <b style=\"font-size: 18px;\">👏 &nbsp; IF YOU FORK THIS OR FIND THIS HELPFUL &nbsp; 👏</b><br><br><b style=\"font-size: 22px; color: darkorange\">PLEASE UPVOTE!</b><br><br>This was a lot of work for me and while it may seem silly, it makes me feel appreciated when others like my work. 😅\n</div></center>\n\n\n","metadata":{}},{"cell_type":"markdown","source":"#### **I will be examining all of the public datasets listed below to the best of my ability**\n\n<br>\n\n---\n\n<br>\n\n**The host have said the following are categories in the evaluation dataset... I've tried to bucket the dataset into the relevant category if possible:**\n> * apparel & accessories\n> * packaged goods\n> * landmarks\n> * furniture & home decor\n> * storefronts\n> * dishes\n> * artwork\n> * toys\n> * memes\n> * illustrations\n> * cars\n\n<br>\n\n| **Dataset Title/Descriptor** | **Contributor** |  **License**    | **Category** | **Notes** |\n|:-----------:|:---------:|:---------:|:----------:|:----:|\n| [**CALTECH-256**](https://www.kaggle.com/datasets/jessicali9530/caltech256) |     [jessicali9530](https://www.kaggle.com/jessicali9530) | Unknown | TBD |  n/a   |\n| [**COCO 2017**](https://www.kaggle.com/datasets/awsaf49/coco-2017-dataset) | [awsaf49](https://www.kaggle.com/awsaf49) | CC0 | TBD | n/a |\n| [**Columbia Object Image Library 100**](https://www.kaggle.com/datasets/jessicali9530/coil100) | [jessicali9530](https://www.kaggle.com/jessicali9530) | Unknown | TBD |  n/a |\n| [**ImageNET 1000 Mini**](https://www.kaggle.com/datasets/ifigotin/imagenetmini-1000) | [ifigotin](https://www.kaggle.com/ifigotin)  | CC-BY-2.0 | TBD |   n/a |\n| [**ImageNET Full ?**](https://www.kaggle.com/competitions/imagenet-object-localization-challenge/data) | n/a | CC-BY-2.0 | TBD | Competition Data |\n| **ObjectNET** ([**1**](https://www.kaggle.com/datasets/dschettler8845/objectnet-1-of-10),[**2**](https://www.kaggle.com/datasets/dschettler8845/objectnet-2-of-10),[**3**](https://www.kaggle.com/datasets/dschettler8845/objectnet-3-of-10),[**4**](https://www.kaggle.com/datasets/dschettler8845/objectnet-4-of-10),[**5**](https://www.kaggle.com/datasets/dschettler8845/objectnet-5-of-10),[**6**](https://www.kaggle.com/datasets/dschettler8845/objectnet-6-of-10),[**7**](https://www.kaggle.com/datasets/dschettler8845/objectnet-7-of-10),[**8**](https://www.kaggle.com/datasets/dschettler8845/objectnet-8-of-10),[**9**](https://www.kaggle.com/datasets/dschettler8845/objectnet-9-of-10),[**10**](https://www.kaggle.com/datasets/dschettler8845/objectnet-10-of-10)) |    [dschettler8845](https://www.kaggle.com/dschettler8845) | See Dataset* | TBD | !READ LICENSE! |\n| [**CIFAR 100**](https://www.kaggle.com/datasets/fedesoriano/cifar100)  | [fedesoriano](https://www.kaggle.com/fedesoriano) | MIT | TBD  |  n/a  | \n| [**Clothing Full**](https://www.kaggle.com/datasets/agrigorev/clothing-dataset-full)  | [agrigorev](https://www.kaggle.com/agrigorev) |  CC0  |  apparel & accessories  |    n/a  |\n| [**iMaterialist Fashion (2021)**](https://www.kaggle.com/competitions/imaterialist-fashion-2021-fgvc8/data)  | n/a | ? CC0 ? | apparel & accessories | Competition Data |\n| [**iMaterialist Fashion (2020)**](https://www.kaggle.com/competitions/imaterialist-fashion-2020-fgvc7/data)  | n/a | ? CC0 ? | apparel & accessories | Competition Data |\n| [**iMaterialist Fashion (2019)**](https://www.kaggle.com/competitions/imaterialist-fashion-2019-FGVC6/data)  | n/a | ? CC0 ? | apparel & accessories | Competition Data |\n| [**iMaterialist Fashion (2018)**](https://www.kaggle.com/competitions/imaterialist-challenge-fashion-2018/data)  | n/a | ? CC0 ? | apparel & accessories | Competition Data |\n| [**iMaterialist Furniture (2018)**](https://www.kaggle.com/competitions/imaterialist-challenge-furniture-2018/data)  | n/a | ? CC0 ? | furniture & home decor | Competition Data |\n| [**iMaterialist Apparel (2017)**](https://www.kaggle.com/competitions/imaterialist-challenge-FGVC2017/data)  | n/a | ? CC0 ? | apparel & accessories | Competition Data |\n| [**Furniture Images**](https://www.kaggle.com/datasets/lasaljaywardena/furniture-images-dataset)  | [lasaljaywardena](https://www.kaggle.com/lasaljaywardena) | ODC-By | furniture & home decor | n/a  |\n| [**Fashion Items**](https://www.kaggle.com/datasets/kritanjalijain/outfititems)  | [kritanjalijain](https://www.kaggle.com/kritanjalijain) | CC0 | apparel & accessories | n/a  |\n| [**Fashion Product Images**](https://www.kaggle.com/datasets/paramaggarwal/fashion-product-images-dataset)  | [paramaggarwal](https://www.kaggle.com/paramaggarwal) | Unknown | apparel & accessories | n/a  |\n| [**Clothing Images Full**](https://www.kaggle.com/datasets/agrigorev/clothing-dataset-full)  | [agrigorev](https://www.kaggle.com/agrigorev) | CC0 | apparel & accessories | n/a  |\n| [**Items By Color**](https://www.kaggle.com/datasets/imoore/6000-store-items-images-classified-by-color)  | [imoore](https://www.kaggle.com/datasets/imoore) | Unknown | packaged goods |    n/a  |\n| [**Landmark Retrieval (2021)**](https://www.kaggle.com/competitions/landmark-retrieval-2021/data)  | n/a | ? CC0 ? | landmarks | Competition Data |\n| [**Landmark Retrieval (2020)**](https://www.kaggle.com/competitions/landmark-retrieval-2020/data)  | n/a | ? CC0 ? | landmarks | Competition Data |\n| [**Landmark Retrieval (2019)**](https://www.kaggle.com/competitions/landmark-retrieval-2019/data)  | n/a | ? CC0 ? | landmarks | Competition Data |\n| [**Landmark Retrieval (2018)**](https://www.kaggle.com/competitions/landmark-retrieval-challenge/data)  | n/a | ? CC0 ? | landmarks | Competition Data |\n| [**Landmark Recongition (2021)**](https://www.kaggle.com/competitions/landmark-recognition-2021/data)  | n/a | ? CC0 ? | landmarks | Competition Data |\n| [**Landmark Recongition (2020)**](https://www.kaggle.com/competitions/landmark-recognition-2020/data)  | n/a | ? CC0 ? | landmarks | Competition Data |\n| [**Landmark Recongition (2019)**](https://www.kaggle.com/competitions/landmark-recognition-2019/data)  | n/a | ? CC0 ? | landmarks | Competition Data |\n| [**Food Recognition 2022**](https://www.kaggle.com/datasets/sainikhileshreddy/food-recognition-2022)  | [sainikhileshreddy](https://www.kaggle.com/sainikhileshreddy) | Unknown | ? dishes ? | AIcrowd Dataset |\n| [**Artworks In Public Domain**](https://www.kaggle.com/datasets/sreevishnudamodaran/artworks-in-public-domain) | [sreevishnudamodaran](https://www.kaggle.com/sreevishnudamodaran) | CC0 | artoworks | n/a |\n| [**Best Artworks All Time**](https://www.kaggle.com/datasets/ikarus777/best-artworks-of-all-time)  | [ikarus777](https://www.kaggle.com/datasets/ikarus777) | CC-BY-NC-SA-4.0 | artworks | n/a |\n| [**Miscellaneous Artworks**](https://www.kaggle.com/datasets/huynguyenphamnhat/artworks-dataset) | [huynguyenphamnhat](https://www.kaggle.com/huynguyenphamnhat) | Unknown | artworks | n/a |\n| [**Historic Artworks**](https://www.kaggle.com/datasets/ansonnnnn/historic-art) | [ansonnnnn](https://www.kaggle.com/ansonnnnn) | ? CC0 ? | artworks | n/a |\n| [**GUIE Scraped Toys**](https://www.kaggle.com/datasets/alejopaullier/guie-toys-dataset) | [alejopaullier](https://www.kaggle.com/alejopaullier) | CC0 | toys | n/a |\n| [**Small Toy Cars**](https://www.kaggle.com/datasets/dschettler8845/toy-car-dataset-lear) | [dschettler8845](https://www.kaggle.com/dschettler8845) | Unknown | toys | n/a |\n| [**GUIE Others**](https://www.kaggle.com/datasets/manwithaflower/guie-others-dataset) | [manwithaflower](https://www.kaggle.com/manwithaflower) | Unknown | memes & other | n/a |\n| [**FAIR Hateful Memes**](https://www.kaggle.com/datasets/parthplc/facebook-hateful-meme-dataset) | [parthplc](https://www.kaggle.com/parthplc) | Unknown | memes | n/a |\n| [**Reddit Memes**](https://www.kaggle.com/datasets/sayangoswami/reddit-memes-dataset) | [sayangoswami](https://www.kaggle.com/sayangoswami) | CC0 | memes | n/a |\n| [**Memotion 7K**](https://www.kaggle.com/datasets/williamscott701/memotion-dataset-7k) | [williamscott701](https://www.kaggle.com/williamscott701) | Unknown | memes | n/a |\n| [**Tagged Anime Illustrations**](https://www.kaggle.com/datasets/mylesoneill/tagged-anime-illustrations) | [mylesoneill](https://www.kaggle.com/mylesoneill) | Unknown | illustrations | n/a |\n| [**Illustrations Kumapi390**](https://www.kaggle.com/datasets/ihelon/illustrations-kumapi390) | [ihelon](https://www.kaggle.com/ihelon) | CC0 | illustrations | n/a |\n| [**Pixiv Popular Illustrations**](https://www.kaggle.com/datasets/profnote/pixiv-popular-illustrations) | [profnote](https://www.kaggle.com/profnote) | Unknown | illustrations | n/a |\n| [**ImageNET Sketch**](https://www.kaggle.com/datasets/wanghaohan/imagenetsketch) | [wanghaohan](https://www.kaggle.com/wanghaohan) | ? CC0 ? | illustrations | n/a |\n| [**Stanford Cars**](https://www.kaggle.com/datasets/jessicali9530/stanford-cars-dataset) | [jessicali9530](https://www.kaggle.com/jessicali9530) | CC0 | cars | n/a |\n| [**Used Craigslist Cars**](https://www.kaggle.com/datasets/austinreese/craigslist-carstrucks-data) | [austinreese](https://www.kaggle.com/austinreese) | CC0 | cars | n/a |\n| [**US Cars Dataset**](https://www.kaggle.com/datasets/doaaalsenani/usa-cers-dataset) | [doaaalsenani](https://www.kaggle.com/doaaalsenani) | CC0 | cars | \"cers\" 😅 |\n| [**Car Connection 60K**](https://www.kaggle.com/datasets/prondeau/the-car-connection-picture-dataset) | [prondeau](https://www.kaggle.com/prondeau) | Unknown | cars | n/a |\n| [**Toyota Cars 15K+**](https://www.kaggle.com/datasets/occultainsights/toyota-cars-over-20k-labeled-images) | [occultainsights](https://www.kaggle.com/occultainsights) | Unknown | cars | n/a |\n| [**MyAuto.ge Cars**](https://www.kaggle.com/datasets/ssturua/myautoge-cars-dataset) | [ssturua](https://www.kaggle.com/ssturua) | CC-BY-SA-4.0 | cars | n/a |","metadata":{}},{"cell_type":"markdown","source":"<p id=\"toc\"></p>\n\n<br><br>\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #DA9186; background-color: #ffffff;\">TABLE OF CONTENTS</h1>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#imports\">0&nbsp;&nbsp;&nbsp;&nbsp;IMPORTS</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#caltech256\">1&nbsp;&nbsp;&nbsp;&nbsp;CALTECH-256</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#coco2017\">2&nbsp;&nbsp;&nbsp;&nbsp;COCO 2017</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#coil100\">3&nbsp;&nbsp;&nbsp;&nbsp;COIL-100</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#imagenet1000mini\">4&nbsp;&nbsp;&nbsp;&nbsp;IMAGENET 1000 MINI</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#imagenetfull\">5&nbsp;&nbsp;&nbsp;&nbsp;IMAGENET FULL</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#imagenetfull\">6&nbsp;&nbsp;&nbsp;&nbsp;OBJECTNET</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#imagenetfull\">7&nbsp;&nbsp;&nbsp;&nbsp;CIFAR-100</a></h3>\n\n---","metadata":{}},{"cell_type":"markdown","source":"<br>\n\n<a id=\"imports\"></a>\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; background-color: #ffffff; color: #DA9186;\" id=\"imports\">0&nbsp;&nbsp;IMPORTS&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a></h1>","metadata":{}},{"cell_type":"code","source":"print(\"\\n... IMPORTS STARTING ...\\n\")\n\nprint(\"\\n\\tVERSION INFORMATION\")\n\n# Machine Learning and Data Science Imports\nimport tensorflow as tf; print(f\"\\t\\t– TENSORFLOW VERSION: {tf.__version__}\");\nimport tensorflow_hub as tfhub; print(f\"\\t\\t– TENSORFLOW HUB VERSION: {tfhub.__version__}\");\nimport tensorflow_addons as tfa; print(f\"\\t\\t– TENSORFLOW ADDONS VERSION: {tfa.__version__}\");\nimport tensorflow_io as tfio; print(f\"\\t\\t– TENSORFLOW I/O VERSION: {tfio.__version__}\");\nimport pandas as pd; pd.options.mode.chained_assignment = None;\nimport numpy as np; print(f\"\\t\\t– NUMPY VERSION: {np.__version__}\");\nimport sklearn; print(f\"\\t\\t– SKLEARN VERSION: {sklearn.__version__}\");\nfrom sklearn.preprocessing import RobustScaler, PolynomialFeatures\nfrom pandarallel import pandarallel; pandarallel.initialize();\nfrom sklearn.model_selection import GroupKFold, StratifiedKFold\nfrom scipy.spatial import cKDTree\n\n# # RAPIDS\n# import cudf, cupy, cuml\n# from cuml.neighbors import NearestNeighbors\n# from cuml.manifold import TSNE, UMAP\n# from cuml import PCA\n\n# Built In Imports\nfrom kaggle_datasets import KaggleDatasets\nfrom collections import Counter\nfrom datetime import datetime\nfrom zipfile import ZipFile\nfrom glob import glob\nimport openslide\nimport warnings\nimport requests\nimport hashlib\nimport imageio\nimport IPython\nimport sklearn\nimport urllib\nimport zipfile\nimport pickle\nimport random\nimport shutil\nimport string\nimport json\nimport math\nimport time\nimport gzip\nimport ast\nimport sys\nimport io\nimport os\nimport gc\nimport re\n\n# Visualization Imports\nfrom matplotlib.colors import ListedColormap\nfrom matplotlib.patches import Rectangle\nimport matplotlib.patches as patches\nimport plotly.graph_objects as go\nimport matplotlib.pyplot as plt\nfrom tqdm.notebook import tqdm; tqdm.pandas();\nimport plotly.express as px\nimport tifffile as tif\nimport seaborn as sns\nfrom PIL import Image, ImageEnhance; Image.MAX_IMAGE_PIXELS = 5_000_000_000;\nimport matplotlib; print(f\"\\t\\t– MATPLOTLIB VERSION: {matplotlib.__version__}\");\nfrom matplotlib import animation, rc; rc('animation', html='jshtml')\nimport plotly\nimport PIL\nimport cv2\n\nimport plotly.io as pio\nprint(pio.renderers)\n\ndef seed_it_all(seed=7):\n    \"\"\" Attempt to be Reproducible \"\"\"\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    random.seed(seed)\n    np.random.seed(seed)\n    tf.random.set_seed(seed)\nseed_it_all()\n\ndef flatten_l_o_l(nested_list):\n    \"\"\" Flatten a list of lists \"\"\"\n    return [item for sublist in nested_list for item in sublist]\n\ndef load_json_to_dict(json_path):\n    \"\"\" tbd \"\"\"\n    with open(json_path) as json_file:\n        data = json.load(json_file)\n    return data\n    \nprint(\"\\n\\n... IMPORTS COMPLETE ...\\n\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T21:25:37.036722Z","iopub.execute_input":"2022-07-17T21:25:37.038195Z","iopub.status.idle":"2022-07-17T21:25:50.231237Z","shell.execute_reply.started":"2022-07-17T21:25:37.038047Z","shell.execute_reply":"2022-07-17T21:25:50.230430Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<br>\n\n<a id=\"caltech256\"></a>\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #DA9186; background-color: #ffffff;\" id=\"caltech256\">1&nbsp;&nbsp;CALTECH-256&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a></h1>\n\n---\n\nCaltech-256 is an object recognition dataset containing 30,607 real-world images, of different sizes, spanning 257 classes (256 object classes and an additional clutter class).  Each class is represented by at least 80 images.  The dataset is a superset of the Caltech-101 dataset.","metadata":{}},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #DA9186; background-color: #ffffff;\">1.1 CREATE/GET DATAFRAME(S)</h3>\n\n---\n","metadata":{}},{"cell_type":"code","source":"def get_caltech256_df(dir_path, add_shape_info=False):\n    \n    # Create dataframe as none exists natively\n    _df = pd.DataFrame({\"img_path\":tf.io.gfile.glob(os.path.join(dir_path, \"**\", \"*.jpg\"))})\n    \n    # If requested add image shape into the dataframe\n    if add_shape_info: _df[\"img_shape\"] = _df[\"img_path\"].progress_apply(lambda x: Image.open(x).size)\n    \n    # Add relevant label information\n    _df[\"label\"] = _df.img_path.apply(lambda x: x.rsplit(\"/\", 2)[1])\n    _df[\"label_str\"] = _df[\"label\"].apply(lambda x: x.split(\".\")[1])\n    _df[\"label_int\"] = _df[\"label\"].apply(lambda x: x.split(\".\")[0]).astype(int)\n    _df[\"label_int_0_offset\"] = _df.label_int-1\n    \n    # Cleanup\n    gc.collect(); gc.collect(); gc.collect();\n    \n    return _df\n\ncaltech256_df = get_caltech256_df(dir_path=\"/kaggle/input/caltech256/256_ObjectCategories\")\ncaltech_n_labels = caltech256_df.label_str.nunique()\nprint(f\"\\n... CALTECH-256 DATAFRAME - ({caltech_n_labels} UNIQUE LABELS)...\\n\")\ndisplay(caltech256_df)\n\nfig = px.histogram(caltech256_df, \"label_str\", color=\"label_str\", title=\"<b>CALTECH-256 CLASS DISTRIBUTION</b>\")\nfig.update_layout(showlegend=False)\nfig.show()","metadata":{"scrolled":true,"execution":{"iopub.status.busy":"2022-07-17T21:25:50.232770Z","iopub.execute_input":"2022-07-17T21:25:50.233492Z","iopub.status.idle":"2022-07-17T21:25:55.379622Z","shell.execute_reply.started":"2022-07-17T21:25:50.233458Z","shell.execute_reply":"2022-07-17T21:25:55.378641Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #DA9186; background-color: #ffffff;\">1.2 PLOT IMAGES</h3>\n\n---\n\nOne for each class","metadata":{}},{"cell_type":"code","source":"def plot_all_class_images(_df, label_str_col, image_path_col, _figsize=None):\n    \"\"\" Helper function to plot a single image for every class \"\"\"\n    \n    # Initialize some things\n    _n_labels = _df[label_str_col].nunique()\n    if _figsize is None: _figsize=(20, int(10+_n_labels/6))\n    \n    # Loop and plot with str as title\n    plt.figure(figsize=_figsize)\n    for i, (_, row) in enumerate(_df.sample(len(_df)).drop_duplicates(label_str_col).iterrows()):\n        img = cv2.imread(row[image_path_col])[..., ::-1]\n        str_lbl = row[label_str_col]\n        plt.subplot(1+_n_labels//10,10,i+1)\n        plt.imshow(img)\n        plt.title(f\"{str_lbl}\", fontweight=\"bold\")\n        plt.axis(False)\n        \n    # Tight layout to squeeze images together and show\n    plt.tight_layout()\n    plt.show()\n    \nplot_all_class_images(caltech256_df, \"label_str\", \"img_path\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T21:25:55.380616Z","iopub.execute_input":"2022-07-17T21:25:55.380924Z","iopub.status.idle":"2022-07-17T21:26:16.388288Z","shell.execute_reply.started":"2022-07-17T21:25:55.380896Z","shell.execute_reply":"2022-07-17T21:26:16.386761Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<br>\n\n<a id=\"coco2017\"></a>\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #DA9186; background-color: #ffffff;\" id=\"coco2017\">2&nbsp;&nbsp;COCO 2017&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a></h1>\n\n---\n\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3574256%2F5db51abf765a35b95d32ed089d7189fe%2Fcoco.PNG?generation=1599196939016424&alt=media\" width=100%>","metadata":{}},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #DA9186; background-color: #ffffff;\">2.1 CREATE/GET DATAFRAME(S)</h3>\n\n---\n","metadata":{}},{"cell_type":"code","source":"def load_coco2017(dir_path):\n    annot_dir = os.path.join(dir_path, \"annotations\")\n    \n    coco_instances_train = load_json_to_dict(os.path.join(annot_dir, \"instances_train2017.json\"))\n    \n    COCO_I2S = {c_map[\"id\"]:c_map[\"name\"] for c_map in coco_instances_train[\"categories\"]}\n    COCO_S2I = {v:k for k,v in COCO_I2S.items()}\n    \n    train_license_map = {_l[\"id\"]:_l[\"name\"] for _l in coco_instances_train[\"licenses\"]}\n    train_images, train_annots = coco_instances_train[\"images\"], coco_instances_train[\"annotations\"]\n    train_df = pd.merge(pd.DataFrame(train_annots), pd.DataFrame(train_images), left_on=\"image_id\", right_on=\"id\").drop(columns=[\"id_x\", \"id_y\"]).sort_values(by=\"image_id\")\n    train_df[\"license\"] = train_df[\"license\"].map(train_license_map)\n    train_df[\"img_path\"] = os.path.join(dir_path, \"train2017\")+\"/\"+train_df[\"file_name\"]\n    train_df[\"str_category\"] = train_df[\"category_id\"].map(COCO_I2S)\n    train_df = train_df[['image_id', 'file_name', 'img_path', 'category_id',\n                         'str_category', 'segmentation', 'area', 'iscrowd', 'bbox', 'license', \n                         'coco_url', 'height', 'width', 'date_captured','flickr_url']].reset_index(drop=True)\n    \n    coco_instances_val = load_json_to_dict(os.path.join(annot_dir, \"instances_val2017.json\"))\n    val_license_map = {_l[\"id\"]:_l[\"name\"] for _l in coco_instances_val[\"licenses\"]}\n    val_images, val_annots = coco_instances_val[\"images\"], coco_instances_val[\"annotations\"]\n    val_df = pd.merge(pd.DataFrame(val_annots), pd.DataFrame(val_images), left_on=\"image_id\", right_on=\"id\").drop(columns=[\"id_x\", \"id_y\"]).sort_values(by=\"image_id\")\n    val_df[\"license\"] = val_df[\"license\"].map(val_license_map)\n    val_df[\"img_path\"] = os.path.join(dir_path, \"val2017\")+\"/\"+val_df[\"file_name\"]\n    val_df[\"str_category\"] = val_df[\"category_id\"].map(COCO_I2S)\n    val_df = val_df[['image_id', 'file_name', 'img_path', 'category_id', \n                     'str_category', 'segmentation', 'area', 'iscrowd', 'bbox', 'license', \n                     'coco_url', 'height', 'width', 'date_captured','flickr_url']].reset_index(drop=True)\n    \n    # Get test dataframe images\n    test_df = pd.DataFrame({\"img_path\":glob(os.path.join(dir_path, \"test2017\", \"*.jpg\"))})\n    test_df.insert(0, \"image_id\", test_df[\"img_path\"].apply(lambda x: x.rsplit(\"/\", 1)[-1][:-4]))\n\n    # Cleanup\n    gc.collect(); gc.collect(); gc.collect();\n    \n    return train_df, val_df, test_df\n    \ntrain_df, val_df, test_df = load_coco2017(\"/kaggle/input/coco-2017-dataset/coco2017\")\nN_TRAIN, N_VAL, N_TEST = len(train_df), len(val_df), len(test_df)\n\nprint(f\"\\n\\n... COCO TRAINING DATAFRAME ({N_TRAIN} EXAMPLES OVER {train_df.image_id.nunique()} IMAGES) ...\\n\")\ndisplay(train_df)\n\nprint(f\"\\n\\n\\n... COCO VALIDATION DATAFRAME ({N_VAL} EXAMPLES OVER {val_df.image_id.nunique()} IMAGES) ...\\n\")\ndisplay(val_df)\n\nprint(f\"\\n\\n\\n... COCO VALIDATION DATAFRAME ({N_TEST} EXAMPLES OVER {test_df.image_id.nunique()} IMAGES) ...\\n\")\ndisplay(test_df)\n\nfig = px.histogram(train_df, \"str_category\", color=\"str_category\", title=\"<b>COCO CLASS DISTRIBUTION</b>\")\nfig.update_layout(showlegend=False)\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2022-07-17T22:15:13.916191Z","iopub.execute_input":"2022-07-17T22:15:13.916606Z","iopub.status.idle":"2022-07-17T22:15:18.650829Z","shell.execute_reply.started":"2022-07-17T22:15:13.916568Z","shell.execute_reply":"2022-07-17T22:15:18.649628Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #DA9186; background-color: #ffffff;\">2.2 PLOT IMAGES</h3>\n\n---\n\nOne for each class","metadata":{}},{"cell_type":"code","source":"plot_all_class_images(val_df, \"str_category\", \"img_path\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T21:54:28.963297Z","iopub.execute_input":"2022-07-17T21:54:28.964371Z","iopub.status.idle":"2022-07-17T21:54:37.491385Z","shell.execute_reply.started":"2022-07-17T21:54:28.964330Z","shell.execute_reply":"2022-07-17T21:54:37.490232Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<br>\n\n<a id=\"coil100\"></a>\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #DA9186; background-color: #ffffff;\" id=\"coil100\">3&nbsp;&nbsp;COIL-100&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a></h1>\n\n---\n\n**Dataset Context**\n* COIL-100 was collected by the Center for Research on Intelligent Systems at the Department of Computer Science, Columbia University. The database contains color images of 100 objects. The objects were placed on a motorized turntable against a black background and images were taken at pose internals of 5 degrees. This dataset was used in a real-time 100 object recognition system whereby a system sensor could identify the object and display its angular pose.\n\n**Dataset Content**\n* There are 7,200 images of 100 objects. \n* Each object was turned on a turnable through 360 degrees to vary object pose with respect to a fixed color camera. \n    * Images of the objects were taken at pose intervals of 5 degrees. \n    * This corresponds to 72 poses per object. \n    * There images were then size normalized. \n* Objects have a wide variety of complex geometric and reflectance characteristics.\n\n**Acknowledgements**\n* Original data source and banner image: \n    * http://www1.cs.columbia.edu/CAVE/software/softlib/coil-100.php\n\n**License Info**\n* This dataset is intended for non-commercial research purposes only. When using this dataset, please cite:\n\n```\n\"Columbia Object Image Library (COIL-100),\"\nS. A. Nene, S. K. Nayar and H. Murase,\nTechnical Report CUCS-006-96, February 1996.\n```\n\n**Inspiration**\n* Can you train a system to identify objects in real time?","metadata":{}},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #DA9186; background-color: #ffffff;\">3.1 CREATE/GET DATAFRAME(S)</h3>\n\n---\n","metadata":{}},{"cell_type":"code","source":"def get_coil100_df(dir_path, add_shape_info=False):\n    \n    # Create dataframe as none exists natively\n    _df = pd.DataFrame({\"img_path\":tf.io.gfile.glob(os.path.join(dir_path,\"*.png\"))})\n    \n    # If requested add image shape into the dataframe\n    if add_shape_info: _df[\"img_shape\"] = _df[\"img_path\"].progress_apply(lambda x: Image.open(x).size)\n    \n    _df[\"object_id\"] = _df[\"img_path\"].apply(lambda x: x.rsplit(\"/\", 1)[-1].split(\"__\", 1)[0])\n    _df[\"object_id_int\"] = _df[\"object_id\"].str.replace(\"obj\", \"\").astype(int)\n    _df[\"object_id_int_0_offset\"] = _df[\"object_id_int\"]-1\n    _df[\"angle\"] = _df[\"img_path\"].apply(lambda x: int(x.rsplit(\"__\", 1)[-1][:-4]))\n    \n    # Cleanup\n    gc.collect(); gc.collect(); gc.collect();\n    \n    return _df\n\ncoil100_df = get_coil100_df(dir_path=\"/kaggle/input/coil100/coil-100/coil-100\")\ncoil100_df\n\ncoil_n_labels = coil100_df[\"object_id\"].nunique()\nprint(f\"\\n... COIL-100 DATAFRAME - ({coil_n_labels} UNIQUE LABELS)...\\n\")\ndisplay(coil100_df)\n\nfig = px.histogram(coil100_df, \"object_id\", color=\"object_id\", title=\"<b>COIL-100 CLASS DISTRIBUTION</b>\")\nfig.update_layout(showlegend=False)\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2022-07-17T22:14:39.507568Z","iopub.execute_input":"2022-07-17T22:14:39.508035Z","iopub.status.idle":"2022-07-17T22:14:46.037401Z","shell.execute_reply.started":"2022-07-17T22:14:39.507999Z","shell.execute_reply":"2022-07-17T22:14:46.036240Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #DA9186; background-color: #ffffff;\">3.2 PLOT IMAGES</h3>\n\n---\n\nOne for each class","metadata":{}},{"cell_type":"code","source":"plot_all_class_images(coil100_df, \"object_id\", \"img_path\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T22:16:40.658219Z","iopub.execute_input":"2022-07-17T22:16:40.658671Z","iopub.status.idle":"2022-07-17T22:16:47.127509Z","shell.execute_reply.started":"2022-07-17T22:16:40.658636Z","shell.execute_reply":"2022-07-17T22:16:47.126111Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #DA9186; background-color: #ffffff;\">3.3 PLOT IMAGES FOR SAME OBJECT AT ALL ROTATIONS</h3>\n\n---\n","metadata":{}},{"cell_type":"code","source":"for _ in range(5):\n    rand = int(random.random()*coil_n_labels)\n    print(f\"\\n... SHOWING ALL ANGLES FOR ID={rand} ...\\n\")\n    plot_all_class_images(coil100_df[coil100_df.object_id_int==rand], \"angle\", \"img_path\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T22:18:42.838441Z","iopub.execute_input":"2022-07-17T22:18:42.838918Z","iopub.status.idle":"2022-07-17T22:19:08.902151Z","shell.execute_reply.started":"2022-07-17T22:18:42.838866Z","shell.execute_reply":"2022-07-17T22:19:08.900837Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<br>\n\n<a id=\"imagenet1000mini\"></a>\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #DA9186; background-color: #ffffff;\" id=\"imagenet1000mini\">4&nbsp;&nbsp;IMAGENET 1000 MINI&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a></h1>\n\n---","metadata":{}},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #DA9186; background-color: #ffffff;\">4.1 CREATE/GET DATAFRAME(S)</h3>\n\n---\n","metadata":{}},{"cell_type":"code","source":"def get_imagenet1000mini_df(dir_path, add_shape_info=False):\n    \n    # Create dataframe as none exists natively\n    _df = pd.DataFrame({\"img_path\":tf.io.gfile.glob(os.path.join(dir_path,\"**\",\"*.JPEG\"))})\n    \n    # If requested add image shape into the dataframe\n    if add_shape_info: _df[\"img_shape\"] = _df[\"img_path\"].progress_apply(lambda x: Image.open(x).size)\n    _df.img_path[0]\n    _df[\"label_str\"] = _df[\"img_path\"].apply(lambda x: x.rsplit(\"/\", 2)[-2])\n    \n    # Cleanup\n    gc.collect(); gc.collect(); gc.collect();\n    \n    return _df\n\nimagenet_train_df = get_imagenet1000mini_df(dir_path=\"/kaggle/input/imagenetmini-1000/imagenet-mini/train\")\nimagenet_val_df = get_imagenet1000mini_df(dir_path=\"/kaggle/input/imagenetmini-1000/imagenet-mini/val\")\n\nimagenet_1000_n_labels = imagenet_train_df[\"label_str\"].nunique()\nprint(f\"\\n... IMAGENET 1000 MINI DATAFRAME - ({imagenet_1000_n_labels} UNIQUE LABELS)...\\n\")\ndisplay(imagenet_train_df)\n\nfig = px.histogram(imagenet_train_df, \"label_str\", color=\"label_str\", title=\"<b>IMAGENET-1000 MINI CLASS DISTRIBUTION</b>\")\nfig.update_layout(showlegend=False)\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2022-07-17T22:28:01.874354Z","iopub.execute_input":"2022-07-17T22:28:01.874793Z","iopub.status.idle":"2022-07-17T22:28:21.261029Z","shell.execute_reply.started":"2022-07-17T22:28:01.874751Z","shell.execute_reply":"2022-07-17T22:28:21.259828Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #DA9186; background-color: #ffffff;\">4.2 PLOT IMAGES</h3>\n\n---\n\nOne for each class","metadata":{}},{"cell_type":"code","source":"plot_all_class_images(imagenet_train_df, \"label_str\", \"img_path\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T22:28:33.932218Z","iopub.execute_input":"2022-07-17T22:28:33.933234Z","iopub.status.idle":"2022-07-17T22:30:16.941550Z","shell.execute_reply.started":"2022-07-17T22:28:33.933165Z","shell.execute_reply":"2022-07-17T22:30:16.939338Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<br>\n\n<a id=\"imagenetfull\"></a>\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #DA9186; background-color: #ffffff;\" id=\"imagenetfull\">5&nbsp;&nbsp;IMAGENET FULL&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a></h1>\n\n---\n\nTBD","metadata":{}},{"cell_type":"markdown","source":"<br>\n\n<a id=\"objectnet\"></a>\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #DA9186; background-color: #ffffff;\" id=\"objectnet\">6&nbsp;&nbsp;OBJECTNET&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a></h1>\n\n---","metadata":{}},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #DA9186; background-color: #ffffff;\">6.1 CREATE/GET DATAFRAME(S)</h3>\n\n---\n","metadata":{}},{"cell_type":"code","source":"def get_objectnet_full_df(root_dir=\"/kaggle/input\", add_shape_info=False):\n    \n    ONET_DIR_MAP = {\n        int(_dir.split(\"-\",2)[1]):os.path.join(root_dir, _dir, f'split_{_dir.split(\"-\", 2)[1]}') \\\n        for _dir in os.listdir(root_dir) if \"objectnet\" in _dir\n    }\n    ONET_CSV_MAP = {k:pd.read_csv(os.path.join(v, \"onet.csv\")) for k,v in ONET_DIR_MAP.items()}\n    _df = pd.concat(list(ONET_CSV_MAP.values())).reset_index(drop=True)\n    if add_shape_info: _df[\"img_shape\"] = _df[\"img_path\"].progress_apply(lambda x: Image.open(x).size)\n    _df.insert(1, \"img_path\", f\"{root_dir}/objectnet-\"+\\\n                              _df[\"split\"].astype(str)+\"-of-10/\"\\\n                              \"split_\"+_df[\"split\"].astype(str)+\\\n                              \"/images/\"+_df[\"label\"]+\"/\"+\\\n                              _df[\"img_name\"])\n    return _df\n\nobjectnet_df = get_objectnet_full_df()\nobject_n_labels = objectnet_df[\"label\"].nunique()\n\nprint(f\"\\n... OBJECTNET DATAFRAME - ({object_n_labels} UNIQUE LABELS)...\\n\")\ndisplay(objectnet_df)\n\nfig = px.histogram(objectnet_df, \"onet_str_label\", color=\"onet_str_label\", title=\"<b>OBJECTNET CLASS DISTRIBUTION</b>\")\nfig.update_layout(showlegend=False)\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2022-07-17T22:37:20.635351Z","iopub.execute_input":"2022-07-17T22:37:20.635768Z","iopub.status.idle":"2022-07-17T22:37:22.491053Z","shell.execute_reply.started":"2022-07-17T22:37:20.635733Z","shell.execute_reply":"2022-07-17T22:37:22.489848Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #DA9186; background-color: #ffffff;\">6.2 PLOT IMAGES</h3>\n\n---\n\nOne for each class","metadata":{}},{"cell_type":"code","source":"plot_all_class_images(objectnet_df, \"label\", \"img_path\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T22:37:22.901007Z","iopub.execute_input":"2022-07-17T22:37:22.901392Z","iopub.status.idle":"2022-07-17T22:39:40.589390Z","shell.execute_reply.started":"2022-07-17T22:37:22.901362Z","shell.execute_reply":"2022-07-17T22:39:40.587897Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<br>\n\n<a id=\"cifar100\"></a>\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #DA9186; background-color: #ffffff;\" id=\"cifar100\">7&nbsp;&nbsp;CIFAR-100&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a></h1>\n\n---\n\nTBD","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}