{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "af14ba04-bbce-47e4-8d84-3347582b50b9", "metadata": {}, "outputs": [], "source": [ "DATA = \"./DATA/\"\n", "META_DATA = f\"{DATA}images.csv/\"\n", "IMAGES = f\"{DATA}images_compressed/\"\n", "\n", "hf_token = \"\"\n", "model_name = \"meta-llama/Llama-3.2-11b-Vision-Instruct\"" ] }, { "cell_type": "markdown", "id": "544c6687-e174-4490-b221-4b3fbed080b3", "metadata": {}, "source": [ "### Clean Corrupt Images" ] }, { "cell_type": "code", "execution_count": 39, "id": "36c2a0b8-2953-4194-8cc0-e7338a8865fd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Corrupt images:\n", "./DATA/images_compressed/d028580f-9a98-4fb5-a6c9-5dc362ad3f09.jpg\n", "./DATA/images_compressed/784d67d4-b95e-4abb-baf7-8024f18dc3c8.jpg\n", "./DATA/images_compressed/b72ed5cd-9f5f-49a7-b12e-63a078212a17.jpg\n", "./DATA/images_compressed/1d0129a1-f29a-4a3f-b103-f651176183eb.jpg\n", "./DATA/images_compressed/c60e486d-10ed-4f64-abab-5bb698c736dd.jpg\n", "./DATA/images_compressed/040d73b7-21b5-4cf2-84fc-e1a80231b202.jpg\n", "Total corrupt images found: 6\n" ] } ], "source": [ "import os\n", "from PIL import Image\n", "from concurrent.futures import ProcessPoolExecutor\n", "import multiprocessing\n", "\n", "def is_image_corrupt(image_path):\n", " try:\n", " with Image.open(image_path) as img:\n", " img.verify()\n", " return False\n", " except (IOError, SyntaxError, Image.UnidentifiedImageError):\n", " return True\n", "\n", "def find_corrupt_images(folder_path):\n", " image_files = [os.path.join(folder_path, f) for f in os.listdir(folder_path) \n", " if f.lower().endswith(('.png', '.jpg', '.jpeg'))]\n", " \n", " num_cores = multiprocessing.cpu_count()\n", " with ProcessPoolExecutor(max_workers=num_cores) as executor:\n", " results = executor.map(is_image_corrupt, image_files)\n", " \n", " corrupt_images = [img for img, is_corrupt in zip(image_files, results) if is_corrupt]\n", " return corrupt_images\n", "\n", "\n", "folder_path = IMAGES # Replace with your folder path\n", "corrupt_images = find_corrupt_images(folder_path)\n", "\n", "print(\"Corrupt images:\")\n", "for img in corrupt_images:\n", " print(img)\n", "print(f\"Total corrupt images found: {len(corrupt_images)}\")" ] }, { "cell_type": "code", "execution_count": 40, "id": "b0ba27eb-2c5b-447e-9264-bb8db890bc12", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['./DATA/images_compressed/d028580f-9a98-4fb5-a6c9-5dc362ad3f09.jpg',\n", " './DATA/images_compressed/784d67d4-b95e-4abb-baf7-8024f18dc3c8.jpg',\n", " './DATA/images_compressed/b72ed5cd-9f5f-49a7-b12e-63a078212a17.jpg',\n", " './DATA/images_compressed/1d0129a1-f29a-4a3f-b103-f651176183eb.jpg',\n", " './DATA/images_compressed/c60e486d-10ed-4f64-abab-5bb698c736dd.jpg',\n", " './DATA/images_compressed/040d73b7-21b5-4cf2-84fc-e1a80231b202.jpg']" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "corrupt_images" ] }, { "cell_type": "code", "execution_count": 44, "id": "05c65335-ad2f-4735-a25b-d75adb195113", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
imagesender_idlabelkids
04285fab0-751a-4b74-8e9b-43af05deee22124Not sureFalse
1ea7b6656-3f84-4eb3-9099-23e623fc1018148T-ShirtFalse
200627a3f-0477-401c-95eb-92642cbe078d94Not sureFalse
3ea2ffd4d-9b25-4ca8-9dc2-bd27f1cc59fa43T-ShirtFalse
43b86d877-2b9e-4c8b-a6a2-1d87513309d0189ShoesFalse
...............
5398dfd4079d-967b-4b3e-8574-fbac11b58103204ShortsFalse
5399befa14be-8140-4faf-8061-1039947e329d204BodyTrue
54005379356a-40ee-4890-b416-2336a7d84061310ShortsFalse
540165507fb8-3456-4c15-b53e-d1b03bf71a59204ShoesFalse
540232b99302-cec7-4dec-adfa-3d4029674209204SkirtFalse
\n", "

5403 rows × 4 columns

\n", "
" ], "text/plain": [ " image sender_id label kids\n", "0 4285fab0-751a-4b74-8e9b-43af05deee22 124 Not sure False\n", "1 ea7b6656-3f84-4eb3-9099-23e623fc1018 148 T-Shirt False\n", "2 00627a3f-0477-401c-95eb-92642cbe078d 94 Not sure False\n", "3 ea2ffd4d-9b25-4ca8-9dc2-bd27f1cc59fa 43 T-Shirt False\n", "4 3b86d877-2b9e-4c8b-a6a2-1d87513309d0 189 Shoes False\n", "... ... ... ... ...\n", "5398 dfd4079d-967b-4b3e-8574-fbac11b58103 204 Shorts False\n", "5399 befa14be-8140-4faf-8061-1039947e329d 204 Body True\n", "5400 5379356a-40ee-4890-b416-2336a7d84061 310 Shorts False\n", "5401 65507fb8-3456-4c15-b53e-d1b03bf71a59 204 Shoes False\n", "5402 32b99302-cec7-4dec-adfa-3d4029674209 204 Skirt False\n", "\n", "[5403 rows x 4 columns]" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"./DATA/images.csv\")\n", "df" ] }, { "cell_type": "code", "execution_count": 45, "id": "761bda90-4d50-4796-b797-a4236b03adbf", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
imagesender_idlabelkids
04285fab0-751a-4b74-8e9b-43af05deee22124Not sureFalse
1ea7b6656-3f84-4eb3-9099-23e623fc1018148T-ShirtFalse
200627a3f-0477-401c-95eb-92642cbe078d94Not sureFalse
3ea2ffd4d-9b25-4ca8-9dc2-bd27f1cc59fa43T-ShirtFalse
43b86d877-2b9e-4c8b-a6a2-1d87513309d0189ShoesFalse
...............
5398dfd4079d-967b-4b3e-8574-fbac11b58103204ShortsFalse
5399befa14be-8140-4faf-8061-1039947e329d204BodyTrue
54005379356a-40ee-4890-b416-2336a7d84061310ShortsFalse
540165507fb8-3456-4c15-b53e-d1b03bf71a59204ShoesFalse
540232b99302-cec7-4dec-adfa-3d4029674209204SkirtFalse
\n", "

5403 rows × 4 columns

\n", "
" ], "text/plain": [ " image sender_id label kids\n", "0 4285fab0-751a-4b74-8e9b-43af05deee22 124 Not sure False\n", "1 ea7b6656-3f84-4eb3-9099-23e623fc1018 148 T-Shirt False\n", "2 00627a3f-0477-401c-95eb-92642cbe078d 94 Not sure False\n", "3 ea2ffd4d-9b25-4ca8-9dc2-bd27f1cc59fa 43 T-Shirt False\n", "4 3b86d877-2b9e-4c8b-a6a2-1d87513309d0 189 Shoes False\n", "... ... ... ... ...\n", "5398 dfd4079d-967b-4b3e-8574-fbac11b58103 204 Shorts False\n", "5399 befa14be-8140-4faf-8061-1039947e329d 204 Body True\n", "5400 5379356a-40ee-4890-b416-2336a7d84061 310 Shorts False\n", "5401 65507fb8-3456-4c15-b53e-d1b03bf71a59 204 Shoes False\n", "5402 32b99302-cec7-4dec-adfa-3d4029674209 204 Skirt False\n", "\n", "[5403 rows x 4 columns]" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [] }, { "cell_type": "code", "execution_count": 35, "id": "dc52ddca-eaf2-4b6b-990b-f22f8c214531", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from PIL import Image as PIL_Image\n", "import torch\n", "from transformers import MllamaForConditionalGeneration, MllamaProcessor" ] }, { "cell_type": "code", "execution_count": 20, "id": "225a1df9-6a17-4cef-a8f2-db55ca8647a3", "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv(\"./DATA/images.csv\")" ] }, { "cell_type": "code", "execution_count": 21, "id": "840693d6-6df3-407e-8090-d1396cbb01c4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 5403 entries, 0 to 5402\n", "Data columns (total 4 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 image 5403 non-null object\n", " 1 sender_id 5403 non-null int64 \n", " 2 label 5403 non-null object\n", " 3 kids 5403 non-null bool \n", "dtypes: bool(1), int64(1), object(2)\n", "memory usage: 132.0+ KB\n" ] } ], "source": [ "df.info()" ] }, { "cell_type": "code", "execution_count": 22, "id": "8199d67f-2b60-4a60-8fb0-58ef6b2117d1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
imagesender_idlabelkids
04285fab0-751a-4b74-8e9b-43af05deee22124Not sureFalse
1ea7b6656-3f84-4eb3-9099-23e623fc1018148T-ShirtFalse
200627a3f-0477-401c-95eb-92642cbe078d94Not sureFalse
3ea2ffd4d-9b25-4ca8-9dc2-bd27f1cc59fa43T-ShirtFalse
43b86d877-2b9e-4c8b-a6a2-1d87513309d0189ShoesFalse
\n", "
" ], "text/plain": [ " image sender_id label kids\n", "0 4285fab0-751a-4b74-8e9b-43af05deee22 124 Not sure False\n", "1 ea7b6656-3f84-4eb3-9099-23e623fc1018 148 T-Shirt False\n", "2 00627a3f-0477-401c-95eb-92642cbe078d 94 Not sure False\n", "3 ea2ffd4d-9b25-4ca8-9dc2-bd27f1cc59fa 43 T-Shirt False\n", "4 3b86d877-2b9e-4c8b-a6a2-1d87513309d0 189 Shoes False" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 23, "id": "3363ce8c-3226-4cb2-8e7f-e0b1ec66c13f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Missing values:\n", "image 0\n", "sender_id 0\n", "label 0\n", "kids 0\n", "dtype: int64\n" ] } ], "source": [ "# Step 4: Check for missing values\n", "print(\"\\nMissing values:\")\n", "print(df.isnull().sum())" ] }, { "cell_type": "code", "execution_count": 24, "id": "fea1f2d8-48c4-4b0e-9790-3427c2517e4e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Unique labels:\n", "20\n", "\n", " Label Distribution:\n", "label\n", "T-Shirt 1011\n", "Longsleeve 699\n", "Pants 692\n", "Shoes 431\n", "Shirt 378\n", "Dress 357\n", "Outwear 312\n", "Shorts 308\n", "Not sure 228\n", "Hat 171\n", "Skirt 155\n", "Polo 120\n", "Undershirt 118\n", "Blazer 109\n", "Hoodie 100\n", "Body 69\n", "Other 67\n", "Top 43\n", "Blouse 23\n", "Skip 12\n", "Name: count, dtype: int64\n" ] } ], "source": [ "print(\"\\nUnique labels:\")\n", "print(df['label'].nunique())\n", "print(\"\\n Label Distribution:\")\n", "print(df['label'].value_counts())" ] }, { "cell_type": "code", "execution_count": 25, "id": "5b8bb4cc-b45c-4402-a0d4-316b9b250b8b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Distribution of kids vs. non-kids images:\n", "kids\n", "False 0.911901\n", "True 0.088099\n", "Name: proportion, dtype: float64\n" ] } ], "source": [ "print(\"\\nDistribution of kids vs. non-kids images:\")\n", "print(df['kids'].value_counts(normalize=True))" ] }, { "cell_type": "code", "execution_count": 27, "id": "14a86ee1-d419-495b-86b0-7ef193e81b4a", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACRkklEQVR4nOzdeZyN9f//8dexjm3GPgzTzIgw9t1Esg9G1kgklaWEEskSJS2WklKWUCiVCpUIyV5kLdmihZAPyjIju5nn7w+/c33nGBXSNeeMx/12m9vNXNd15rzfznWu5Xm9F48kGQAAAAAAAOCidKldAAAAAAAAANx4CKUAAAAAAADgOkIpAAAAAAAAuI5QCgAAAAAAAK4jlAIAAAAAAIDrCKUAAAAAAADgOkIpAAAAAAAAuI5QCgAAAAAAAK4jlAIAAAAAAIDrCKUAAMANJzIy0u67777r+jdr165tpUuX/sft9uzZYx6Px6ZNm3Zd3z81eDwe69mz53X7e2np/wYAAPwzQikAAJBm/Pzzz/bggw9akSJFLCgoyIKDg61GjRr26quv2unTp//13z9w4IANHTrUvvvuu39f2FSwfPly83g8NmvWrNQuCgAAgGVI7QIAAABcD/Pnz7c2bdpY5syZ7d5777XSpUvbuXPn7KuvvrJ+/frZtm3bbNKkSf/qPQ4cOGDPPPOMRUZGWvny5a/pb0RERNjp06ctY8aM/6osAAAAgY5QCgAABLzdu3dbu3btLCIiwpYuXWoFCxZ01vXo0cN++uknmz9/fiqW8P94PB4LCgpK7WIAAACkOrrvAQCAgDdq1Cj7888/7c033/QJpLyKFi1qjz766N/+jV9++cXatGljuXPntqxZs1r16tV9gqzly5dblSpVzMzs/vvvN4/Hc9nxj7Zv32516tSxrFmzWqFChWzUqFE+6y83btJ9991n2bNnt99++81atGhh2bNnt3z58tnjjz9uiYmJPq8/cuSIdezY0YKDgy1nzpzWqVMn27x583Udi+mll16yW2+91fLkyWNZsmSxSpUq/W2Xv3fffdeKFy9uQUFBVqlSJVu5cmWKbX777Td74IEHLDQ01DJnzmylSpWyt9566x/LcvDgQbv//vutcOHCljlzZitYsKA1b97c9uzZ82+qCAAA/AAtpQAAQMD77LPPrEiRInbrrbde0+sPHTpkt956q506dcoeeeQRy5Mnj02fPt2aNWtms2bNspYtW1rJkiVt2LBh9tRTT1m3bt3stttuMzPzec9jx45Zo0aNrFWrVta2bVubNWuW9e/f38qUKWONGzf+2zIkJiZabGysVatWzV566SX78ssvbfTo0XbzzTdb9+7dzcwsKSnJ7rjjDlu3bp11797dSpQoYZ9++ql16tTpmur9V1599VVr1qyZdejQwc6dO2czZ860Nm3a2Lx58ywuLs5n2xUrVtgHH3xgjzzyiGXOnNnGjx9vjRo1snXr1jkDvx86dMiqV6/uDIyeL18+W7BggXXu3NkSEhKsd+/ef1mW1q1b27Zt26xXr14WGRlphw8ftsWLF9vevXstMjLyutYbAAC4TAAAAAEsPj5eZqbmzZtf8WsiIiLUqVMn5/fevXvLzLRq1Spn2YkTJxQVFaXIyEglJiZKktavXy8z09SpU1P8zdtvv11mprfffttZdvbsWRUoUECtW7d2lu3evTvF3+jUqZPMTMOGDfP5mxUqVFClSpWc32fPni0z0yuvvOIsS0xMVN26df+yXMktW7ZMZqaPPvrob7c7deqUz+/nzp1T6dKlVbduXZ/lZiYz04YNG5xlv/76q4KCgtSyZUtnWefOnVWwYEH98ccfPq9v166dQkJCnPe79P/m2LFjMjO9+OKLf1teAAAQmOi+BwAAAlpCQoKZmeXIkeOa/8bnn39uVatWtZo1azrLsmfPbt26dbM9e/bY9u3br+jvZM+e3e655x7n90yZMlnVqlXtl19+uaLXP/TQQz6/33bbbT6vXbhwoWXMmNG6du3qLEuXLp316NHjiv7+lcqSJYvz72PHjll8fLzddttttmnTphTbxsTEWKVKlZzfb7rpJmvevLktWrTIEhMTTZLNnj3b7rjjDpNkf/zxh/MTGxtr8fHxl/273nJkypTJli9fbseOHbuudQQAAKmPUAoAAAS04OBgMzM7ceLENf+NX3/91YoXL55iecmSJZ31V6Jw4cLm8Xh8luXKleuKApWgoCDLly/f3772119/tYIFC1rWrFl9titatOgVle9KzZs3z6pXr25BQUGWO3duy5cvn02YMMHi4+NTbFusWLEUy2655RY7deqU/f777/b777/b8ePHbdKkSZYvXz6fn/vvv9/MzA4fPnzZcmTOnNlGjhxpCxYssNDQUKtVq5aNGjXKDh48eF3rCwAAUgdjSgEAgIAWHBxsYWFhtnXr1tQuiqVPn/6yyyVd82vdtmrVKmvWrJnVqlXLxo8fbwULFrSMGTPa1KlT7b333rvqv5eUlGRmZvfcc89fjn1VtmzZv3x979697Y477rBPPvnEFi1aZEOGDLHhw4fb0qVLrUKFClddHgAA4D8IpQAAQMBr2rSpTZo0ydasWWMxMTFX/fqIiAjbuXNniuU//PCDs97MUrSCcltERIQtW7bMTp065dNa6qeffrpu7zF79mwLCgqyRYsWWebMmZ3lU6dOvez2P/74Y4plu3btsqxZszotv3LkyGGJiYlWv379ayrTzTffbH379rW+ffvajz/+aOXLl7fRo0fbjBkzrunvAQAA/0D3PQAAEPCeeOIJy5Ytm3Xp0sUOHTqUYv3PP/9sr7766l++vkmTJrZu3Tpbs2aNs+zkyZM2adIki4yMtOjoaDMzy5Ytm5mZHT9+/PpW4ArFxsba+fPnbfLkyc6ypKQkGzdu3HV7j/Tp05vH47HExERn2Z49e+yTTz657PZr1qzxGRNq37599umnn1rDhg0tffr0lj59emvdurXNnj37sq3Zfv/9978sy6lTp+zMmTM+y26++WbLkSOHnT179iprBgAA/A0tpQAAQMC7+eab7b333rO77rrLSpYsaffee6+VLl3azp07Z6tXr7aPPvrI7rvvvr98/YABA+z999+3xo0b2yOPPGK5c+e26dOn2+7du2327NmWLl06531y5sxpEydOtBw5cli2bNmsWrVqFhUV5Uo9W7RoYVWrVrW+ffvaTz/9ZCVKlLC5c+fa0aNHzezKW3LNnj3baQWWXKdOnSwuLs5efvlla9SokbVv394OHz5s48aNs6JFi9r333+f4jWlS5e22NhYe+SRRyxz5sw2fvx4MzN75plnnG1GjBhhy5Yts2rVqlnXrl0tOjrajh49aps2bbIvv/zSKf+ldu3aZfXq1bO2bdtadHS0ZciQwT7++GM7dOiQtWvX7orqCgAA/BehFAAASBOaNWtm33//vb344ov26aef2oQJEyxz5sxWtmxZGz16tM+MdZcKDQ211atXW//+/e21116zM2fOWNmyZe2zzz6zuLg4Z7uMGTPa9OnTbeDAgfbQQw/ZhQsXbOrUqa6FUunTp7f58+fbo48+atOnT7d06dJZy5Yt7emnn7YaNWpY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v/zyizMWUfny5VW6dGl99dVXzmcXHx+fmsW9KnPmzFGtWrW0dOlSzZ8/Xx6PR3369EnRsnLbtm166KGH/L7JuOQ7qLnXE088ofTp0/u0kvXyHv8DoYvN7t27nYvWQ4cOKS4uTs8++6yki+OhREREqGbNmipbtqzat2/v1xeuf8Ubvuzatcs5LkpStWrVFBkZqa+//vqy1yWBcq3idezYMSeYSj5WyAMPPKASJUood+7cql69uvLly+fXQXBSUpLOnj2ruLg4J/RM3oovffr0atCggfbu3ZvitadOndKSJUsCakbPc+fOqXXr1hoyZIiki63XixUr5jPbpSStW7dOzZs3T/Gg0J8cOXJEzZo1U0hIiL7++mtJF89fY8aMUZUqVdShQwfnuPjMM88oT548yp8/v8qXL6+SJUv69X7plfy4/sUXX6hbt27KnTu3qlSpogULFvhs+8cff2jXrl3q1q2boqKinDF9AuHYsmrVKmcSgT179ig8PFwPPvigs/6rr75y/u3vLRLffvttPfPMM5IujpebO3duDR06VB07dlTVqlVVs2ZNZ1y+rVu3qnTp0ipYsKBWr17tfFaB0H0v+ayrOXPm1IABA5xJZA4fPuwMUj948GANHTpU3bp1U3BwsF+3mk3+Xfnjjz8kXQwVIyIiNHjwYJ9gqkaNGvJ4POrYsaPPvVEg3IsTSl1Hx44dU7ly5VSyZElt375d0sWb4TfffFMZMmRwTraB6NKxJPr27auwsDCfbkIJCQnatm2b9u3b53yBAiEM8B5kJ02apEGDBqlx48aKi4tznjB6T747duzQo48+qrp16wbUzb90caaQ5557zpkVq1u3bs5nNHfuXGeA5UA44SSXlJSk8ePHy+PxODeR0sVgKjY2VpGRkU6XqEA4IF9O+/btddttt+mnn37S/fffr7p166py5crKly+f05x669atATlo+6JFi7R9+3YdP35c1apVU5cuXSRdfPLq8Xh0yy236JtvvknlUl4Z7/dp9+7dqlmzpt58801nn/vwww/l8XjUr18/J5gaMWKE5s6dm2rlvRbLli1TixYtfAL5Ll26KFu2bD5PyKXAuOGQLh7z6tSpo4IFCzotvj766CNt2bJFv//+u0qWLOncGPfu3VvZs2dXXFxcwHS19O6DiYmJ2rNnj0JDQ/X444/7lL9ChQoqXry41qxZ43xugfL5Xa6cx44d0+uvv65cuXL5BFOrVq3SjBkz9O6776YYM8XfXPo5fP3115o9e7bOnDkj6WIw5fF49Oijj/q09gqU89yln1t8fLzzICI+Pl5hYWE+gdTEiROdkM37f+DPtm/frnvuuUd58uTR8uXLJV28Rh43bpwqVKige+65x7m2/O6777Rs2TKtX78+IIaESK5v374KDw/XU089pUceeUQRERGqVauW07pP+r998sKFC3rwwQfVoEGD1CruVdu4caMaNGigtWvXphj769tvv1WPHj0C4qHSxIkT5fF4tGDBAu3atUvFixf36ba9dOlStWvXzun6K118aFawYEE1atRIx44dC5hzgnRx3NWQkBBnvEuvxMREnT59WhMmTFClSpVUq1YtderUyW9bJl76fz5q1Chn8i1JGjNmjAoVKpQimKpevbrKly/v98MKXIpQ6hr91dPf48ePKyYmRkWLFvUJpqZOnZrixjlQvPHGG+rSpYvP+DVnz55VhQoVnFYOl/v/8Pcn5N4v+6VdombOnKn69esrLi7OZ4r2HTt26Ntvvw2Ygdul//sMvGNL3HTTTerevbuz/uzZs+rUqZP69esXMIOhXurUqVN64403lC5dOp8xNtatW6cmTZooODjY729AvC530v/0009VpUoVpU+fXm3atNGsWbMkSdOmTVOVKlUCYvwo6fJ18y5buHChKlas6FzcLVu2TG3atNFtt93m92ObJbd+/Xo9+uijat68uY4ePapz5845dfzwww+VMWNG3XnnnWrXrp0yZcoUEE/Ek9u4caOyZs2qtm3b+oyF+MADDyh79uwpnpAHii1btqhKlSqKjo72mSRg7NixatiwofNkcsqUKSpdurTuuuuugJgkQfq/75h3aIERI0YoMjIyxUVshQoVVLp0aa1cuTJgbj685Vy9erXGjx+vQYMG6bvvvtPp06d1/vz5ywZTgSYpKUmJiYmqXbu2SpYsqY8//tgJZWbNmuXMluXv3RAv5f3skt/Qd+jQQffee6/Cw8PVvXt35yHZiRMnFBcXp1dffTXFDMn+JnkouG7dOnXo0EH58uVzHq7Ex8c7wVTyFlOB6Pvvv1dERIRPN8Uvv/xSjRs31q233uqz3PtZbtiwQYULF/ab83ry/ely+9Uvv/yiwoULy+PxpGi117t3b9WpU8c5P/irt99+WxkzZnS6vG7atEk5c+bUypUrfbZbsGCBIiIinBBVuvjAMyIiQjExMQFx7+P9DEeNGqUmTZpIuviQYu7cuWrTpo2qVKnijFPnbX3vr/c+Dz/8sJYsWeJzjHjooYf03HPP+Wz3V8FUxYoVVapUKa1YscKvj5nJEUpdpUvHENq0aZPeeecdrVixwrnoi4+Pv2wwNWPGDOd3f3bpAfqpp57SHXfcoYwZM6p3797OQHD9+/dX06ZNA3JcLG/d5s+fr9jYWLVp08bniz5z5kw1aNBATZo00RdffKGnn35auXPn9vuTj7dehw4d0pEjR5zmxElJSapZs6Zy5syp//3vf7pw4YLOnj2rgQMHqlChQikGPPdX3gu+/fv3+1zMJiUlady4cSmCqdWrV6t169Z+cwH0d5LP8jJ06FANGDDAacF24sQJrV692mf77t2764477giI75+3bitWrNCgQYPUrVs3TZ061WfMqNDQUOeEOnjwYD322GMBd8Her18/5cqVS2FhYT4TXHjr/9lnn6l169Zq1apVwLW2TD5TYoECBdSqVStnZiVJ6tatmzwej7744ovUKuJVSz4Q6o4dOxQTE6NKlSo5wdTgwYNVpkwZ54a/X79+ev755wNmdkuvL774QrGxsU6Y8VcXsZGRkapSpUpAHFO8PvroI+XIkUM1a9bULbfcoly5cmnQoEHav3+/zp07p9dff12hoaEpBpMONCdOnFCDBg1UpUoVnxZTH330kTJlyqQuXbro999/T+VS/rPkIcDnn38uj8fjnLMnTJigyMhIxcTE+LSyHzhwoIoVKxYQrROTH+tjY2PVoEEDeTwe5c2b1wkBvMFUlSpV1Lx584C5YbzUrl27lCdPnhStZBcvXqzs2bPr1ltvdR6ieQ0cOFCRkZF+cy3t7QXiDSZWrVqll156SRMmTHAePCxevFgZM2bUQw89pK+++kobN25Unz59FBIS4vcTVXkbRCRvnbZlyxbdcsstzozAyfe/W265JUXjic2bN6tkyZJ+3WX20t45b731lnLmzKnXX39djRo1UlxcnNq0aaPOnTsrffr0Pg+V/PX7V6RIERUtWlRfffWVc7xv06aNRo4cKcm34ceYMWN000036ZFHHvGpW1RUVECd0wmlrsLYsWP14IMPOk0bP/nkEwUFBTkD+HXv3t1pWeMNpkqWLOlz4e7vku/klzaRnjlzpuLi4hQVFaV7773XOdhd2jwyUKxYsUKZMmXSQw89pDZt2igsLEzt2rVz1s+ePVtNmzZVoUKFVKRIkRQznfkb74H1448/dmZhKF++vNNt9Ntvv1XRokUVGRmp6tWrq3HjxsqfP7/ft9YYP368li5d6pxsPvroI4WHhys8PFylSpXS0qVLnadw3mAq+Uk1UA7G0sV9LiQkRO3bt9cDDzygXLly6e677/bZZuvWrerTp49y5szp9xdEyc2ePVu5cuVS27Zt1bdvX3k8Hj300EM6c+aMEhISFBUVpUKFCqlatWoBNVvbpZ577jmFhYWpV69eTleMCxcuON/PU6dOBUT3E69t27Y53Wa8ddi4caPy58+v5s2b+5zfevXqFRBdGZIfE5J3Wfbul2XLltXRo0f1ySefqFKlSs6Di6xZs/p9gD9+/HgtW7bM51z+wgsv6IEHHvDZLnkwlfxm319v/C8XUO/cuVOFChXSW2+95dxUvvTSSypbtqyGDBmic+fO6ejRo3rppZdUpEiRgOgadeHCBaeuhw8f1qlTp5zBiU+cOKE6deqkCKbeffdd5cqVy++7cCcPpN5//32lS5dOefPmVa9evSRd/F726tVL5cqVU5MmTTRw4EDdddddypUrV0CdD77++mulT59eEyZM0A8//KA5c+YoLi5OefLkcYKphIQEjR49Wrfffrt+++23VC7xP7tca6KffvpJpUqV0quvvppirNyaNWuqWLFiTitF77pevXr5zeD7b7/9tgoUKOB8bz788ENlz55d5cuXV7FixVSkSBHnfOa97gwLC1PJkiVVuXJlv98nJ02apHTp0qlLly7ONYnXPffco/z58ztjnkkXZzAtX768pk2bluJv+WtrouS+/vprvfTSS4qPj9f+/fvVu3dvhYeHq0uXLlq1apWSkpK0e/duVaxYMWDGzq1Vq5ZuvvlmrVq1SpJ0xx13pGgp5fXCCy+oWbNmTutaL389p18OodRVeP3115U/f3717dvX6Ro0adIknTlzRrNnz1aJEiV07733Ogfc+Ph4lSxZUhUrVgyIL3TynXjs2LHq0KGDYmNjNWTIEOepxsGDB7V+/XrdeuutqlOnjjOYWqDZtWuXPvvsM73yyiuSLl7szZkzRyEhIWrbtq2z3S+//KLNmzcHxEWDdPGJeObMmTVmzBhNmzZNL774ooKCgpxmx+fPn9eIESM0ePBgjR8/3ucpub/xXsR4ux2uXr1a33//vTNQ5rJlyxQbG6ubbrpJH330kfMd8/ad9z5NCBQ///yzihQpotdff12S9OOPPyp37tw+TcbXrl2rhx56SOXKlQuIgfa9fvnlFxUtWtSZ7fHPP/9U9uzZ1bdvX6e11JEjR9S/f389//zzARFsXNoqMfnTqUGDBqlChQoaMmSI03ohUMZ68bpw4YL++OMP5xifvNWldDGYypw5szp16qQNGzakZlGvyv79+9WmTRuf8TQkaeTIkcqTJ4+mTJmiSpUqqWLFijp+/LgmT56s9u3bq2XLln79gOnS4+XXX3/tBG6PPfaY7r//fkm+++GYMWMUGRmpxx57zK+7OHuvTfbv36+ZM2fqvffe05YtW7Rnzx5FRETo22+/9bkhHjVqlHLlyuXceBw/ftzvW7fNmjXL5yZ3zpw5qly5skqWLKlHH33UaSmbPJhK3pUvkGY0+/DDD5U+fXrNnTtX48ePV926dZ11p06d0uTJk9W2bVvVr19fPXr0CIgeBsmNHTtWt99+u8+yzZs3q1GjRsqXL5/zgDMhIcHv90vJ997g5MmTPvczQ4YMUebMmTVnzhzneHP06FG1bdtWb7/9tvNaf2z1vGLFCsXExKhMmTLat2+f+vXrp2nTpunChQvasGGD4uLilDNnTudBxP79+7Vlyxbt3LnT7z+3MWPGyOPxOK3YJk6cqLx586pHjx7ONt6g9LHHHtMLL7ygBg0aqEyZMgExFvDlPPTQQ4qIiNCrr77qPHi69EFE//79VaZMGb9pqXc5ixYt0nPPPeecv7yTkWzYsEHNmzfX6NGj9eeff2r//v3av3+/jh496oyJlTw8DsTPkVDqH1zarG/KlCkqXLiw+vTpo9atW/v04587d66io6N17733OhfpCQkJfn2xdzlPPPGE8uXLpzFjxui5555TVFSUatWqlSJYW7x4sUaOHBlwO/7evXuVN29eBQcHOwGAdPFJwMcff+y0VAk0SUlJevjhh3Xffff5LF+8eLEyZ84cUOOZXXoBc/vtt6tEiRKaPn26+vXr57OudevWKYKpKVOmBNyF7KZNm1S2bFlJ0q+//qrChQv7dDnxht0bNmwImFmVvMfPLVu2qHr16pIuBlTewfa9/P2J46X+qVWidPHip2LFinr66acDooWGl7du3vDis88+c4LtS/e722+/XR6PR/fdd19APHiRLoa/MTExatKkiTNz0vDhw5U7d25nDJTt27erbNmyql69ujOOhj/X73LHyyJFijhPV3v16uXTUir59sOHD1fJkiX9dkwib1k3b96sIkWKKDo6WunTp1eJEiXUvXt3FS1aVNu2bZMkn/H1wsPDNXr06FQp89Xatm2bKlSooDvuuEM//vij9uzZo5w5c2rkyJF6/PHH1aBBA91+++3OzFjernzFihVzJkvw1y4ol1q2bJk8Ho/TGuPll19W6dKlJaWcaCXQgnyvcePGKW/evCm6U7733nvyeDxKly6d8930d8mPFaNGjVK9evVUo0YNtWvXzjlmPProowoKClLXrl01aNAg3X777apatapfB1JeX3/9tWrUqKGiRYuqbt26PtciP/74o5o0aaKQkBC/byF7qeXLl+v99993fj9+/LjeeOONFMHUgAEDFBcXp1tvvVX33ntvwM2afqlevXqpVKlSGj16tE9wuHLlSj344IPKnTu3X19vvvXWWypUqJC6d+/u04qtUqVKTg8R7yzxuXPnVnBwsCIiItSoUSNn20A5F1wOodTf8B5Ijxw54jMy/+TJk5UrVy7lzJkzxRPizz77TGXLllWLFi38vlvU5WzYsEHR0dHOl2Hu3LnKnj37P3bRC6Rg6ujRo3rllVcUFhaWIsA5e/asPv30U3k8HmcmsEBx4cIF1a1b16ell/fEMnToUNWsWVNHjx519mt/PXB5y7d792699tprTnfZqlWryuPxKDY2NsXFa+vWrXXzzTdrxowZATODoPf/f9myZfryyy+1fft2Z3DQm266SQ8++KDzvdq8ebPuueeegLsw8n4W69evV0REhBYtWqQiRYr4zGCzbt06NWjQICBaRyV3uVaJWbJkcVqkSBdbTEVFRen555/36wtzL+8+uXz5cj377LPORd0XX3yh9OnTpwimHn/8cc2aNStgmsJ77dq1S40aNVLz5s3VtWtX5cuXT4sWLfLZZseOHYqIiFC1atVSdE3xJ391vKxWrZoiIiK0adMmdenSxRm3Jz4+XidPnlRiYqLTAtg766C/SR5IZc2aVU888YR+++03zZs3Tw0bNlSVKlVUqFAhlStXzud18fHxqlChgt57771UKPW1mTFjhurVq6c2bdpo+PDhziQy0sUHSy1atPCZsj0hIUF33HFHQHXN8Eo+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7NihZs2aqVChQoqJiVH27Nn9djrz5NdR3n+vXbvW6Rq7f/9+LV++XB06dFCWLFmcYGrHjh16++239dFHH6Vo5REodu3apfr16yskJEQffvihJDkDfW/cuFHR0dEB02V26tSpCgoKcn6/9Dz3yy+/KCQkJMV3Eanvcq0uExIS1LRpU915550+995nzpxRxYoVfYaeSUuOHTvm7LtpuYWU1w0ZSnlPNNu2bVOWLFmcsU6k/0sh9+zZoyJFiuidd95x1g0YMEB16tRRhQoV/PaEeinvTnz48GEVKlRINWvWdIK2efPmqWbNmqpatapmzpypyZMnq2HDhgE5y95fTRn9xBNPSLp4Qtq2bZv69eun/v37+/24L2l1Frpr8cMPP6h27dpq2bKl339uySWfaj55MJX84qh27dpq3779Zdf5o0mTJjnjMXg8Hk2bNs1Zd+TIES1ZskSlSpVSeHi4IiIi1KVLl4AINdJ6q0TvfjV8+HB5PB7FxMQ4rcGSr0fgC9TjZVq3d+9eVatWTdmzZ9ewYcMkpQzVFi9erEceeUS5cuXy2+6yyR/o5suXTy1atFC7du2UIUOGFMFU5cqVne42a9as0dixYzVw4EC/bTHrtXv3bue8lZSUpClTpqhOnTo+x/7//e9/uvvuu1WhQgUdPHgwtYp63f3000+KjY1V48aNtXLlSmd506ZNVbt27YC5J1i1apWCgoKcsR8vp0KFCj6zeCJ1/FOrS+811gcffKCaNWuqefPmWrBggbZv367+/fsrf/78AdOz51rdKNdoN1wo5d35t2zZorx586pkyZLOuuSBVK5cudStWzefHWHnzp2aMmVKQNyEJD9xeFtfHDp0SIULF1ZMTIx27twpSZo/f746duyonDlzqlatWrrnnnsCtt/qX00ZfemXORBOqjfarEr/5NChQwERblwqeTCV/AljYmKi9u3bp8aNGzvBTqCcdNq3b6906dL5DJ58admfeuophYeHKzQ0VMeOHXO5hFfnRmiV6D23vfLKK3r66adVpEgRdejQwacVTfLPMNDqB1+BerxMy06cOKExY8aoWLFiuvXWW53l3uus/fv3a9iwYapVq5bfdpf1Hhc2b96sLFmyaNCgQc7ynj176tFHH3WmYN+7d68qVKigChUq6MCBA6lW5qt17tw51alTRwULFnTOXa+88opy5crl/O49Vs6b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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12, 6))\n", "df['label'].value_counts().head(20).plot(kind='bar')\n", "plt.title('Clothing Labels')\n", "plt.xlabel('Label')\n", "plt.ylabel('Count')\n", "plt.xticks(rotation=45, ha='right')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 28, "id": "48a00d85-011d-4632-af7d-d34c8dee6a2c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original dataset shape: (5403, 4)\n", "Cleaned dataset shape: (4927, 3)\n" ] } ], "source": [ "df_no_kids = df[df['kids'] == False]\n", "df_cleaned = df_no_kids.drop('kids', axis=1)\n", "\n", "print(f\"Original dataset shape: {df.shape}\")\n", "print(f\"Cleaned dataset shape: {df_cleaned.shape}\")" ] }, { "cell_type": "code", "execution_count": 32, "id": "4b8bde55-a9a2-48af-a70c-e794408f5676", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
imagesender_idlabel
04285fab0-751a-4b74-8e9b-43af05deee22124Not sure
1ea7b6656-3f84-4eb3-9099-23e623fc1018148T-Shirt
200627a3f-0477-401c-95eb-92642cbe078d94Not sure
3ea2ffd4d-9b25-4ca8-9dc2-bd27f1cc59fa43T-Shirt
43b86d877-2b9e-4c8b-a6a2-1d87513309d0189Shoes
............
53969bdac063-6c07-4bfc-a04a-e45224c503df204Undershirt
5398dfd4079d-967b-4b3e-8574-fbac11b58103204Shorts
54005379356a-40ee-4890-b416-2336a7d84061310Shorts
540165507fb8-3456-4c15-b53e-d1b03bf71a59204Shoes
540232b99302-cec7-4dec-adfa-3d4029674209204Skirt
\n", "

4927 rows × 3 columns

\n", "
" ], "text/plain": [ " image sender_id label\n", "0 4285fab0-751a-4b74-8e9b-43af05deee22 124 Not sure\n", "1 ea7b6656-3f84-4eb3-9099-23e623fc1018 148 T-Shirt\n", "2 00627a3f-0477-401c-95eb-92642cbe078d 94 Not sure\n", "3 ea2ffd4d-9b25-4ca8-9dc2-bd27f1cc59fa 43 T-Shirt\n", "4 3b86d877-2b9e-4c8b-a6a2-1d87513309d0 189 Shoes\n", "... ... ... ...\n", "5396 9bdac063-6c07-4bfc-a04a-e45224c503df 204 Undershirt\n", "5398 dfd4079d-967b-4b3e-8574-fbac11b58103 204 Shorts\n", "5400 5379356a-40ee-4890-b416-2336a7d84061 310 Shorts\n", "5401 65507fb8-3456-4c15-b53e-d1b03bf71a59 204 Shoes\n", "5402 32b99302-cec7-4dec-adfa-3d4029674209 204 Skirt\n", "\n", "[4927 rows x 3 columns]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = df_cleaned\n", "df" ] }, { "cell_type": "code", "execution_count": 33, "id": "99115476-9862-4b92-83f4-dd0145e1ee86", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Unique categories after merging:\n", "['Other' 'T-Shirt' 'Shoes' 'Shorts' 'Tops' 'Pants' 'Skirts']\n" ] } ], "source": [ "category_mapping = {\n", " 'T-Shirt': 'T-Shirt',\n", " 'Shoes': 'Shoes',\n", " 'Top': 'Tops',\n", " 'Blouse': 'Tops',\n", " 'Shirt': 'Tops',\n", " 'Polo': 'Tops',\n", " 'Longsleeve': 'Tops',\n", " 'Pants': 'Pants',\n", " 'Jeans': 'Jeans',\n", " 'Shorts': 'Shorts',\n", " 'Skirt': 'Skirts',\n", " 'Dress': 'Skirts',\n", " 'Footwear': 'Shoes',\n", " 'Outwear': 'Tops',\n", " 'Hat': 'Tops',\n", " 'Undershirt': 'T-Shirt',\n", " 'Body': 'Tops',\n", " 'Hoodie': 'Tops',\n", " 'Blazer': 'Tops'\n", "}\n", "\n", "df_cleaned['merged_category'] = df_cleaned['label'].map(category_mapping).fillna('Other')\n", "\n", "# Print the unique categories after merging\n", "print(\"Unique categories after merging:\")\n", "print(df_cleaned['merged_category'].unique())" ] }, { "cell_type": "code", "execution_count": 34, "id": "0e9844bf-45a4-460b-bfc2-7800b920ba55", "metadata": {}, "outputs": [ { "data": { "image/png": "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0rvvvqs8efLoxx9/VMuWLZU3b14dOnRI3bt3V5cuXfTSSy8pIiJCderUUXh4uL799lsVLVrU3uUjDdmyZYtq1aqlTp066erVq9q2bZsqV66shQsXSpKWLl2qOXPm6Pfff5erq6sWLVqksmXL2rlqpBaGYWjLli3q1q2bNm/ebPPpa+nSpfX7779rxowZevPNNxP8Dl20aJHOnj2r1157Tfny5TO7dKQR8X+fXb58WU5OTrp37558fHxkGIYqV66sgwcP6siRI8qWLZtiY2MVEhKir7/+WuvXr1eBAgXsXT7SgPfee09ffPGF0qVLp3379snb29s696zFYtHy5cs1d+5cGYah4cOHq3jx4vYuGanQnTt3lC5dOmuYvnXrVv32229yd3dXw4YNlTNnTq1bt0716tVT586d9cYbbyhdunRasGCBvvzyS/36668qVqyYvU/juUYo9RybN2+eTp8+rWHDhmnQoEH6/PPP9fbbb+vUqVM6duyYXFxcNGLECFWvXl2HDh1Sy5YtdfXqVX3//feqUKGCLBaLoqOjGdqNJJk+fbpGjhyptm3bqkWLFgoJCVHjxo3Vrl07rVixQoMHD1a5cuXUu3dvlSlTRhEREapQoYLSpUunHTt28MktUsSJEyd07NgxnTp1Sn369FFkZKTWrl2rjh07KigoSIsXL5YknT59Wjdv3lTWrFnl6+tr56qRGl25ckXZsmXTiRMn5ODgoDx58kiSKlSooEuXLmnBggUKDAxMEEzxgQ+eRHz/WbZsmUaPHq0rV67I09NTDRs21MiRIxUaGqpmzZopJiZGPj4+ypQpk/bu3avVq1erVKlS9i4facioUaM0Y8YMNW3aVEOGDFH27NkVGxsrBwcHWSwW3blzRw4ODnJ1dbV3qUiF5s2bp/fee0+hoaHy9vbWd999p06dOilv3ry6deuWYmNjtWLFChUsWFBLlixR//79FRsbK09PT7m7u+vzzz9XyZIl7X0azz1CqefUp59+qrfeeksrV65Unjx51LBhQ82cOVPVqlWTJG3cuFGfffaZ/vnnH82aNUt58uTR4cOHVbNmTZUoUUILFy6Up6cnfzAjUf77n6svv/xSISEhat68uc6ePauZM2dah83+/PPPGjRokMqUKaO3335bpUuX1s2bN3X16lWbec2A5Dp//rxeeukl3bt3Tx999JF69uwp6d9L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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12, 6))\n", "df_cleaned['merged_category'].value_counts().plot(kind='bar')\n", "plt.title('Distribution of Merged Clothing Categories')\n", "plt.xlabel('Category')\n", "plt.ylabel('Count')\n", "plt.xticks(rotation=45, ha='right')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 36, "id": "43b65158-1865-4535-bba0-610b32811c82", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Category counts in the balanced dataset:\n", "merged_category\n", "Pants 500\n", "T-Shirt 500\n", "Tops 500\n", "Skirts 457\n", "Shoes 371\n", "Shorts 284\n", "Other 271\n", "Name: count, dtype: int64\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_3243603/3748658876.py:7: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", " df_balanced = df_cleaned.groupby('merged_category').apply(balance_category).reset_index(drop=True)\n" ] } ], "source": [ "def balance_category(group):\n", " if len(group) > 500:\n", " return group.sample(n=500, random_state=42)\n", " return group\n", "\n", "\n", "df_balanced = df_cleaned.groupby('merged_category').apply(balance_category).reset_index(drop=True)\n", "\n", "# Print the count of each category in the balanced dataset\n", "print(\"\\nCategory counts in the balanced dataset:\")\n", "print(df_balanced['merged_category'].value_counts())" ] }, { "cell_type": "code", "execution_count": 37, "id": "27a59ae8-adf5-4ad1-9e5d-40dad023483d", "metadata": {}, "outputs": [ { "data": { "image/png": "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oYULF2rixInKkCGDpP/ru2PGjNHQoUPVpEkTdezYUVevXtXUqVNVsWJF/fHHH7bL/RLapxLyfrrf7Nmzde/ePXXu3Fnu7u5Kly7dIy/jTej7YsSIERo7dqytH0RERGjPnj3at2+fqlev/tjncu/evYqOjtarr776yPUxMTG2SfLv3bunP/74QxMmTFDFihWVM2fORL0mjzNnzhx5eXmpX79+8vLy0oYNGzRs2DBFRETok08+sWt748YN1axZUw0bNlSTJk20ePFiDRgwQEWLFlWtWrUk/fuFQt26dbV+/Xo1a9ZMvXv31q1bt7R27VodPnzY9t7o0qWL5syZo3bt2umdd97RmTNnNG3aNP3xxx/atm2b7XNq2LBh+vDDD1W7dm3Vrl1b+/btU40aNR57OWnJkiVf+PndAOC5ZQAAkEizZ882JBm7d+9+bBsfHx/jlVdesT0ePny4cf+vnYkTJxqSjKtXrz52H7t37zYkGbNnz35oXaVKlQxJxqxZsx65rlKlSrbHGzduNCQZWbJkMSIiImzLv//+e0OSMXnyZNuywMBAo02bNv+5zyfV1qZNGyMwMND2+KeffjIkGR9++KFdu8aNGxsWi8U4deqUbZkkw83NzW7ZgQMHDEnG1KlTHzrW/SZNmmRIMubNm2dbFh0dbQQFBRleXl525x4YGGjUqVPnift7sG1sbKzh7+9vjB492jAMwzhy5Ighydi8efMj+0S1atWMokWLGvfu3bMti4+PN1577TUjb968tmXWbStUqGDExsbalkdFRRnp06c3SpcubcTExNiWz5kzx5Bk93rMnTvXcHJyMn777Te72mfNmmVIMrZt22YYhmHs37/fkGR0797drl2LFi0MScbw4cOf+Fy88sorho+Pz5OfsPs8TV/w9PR8ZF+0vpfat29vt7xBgwZG+vTp7ZY92J+tz3VwcLARHx9vW963b1/D2dnZCA8PNwzDMMLCwgwXFxejfv36dvsbMWKEIemRdT1YiyTjxo0bT2xndefOnYeWLVy40JBkbNmyxbbsk08+MSQZZ86csWt79uxZw9nZ2RgzZozd8kOHDhkuLi625YnpUwl9P505c8aQZHh7extXrlyxO7513f2fEwl9XxQvXjzB79H7ffnll4Yk49ChQw+tCwwMNCQ99FO+fHnjn3/+sWub0NfE2qfuf00etW2XLl2M1KlT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V1eFhoZqwYIFSps2rcaMGfPI7RPTF0qWLKl169ZpwoQJCggIUM6cOVW2bNkE1fm0/Pz81Lt3b3366ad64403VLNmTR04cEArV65UhgwZEjSK69tvv1WNGjXUsGFD1atXT9WqVZOnp6dOnjypRYsW6dKlSxo/fry8vb1VsWJFjRs3TjExMcqSJYvWrFnzyJE1JUuWlCQNHjxYzZo1k6urq+rVq6fcuXPrww8/1KBBg3T27FnVr19fadKk0ZkzZ7R06VJ17txZ7733XqL61LN6PyX0fVGoUCFVrlxZJUuWVLp06bRnzx4tXrxYPXv2fOL+PTw8VKNGDa1bt06jRo16aP3ff/+tefPmSfo3LDpw4IA+++wzu4nEE/OaPOi1115T2rRp1aZNG73zzjuyWCyaO3fuU10a2rp1a3377bfq16+fdu3apddff123b9/WunXr1L17d7355puqVKmSunTporFjx2r//v2qUaOGXF1ddfLkSf3www+aPHmyGjdurIwZM+q9997T2LFjVbduXdWuXVt//PGHrW8/6MqVKzp48KB69OiR5PoBAE9g6r3+AAApgvUW4NYfNzc3w9/f36hevboxefJk263S72e9jb3V+vXrjTfffNMICAgw3NzcjICAAKN58+bGiRMn7Lb7+eefjUKFChkuLi52t1avVKmSUbhw4UfWV6lSJbtbu2/cuNGQZCxcuNAYNGiQkSlTJiNVqlRGnTp1jHPnzj20/aeffmpkyZLFcHd3N8qXL2/s2bPnoX0+qbY2bdoYgYGBdm1v3bpl9O3b1wgICDBcXV2NvHnzGp988ondLckNwzAkGT169HiopsDAwEfeqvxBly9fNtq1a2dkyJDBcHNzM4oWLWp3O/r795fQ280npK21T+zevdtu+enTp43WrVsb/v7+hqurq5ElSxajbt26xuLFi/9zW6spU6YYgYGBhru7u1GmTBlj27ZtRsmSJY2aNWvatYuOjjb+97//GYULFzbc3d2NtGnTGiVLljRGjhxp3Lx509bu7t27xjvvvGOkT5/e8PT0NOrVq2dcuHDBkGQMHz48Qc/JjRs3jGHDhhlFixY1UqdObXh4eBhFihQxBg0aZFy6dMnW7mn6wrFjx4yKFSsaqVKlsrtVvfW9dPXqVbv21ufxzJkztmUP9pvHPdfW98jGjRtty2JjY42hQ4ca/v7+RqpU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PbVjxw4tWrRIBw8e1FtvvaWaNWvq5MmTkqRt27apa9eu6t27t/bv36/q1atrzJgxdjUsXbpUvXv31rvvvqvDhw+rS5cuateunTZu3GjXbsSIEWrQoIEOHTqkDh06qH379po9e7Zdm9mzZ6tixYrKkydPsjx/AAAAkmQxDMNwdBEAAAAvkl27dqls2bJasmSJGjRokODtFi9erK5du+qff/6R9O+cUn369FF4eLitzfnz55UrVy6dP39eAQEBtuXBwcEqU6aMPvroIzVr1kyRkZFatmyZbf3bb7+tZcuW2fZVvnx5FS5cWJ9//rmtTZMmTXT79m0tX75c0r8jpfr06aOJEyfa2ly8eFHZs2fX9u3bVaZMGcXExCggIEDjx49XmzZtEvU8AQAAPAkjpQAAABIpod/prVu3TtWqVVOWLFmUJk0atWrVSteuXdOdO3ceu82hQ4cUFxenfPnyycvLy/azefNmnT59WpJ0/PhxlSlTxm67Bx8fPXpU5cuXt1tWvnx5HT161G5ZqVKl7B4HBASoTp06+vrrryVJv/76q6KiovTWW28l6JwBAAASionOAQAAEilv3ryyWCxPnMz87Nmzqlu3rrp166YxY8YoXbp02rp1qzp06KDo6GilTp36kdtFRkbK2dlZe/fulbOzs906Ly+vZD0PSY+8/LBjx45q1aqVJk6cqNmzZ6tp06aPrRcAACCpGCkFAACQSOnSpVNISIimT5+u27dvP7Q+PDxce/fuVXx8vD799FOVK1dO+fLl08WLF+3aubm5KS4uzm7ZK6+8ori4OF25ckV58uSx+/H395ck5c+fX7t377bb7sHHBQsW1LZt2+yWbdu2TYUKFfrP86tdu7Y8PT01c+ZMrVq1Su3bt//PbQAAABKLUAoAACAJpk+frri4OJUpU0Y//vijTp48qaNHj2rKlCkKCgpSnjx5FBMTo6lTp+rPP//U3LlzNWvWLLt95MiRQ5GRkVq/fr3++ecf3blzR/ny5VPLli3VunVrLVmyRGfOnNGuXbs0duxY21xQvXr10ooVKzRhwgSdPHlSn332mVauXCmLxWLbd//+/TVnzhzNnDlTJ0+e1IQJE7RkyRLbZOpP4uzsrLZt22rQoEHKmzevgoKCkvfJAwAAEKEUAABAkuTKlUv79u1TlSpV9O6776pIkSKqXr261q9fr5kzZ6p48eKaMGGC/ve//6lIkSKaP3++xo4da7eP1157TV27dlXTpk2VMWNGjRs3TtK/d7tr3bq13n33XeXPn1/169fX7t27lT17dkn/zg01a9YsTZgwQcWLF9eqVavUt29feXh42PZdv359TZ48WePHj1fhwoX12Wefafbs2apcuXKCzs96mWG7du2S5wkDAAB4AHffAwAASAE6deqkY8eO6bfffkuW/f3222+qVq2aLly4ID8/v2TZJwAAwP2Y6BwAAOAFNH78eFWvXl2enp5auXKlvvnmG82YMeOp9xsVFaWrV69qxIgReuuttwikAADAM8PlewAAAC+gXbt2qXr16ipatKhmzZqlKVOmqGPHjk+934ULFyowMFDh4eG2ywkBAACeBS7fAwAAAAAAgOkYKQUAAAAAAADTEUoBAAAAAADAdIRSAAAAAAAAMB2hFAAAAAAAAExHKAUAAAAAAADTEUoBAAAAAADAdIRSAAAAAAAAMB2hFAAAAAAAAExHKAUAAAAAAADT/T+fkwNd1Mh3dQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Balanced dataset shape: (2883, 4)\n", "merged_category\n", "Pants 500\n", "T-Shirt 500\n", "Tops 500\n", "Skirts 457\n", "Shoes 371\n", "Shorts 284\n", "Other 271\n", "Name: count, dtype: int64\n" ] } ], "source": [ "# Plot the distribution of the balanced dataset\n", "plt.figure(figsize=(12, 6))\n", "df_balanced['merged_category'].value_counts().plot(kind='bar')\n", "plt.title('Distribution of Merged Clothing Categories (Balanced)')\n", "plt.xlabel('Category')\n", "plt.ylabel('Count')\n", "plt.xticks(rotation=45, ha='right')\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "print(f\"Balanced dataset shape: {df_balanced.shape}\")\n", "print(df_balanced['merged_category'].value_counts())" ] }, { "cell_type": "code", "execution_count": null, "id": "d4883769-292b-40e1-9237-09f354c17225", "metadata": {}, "outputs": [], "source": [ "# Save the balanced dataset\n", "df_balanced.to_csv('balanced_dataset.csv', index=False)" ] }, { "cell_type": "markdown", "id": "ef86acd6-9cee-4044-ae08-e4d1d46be806", "metadata": {}, "source": [ "### Removing Corrupt Images" ] }, { "cell_type": "code", "execution_count": null, "id": "b489ed6a-09f3-4628-9f29-29e7e300d9a6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5798ee82-e237-4dd4-8a07-7777694a8981", "metadata": {}, "source": [ "### Labelling these images" ] }, { "cell_type": "code", "execution_count": 126, "id": "180f9da6-fb85-4aa9-8ff7-b532f9fd6a6c", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "The model weights are not tied. Please use the `tie_weights` method before using the `infer_auto_device` function.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3bc738efed2c4fa3a3a5c94430af6300", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Loading checkpoint shards: 0%| | 0/5 [00:00" ] }, "execution_count": 709, "metadata": {}, "output_type": "execute_result" } ], "source": [ "image" ] }, { "cell_type": "code", "execution_count": 710, "id": "1de59227-6042-441b-a1f8-b19ce83f7c45", "metadata": {}, "outputs": [], "source": [ "USER_TEXT = \"\"\"\n", "You are an expert fashion captioner, we are writing descriptions of clothes, look at the image closely and write a caption for it.\n", "\n", "Write the following Title, Size, Category, Gender, Type, Description in JSON FORMAT, PLEASE DO NOT FORGET JSON, I WILL BE VERY SAD AND CRY\n", "\n", "ALSO START WITH THE JSON AND NOT ANY THING ELSE, FIRST CHAR IN YOUR RESPONSE IS ITS OPENING BRACE, I WILL DRINK CHAI IF YOU FOLLOW THIS\n", "\n", "FOLLOW THESE STEPS CLOSELY WHEN WRITING THE CAPTION: \n", "1. Only start your response with a dictionary like the example below, nothing else, I NEED TO PARSE IT LATER, SO DONT ADD ANYTHING ELSE-IT WILL BREAK MY CODE AND I WILL BE VERY SAD \n", "Remember-DO NOT SAY ANYTHING ELSE ABOUT WHAT IS GOING ON, just the opening brace is the first thing in your response nothing else ok?\n", "2. REMEMBER TO CLOSE THE DICTIONARY WITH '}'BRACE, IT GOES AFTER THE END OF DESCRIPTION-YOU ALWAYS FORGET IT, THIS WILL CAUSE A FIRE ON A PRODUCTION SERVER BEING USE BY MILLIONS\n", "3. If you cant tell the size from image, guess it! its okay but dont literally write that you guessed it\n", "4. Do not make the caption very literal, all of these are product photos, DO NOT CAPTION HOW OR WHERE THEY ARE PLACED, FOCUS ON WRITING ABOUT THE PIECE OF CLOTHING\n", "5. BE CREATIVE WITH THE DESCRIPTION BUT FOLLOW EVERYTHING CLOSELY FOR STRUCTURE\n", "6. Return your answer in dictionary format, see the example below\n", "7. Please do NOT add new lines or tabs in the JSON\n", "8. I REPEAT DO NOT GIVE ME YOUR EXPLAINATION START WITH THE JSON\n", "\n", "{\"Title\": \"Title of item of clothing\", \"Size\": {'S', 'M', 'L', 'XL'}, #select one randomly if you cant tell from the image. DO NOT TELL ME YOU ESTIMATE OR GUESSED IT ONLY THE LETTER IS ENOUGH\", Category\": {T-Shirt, Shoes, Tops, Pants, Jeans, Shorts, Skirts, Shoes, Footwear}, \"Gender\": {M, F, U}, \"Type\": {Casual, Formal, Work Casual, Lounge}, \"Description\": \"Write it here\"}\n", "\n", "Example: ALWAYS RETURN ANSWERS IN THE DICTIONARY FORMAT BELOW OK?\n", "\n", "{\"Title\": \"Casual White pant with logo on it\", \"size\": \"L\", \"Category\": \"Jeans\", \"Gender\": \"U\", \"Type\": \"Work Casual\", \"Description\": \"Write it here, this is where your stuff goes\"} \n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 711, "id": "ab307328-ad5e-436e-a3d5-30bfb8e24a34", "metadata": {}, "outputs": [], "source": [ "USER_TEXT_OPTION_2 = \"\"\"\n", "You are an expert fashion captioner, we are writing descriptions of clothes, look at the image closely and write a caption for it.\n", "\n", "Write the following Title, Size, Category, Gender, Type, Description in JSON FORMAT, PLEASE DO NOT FORGET JSON,\n", "\n", "ALSO START WITH THE JSON AND NOT ANY THING ELSE, FIRST CHAR IN YOUR RESPONSE IS ITS OPENING BRACE\n", "\n", "FOLLOW THESE STEPS CLOSELY WHEN WRITING THE CAPTION: \n", "1. Only start your response with a dictionary like the example below, nothing else, I NEED TO PARSE IT LATER, SO DONT ADD ANYTHING ELSE-IT WILL BREAK MY CODE\n", "Remember-DO NOT SAY ANYTHING ELSE ABOUT WHAT IS GOING ON, just the opening brace is the first thing in your response nothing else ok?\n", "2. REMEMBER TO CLOSE THE DICTIONARY WITH '}'BRACE, IT GOES AFTER THE END OF DESCRIPTION-YOU ALWAYS FORGET IT, THIS WILL CAUSE A LOT OF ISSUES\n", "3. If you cant tell the size from image, guess it! its okay but dont literally write that you guessed it\n", "4. Do not make the caption very literal, all of these are product photos, DO NOT CAPTION HOW OR WHERE THEY ARE PLACED, FOCUS ON WRITING ABOUT THE PIECE OF CLOTHING\n", "5. BE CREATIVE WITH THE DESCRIPTION BUT FOLLOW EVERYTHING CLOSELY FOR STRUCTURE\n", "6. Return your answer in dictionary format, see the example below\n", "\n", "{\"Title\": \"Title of item of clothing\", \"Size\": {'S', 'M', 'L', 'XL'}, #select one randomly if you cant tell from the image. DO NOT TELL ME YOU ESTIMATE OR GUESSED IT ONLY THE LETTER IS ENOUGH\", Category\": {T-Shirt, Shoes, Tops, Pants, Jeans, Shorts, Skirts, Shoes, Footwear}, \"Gender\": {M, F, U}, \"Type\": {Casual, Formal, Work Casual, Lounge}, \"Description\": \"Write it here\"}\n", "\n", "Example: ALWAYS RETURN ANSWERS IN THE DICTIONARY FORMAT BELOW OK?\n", "\n", "{\"Title\": \"Casual White pant with logo on it\", \"size\": \"L\", \"Category\": \"Jeans\", \"Gender\": \"U\", \"Type\": \"Work Casual\", \"Description\": \"Write it here, this is where your stuff goes\"} \n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 712, "id": "e6041537-ada0-4b06-92db-725e4da999e0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'end_header_id|>\\n\\n{\\n \"Title\": \"Grey Jeans\",\\n \"Size\": \"M\",\\n \"Category\": \"Jeans\",\\n \"Gender\": \"M\",\\n \"Type\": \"Casual\",\\n \"Description\": \"These grey jeans are a stylish and versatile choice for everyday wear. They feature a classic five-pocket design and a straight-leg silhouette, making them perfect for both casual and dressy occasions. The grey color is neutral and timeless, allowing you to pair them with a variety of tops and shoes. The jeans are made from a comfortable and durable fabric, ensuring they can withstand daily wear and tear. Overall, these grey jeans are a great addition to any wardrobe, offering both style and practicality.\"\\n}<|eot_id|>'" ] }, "execution_count": 712, "metadata": {}, "output_type": "execute_result" } ], "source": [ "conversation = [\n", " {\"role\": \"user\", \"content\": [{\"type\": \"image\"}, {\"type\": \"text\", \"text\": USER_TEXT}]}\n", " ]\n", "prompt = processor.apply_chat_template(conversation, add_special_tokens=False, add_generation_prompt=True, tokenize=False)\n", "inputs = processor(prompt, image, return_tensors=\"pt\").to(model.device)\n", "output = model.generate(**inputs, temperature=1, top_p=0.9, max_new_tokens=512)\n", "processor.decode(output[0])[len(prompt):]" ] }, { "cell_type": "code", "execution_count": 713, "id": "b4e2add9-7c5c-435c-8a11-505819fc72b6", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "end_header_id|>\n", "\n", "{\n", " \"Title\": \"Grey Jeans\",\n", " \"Size\": \"M\",\n", " \"Category\": \"Jeans\",\n", " \"Gender\": \"M\",\n", " \"Type\": \"Casual\",\n", " \"Description\": \"These grey jeans are a stylish and versatile choice for everyday wear. They feature a classic five-pocket design and a straight-leg silhouette, making them perfect for both casual and dressy occasions. The grey color is neutral and timeless, allowing you to pair them with a variety of tops and shoes. The jeans are made from a comfortable and durable fabric, ensuring they can withstand daily wear and tear. Overall, these grey jeans are a great addition to any wardrobe, offering both style and practicality.\"\n", "}<|eot_id|>\n" ] } ], "source": [ "print(processor.decode(output[0])[len(prompt):])" ] }, { "cell_type": "code", "execution_count": 714, "id": "0fad7afe-5018-495f-b064-8494d3baf1b0", "metadata": {}, "outputs": [], "source": [ "a = processor.decode(output[0])[len(prompt):]" ] }, { "cell_type": "code", "execution_count": 715, "id": "1f2480a3-4856-4ec7-a8fd-45b2f25c5b75", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'end_header_id|>\\n\\n{\\n \"Title\": \"Grey Jeans\",\\n \"Size\": \"M\",\\n \"Category\": \"Jeans\",\\n \"Gender\": \"M\",\\n \"Type\": \"Casual\",\\n \"Description\": \"These grey jeans are a stylish and versatile choice for everyday wear. They feature a classic five-pocket design and a straight-leg silhouette, making them perfect for both casual and dressy occasions. The grey color is neutral and timeless, allowing you to pair them with a variety of tops and shoes. The jeans are made from a comfortable and durable fabric, ensuring they can withstand daily wear and tear. Overall, these grey jeans are a great addition to any wardrobe, offering both style and practicality.\"\\n}<|eot_id|>'" ] }, "execution_count": 715, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a" ] }, { "cell_type": "code", "execution_count": 716, "id": "c02a4c4f-8ad9-4c7d-b2d5-4809ad1e085e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'./DATA/images_compressed/'" ] }, "execution_count": 716, "metadata": {}, "output_type": "execute_result" } ], "source": [ "IMAGES" ] }, { "cell_type": "code", "execution_count": 717, "id": "562b119c-ceeb-4487-9169-0de89e5b781d", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "The model weights are not tied. Please use the `tie_weights` method before using the `infer_auto_device` function.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "26f2327cf8db4d6ba2a94a4eae61b217", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Loading checkpoint shards: 0%| | 0/5 [00:00 55\u001b[0m writer \u001b[38;5;241m=\u001b[39m csv\u001b[38;5;241m.\u001b[39mwriter(csvfile)\n\u001b[1;32m 56\u001b[0m writer\u001b[38;5;241m.\u001b[39mwriterow([\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfilename\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdescription\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[1;32m 57\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m result \u001b[38;5;129;01min\u001b[39;00m results:\n", "\u001b[0;31mNameError\u001b[0m: name 'csv' is not defined" ] } ], "source": [ "import os\n", "from PIL import Image as PIL_Image\n", "import torch\n", "from transformers import MllamaForConditionalGeneration, MllamaProcessor\n", "from tqdm import tqdm\n", "\n", "hf_token = \"\"\n", "model_name = \"meta-llama/Llama-3.2-11b-Vision-Instruct\"\n", "\n", "model = MllamaForConditionalGeneration.from_pretrained(model_name, device_map=\"auto\", torch_dtype=torch.bfloat16, token=hf_token)\n", "processor = MllamaProcessor.from_pretrained(model_name, token=hf_token)\n", "\n", "# Define the input folder path\n", "input_folder_path = IMAGES\n", "\n", "# Define the output CSV file path\n", "output_csv_file_path = \"./captions.csv\"\n", "\n", "# Create an empty list to store the results\n", "results = []\n", "\n", "# Loop through the first 50 files in the input folder\n", "for filename in tqdm(os.listdir(input_folder_path)[:50], desc=\"Processing files\"):\n", " # Check if the file is an image\n", " if filename.endswith(\".jpg\") or filename.endswith(\".jpeg\") or filename.endswith(\".png\"):\n", " # Get the image path\n", " image_path = os.path.join(input_folder_path, filename)\n", "\n", " # Load the image\n", " image = get_image(image_path)\n", "\n", " # Create a conversation\n", " conversation = [\n", " {\"role\": \"user\", \"content\": [{\"type\": \"image\"}, {\"type\": \"text\", \"text\": USER_TEXT}]}\n", " ]\n", "\n", " # Apply chat template and tokenize\n", " prompt = processor.apply_chat_template(conversation, add_special_tokens=False, add_generation_prompt=True, tokenize=False)\n", " inputs = processor(prompt, image, return_tensors=\"pt\").to(model.device)\n", "\n", " # Generate the output\n", " output = model.generate(**inputs, temperature=1, top_p=0.9, max_new_tokens=512)\n", "\n", " # Decode the output\n", " decoded_output = processor.decode(output[0])[len(prompt):]\n", "\n", " # Append the result to the list\n", " results.append((filename, decoded_output))" ] }, { "cell_type": "code", "execution_count": 719, "id": "bdc72764-12cf-4e0f-b6b5-0743f277be71", "metadata": {}, "outputs": [], "source": [ "import csv\n", "# Write the results to a CSV file\n", "with open(output_csv_file_path, \"w\", newline=\"\") as csvfile:\n", " writer = csv.writer(csvfile)\n", " writer.writerow([\"filename\", \"description\"])\n", " for result in results:\n", " writer.writerow(result)" ] }, { "cell_type": "code", "execution_count": 720, "id": "7dae4854-e7e0-4c8a-92ef-61d35f045cbd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
filenamedescription
count5050
unique5050
topd7ed1d64-2c65-427f-9ae4-eb4aaa3e2389.jpgend_header_id|>\\n\\nThe image features a white,...
freq11
\n", "
" ], "text/plain": [ " filename \\\n", "count 50 \n", "unique 50 \n", "top d7ed1d64-2c65-427f-9ae4-eb4aaa3e2389.jpg \n", "freq 1 \n", "\n", " description \n", "count 50 \n", "unique 50 \n", "top end_header_id|>\\n\\nThe image features a white,... \n", "freq 1 " ] }, "execution_count": 720, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"./captions.csv\")\n", "df.describe()" ] }, { "cell_type": "code", "execution_count": 734, "id": "9b3b129e-0a32-4ef6-acd4-297e1419c4c0", "metadata": {}, "outputs": [], "source": [ "def get_image(image_path):\n", " try:\n", " with open(image_path, \"rb\") as f:\n", " return PIL_Image.open(f).convert(\"RGB\")\n", " except UnidentifiedImageError:\n", " print(f\"Skipping corrupt image {image_path}\")\n", " return None" ] }, { "cell_type": "code", "execution_count": 741, "id": "2f9e25d8-4164-43f1-9daa-3d3a09d1e7cf", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c11e92bc68df4eb6880b6bc8452927d3", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Loading checkpoint shards: 0%| | 0/5 [00:00