├── Implementation-of-ML-model-for-image-classification.ipynb ├── README.md ├── app.py ├── cifar10_model.h5 ├── requirements.txt └── train.py /Implementation-of-ML-model-for-image-classification.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "attachments": { 5 | "image.png": { 6 | "image/png": "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" 7 | } 8 | }, 9 | "cell_type": "markdown", 10 | "metadata": {}, 11 | "source": [ 12 | "![image.png](attachment:image.png)" 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "metadata": {}, 18 | "source": [ 19 | "# Edunet Foundation : Class Room Exercises " 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "## Lab 31: Classification of Images from the CIFAR-10 Dataset using ANN (MLP) & CNN\n", 27 | "\n", 28 | "### Objective: \n", 29 | "The objective of the \"Classification of Images from the CIFAR-10 Dataset using ANN (MLP) & CNN\" lab is to equip learners with the knowledge and skills to build and evaluate image classification models using Artificial Neural Networks (ANN) and Convolutional Neural Networks (CNN). The course begins with fundamental concepts of neural networks and image data representation. It advances to implementing Multilayer Perceptrons (MLP) and CNNs using Python libraries such as TensorFlow and Keras. Learners will gain hands-on experience in preprocessing image data, designing network architectures, and training models to classify images into ten different categories from the CIFAR-10 dataset. By the end of the lab, learners will be proficient in applying ANN and CNN techniques to image classification tasks, enabling them to tackle similar problems in real-world applications." 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": { 35 | "id": "IOObV9nguhe4" 36 | }, 37 | "source": [ 38 | "# Classification of Images from the CIFAR-10 Dataset using ANN (MLP) & CNN.\n", 39 | "The CIFAR-10 dataset consists of color 60,000 images each with 32 x 32 pixel in 10 classes, with 6,000 images per class. There are 50,000 training images and 10,000 test images.\n", 40 | "\n", 41 | "Class labels are:\n", 42 | "\n", 43 | "airplane : 0, automobile : 1, bird : 2, cat : 3, deer : 4, dog : 5, frog : 6, horse : 7, ship : 8, truck : 9." 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "metadata": { 49 | "id": "kuVRILk-vaBb" 50 | }, 51 | "source": [ 52 | "### Import Tensorflow" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": null, 58 | "metadata": {}, 59 | "outputs": [], 60 | "source": [ 61 | "#!pip install matplotlib" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 1, 67 | "metadata": { 68 | "colab": { 69 | "background_save": true 70 | }, 71 | "executionInfo": { 72 | "elapsed": 606, 73 | "status": "ok", 74 | "timestamp": 1650635431942, 75 | "user": { 76 | "displayName": "Abdulaziz Mohammad", 77 | "userId": "00984729133826365059" 78 | }, 79 | "user_tz": -330 80 | }, 81 | "id": "jmd1PDuTvVlk" 82 | }, 83 | "outputs": [], 84 | "source": [ 85 | "import tensorflow as tf\n", 86 | "import matplotlib.pyplot as plt" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": 2, 92 | "metadata": {}, 93 | "outputs": [ 94 | { 95 | "data": { 96 | "text/plain": [ 97 | "'3.9.2'" 98 | ] 99 | }, 100 | "execution_count": 2, 101 | "metadata": {}, 102 | "output_type": "execute_result" 103 | } 104 | ], 105 | "source": [ 106 | "import matplotlib\n", 107 | "matplotlib.__version__" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": null, 113 | "metadata": {}, 114 | "outputs": [], 115 | "source": [ 116 | "tf.__version__" 117 | ] 118 | }, 119 | { 120 | "cell_type": "markdown", 121 | "metadata": { 122 | "id": "vU00AMY9vLDb" 123 | }, 124 | "source": [ 125 | "# Check for GPU" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": 3, 131 | "metadata": { 132 | "colab": { 133 | "base_uri": "https://localhost:8080/" 134 | }, 135 | "executionInfo": { 136 | "elapsed": 349, 137 | "status": "ok", 138 | "timestamp": 1650635459135, 139 | "user": { 140 | "displayName": "Abdulaziz Mohammad", 141 | "userId": "00984729133826365059" 142 | }, 143 | "user_tz": -330 144 | }, 145 | "id": "pZjAFqimvIB_", 146 | "outputId": "232855e0-bd30-44f0-d0be-66ec70a4e927" 147 | }, 148 | "outputs": [ 149 | { 150 | "name": "stdout", 151 | "output_type": "stream", 152 | "text": [ 153 | "Num GPUs Available: 1\n" 154 | ] 155 | } 156 | ], 157 | "source": [ 158 | "physical_devices = tf.config.experimental.list_physical_devices('GPU')\n", 159 | "#physical_devices\n", 160 | "print(\"Num GPUs Available: \", len(physical_devices))\n", 161 | "#tf.config.experimental.set_memory_growth(physical_devices[0], True)" 162 | ] 163 | }, 164 | { 165 | "cell_type": "markdown", 166 | "metadata": { 167 | "id": "oXnz2p3AvCIK" 168 | }, 169 | "source": [ 170 | "# Load Dataset" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 2, 176 | "metadata": { 177 | "executionInfo": { 178 | "elapsed": 1046, 179 | "status": "ok", 180 | "timestamp": 1650635598498, 181 | "user": { 182 | "displayName": "Abdulaziz Mohammad", 183 | "userId": "00984729133826365059" 184 | }, 185 | "user_tz": -330 186 | }, 187 | "id": "zgLDohXGuDVH" 188 | }, 189 | "outputs": [], 190 | "source": [ 191 | "from keras.datasets import cifar10\n", 192 | "(x_train, y_train), (x_test, y_test) = cifar10.load_data()" 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": { 198 | "id": "_R8U7q3evu8t" 199 | }, 200 | "source": [ 201 | "## Show some sample images of data set with corresponding labels.\n" 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": 3, 207 | "metadata": { 208 | "colab": { 209 | "base_uri": "https://localhost:8080/", 210 | "height": 180 211 | }, 212 | "executionInfo": { 213 | "elapsed": 2565, 214 | "status": "ok", 215 | "timestamp": 1650635641722, 216 | "user": { 217 | "displayName": "Abdulaziz Mohammad", 218 | "userId": "00984729133826365059" 219 | }, 220 | "user_tz": -330 221 | }, 222 | "id": "egv3tZ3WvmpF", 223 | "outputId": "08283921-9289-4087-ae70-2743badfe9f9" 224 | }, 225 | "outputs": [ 226 | { 227 | "name": "stdout", 228 | "output_type": "stream", 229 | "text": [ 230 | "Example training images and their labels: [6, 9, 9, 4, 1, 1, 2, 7, 8, 3]\n", 231 | "Corresponding classes for the labels: ['frog', 'truck', 'truck', 'deer', 'automobile', 'automobile', 'bird', 'horse', 'ship', 'cat']\n" 232 | ] 233 | }, 234 | { 235 | "data": { 236 | "image/png": "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", 237 | "text/plain": [ 238 | "
" 239 | ] 240 | }, 241 | "metadata": {}, 242 | "output_type": "display_data" 243 | } 244 | ], 245 | "source": [ 246 | "cifar10_classes = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n", 247 | "print('Example training images and their labels: ' + str([x[0] for x in y_train[0:10]])) \n", 248 | "print('Corresponding classes for the labels: ' + str([cifar10_classes[x[0]] for x in y_train[0:10]]))\n", 249 | "\n", 250 | "fig, axarr = plt.subplots(1, 10)\n", 251 | "fig.set_size_inches(20, 6)\n", 252 | "\n", 253 | "for i in range(10):\n", 254 | " image = x_train[i]\n", 255 | " axarr[i].imshow(image)\n", 256 | "plt.show()" 257 | ] 258 | }, 259 | { 260 | "cell_type": "code", 261 | "execution_count": 7, 262 | "metadata": { 263 | "colab": { 264 | "base_uri": "https://localhost:8080/" 265 | }, 266 | "executionInfo": { 267 | "elapsed": 337, 268 | "status": "ok", 269 | "timestamp": 1650635712948, 270 | "user": { 271 | "displayName": "Abdulaziz Mohammad", 272 | "userId": "00984729133826365059" 273 | }, 274 | "user_tz": -330 275 | }, 276 | "id": "6tFczNU9wZGM", 277 | "outputId": "648e3767-3a51-4919-8a9d-567aabe94456" 278 | }, 279 | "outputs": [ 280 | { 281 | "data": { 282 | "text/plain": [ 283 | "((50000, 32, 32, 3), (50000, 1), (10000, 32, 32, 3), (10000, 1))" 284 | ] 285 | }, 286 | "execution_count": 7, 287 | "metadata": {}, 288 | "output_type": "execute_result" 289 | } 290 | ], 291 | "source": [ 292 | "x_train.shape, y_train.shape, x_test.shape, y_test.shape" 293 | ] 294 | }, 295 | { 296 | "cell_type": "markdown", 297 | "metadata": { 298 | "id": "9ami08m2xXCn" 299 | }, 300 | "source": [ 301 | "## Preparing the dataset\n", 302 | "Normalize the input data" 303 | ] 304 | }, 305 | { 306 | "cell_type": "code", 307 | "execution_count": 8, 308 | "metadata": { 309 | "executionInfo": { 310 | "elapsed": 929, 311 | "status": "ok", 312 | "timestamp": 1650635868632, 313 | "user": { 314 | "displayName": "Abdulaziz Mohammad", 315 | "userId": "00984729133826365059" 316 | }, 317 | "user_tz": -330 318 | }, 319 | "id": "x82EXLcHwmyP" 320 | }, 321 | "outputs": [ 322 | { 323 | "ename": "MemoryError", 324 | "evalue": "Unable to allocate 1.14 GiB for an array with shape (50000, 32, 32, 3) and data type float64", 325 | "output_type": "error", 326 | "traceback": [ 327 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 328 | "\u001b[1;31mMemoryError\u001b[0m Traceback (most recent call last)", 329 | "Cell \u001b[1;32mIn[8], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m X_train \u001b[38;5;241m=\u001b[39m \u001b[43mx_train\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m255.0\u001b[39;49m\n\u001b[0;32m 2\u001b[0m X_test \u001b[38;5;241m=\u001b[39m x_test \u001b[38;5;241m/\u001b[39m \u001b[38;5;241m255.0\u001b[39m\n", 330 | "\u001b[1;31mMemoryError\u001b[0m: Unable to allocate 1.14 GiB for an array with shape (50000, 32, 32, 3) and data type float64" 331 | ] 332 | } 333 | ], 334 | "source": [ 335 | "X_train = x_train / 255.0\n", 336 | "X_test = x_test / 255.0\n", 337 | "# Every Neuron is expected to have value from 0 to 1 to converge quickly(Gradient Descent)" 338 | ] 339 | }, 340 | { 341 | "cell_type": "markdown", 342 | "metadata": { 343 | "id": "Jz-HdQr8yBZg" 344 | }, 345 | "source": [ 346 | "# MLP Network\n", 347 | "\n", 348 | "* I/p Layer - Flatten\n", 349 | "* Hidden layer - 2048, AF = 'RELU'\n", 350 | "* O/p Layer - 10 , AF-Softmax" 351 | ] 352 | }, 353 | { 354 | "cell_type": "code", 355 | "execution_count": 8, 356 | "metadata": { 357 | "executionInfo": { 358 | "elapsed": 330, 359 | "status": "ok", 360 | "timestamp": 1650636262645, 361 | "user": { 362 | "displayName": "Abdulaziz Mohammad", 363 | "userId": "00984729133826365059" 364 | }, 365 | "user_tz": -330 366 | }, 367 | "id": "uZKiN6kQyAzy" 368 | }, 369 | "outputs": [], 370 | "source": [ 371 | "from tensorflow import keras\n", 372 | "from keras.layers import Dense\n", 373 | "from keras.layers import Flatten" 374 | ] 375 | }, 376 | { 377 | "cell_type": "code", 378 | "execution_count": null, 379 | "metadata": {}, 380 | "outputs": [], 381 | "source": [ 382 | "ann = keras.Sequential()\n", 383 | "ann.add(Flatten(input_shape=(32,32,3)))\n", 384 | "ann.add(Dense(2048,activation='relu'))\n", 385 | "ann.add(Dense(10,activation='softmax'))" 386 | ] 387 | }, 388 | { 389 | "cell_type": "code", 390 | "execution_count": null, 391 | "metadata": {}, 392 | "outputs": [], 393 | "source": [ 394 | "ann.summary()" 395 | ] 396 | }, 397 | { 398 | "cell_type": "code", 399 | "execution_count": null, 400 | "metadata": { 401 | "executionInfo": { 402 | "elapsed": 598, 403 | "status": "ok", 404 | "timestamp": 1650636287241, 405 | "user": { 406 | "displayName": "Abdulaziz Mohammad", 407 | "userId": "00984729133826365059" 408 | }, 409 | "user_tz": -330 410 | }, 411 | "id": "SPJg0WzYySF5" 412 | }, 413 | "outputs": [], 414 | "source": [ 415 | "ann.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])" 416 | ] 417 | }, 418 | { 419 | "cell_type": "code", 420 | "execution_count": null, 421 | "metadata": { 422 | "colab": { 423 | "base_uri": "https://localhost:8080/" 424 | }, 425 | "executionInfo": { 426 | "elapsed": 128291, 427 | "status": "ok", 428 | "timestamp": 1650636445904, 429 | "user": { 430 | "displayName": "Abdulaziz Mohammad", 431 | "userId": "00984729133826365059" 432 | }, 433 | "user_tz": -330 434 | }, 435 | "id": "VtqrelqmyTb3", 436 | "outputId": "0902ab88-30dc-4ad4-9a9b-19ec6efeafe8" 437 | }, 438 | "outputs": [], 439 | "source": [ 440 | "history = ann.fit(X_train ,y_train,epochs=10,validation_data=(X_test,y_test))" 441 | ] 442 | }, 443 | { 444 | "cell_type": "markdown", 445 | "metadata": { 446 | "id": "OVqc62RX2f_r" 447 | }, 448 | "source": [ 449 | "#### With the below simple function we will be able to plot our training history." 450 | ] 451 | }, 452 | { 453 | "cell_type": "code", 454 | "execution_count": null, 455 | "metadata": { 456 | "colab": { 457 | "base_uri": "https://localhost:8080/", 458 | "height": 282 459 | }, 460 | "executionInfo": { 461 | "elapsed": 816, 462 | "status": "ok", 463 | "timestamp": 1650636817787, 464 | "user": { 465 | "displayName": "Abdulaziz Mohammad", 466 | "userId": "00984729133826365059" 467 | }, 468 | "user_tz": -330 469 | }, 470 | "id": "zrCCccRs1Evc", 471 | "outputId": "9418d173-89c1-4c36-f6f9-92b17f3a87b0" 472 | }, 473 | "outputs": [], 474 | "source": [ 475 | "plt.plot(history.history['loss'])\n", 476 | "plt.plot(history.history['val_loss'])" 477 | ] 478 | }, 479 | { 480 | "cell_type": "markdown", 481 | "metadata": { 482 | "id": "kH5pf7UX1WD9" 483 | }, 484 | "source": [ 485 | "## CNN Model" 486 | ] 487 | }, 488 | { 489 | "cell_type": "code", 490 | "execution_count": null, 491 | "metadata": { 492 | "id": "dWU4yBGO1X8A" 493 | }, 494 | "outputs": [], 495 | "source": [ 496 | "from tensorflow import keras\n", 497 | "from keras.layers import Conv2D, Dense, Flatten, MaxPooling2D, Dropout" 498 | ] 499 | }, 500 | { 501 | "cell_type": "code", 502 | "execution_count": null, 503 | "metadata": { 504 | "executionInfo": { 505 | "elapsed": 570, 506 | "status": "ok", 507 | "timestamp": 1650637756344, 508 | "user": { 509 | "displayName": "Abdulaziz Mohammad", 510 | "userId": "00984729133826365059" 511 | }, 512 | "user_tz": -330 513 | }, 514 | "id": "E8vLr0nn1rM7" 515 | }, 516 | "outputs": [], 517 | "source": [ 518 | "cnn = keras.Sequential()\n", 519 | "cnn.add(Conv2D(32, kernel_size= (3,3), strides=(1,1), padding='same', activation='relu', input_shape = (32,32,3)))\n", 520 | "cnn.add(MaxPooling2D((2,2)))\n", 521 | "cnn.add(Conv2D(64, kernel_size= (3,3), strides=(1,1), padding='same', activation='relu'))\n", 522 | "cnn.add(MaxPooling2D((2,2)))\n", 523 | "cnn.add(Conv2D(128, kernel_size= (3,3), strides=(1,1), padding='same', activation='relu'))\n", 524 | "cnn.add(MaxPooling2D((2,2)))\n", 525 | "cnn.add(Conv2D(256, kernel_size= (3,3), strides=(1,1), padding='same', activation='relu'))\n", 526 | "cnn.add(MaxPooling2D((2,2)))\n", 527 | "cnn.add(Flatten())\n", 528 | "cnn.add(Dense(64,activation='relu'))\n", 529 | "cnn.add(Dropout(0.3))\n", 530 | "cnn.add(Dense(10,activation='softmax'))" 531 | ] 532 | }, 533 | { 534 | "cell_type": "code", 535 | "execution_count": null, 536 | "metadata": { 537 | "colab": { 538 | "base_uri": "https://localhost:8080/" 539 | }, 540 | "executionInfo": { 541 | "elapsed": 595, 542 | "status": "ok", 543 | "timestamp": 1650637762047, 544 | "user": { 545 | "displayName": "Abdulaziz Mohammad", 546 | "userId": "00984729133826365059" 547 | }, 548 | "user_tz": -330 549 | }, 550 | "id": "hJ6FMNZN1-se", 551 | "outputId": "231de159-9469-42c5-82e7-172f74b4d91d" 552 | }, 553 | "outputs": [], 554 | "source": [ 555 | "cnn.summary()" 556 | ] 557 | }, 558 | { 559 | "cell_type": "code", 560 | "execution_count": null, 561 | "metadata": { 562 | "colab": { 563 | "base_uri": "https://localhost:8080/" 564 | }, 565 | "executionInfo": { 566 | "elapsed": 203620, 567 | "status": "ok", 568 | "timestamp": 1650637411708, 569 | "user": { 570 | "displayName": "Abdulaziz Mohammad", 571 | "userId": "00984729133826365059" 572 | }, 573 | "user_tz": -330 574 | }, 575 | "id": "9J8IZOVD2E7-", 576 | "outputId": "f197ccd2-9f40-4ac9-c2dc-7b5eb850405c" 577 | }, 578 | "outputs": [], 579 | "source": [ 580 | "cnn.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])\n", 581 | "history = cnn.fit(X_train,y_train,epochs=10,validation_data=(X_test,y_test))" 582 | ] 583 | }, 584 | { 585 | "cell_type": "code", 586 | "execution_count": null, 587 | "metadata": { 588 | "executionInfo": { 589 | "elapsed": 594, 590 | "status": "ok", 591 | "timestamp": 1650637563780, 592 | "user": { 593 | "displayName": "Abdulaziz Mohammad", 594 | "userId": "00984729133826365059" 595 | }, 596 | "user_tz": -330 597 | }, 598 | "id": "_ndaiS363B5K" 599 | }, 600 | "outputs": [], 601 | "source": [ 602 | "def plotLosses(history): \n", 603 | " plt.plot(history.history['loss'])\n", 604 | " plt.plot(history.history['val_loss'])\n", 605 | " plt.title('model loss')\n", 606 | " plt.ylabel('loss')\n", 607 | " plt.xlabel('epoch')\n", 608 | " plt.legend(['train', 'validation'], loc='upper right')\n", 609 | " plt.show()" 610 | ] 611 | }, 612 | { 613 | "cell_type": "code", 614 | "execution_count": null, 615 | "metadata": { 616 | "colab": { 617 | "base_uri": "https://localhost:8080/", 618 | "height": 295 619 | }, 620 | "executionInfo": { 621 | "elapsed": 581, 622 | "status": "ok", 623 | "timestamp": 1650637570356, 624 | "user": { 625 | "displayName": "Abdulaziz Mohammad", 626 | "userId": "00984729133826365059" 627 | }, 628 | "user_tz": -330 629 | }, 630 | "id": "1DRllhYS3IwI", 631 | "outputId": "91315349-093e-41e5-d94b-42dcbb284c48" 632 | }, 633 | "outputs": [], 634 | "source": [ 635 | "plotLosses(history)" 636 | ] 637 | }, 638 | { 639 | "cell_type": "code", 640 | "execution_count": null, 641 | "metadata": { 642 | "executionInfo": { 643 | "elapsed": 548, 644 | "status": "ok", 645 | "timestamp": 1650637611637, 646 | "user": { 647 | "displayName": "Abdulaziz Mohammad", 648 | "userId": "00984729133826365059" 649 | }, 650 | "user_tz": -330 651 | }, 652 | "id": "IWCQgFgr3fdI" 653 | }, 654 | "outputs": [], 655 | "source": [ 656 | "def plotAccuracy(history): \n", 657 | " plt.plot(history.history['accuracy'])\n", 658 | " plt.plot(history.history['val_accuracy'])\n", 659 | " plt.title('model Accuracy')\n", 660 | " plt.ylabel('Accuracy')\n", 661 | " plt.xlabel('epoch')\n", 662 | " plt.legend(['train', 'validation'], loc='upper left')\n", 663 | " plt.show()" 664 | ] 665 | }, 666 | { 667 | "cell_type": "code", 668 | "execution_count": null, 669 | "metadata": { 670 | "colab": { 671 | "base_uri": "https://localhost:8080/", 672 | "height": 295 673 | }, 674 | "executionInfo": { 675 | "elapsed": 679, 676 | "status": "ok", 677 | "timestamp": 1650637617604, 678 | "user": { 679 | "displayName": "Abdulaziz Mohammad", 680 | "userId": "00984729133826365059" 681 | }, 682 | "user_tz": -330 683 | }, 684 | "id": "M9tRUozK3zwi", 685 | "outputId": "cc84dc49-b686-4262-f3b6-5910f267ded4" 686 | }, 687 | "outputs": [], 688 | "source": [ 689 | "plotAccuracy(history)" 690 | ] 691 | }, 692 | { 693 | "cell_type": "code", 694 | "execution_count": null, 695 | "metadata": {}, 696 | "outputs": [], 697 | "source": [ 698 | "from keras.models import load_model\n", 699 | "cnn.save('model111.h5')" 700 | ] 701 | }, 702 | { 703 | "cell_type": "code", 704 | "execution_count": null, 705 | "metadata": {}, 706 | "outputs": [], 707 | "source": [ 708 | "# Load the model\n", 709 | "model = tf.keras.models.load_model('model111.h5')" 710 | ] 711 | }, 712 | { 713 | "cell_type": "code", 714 | "execution_count": null, 715 | "metadata": {}, 716 | "outputs": [], 717 | "source": [ 718 | "import numpy as np\n", 719 | "# Add a batch dimension to the input\n", 720 | "x_test_sample = np.expand_dims(x_test[20], axis=0)\n", 721 | "\n", 722 | "# Now pass it to the model for prediction\n", 723 | "model.predict(x_test_sample)" 724 | ] 725 | }, 726 | { 727 | "cell_type": "code", 728 | "execution_count": null, 729 | "metadata": {}, 730 | "outputs": [], 731 | "source": [ 732 | "plt.imshow(x_test[20])" 733 | ] 734 | }, 735 | { 736 | "cell_type": "code", 737 | "execution_count": null, 738 | "metadata": {}, 739 | "outputs": [], 740 | "source": [ 741 | "# Example: if you have class names like this\n", 742 | "class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck'] # replace with your actual class names\n", 743 | "\n", 744 | "# Get the prediction probabilities\n", 745 | "predictions = model.predict(x_test_sample)\n", 746 | "\n", 747 | "# Get the index of the class with the highest probability\n", 748 | "predicted_class_index = np.argmax(predictions)\n", 749 | "\n", 750 | "# Get the corresponding class name\n", 751 | "predicted_class_name = class_names[predicted_class_index]\n", 752 | "\n", 753 | "print(f\"The predicted class is: {predicted_class_name}\")" 754 | ] 755 | }, 756 | { 757 | "cell_type": "markdown", 758 | "metadata": {}, 759 | "source": [ 760 | "# Happy Learning " 761 | ] 762 | } 763 | ], 764 | "metadata": { 765 | "accelerator": "GPU", 766 | "colab": { 767 | "authorship_tag": "ABX9TyMNUt8YE5GhQb6DEU3GYJbG", 768 | "name": "ANN&CNN_CIFAR-10.ipynb", 769 | "version": "" 770 | }, 771 | "kernelspec": { 772 | "display_name": "Python 3 (ipykernel)", 773 | "language": "python", 774 | "name": "python3" 775 | }, 776 | "language_info": { 777 | "codemirror_mode": { 778 | "name": "ipython", 779 | "version": 3 780 | }, 781 | "file_extension": ".py", 782 | "mimetype": "text/x-python", 783 | "name": "python", 784 | "nbconvert_exporter": "python", 785 | "pygments_lexer": "ipython3", 786 | "version": "3.9.20" 787 | } 788 | }, 789 | "nbformat": 4, 790 | "nbformat_minor": 4 791 | } 792 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Implementation-of-ML-model-for-image-classification 2 | Implementation-of-ML-model-for-image-classification is a Streamlit app that integrates MobileNetV2 and a CIFAR-10 model for image classification. Users can upload images and receive predictions with confidence scores from either model. It features a sleek navigation bar for easy switching and real-time results, which is ideal for learning and practical use. 3 | 4 | ## Key Features 5 | 6 | - **Dual Model Support**: 7 | - **MobileNetV2 (ImageNet)**: Recognizes 1,000 different classes from the ImageNet dataset, including everyday objects, animals, and vehicles. 8 | - **Custom CIFAR-10 Model**: Specializes in classifying images into one of ten specific categories such as airplanes, automobiles, and birds. 9 | 10 | - **Intuitive Interface**: 11 | - **Navigation Bar**: Seamlessly switch between MobileNetV2 and CIFAR-10 models using a sleek sidebar menu. 12 | - **Real-Time Classification**: Upload an image to receive immediate predictions with confidence scores. 13 | 14 | - **Educational and Practical Use**: 15 | - Ideal for learning about deep learning models and their performance. 16 | - Useful for practical applications where image classification is needed. 17 | 18 | ## Getting Started 19 | 20 | ### Prerequisites 21 | 22 | - Python 3.7 or later 23 | - A web browser 24 | 25 | ### Installation 26 | 27 | 1. **Clone the repository**: 28 | ```bash 29 | git clone https://github.com/JayRathod341997/DeepLensX.git 30 | cd Implementation-of-ML-model-for-image-classification 31 | 2. **Create and activate a virtual environment**: 32 | ```bash 33 | python -m venv venv 34 | source venv/bin/activate # On Windows use `venv\Scripts\activate` 35 | 3. **Install the required packages**: 36 | ```bash 37 | pip install -r requirements.txt 38 | 4. **Start the Streamlit app**: 39 | ```bash 40 | streamlit run app.py 41 | 5. **Open the app**: 42 | The app will open in your default web browser. If not, navigate to http://localhost:8501 43 | 44 | ### Contributing 45 | Feel free to fork the repository, open issues, or submit pull requests to contribute to the project. 46 | 47 | ### Acknowledgements 48 | - Streamlit 49 | - TensorFlow 50 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | import streamlit as st 2 | import numpy as np 3 | import tensorflow as tf 4 | from PIL import Image 5 | 6 | # Function for MobileNetV2 ImageNet model 7 | def mobilenetv2_imagenet(): 8 | st.title("Image Classification with MobileNetV2") 9 | 10 | uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "png"]) 11 | 12 | if uploaded_file is not None: 13 | image = Image.open(uploaded_file) 14 | st.image(image, caption='Uploaded Image', use_column_width=True) 15 | 16 | st.write("Classifying...") 17 | 18 | # Load MobileNetV2 model 19 | model = tf.keras.applications.MobileNetV2(weights='imagenet') 20 | 21 | # Preprocess the image 22 | img = image.resize((224, 224)) 23 | img_array = np.array(img) 24 | img_array = np.expand_dims(img_array, axis=0) 25 | img_array = tf.keras.applications.mobilenet_v2.preprocess_input(img_array) 26 | 27 | # Make predictions 28 | predictions = model.predict(img_array) 29 | decoded_predictions = tf.keras.applications.mobilenet_v2.decode_predictions(predictions, top=1)[0] 30 | 31 | for i, (imagenet_id, label, score) in enumerate(decoded_predictions): 32 | st.write(f"{label}: {score * 100:.2f}%") 33 | 34 | # Function for CIFAR-10 model 35 | def cifar10_classification(): 36 | st.title("CIFAR-10 Image Classification") 37 | 38 | uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "png"]) 39 | 40 | if uploaded_file is not None: 41 | image = Image.open(uploaded_file) 42 | st.image(image, caption='Uploaded Image', use_column_width=True) 43 | 44 | st.write("Classifying...") 45 | 46 | # Load CIFAR-10 model 47 | model = tf.keras.models.load_model('cifar10_model.h5') 48 | 49 | # CIFAR-10 class names 50 | class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck'] 51 | 52 | # Preprocess the image 53 | img = image.resize((32, 32)) 54 | img_array = np.array(img) 55 | img_array = img_array.astype('float32') / 255.0 56 | img_array = np.expand_dims(img_array, axis=0) 57 | 58 | # Make predictions 59 | predictions = model.predict(img_array) 60 | predicted_class = np.argmax(predictions, axis=1)[0] 61 | confidence = np.max(predictions) 62 | 63 | st.write(f"Predicted Class: {class_names[predicted_class]}") 64 | st.write(f"Confidence: {confidence * 100:.2f}%") 65 | 66 | # Main function to control the navigation 67 | def main(): 68 | st.sidebar.title("Navigation") 69 | choice = st.sidebar.selectbox("Choose Model", ("CIFAR-10","MobileNetV2 (ImageNet)")) 70 | 71 | if choice == "MobileNetV2 (ImageNet)": 72 | mobilenetv2_imagenet() 73 | elif choice == "CIFAR-10": 74 | cifar10_classification() 75 | 76 | if __name__ == "__main__": 77 | main() 78 | -------------------------------------------------------------------------------- /cifar10_model.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Techsaksham/P1-Implementation-of-ML-model-for-image-classification/0423f4afed62c93f1b69304313836f8b3bbd3dde/cifar10_model.h5 -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Techsaksham/P1-Implementation-of-ML-model-for-image-classification/0423f4afed62c93f1b69304313836f8b3bbd3dde/requirements.txt -------------------------------------------------------------------------------- /train.py: -------------------------------------------------------------------------------- 1 | from tensorflow.keras.datasets import cifar10 2 | from tensorflow.keras.utils import to_categorical 3 | import numpy as np 4 | 5 | (x_train, y_train), (x_test, y_test) = cifar10.load_data() 6 | 7 | x_train = x_train.astype('float32') / 255.0 8 | x_test = x_test.astype('float32') / 255.0 9 | 10 | y_train = to_categorical(y_train, 10) 11 | y_test = to_categorical(y_test, 10) 12 | 13 | from tensorflow.keras.models import Sequential 14 | from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout 15 | 16 | model = Sequential([ 17 | Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)), 18 | MaxPooling2D(pool_size=(2, 2)), 19 | Conv2D(64, (3, 3), activation='relu'), 20 | MaxPooling2D(pool_size=(2, 2)), 21 | Flatten(), 22 | Dense(512, activation='relu'), 23 | Dropout(0.5), 24 | Dense(10, activation='softmax') 25 | ]) 26 | 27 | model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 28 | 29 | 30 | model.fit(x_train, y_train, batch_size=64, epochs=10, validation_data=(x_test, y_test)) 31 | 32 | model.save('cifar10_model.h5') 33 | --------------------------------------------------------------------------------