diff --git "a/CHBD_Vocalization_Analysis.ipynb" "b/CHBD_Vocalization_Analysis.ipynb" new file mode 100644--- /dev/null +++ "b/CHBD_Vocalization_Analysis.ipynb" @@ -0,0 +1,1159 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "gpuType": "T4" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "##Load Data" + ], + "metadata": { + "id": "dc-BKLaqRC7B" + } + }, + { + "cell_type": "code", + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/gdrive')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-S1EcnoTRIp7", + "outputId": "821b4971-7d11-40fb-e5e8-3e8f00f5fda8" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mounted at /content/gdrive\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "!cp /content/gdrive/MyDrive/Chiken_Behavior_Analysis/Data/Audio/Poultry_Vocalization_Signal_Dataset_for_Early_Disease_Detection.zip /content" + ], + "metadata": { + "id": "JQeHJwSex9gd" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "!unzip -q /content/Poultry_Vocalization_Signal_Dataset_for_Early_Disease_Detection.zip -d /content/" + ], + "metadata": { + "id": "LH38Sn3PRRiL" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## EDA - Class Distribution" + ], + "metadata": { + "id": "SM1khddPR73f" + } + }, + { + "cell_type": "code", + "source": [ + "import os\n", + "import matplotlib.pyplot as plt" + ], + "metadata": { + "id": "r2vC1HLKTcEP" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "base_path = '/content/Poultry Vocalization Signal Dataset for Early Disease┬аDetection/Chicken_Audio_Dataset'\n", + "classes = ['Healthy', 'Noise', 'Unhealthy']\n", + "\n", + "class_counts = {cls: len(os.listdir(os.path.join(base_path, cls))) for cls in classes}\n", + "\n", + "print(class_counts)\n", + "plt.bar(class_counts.keys(), class_counts.values())\n", + "plt.xlabel('Class')\n", + "plt.ylabel('Count')\n", + "plt.title('Class Distribution')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 490 + }, + "id": "rl454xERRcNQ", + "outputId": "8aec8d82-071e-4e39-c7f5-c0f5e8000a67" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{'Healthy': 139, 'Noise': 86, 'Unhealthy': 121}\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHHCAYAAABZbpmkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAN89JREFUeJzt3XlYVeX+///XVmSDyCAODMWkoeI8lSmWE4Vj+s1KO2RmDp0EzTTzcI6aUaaZUw5p9ulog2ZlSTYcTXFKQ0PMqZzFIRXsqIBYIMH6/dHl/rUPYIrg3qyej+ta1+W673vd6732td2+XMPeFsMwDAEAAJhUJUcXAAAAUJ4IOwAAwNQIOwAAwNQIOwAAwNQIOwAAwNQIOwAAwNQIOwAAwNQIOwAAwNQIOwAAwNQIO8BfUGhoqJ544glHl3HTJk2aJIvFckv21bFjR3Xs2NG2vnHjRlksFq1YseKW7P+JJ55QaGjoLdkXYDaEHcBEjh49qqeeekp16tSRm5ubvLy8FBkZqddff12//vqro8u7piVLlshisdgWNzc3BQYGKjo6WnPmzNGlS5fKZD9nzpzRpEmTtGvXrjKZryw5c21ARebi6AIAlI0vv/xSDz/8sKxWqx5//HE1btxYV65c0ZYtWzR27Fj98MMPWrRokaPL/FMJCQkKCwtTfn6+0tPTtXHjRo0aNUozZ87UqlWr1LRpU9vY8ePH6x//+McNzX/mzBm9+OKLCg0NVfPmza97u6+//vqG9lMa16rtrbfeUmFhYbnXAJgRYQcwgbS0NPXv318hISFav369AgICbH2xsbE6cuSIvvzySwdWeP26deum1q1b29bj4+O1fv169ezZUw888ID2798vd3d3SZKLi4tcXMr3Y+yXX35R1apV5erqWq77+TNVqlRx6P6BiozLWIAJTJs2TTk5OXr77bftgs5Vd9xxh5555pkSt79w4YKee+45NWnSRNWqVZOXl5e6deum3bt3Fxk7d+5cNWrUSFWrVlX16tXVunVrLVu2zNZ/6dIljRo1SqGhobJarapdu7buu+8+7dy5s9TH17lzZ02YMEEnTpzQ+++/b2sv7p6dtWvXqn379vLx8VG1atVUv359/fOf/5T0+302d955pyRp0KBBtktmS5YskfT7fTmNGzdWamqq7r33XlWtWtW27f/es3NVQUGB/vnPf8rf318eHh564IEHdOrUKbsxJd0j9cc5/6y24u7ZuXz5ssaMGaOgoCBZrVbVr19f06dPl2EYduMsFovi4uKUmJioxo0by2q1qlGjRlq9enXxLzhgMpzZAUzg888/V506ddSuXbtSbX/s2DElJibq4YcfVlhYmDIyMvTmm2+qQ4cO+vHHHxUYGCjp90spI0eO1EMPPaRnnnlGubm52rNnj7Zv366//e1vkqS///3vWrFiheLi4tSwYUOdP39eW7Zs0f79+9WyZctSH+OAAQP0z3/+U19//bWGDh1a7JgffvhBPXv2VNOmTZWQkCCr1aojR45o69atkqSIiAglJCRo4sSJGjZsmO655x5Jsnvdzp8/r27duql///567LHH5Ofnd826Jk+eLIvFonHjxuncuXOaPXu2oqKitGvXLtsZqOtxPbX9kWEYeuCBB7RhwwYNHjxYzZs315o1azR27FidPn1as2bNshu/ZcsWffrppxo+fLg8PT01Z84c9e3bVydPnlSNGjWuu06gQjIAVGhZWVmGJKN3797XvU1ISIgxcOBA23pubq5RUFBgNyYtLc2wWq1GQkKCra13795Go0aNrjm3t7e3ERsbe921XLV48WJDkpGSknLNuVu0aGFbf+GFF4w/fozNmjXLkGT8/PPPJc6RkpJiSDIWL15cpK9Dhw6GJGPhwoXF9nXo0MG2vmHDBkOScdtttxnZ2dm29o8++siQZLz++uu2tv99vUua81q1DRw40AgJCbGtJyYmGpKMl19+2W7cQw89ZFgsFuPIkSO2NkmGq6urXdvu3bsNScbcuXOL7AswGy5jARVcdna2JMnT07PUc1itVlWq9PvHQUFBgc6fP2+7BPTHy08+Pj766aeflJKSUuJcPj4+2r59u86cOVPqekpSrVq1az6V5ePjI0n67LPPSn0zr9Vq1aBBg657/OOPP2732j/00EMKCAjQV199Var9X6+vvvpKlStX1siRI+3ax4wZI8Mw9J///MeuPSoqSnXr1rWtN23aVF5eXjp27Fi51gk4A8IOUMF5eXlJ0k09ml1YWKhZs2YpPDxcVqtVNWvWVK1atbRnzx5lZWXZxo0bN07VqlXTXXfdpfDwcMXGxtouEV01bdo07du3T0FBQbrrrrs0adKkMvsHNScn55qhrl+/foqMjNSQIUPk5+en/v3766OPPrqh4HPbbbfd0M3I4eHhdusWi0V33HGHjh8/ft1zlMaJEycUGBhY5PWIiIiw9f9RcHBwkTmqV6+uixcvll+RgJMg7AAVnJeXlwIDA7Vv375Sz/HKK69o9OjRuvfee/X+++9rzZo1Wrt2rRo1amQXFCIiInTw4EEtX75c7du31yeffKL27dvrhRdesI155JFHdOzYMc2dO1eBgYF67bXX1KhRoyJnGm7UTz/9pKysLN1xxx0ljnF3d9fmzZu1bt06DRgwQHv27FG/fv103333qaCg4Lr2cyP32Vyvkr748HprKguVK1cutt34n5uZATMi7AAm0LNnTx09elTJycml2n7FihXq1KmT3n77bfXv31/333+/oqKilJmZWWSsh4eH+vXrp8WLF+vkyZPq0aOHJk+erNzcXNuYgIAADR8+XImJiUpLS1ONGjU0efLk0h6eJOm9996TJEVHR19zXKVKldSlSxfNnDlTP/74oyZPnqz169drw4YNkkoOHqV1+PBhu3XDMHTkyBG7J6eqV69e7Gv5v2dfbqS2kJAQnTlzpsgZvQMHDtj6AfyOsAOYwPPPPy8PDw8NGTJEGRkZRfqPHj2q119/vcTtK1euXOR/+B9//LFOnz5t13b+/Hm7dVdXVzVs2FCGYSg/P18FBQV2l70kqXbt2goMDFReXt6NHpbN+vXr9dJLLyksLEwxMTEljrtw4UKRtqtfznd1/x4eHpJUbPgojXfffdcucKxYsUJnz55Vt27dbG1169bVtm3bdOXKFVvbF198UeQR9RuprXv37iooKNC8efPs2mfNmiWLxWK3f+CvjkfPAROoW7euli1bpn79+ikiIsLuG5S//fZbffzxx9f8LayePXsqISFBgwYNUrt27bR3714tXbpUderUsRt3//33y9/fX5GRkfLz89P+/fs1b9489ejRQ56ensrMzNTtt9+uhx56SM2aNVO1atW0bt06paSkaMaMGdd1LP/5z3904MAB/fbbb8rIyND69eu1du1ahYSEaNWqVXJzcytx24SEBG3evFk9evRQSEiIzp07pzfeeEO333672rdvb3utfHx8tHDhQnl6esrDw0Nt2rRRWFjYddX3v3x9fdW+fXsNGjRIGRkZmj17tu644w67x+OHDBmiFStWqGvXrnrkkUd09OhRvf/++3Y3DN9obb169VKnTp30r3/9S8ePH1ezZs309ddf67PP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cHIdO3bUqFGjirRXhM+g48ePy2KxaNeuXY4uxRQIOwCcmpubm1599VVdvHix1HPUqlVLVatWLcOqAFQkhB38qS1btuiee+6Ru7u7goKCNHLkSF2+fNnW/95776l169by9PSUv7+//va3v+ncuXPFzrVx40YNGjRIWVlZslgsslgsmjRpkq3/l19+0ZNPPilPT08FBwdr0aJFtr7OnTsX+S6ln3/+Wa6urkpKSirbg4bTiIqKkr+/v6ZMmVLimE8++USNGjWS1WpVaGioZsyYYdf/x8sQhmFo0qRJCg4OltVqVWBgoEaOHGkbm5eXp+eee0633XabPDw81KZNG23cuLE8Dg1O4OoZ7unTpysgIEA1atRQbGys8vPz7cZd67NJkk6dOqVHHnlEPj4+8vX1Ve/evXX8+HFbf0pKiu677z7VrFlT3t7e6tChg3bu3FliXWFhYZKkFi1ayGKxqGPHjnb9JdWbkJCgxo0bF5mvefPmmjBhwo28NKZC2ME1HT16VF27dlXfvn21Z88effjhh9qyZYtd6MjPz9dLL72k3bt3KzExUcePH9cTTzxR7Hzt2rXT7Nmz5eXlpbNnz+rs2bN67rnnbP0zZsxQ69at9f3332v48OF6+umndfDgQUnSkCFDtGzZMuXl5dnGv//++7rtttvUuXPn8nkB4HCVK1fWK6+8orlz5+qnn34q0p+amqpHHnlE/fv31969ezVp0iRNmDBBS5YsKXa+Tz75RLNmzdKbb76pw4cPKzExUU2aNLH1x8XFKTk5WcuXL9eePXv08MMPq2vXrjp8+HB5HSIcbMOGDTp69Kg2bNigd955R0uWLCny/rnWZ1N+fr6io6Pl6empb775Rlu3blW1atXUtWtXXblyRdLvv8o9cOBAbdmyRdu2bVN4eLi6d++uS5cuFVvTd999J0lat26dzp49q08//fS66n3yySe1f/9+paSk2MZ///332rNnz1/7J5QM/GUNHDjQqFy5suHh4WG3uLm5GZKMixcvGoMHDzaGDRtmt90333xjVKpUyfj111+LnTclJcWQZFy6dMkwDMPYsGGDbT7DMIzFixcb3t7eRbYLCQkxHnvsMdt6YWGhUbt2bWPBggWGYRjGr7/+alSvXt348MMPbWOaNm1qTJo06WZeBjixgQMHGr179zYMwzDuvvtu48knnzQMwzBWrlxpXP34+tvf/mbcd999dtuNHTvWaNiwoW09JCTEmDVrlmEYhjFjxgyjXr16xpUrV4rs78SJE0blypWN06dP27V36dLFiI+PL6vDwi3SoUMH45lnninS/sfPoIEDBxohISHGb7/9Zut/+OGHjX79+tnW/+yz6b333jPq169vFBYW2sbk5eUZ7u7uxpo1a4qtraCgwPD09DQ+//xzW5skY+XKlYZhGEZaWpohyfj+++/ttrueert162Y8/fTTtvURI0YYHTt2LLaOvwrO7PzFderUSbt27bJb/u///s/Wv3v3bi1ZskTVqlWzLdHR0SosLFRaWpqk3/9n3atXLwUHB8vT01MdOnSQJJ08efKG62natKntzxaLRf7+/rZLYm5ubhowYID+/e9/S5J27typffv2lXgWCeby6quv6p133tH+/fvt2vfv36/IyEi7tsjISB0+fFgFBQVF5nn44Yf166+/qk6dOho6dKhWrlyp3377TZK0d+9eFRQUqF69enbv+U2bNuno0aPld3BwqEaNGqly5cq29YCAgCKX4q/12bR7924dOXJEnp6etveMr6+vcnNzbe+bjIwMDR06VOHh4fL29paXl5dycnJK9Tn5Z/UOHTpUH3zwgXJzc3XlyhUtW7ZMTz755A3vx0xM89tYKB0PDw/dcccddm1/vFSQk5Ojp556yu6ehquCg4N1+fJlRUdHKzo6WkuXLlWtWrV08uRJRUdH207f3ogqVarYrVssFhUWFtrWhwwZoubNm+unn37S4sWL1blzZ4WEhNzwflDx3HvvvYqOjlZ8fPxNBdygoCAdPHhQ69at09q1azV8+HC99tpr2rRpk3JyclS5cmWlpqba/WMiSdWqVbvJI8Ct5uXlpaysrCLtmZmZ8vb2tq3/2efOn43JyclRq1attHTp0iL7qlWrliRp4MCBOn/+vF5//XWFhITIarWqbdu25fI52atXL1mtVq1cuVKurq7Kz8/XQw89dMP7MRPCDq6pZcuW+vHHH4sEoqv27t2r8+fPa+rUqQoKCpIk7dix45pzurq6Fvs/7uvRpEkTtW7dWm+99ZaWLVumefPmlWoeVExTp05V8+bNVb9+fVtbRESEtm7dajdu69atqlevXpHAcpW7u7t69eqlXr16KTY2Vg0aNNDevXvVokULFRQU6Ny5c7rnnnvK9VhQ/urXr6+vv/66SPvOnTtVr169MttPy5Yt9eGHH6p27dry8vIqdszWrVv1xhtvqHv37pJ+v6H5v//9b4lzurq6SlKpPitdXFw0cOBALV68WK6ururfv7/c3d1veB4z4TIWrmncuHH69ttvFRcXp127dunw4cP67LPPbDcoBwcHy9XVVXPnztWxY8e0atUqvfTSS9ecMzQ0VDk5OUpKStJ///tf/fLLLzdU05AhQzR16lQZhqH/9//+X6mPDRVPkyZNFBMTozlz5tjaxowZo6SkJL300ks6dOiQ3nnnHc2bN8/uxvc/WrJkid5++23t27dPx44d0/vvvy93d3eFhISoXr16iomJ0eOPP65PP/1UaWlp+u677zRlyhR9+eWXt+owUUaefvppHTp0SCNHjtSePXt08OBBzZw5Ux988IHGjBlTZvuJiYlRzZo11bt3b33zzTdKS0vTxo0bNXLkSNuZ8vDwcL333nvav3+/tm/frpiYmGsGkNq1a8vd3V2rV69WRkZGsWeormXIkCFav369Vq9e/Ze/hCURdvAnmjZtqk2bNunQoUO655571KJFC02cOFGBgYGSfj9Fu2TJEn388cdq2LChpk6dqunTp19zznbt2unvf/+7+vXrp1q1amnatGk3VNOjjz4qFxcXPfroo3Jzcyv1saFiSkhIsDtl37JlS3300Udavny5GjdurIkTJyohIaHES10+Pj566623FBkZqaZNm2rdunX6/PPPVaNGDUnS4sWL9fjjj2vMmDGqX7+++vTpo5SUFAUHB9+Kw0MZqlOnjjZv3qwDBw4oKipKbdq00UcffaSPP/5YXbt2LbP9VK1aVZs3b1ZwcLAefPBBRUREaPDgwcrNzbWd6Xn77bd18eJFtWzZUgMGDNDIkSNVu3btEud0cXHRnDlz9OabbyowMFC9e/e+oZrCw8PVrl07NWjQQG3atLmp4zMDi2EYhqOLAG7E8ePHVbduXaWkpKhly5aOLgcAnI5hGAoPD9fw4cM1evRoR5fjcNyzgwojPz9f58+f1/jx43X33XcTdACgGD///LOWL1+u9PT0v/Z36/wBYQcVxtatW9WpUyfVq1dPK1ascHQ5AOCUateurZo1a2rRokWqXr26o8txClzGAgAApsYNygAAwNQIOwAAwNQIOwAAwNQIOwAAwNQIOwAqPIvFosTEREeXAcBJEXYAOL309HSNGDFCderUkdVqVVBQkHr16qWkpCRHlwagAuB7dgA4tePHjysyMlI+Pj567bXX1KRJE+Xn52vNmjWKjY3VgQMHHF0iACfHmR0ATm348OGyWCz67rvv1LdvX9WrV0+NGjXS6NGjtW3btmK3GTdunOrVq6eqVauqTp06mjBhgvLz8239u3fvVqdOneTp6SkvLy+1atVKO3bskCSdOHFCvXr1UvXq1eXh4aFGjRrpq6++uiXHCqB8cGYHgNO6cOGCVq9ercmTJ8vDw6NIv4+PT7HbeXp6asmSJQoMDNTevXs1dOhQeXp66vnnn5f0+69Ut2jRQgsWLFDlypW1a9cuValSRZIUGxurK1euaPPmzfLw8NCPP/6oatWqldsxAih/hB0ATuvIkSMyDEMNGjS4oe3Gjx9v+3NoaKiee+45LV++3BZ2Tp48qbFjx9rmDQ8Pt40/efKk+vbtqyZNmkj6/ZezAVRsXMYC4LRK+2s2H374oSIjI+Xv769q1app/PjxOnnypK1/9OjRGjJkiKKiojR16lQdPXrU1jdy5Ei9/PLLioyM1AsvvKA9e/bc9HEAcCzCDgCnFR4eLovFckM3IScnJysmJkbdu3fXF198oe+//17/+te/dOXKFduYSZMm6YcfflCPHj20fv16NWzYUCtXrpQkDRkyRMeOHdOAAQO0d+9etW7dWnPnzi3zYwNw6/BDoACcWrdu3bR3714dPHiwyH07mZmZ8vHxkcVi0cqVK9WnTx/NmDFDb7zxht3ZmiFDhmjFihXKzMwsdh+PPvqoLl++rFWrVhXpi4+P15dffskZHqAC48wOAKc2f/58FRQU6K677tInn3yiw4cPa//+/ZozZ47atm1bZHx4eLhOnjyp5cuX6+jRo5ozZ47trI0k/frrr4qLi9PGjRt14sQJbd26VSkpKYqIiJAkjRo1SmvWrFFaWpp27typDRs22PoAVEzcoAzAqdWpU0c7d+7U5MmTNWbMGJ09e1a1atVSq1attGDBgiLjH3jgAT377LOKi4tTXl6eevTooQkTJmjSpEmSpMqVK+v8+fN6/PHHlZGRoZo1a+rBBx/Uiy++KEkqKChQbGysfvrpJ3l5ealr166aNWvWrTxkAGWMy1gAAMDUuIwFAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABM7f8DqpoIx4nRghEAAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "import librosa\n", + "import numpy as np" + ], + "metadata": { + "id": "cuR6KzuYSWug" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def plot_waveform(wav, sr, title='Waveform'):\n", + " \"\"\"\n", + " plot_waveform : fungsi untuk menampilkan waveform dari file audio.\n", + "\n", + " Args:\n", + " wav (numpy.ndarray) : array dari file audio.\n", + " sr (int) : sampling rate dari file audio.\n", + " title (str) : judul dari plot.\n", + "\n", + " Returns:\n", + " None, Plot akan ditampilkan.\n", + " \"\"\"\n", + " plt.figure(figsize=(10, 3))\n", + " librosa.display.waveshow(wav, sr=sr)\n", + " plt.title(title)\n", + " plt.xlabel('Time (s)')\n", + " plt.ylabel('Amplitude')\n", + " plt.show()" + ], + "metadata": { + "id": "aoaIPFIWORnz" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Audio to Log-Mel Spectogram\n", + "\n", + "Sebuah metode yang digunakan untuk melakukan preprocessing audio untuk memungkinkan komputer \"melihat\" dan \"memahami\" suara dengna cara yang lebih mirip dengan bagaimana manusia mendengarnya." + ], + "metadata": { + "id": "XArF5u-CSt8A" + } + }, + { + "cell_type": "code", + "source": [ + "#Inisialisasi ukuran sampel, segmentation size, frequensi maksimum\n", + "SAMPLE_RATE = 22050\n", + "WAV_SIZE = int(1.5 * SAMPLE_RATE) # ~1.5 seconds at 22050 Hz\n", + "MEL_BANDS = 128\n", + "N_FFT = 2048\n", + "HOP_LENGTH = 256\n", + "N_MELS = 128" + ], + "metadata": { + "id": "2hk_hzlkTa3O" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def audio_to_log_mel_spec(filepath):\n", + " \"\"\"\n", + " audio_to_log_mel_spec : mengubah file audio menjadi representasi Log-Mel Spectogram.\n", + "\n", + " Args:\n", + " filepath (str) : path dari file audio.\n", + "\n", + " Returns:\n", + " mel_spec_db (numpy.ndarray) : representasi Log-Mel Spectogram dari file audio.\n", + " \"\"\"\n", + " wav, sr = librosa.load(filepath, sr=SAMPLE_RATE)\n", + " wav = librosa.util.normalize(wav)\n", + "\n", + " if len(wav) > WAV_SIZE:\n", + " wav = wav[:WAV_SIZE]\n", + " else:\n", + " wav = np.pad(wav, (0, max(0, WAV_SIZE - len(wav))), \"constant\")\n", + "\n", + " mel_spec = librosa.feature.melspectrogram(y=wav, sr=SAMPLE_RATE, n_fft=N_FFT, hop_length=HOP_LENGTH, n_mels=MEL_BANDS)\n", + " mel_spec_db = librosa.power_to_db(mel_spec, ref=np.max)\n", + "\n", + " return wav, mel_spec_db" + ], + "metadata": { + "id": "F9u9y5OpUek5" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "wav, mel_spec_db = audio_to_log_mel_spec('/content/gdrive/MyDrive/Chiken_Behavior_Analysis/Data/Test_Data/audio_test.mp3')" + ], + "metadata": { + "id": "qIvsVpKPP-s_" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "plot_waveform(wav, SAMPLE_RATE)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 333 + }, + "id": "GlU-sfGiQPPH", + "outputId": "159b4784-8715-42ec-a7f2-7de65e0a0b3a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Data Preparation" + ], + "metadata": { + "id": "HjhMXsDxZfFK" + } + }, + { + "cell_type": "code", + "source": [ + "import torch\n", + "from sklearn.model_selection import train_test_split\n", + "import numpy as np\n", + "from tqdm import tqdm" + ], + "metadata": { + "id": "Wx6LhgoXZRgM" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "file_paths = []\n", + "labels = []\n", + "\n", + "for idx, cls in enumerate(classes):\n", + " for file in os.listdir(os.path.join(base_path, cls)):\n", + " file_paths.append(os.path.join(base_path, cls, file))\n", + " labels.append(idx)\n", + "\n", + "#Melakukan shuffle pada data\n", + "idxs = np.random.permutation(len(file_paths))\n", + "file_paths = np.array(file_paths)[idxs]\n", + "labels = np.array(labels)[idxs]\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(file_paths, labels, test_size=0.2, random_state=27)" + ], + "metadata": { + "id": "EiuGdsVfZgqL" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Data Preprocessing" + ], + "metadata": { + "id": "pmmcgiNXZ1BA" + } + }, + { + "cell_type": "code", + "source": [ + "def preprocess_audios(file_paths, labels):\n", + " \"\"\"\n", + " preprocess_audios : mengubah file audio menjadi representasi Log-Mel Spectogram.\n", + "\n", + " Args:\n", + " file_paths (list) : list dari path dari file audio.\n", + " labels (list) : list dari label dari file audio.\n", + "\n", + " Returns:\n", + " X (numpy.ndarray) : representasi Log-Mel Spectogram dari file audio.\n", + " Y (numpy.ndarray) : label dari file audio.\n", + " \"\"\"\n", + " X, Y = [], []\n", + " for path, label in tqdm(zip(file_paths, labels), total = len(file_paths)):\n", + " try:\n", + " wav, spec = audio_to_log_mel_spec(path)\n", + " X.append(spec)\n", + " Y.append(label)\n", + " except Exception as e:\n", + " print(f\"Error processing {path}: {e}\")\n", + " return np.array(X), np.array(Y)" + ], + "metadata": { + "id": "l-7KdDq0ZznC" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "X_train, y_train_np = preprocess_audios(X_train, y_train)\n", + "X_test, y_test_np = preprocess_audios(X_test, y_test)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6j2umA-1aJ6j", + "outputId": "38b31947-48fa-462e-e9d5-c6d1c5a7e17f" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "100%|██████████| 276/276 [00:14<00:00, 18.49it/s]\n", + "100%|██████████| 70/70 [00:02<00:00, 24.04it/s]\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "X_train_tensor = torch.tensor(X_train).unsqueeze(1)\n", + "X_test_tensor = torch.tensor(X_test).unsqueeze(1)\n", + "y_train_tensor = torch.tensor(y_train_np, dtype=torch.long)\n", + "y_test_tensor = torch.tensor(y_test_np, dtype=torch.long)" + ], + "metadata": { + "id": "dqequOlWcAHq" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "print(X_train_tensor.shape)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "mAVPuk4Lfy_t", + "outputId": "69528a3e-6bbc-4341-f682-6628b3bdb096" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "torch.Size([276, 1, 128, 130])\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Model Building" + ], + "metadata": { + "id": "YKh_8bvecewx" + } + }, + { + "cell_type": "code", + "source": [ + "import torch.nn as nn" + ], + "metadata": { + "id": "KCXU02O0cjtu" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Baseline" + ], + "metadata": { + "id": "DdVtlnZyciSH" + } + }, + { + "cell_type": "code", + "source": [ + "class BaselineModel(nn.Module):\n", + " def __init__(self, num_classes=3):\n", + " super(BaselineModel, self).__init__()\n", + "\n", + " self.features = nn.Sequential(\n", + " nn.Conv2d(1, 32, kernel_size=3),\n", + " nn.ReLU(),\n", + " nn.MaxPool2d(2),\n", + "\n", + " nn.Conv2d(32, 64, kernel_size=3),\n", + " nn.ReLU(),\n", + " nn.MaxPool2d(2),\n", + " )\n", + "\n", + " self.classifier = nn.Sequential(\n", + " nn.Flatten(),\n", + " nn.Linear(59520, 64),\n", + " nn.ReLU(),\n", + " nn.Linear(64, num_classes)\n", + " )\n", + "\n", + " def forward(self, x):\n", + " x = self.features(x)\n", + " return self.classifier(x)" + ], + "metadata": { + "id": "jhS7VJcwcPBw" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Train Model" + ], + "metadata": { + "id": "8swzNfp_dTc7" + } + }, + { + "cell_type": "code", + "source": [ + "from torch.utils.data import DataLoader, TensorDataset\n", + "import torch.optim as optim\n", + "import torch.nn.functional as F" + ], + "metadata": { + "id": "vpdRDSHCdZ5c" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "train_ds = TensorDataset(X_train_tensor, y_train_tensor)\n", + "test_ds = TensorDataset(X_test_tensor, y_test_tensor)" + ], + "metadata": { + "id": "Tr_RsGpHdNKr" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "train_load = DataLoader(train_ds, batch_size=32, shuffle=True)\n", + "test_load = DataLoader(test_ds, batch_size=32)" + ], + "metadata": { + "id": "sjRQSYODdpve" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#Inisialisasi Model\n", + "baseline_model = BaselineModel()\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "baseline_model.to(device)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "g88SgIw-duK_", + "outputId": "419243a6-deeb-4bf6-f693-35ff93c39327" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "BaselineModel(\n", + " (features): Sequential(\n", + " (0): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1))\n", + " (1): ReLU()\n", + " (2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (3): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1))\n", + " (4): ReLU()\n", + " (5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " )\n", + " (classifier): Sequential(\n", + " (0): Flatten(start_dim=1, end_dim=-1)\n", + " (1): Linear(in_features=59520, out_features=64, bias=True)\n", + " (2): ReLU()\n", + " (3): Linear(in_features=64, out_features=3, bias=True)\n", + " )\n", + ")" + ] + }, + "metadata": {}, + "execution_count": 37 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Loss and Optimizer\n", + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.Adam(baseline_model.parameters(), lr=0.001)" + ], + "metadata": { + "id": "riSxUy0Ldy7_" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Train function" + ], + "metadata": { + "id": "oa9eiLs1d_gS" + } + }, + { + "cell_type": "code", + "source": [ + "def train_function(model, train_loader, criterion, optimizer, epochs=30):\n", + " \"\"\"\n", + " train_function : fungsi untuk melatih model.\n", + "\n", + " Args:\n", + " model (nn.Module) : model yang akan dilatih.\n", + " train_loader (DataLoader) : dataloader dari data training.\n", + " criterion (nn.Module) : fungsi loss yang akan digunakan.\n", + " optimizer (torch.optim) : optimizer yang akan digunakan.\n", + " epochs (int) : jumlah epoch yang akan dilatih.\n", + "\n", + " Returns:\n", + " None, Setiap Epochs akan mencetak loss dan akurasi dari model.\n", + " \"\"\"\n", + " model.train()\n", + " for epoch in range(epochs):\n", + " running_loss = 0.0\n", + " correct = 0\n", + " total = 0\n", + " for inputs, labels in train_loader:\n", + " inputs, labels = inputs.to(device), labels.to(device)\n", + "\n", + " optimizer.zero_grad()\n", + " outputs = model(inputs)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " _, preds = outputs.max(1)\n", + " total += labels.size(0)\n", + " correct += preds.eq(labels).sum().item()\n", + "\n", + " running_loss += loss.item()\n", + "\n", + " print(f'Epoch {epoch+1} | Loss: {running_loss:.4f} | Acc: {correct/total*100:.2f}%')" + ], + "metadata": { + "id": "UD29F_J-d3eD" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "train_function(baseline_model, train_load, criterion, optimizer, epochs=30)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "HPY_r81yerEQ", + "outputId": "d7892b61-52e3-4662-8087-2dc53040051c" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1 | Loss: 444.8674 | Acc: 34.42%\n", + "Epoch 2 | Loss: 25.7926 | Acc: 33.70%\n", + "Epoch 3 | Loss: 9.7131 | Acc: 43.84%\n", + "Epoch 4 | Loss: 11.2782 | Acc: 38.77%\n", + "Epoch 5 | Loss: 9.7875 | Acc: 40.58%\n", + "Epoch 6 | Loss: 9.6726 | Acc: 44.57%\n", + "Epoch 7 | Loss: 9.1377 | Acc: 53.26%\n", + "Epoch 8 | Loss: 7.5087 | Acc: 60.87%\n", + "Epoch 9 | Loss: 5.3548 | Acc: 71.01%\n", + "Epoch 10 | Loss: 4.6283 | Acc: 78.99%\n", + "Epoch 11 | Loss: 2.4365 | Acc: 90.22%\n", + "Epoch 12 | Loss: 2.2484 | Acc: 90.94%\n", + "Epoch 13 | Loss: 1.3818 | Acc: 95.65%\n", + "Epoch 14 | Loss: 0.6721 | Acc: 97.83%\n", + "Epoch 15 | Loss: 0.5229 | Acc: 99.28%\n", + "Epoch 16 | Loss: 0.4758 | Acc: 98.91%\n", + "Epoch 17 | Loss: 0.2195 | Acc: 100.00%\n", + "Epoch 18 | Loss: 0.0812 | Acc: 100.00%\n", + "Epoch 19 | Loss: 0.0475 | Acc: 100.00%\n", + "Epoch 20 | Loss: 0.0192 | Acc: 100.00%\n", + "Epoch 21 | Loss: 0.0159 | Acc: 100.00%\n", + "Epoch 22 | Loss: 0.0112 | Acc: 100.00%\n", + "Epoch 23 | Loss: 0.0101 | Acc: 100.00%\n", + "Epoch 24 | Loss: 0.0082 | Acc: 100.00%\n", + "Epoch 25 | Loss: 0.0072 | Acc: 100.00%\n", + "Epoch 26 | Loss: 0.0062 | Acc: 100.00%\n", + "Epoch 27 | Loss: 0.0051 | Acc: 100.00%\n", + "Epoch 28 | Loss: 0.0048 | Acc: 100.00%\n", + "Epoch 29 | Loss: 0.0044 | Acc: 100.00%\n", + "Epoch 30 | Loss: 0.0041 | Acc: 100.00%\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Evaluate Model" + ], + "metadata": { + "id": "pJ7CA5B-jWi-" + } + }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics import confusion_matrix, classification_report\n", + "import seaborn as sns" + ], + "metadata": { + "id": "ysIscDgPjgMy" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def evaluate_model(model, test_loader, classes):\n", + " \"\"\"\n", + " evaluate_model : fungsi untuk mengevaluasi model.\n", + "\n", + " Args:\n", + " model (nn.Module) : model yang akan dievaluasi.\n", + " test_loader (DataLoader) : dataloader dari data testing.\n", + " classes (list) : list dari nama kelas.\n", + "\n", + " Returns:\n", + " None, Akan dilakukan print pada Classification Report dan Confusion Matrix.\n", + " \"\"\"\n", + " model.eval()\n", + " all_preds = []\n", + " all_labels = []\n", + "\n", + " with torch.no_grad():\n", + " for inputs, labels in test_loader:\n", + " inputs, labels = inputs.to(device), labels.to(device)\n", + "\n", + " outputs = model(inputs)\n", + " _, preds = torch.max(outputs, 1)\n", + " all_preds.extend(preds.cpu().numpy())\n", + " all_labels.extend(labels.cpu().numpy())\n", + "\n", + " cm = confusion_matrix(all_labels, all_preds)\n", + " sns.heatmap(cm, annot=True, fmt='d', xticklabels=classes, yticklabels=classes)\n", + " plt.title(\"Audio Confusion Matrix\")\n", + " plt.show()\n", + "\n", + " print(\"Classification Report:\")\n", + " print(classification_report(all_labels, all_preds, target_names=classes))" + ], + "metadata": { + "id": "QpYFlugyfbnN" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "evaluate_model(baseline_model, test_load, classes)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 652 + }, + "id": "LmtYBlRxkJUd", + "outputId": "5570927f-5be2-458a-e059-42d9b4cfc5b0" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Classification Report:\n", + " precision recall f1-score support\n", + "\n", + " Healthy 0.62 0.52 0.57 29\n", + " Noise 0.43 0.35 0.39 17\n", + " Unhealthy 0.66 0.88 0.75 24\n", + "\n", + " accuracy 0.60 70\n", + " macro avg 0.57 0.58 0.57 70\n", + "weighted avg 0.59 0.60 0.59 70\n", + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Moddified\n", + "\n", + "Moddified model ini dibuat dengan pemikiran bahwa model sebelumnya itu overfit terhadap train datanya dimana model terlalu cepat untuk belajar atau memahami data train tersebut dan tetap berada pada data train tersebut." + ], + "metadata": { + "id": "D-JKsiHeleUe" + } + }, + { + "cell_type": "code", + "source": [ + "class ModdifiedModel(nn.Module):\n", + " def __init__(self, num_classes=3):\n", + " super(ModdifiedModel, self).__init__()\n", + "\n", + " self.features = nn.Sequential(\n", + " nn.Conv2d(1, 32, kernel_size=3),\n", + " nn.BatchNorm2d(32),\n", + " nn.ReLU(),\n", + " nn.MaxPool2d(2),\n", + "\n", + " nn.Conv2d(32, 64, kernel_size=3),\n", + " nn.BatchNorm2d(64),\n", + " nn.ReLU(),\n", + " nn.MaxPool2d(2),\n", + "\n", + " nn.Conv2d(64, 128, kernel_size=3),\n", + " nn.BatchNorm2d(128),\n", + " nn.ReLU(),\n", + " nn.MaxPool2d(2),\n", + " )\n", + "\n", + " self.classifier = nn.Sequential(\n", + " nn.Flatten(),\n", + " nn.Linear(25088, 256),\n", + " nn.Dropout(0.5),\n", + " nn.ReLU(),\n", + " nn.Linear(256, num_classes)\n", + " )\n", + "\n", + " def forward(self, x):\n", + " x = self.features(x)\n", + " return self.classifier(x)" + ], + "metadata": { + "id": "nH3iPNddkKcJ" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "moddified_model = ModdifiedModel()\n", + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.Adam(moddified_model.parameters(), lr=0.001)" + ], + "metadata": { + "id": "AzpuHRyjoQva" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "moddified_model.to(device)\n", + "train_function(moddified_model, train_load, criterion, optimizer, epochs=30)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cqJ1p4iEoYUw", + "outputId": "03f0a86d-180e-44c4-c449-b0578854d8af" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1 | Loss: 57.5603 | Acc: 53.99%\n", + "Epoch 2 | Loss: 24.5221 | Acc: 56.16%\n", + "Epoch 3 | Loss: 15.5628 | Acc: 61.59%\n", + "Epoch 4 | Loss: 9.4286 | Acc: 69.93%\n", + "Epoch 5 | Loss: 6.7013 | Acc: 66.67%\n", + "Epoch 6 | Loss: 5.6573 | Acc: 75.36%\n", + "Epoch 7 | Loss: 5.2058 | Acc: 75.36%\n", + "Epoch 8 | Loss: 4.8427 | Acc: 76.09%\n", + "Epoch 9 | Loss: 4.1572 | Acc: 82.25%\n", + "Epoch 10 | Loss: 3.9878 | Acc: 82.61%\n", + "Epoch 11 | Loss: 4.0012 | Acc: 82.97%\n", + "Epoch 12 | Loss: 4.0641 | Acc: 84.06%\n", + "Epoch 13 | Loss: 3.3593 | Acc: 87.32%\n", + "Epoch 14 | Loss: 3.0082 | Acc: 88.41%\n", + "Epoch 15 | Loss: 2.7634 | Acc: 90.58%\n", + "Epoch 16 | Loss: 2.1890 | Acc: 89.49%\n", + "Epoch 17 | Loss: 1.9809 | Acc: 92.39%\n", + "Epoch 18 | Loss: 2.2179 | Acc: 92.03%\n", + "Epoch 19 | Loss: 2.0255 | Acc: 91.30%\n", + "Epoch 20 | Loss: 1.7252 | Acc: 93.12%\n", + "Epoch 21 | Loss: 1.7223 | Acc: 92.75%\n", + "Epoch 22 | Loss: 1.4464 | Acc: 94.93%\n", + "Epoch 23 | Loss: 1.1830 | Acc: 96.01%\n", + "Epoch 24 | Loss: 1.0298 | Acc: 96.74%\n", + "Epoch 25 | Loss: 1.2127 | Acc: 94.93%\n", + "Epoch 26 | Loss: 1.0536 | Acc: 95.65%\n", + "Epoch 27 | Loss: 1.1821 | Acc: 94.20%\n", + "Epoch 28 | Loss: 1.7699 | Acc: 95.29%\n", + "Epoch 29 | Loss: 1.1520 | Acc: 95.29%\n", + "Epoch 30 | Loss: 1.1844 | Acc: 94.57%\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "evaluate_model(moddified_model, test_load, classes)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 652 + }, + "id": "GGxWHLiBmdqk", + "outputId": "271fcf8b-c9fb-4bf7-e036-b31d99edf0c9" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Classification Report:\n", + " precision recall f1-score support\n", + "\n", + " Healthy 0.96 0.83 0.89 29\n", + " Noise 1.00 0.88 0.94 17\n", + " Unhealthy 0.80 1.00 0.89 24\n", + "\n", + " accuracy 0.90 70\n", + " macro avg 0.92 0.90 0.91 70\n", + "weighted avg 0.91 0.90 0.90 70\n", + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Extract best Model" + ], + "metadata": { + "id": "4e5n4yoLrems" + } + }, + { + "cell_type": "code", + "source": [ + "#Simpan Weight pada model\n", + "torch.save(moddified_model.state_dict(), 'Chiken_CNN_Disease_Detection_Model.pth')" + ], + "metadata": { + "id": "9De3YBe0qSgr" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Try model" + ], + "metadata": { + "id": "mFaUepCOsKHK" + } + }, + { + "cell_type": "code", + "source": [ + "ModdifiedModel()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "y3V0Oyqtsram", + "outputId": "d783c486-42e4-4092-960e-e79c6bb3f67c" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "ModdifiedModel(\n", + " (features): Sequential(\n", + " (0): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1))\n", + " (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (2): ReLU()\n", + " (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (4): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1))\n", + " (5): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (6): ReLU()\n", + " (7): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (8): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1))\n", + " (9): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (10): ReLU()\n", + " (11): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " )\n", + " (classifier): Sequential(\n", + " (0): Flatten(start_dim=1, end_dim=-1)\n", + " (1): Linear(in_features=25088, out_features=256, bias=True)\n", + " (2): Dropout(p=0.5, inplace=False)\n", + " (3): ReLU()\n", + " (4): Linear(in_features=256, out_features=3, bias=True)\n", + " )\n", + ")" + ] + }, + "metadata": {}, + "execution_count": 52 + } + ] + }, + { + "cell_type": "code", + "source": [ + "model = ModdifiedModel(num_classes=3)\n", + "model.load_state_dict(torch.load('/content/gdrive/MyDrive/Chiken_Behavior_Analysis/Model/Chiken_CNN_Disease_Detection_Model.pth'))\n", + "model.eval()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xkUqiIt0sJVI", + "outputId": "7690c83c-0e89-4ef2-b150-6b41b94f6c41" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "ModdifiedModel(\n", + " (features): Sequential(\n", + " (0): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1))\n", + " (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (2): ReLU()\n", + " (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (4): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1))\n", + " (5): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (6): ReLU()\n", + " (7): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (8): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1))\n", + " (9): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (10): ReLU()\n", + " (11): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " )\n", + " (classifier): Sequential(\n", + " (0): Flatten(start_dim=1, end_dim=-1)\n", + " (1): Linear(in_features=25088, out_features=256, bias=True)\n", + " (2): Dropout(p=0.5, inplace=False)\n", + " (3): ReLU()\n", + " (4): Linear(in_features=256, out_features=3, bias=True)\n", + " )\n", + ")" + ] + }, + "metadata": {}, + "execution_count": 54 + } + ] + }, + { + "cell_type": "code", + "source": [ + "test_data_path = '/content/gdrive/MyDrive/Chiken_Behavior_Analysis/Data/Test_Data/audio_test.mp3'\n", + "X = audio_to_log_mel_spec(test_data_path)\n", + "X_tensor = torch.tensor(X, dtype=torch.float32).unsqueeze(0).unsqueeze(0)\n", + "X_tensor = X_tensor.to(device)\n", + "\n", + "with torch.no_grad():\n", + " output = model(X_tensor)\n", + "\n", + "pred_class = torch.argmax(output, dim=1).item()\n", + "\n", + "class_labels = {0: 'Healthy', 1: 'Noise', 2: 'Unhealthy'}\n", + "print(f\"Predicted class: {class_labels[pred_class]}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vom14NOfri8x", + "outputId": "cb3a6125-53b2-49a2-aebb-33e16ac8932d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Predicted class: Healthy\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "print(\"Probability pada tiap kelas:\")\n", + "for i, prob in enumerate(F.softmax(output, dim=1)[0]):\n", + " print(f\"{class_labels[i]}: {prob.item() * 100:.2f}%\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "71u634kLtjO3", + "outputId": "5f0dc1ea-5449-4604-f9bb-983935a98c91" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Probability pada tiap kelas:\n", + "Healthy: 77.60%\n", + "Noise: 0.79%\n", + "Unhealthy: 21.60%\n" + ] + } + ] + } + ] +} \ No newline at end of file