diff --git a/__pycache__/config.cpython-39.pyc b/__pycache__/config.cpython-39.pyc index 0698941d817bfe555d127c72c721f9f90f935909..09be7823ac68d7545b66f9874e821f52c7b5cc06 100644 Binary files a/__pycache__/config.cpython-39.pyc and b/__pycache__/config.cpython-39.pyc differ diff --git a/__pycache__/faceAnalysis.cpython-39.pyc b/__pycache__/faceAnalysis.cpython-39.pyc index a72c1c6e674ae8798d8693507826a11ca7213559..9da9aaba520f5915277c7b1f95b1d04246a2ea10 100644 Binary files a/__pycache__/faceAnalysis.cpython-39.pyc and b/__pycache__/faceAnalysis.cpython-39.pyc differ diff --git a/__pycache__/imageProcess.cpython-39.pyc b/__pycache__/imageProcess.cpython-39.pyc index 0aefb70d5cbcd6f5e7e3c737a2c723fca207c3cd..e7d8303a2280ab8e835ca610cec3303e6107676d 100644 Binary files a/__pycache__/imageProcess.cpython-39.pyc and b/__pycache__/imageProcess.cpython-39.pyc differ diff --git a/__pycache__/loadExpWDS.cpython-39.pyc b/__pycache__/loadExpWDS.cpython-39.pyc index 8ffc7096932508775a674e6928b0c5b5d5eaf0f9..4963d553a1abb0d28d00a2286da369136ffbe81c 100644 Binary files a/__pycache__/loadExpWDS.cpython-39.pyc and b/__pycache__/loadExpWDS.cpython-39.pyc differ diff --git a/__pycache__/utils.cpython-39.pyc b/__pycache__/utils.cpython-39.pyc index a5344a291dabb4584bdf2026e912330768c9dce7..e89e1b3c25003428354d2326b863319855205de8 100644 Binary files a/__pycache__/utils.cpython-39.pyc and b/__pycache__/utils.cpython-39.pyc differ diff --git a/buildEmotionModel.ipynb b/buildEmotionModel.ipynb index b1a19e9c22b00ef69ae0e5289d71efcc72332843..fc0551780c275dd009c6d03baec1e57746cb102f 100644 --- a/buildEmotionModel.ipynb +++ b/buildEmotionModel.ipynb @@ -10,7 +10,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.4-final" + "version": "3.9.4" }, "orig_nbformat": 2, "kernelspec": { @@ -78,451 +78,39 @@ ] }, { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ - "#CHargement des données\n", - "# Xf, Yf = loadFer2013Data()\n", - "# Xr, Yr = loadRavdessData()\n", - "# Xe, Ye = loadExpWData(90000, count=True)\n", - "# Xa, Ya = loadAffwildData()\n", + "#Chargement des données\n", + "print(\"Array loading...\")\n", + "Xf = np.load(\"data/array/Xf\")\n", + "Xe = np.load(\"data/array/Xe\")\n", + "Xa = np.load(\"data/array/Xa\")\n", + "Xr = np.load(\"data/array/Xr\")\n", "\n", - "#X_train, Y_train, X_test, Y_test = mergeToDatabase([Xf, Xr, Xe, Xa], [Yf, Yr, Ye, Ya])" - ], - "cell_type": "code", - "metadata": { - "tags": [ - "outputPrepend" - ] - }, - "execution_count": 2, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "ideo 62/120\n", - "Traitement de 02-01-01-01-02-01-23.mp4, video 63/120\n", - "Traitement de 02-01-01-01-02-02-23.mp4, video 64/120\n", - "Traitement de 02-01-02-01-01-01-23.mp4, video 65/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-01-01-02-23.mp4, video 66/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-01-02-01-23.mp4, video 67/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-01-02-02-23.mp4, video 68/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-01-01-23.mp4, video 69/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-01-02-23.mp4, video 70/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-02-01-23.mp4, video 71/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-02-02-23.mp4, video 72/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-03-01-01-01-23.mp4, video 73/120\n", - "Traitement de 02-01-03-01-01-02-23.mp4, video 74/120\n", - "Traitement de 02-01-03-01-02-01-23.mp4, video 75/120\n", - "Traitement de 02-01-03-01-02-02-23.mp4, video 76/120\n", - "Traitement de 02-01-03-02-01-01-23.mp4, video 77/120\n", - "Traitement de 02-01-03-02-01-02-23.mp4, video 78/120\n", - "Traitement de 02-01-03-02-02-01-23.mp4, video 79/120\n", - "Traitement de 02-01-03-02-02-02-23.mp4, video 80/120\n", - "Traitement de 02-01-04-01-01-01-23.mp4, video 81/120\n", - "Traitement de 02-01-04-01-01-02-23.mp4, video 82/120\n", - "Traitement de 02-01-04-01-02-01-23.mp4, video 83/120\n", - "Traitement de 02-01-04-01-02-02-23.mp4, video 84/120\n", - "Traitement de 02-01-04-02-01-01-23.mp4, video 85/120\n", - "Traitement de 02-01-04-02-01-02-23.mp4, video 86/120\n", - "Traitement de 02-01-04-02-02-01-23.mp4, video 87/120\n", - "Traitement de 02-01-04-02-02-02-23.mp4, video 88/120\n", - "Erreur pour la donnée : Aucun ou plusieurs visages détectés\n", - "Traitement de 02-01-05-01-01-01-23.mp4, video 89/120\n", - "Traitement de 02-01-05-01-01-02-23.mp4, video 90/120\n", - "Traitement de 02-01-05-01-02-01-23.mp4, video 91/120\n", - "Traitement de 02-01-05-01-02-02-23.mp4, video 92/120\n", - "Traitement de 02-01-05-02-01-01-23.mp4, video 93/120\n", - "Traitement de 02-01-05-02-01-02-23.mp4, video 94/120\n", - "Traitement de 02-01-05-02-02-01-23.mp4, video 95/120\n", - "Traitement de 02-01-05-02-02-02-23.mp4, video 96/120\n", - "Traitement de 02-01-06-01-01-01-23.mp4, video 97/120\n", - "Traitement de 02-01-06-01-01-02-23.mp4, video 98/120\n", - "Traitement de 02-01-06-01-02-01-23.mp4, video 99/120\n", - "Traitement de 02-01-06-01-02-02-23.mp4, video 100/120\n", - "Traitement de 02-01-06-02-01-01-23.mp4, video 101/120\n", - "Traitement de 02-01-06-02-01-02-23.mp4, video 102/120\n", - "Traitement de 02-01-06-02-02-01-23.mp4, video 103/120\n", - "Traitement de 02-01-06-02-02-02-23.mp4, video 104/120\n", - "Traitement de 02-01-07-01-01-01-23.mp4, video 105/120\n", - "Traitement de 02-01-07-01-01-02-23.mp4, video 106/120\n", - "Traitement de 02-01-07-01-02-01-23.mp4, video 107/120\n", - "Traitement de 02-01-07-01-02-02-23.mp4, video 108/120\n", - "Traitement de 02-01-07-02-01-01-23.mp4, video 109/120\n", - "Traitement de 02-01-07-02-01-02-23.mp4, video 110/120\n", - "Traitement de 02-01-07-02-02-01-23.mp4, video 111/120\n", - "Traitement de 02-01-07-02-02-02-23.mp4, video 112/120\n", - "Traitement de 02-01-08-01-01-01-23.mp4, video 113/120\n", - "Traitement de 02-01-08-01-01-02-23.mp4, video 114/120\n", - "Traitement de 02-01-08-01-02-01-23.mp4, video 115/120\n", - "Traitement de 02-01-08-01-02-02-23.mp4, video 116/120\n", - "Traitement de 02-01-08-02-01-01-23.mp4, video 117/120\n", - "Traitement de 02-01-08-02-01-02-23.mp4, video 118/120\n", - "Traitement de 02-01-08-02-02-01-23.mp4, video 119/120\n", - "Traitement de 02-01-08-02-02-02-23.mp4, video 120/120\n", - "TRAITEMENT ACTEUR N°24\n", - "Traitement de 01-01-01-01-01-01-24.mp4, video 1/120\n", - "Traitement de 01-01-01-01-01-02-24.mp4, video 2/120\n", - "Traitement de 01-01-01-01-02-01-24.mp4, video 3/120\n", - "Traitement de 01-01-01-01-02-02-24.mp4, video 4/120\n", - "Traitement de 01-01-02-01-01-01-24.mp4, video 5/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-01-01-02-24.mp4, video 6/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-01-02-01-24.mp4, video 7/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-01-02-02-24.mp4, video 8/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-02-01-01-24.mp4, video 9/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-02-01-02-24.mp4, video 10/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-02-02-01-24.mp4, video 11/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-02-02-02-24.mp4, video 12/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-03-01-01-01-24.mp4, video 13/120\n", - "Traitement de 01-01-03-01-01-02-24.mp4, video 14/120\n", - "Traitement de 01-01-03-01-02-01-24.mp4, video 15/120\n", - "Traitement de 01-01-03-01-02-02-24.mp4, video 16/120\n", - "Traitement de 01-01-03-02-01-01-24.mp4, video 17/120\n", - "Traitement de 01-01-03-02-01-02-24.mp4, video 18/120\n", - "Traitement de 01-01-03-02-02-01-24.mp4, video 19/120\n", - "Traitement de 01-01-03-02-02-02-24.mp4, video 20/120\n", - "Traitement de 01-01-04-01-01-01-24.mp4, video 21/120\n", - "Traitement de 01-01-04-01-01-02-24.mp4, video 22/120\n", - "Traitement de 01-01-04-01-02-01-24.mp4, video 23/120\n", - "Traitement de 01-01-04-01-02-02-24.mp4, video 24/120\n", - "Traitement de 01-01-04-02-01-01-24.mp4, video 25/120\n", - "Traitement de 01-01-04-02-01-02-24.mp4, video 26/120\n", - "Traitement de 01-01-04-02-02-01-24.mp4, video 27/120\n", - "Traitement de 01-01-04-02-02-02-24.mp4, video 28/120\n", - "Traitement de 01-01-05-01-01-01-24.mp4, video 29/120\n", - "Traitement de 01-01-05-01-01-02-24.mp4, video 30/120\n", - "Traitement de 01-01-05-01-02-01-24.mp4, video 31/120\n", - "Traitement de 01-01-05-01-02-02-24.mp4, video 32/120\n", - "Traitement de 01-01-05-02-01-01-24.mp4, video 33/120\n", - "Traitement de 01-01-05-02-01-02-24.mp4, video 34/120\n", - "Traitement de 01-01-05-02-02-01-24.mp4, video 35/120\n", - "Traitement de 01-01-05-02-02-02-24.mp4, video 36/120\n", - "Traitement de 01-01-06-01-01-01-24.mp4, video 37/120\n", - "Traitement de 01-01-06-01-01-02-24.mp4, video 38/120\n", - "Traitement de 01-01-06-01-02-01-24.mp4, video 39/120\n", - "Traitement de 01-01-06-01-02-02-24.mp4, video 40/120\n", - "Traitement de 01-01-06-02-01-01-24.mp4, video 41/120\n", - "Traitement de 01-01-06-02-01-02-24.mp4, video 42/120\n", - "Traitement de 01-01-06-02-02-01-24.mp4, video 43/120\n", - "Traitement de 01-01-06-02-02-02-24.mp4, video 44/120\n", - "Traitement de 01-01-07-01-01-01-24.mp4, video 45/120\n", - "Traitement de 01-01-07-01-01-02-24.mp4, video 46/120\n", - "Traitement de 01-01-07-01-02-01-24.mp4, video 47/120\n", - "Traitement de 01-01-07-01-02-02-24.mp4, video 48/120\n", - "Traitement de 01-01-07-02-01-01-24.mp4, video 49/120\n", - "Traitement de 01-01-07-02-01-02-24.mp4, video 50/120\n", - "Traitement de 01-01-07-02-02-01-24.mp4, video 51/120\n", - "Traitement de 01-01-07-02-02-02-24.mp4, video 52/120\n", - "Traitement de 01-01-08-01-01-01-24.mp4, video 53/120\n", - "Traitement de 01-01-08-01-01-02-24.mp4, video 54/120\n", - "Traitement de 01-01-08-01-02-01-24.mp4, video 55/120\n", - "Traitement de 01-01-08-01-02-02-24.mp4, video 56/120\n", - "Traitement de 01-01-08-02-01-01-24.mp4, video 57/120\n", - "Traitement de 01-01-08-02-01-02-24.mp4, video 58/120\n", - "Traitement de 01-01-08-02-02-01-24.mp4, video 59/120\n", - "Traitement de 01-01-08-02-02-02-24.mp4, video 60/120\n", - "Traitement de 02-01-01-01-01-01-24.mp4, video 61/120\n", - "Traitement de 02-01-01-01-01-02-24.mp4, video 62/120\n", - "Traitement de 02-01-01-01-02-01-24.mp4, video 63/120\n", - "Traitement de 02-01-01-01-02-02-24.mp4, video 64/120\n", - "Traitement de 02-01-02-01-01-01-24.mp4, video 65/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-01-01-02-24.mp4, video 66/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-01-02-01-24.mp4, video 67/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-01-02-02-24.mp4, video 68/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-01-01-24.mp4, video 69/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-01-02-24.mp4, video 70/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-02-01-24.mp4, video 71/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-02-02-24.mp4, video 72/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-03-01-01-01-24.mp4, video 73/120\n", - "Traitement de 02-01-03-01-01-02-24.mp4, video 74/120\n", - "Traitement de 02-01-03-01-02-01-24.mp4, video 75/120\n", - "Traitement de 02-01-03-01-02-02-24.mp4, video 76/120\n", - "Traitement de 02-01-03-02-01-01-24.mp4, video 77/120\n", - "Traitement de 02-01-03-02-01-02-24.mp4, video 78/120\n", - "Traitement de 02-01-03-02-02-01-24.mp4, video 79/120\n", - "Traitement de 02-01-03-02-02-02-24.mp4, video 80/120\n", - "Traitement de 02-01-04-01-01-01-24.mp4, video 81/120\n", - "Erreur pour la donnée : Aucun ou plusieurs visages détectés\n", - "Traitement de 02-01-04-01-01-02-24.mp4, video 82/120\n", - "Traitement de 02-01-04-01-02-01-24.mp4, video 83/120\n", - "Traitement de 02-01-04-01-02-02-24.mp4, video 84/120\n", - "Traitement de 02-01-04-02-01-01-24.mp4, video 85/120\n", - "Traitement de 02-01-04-02-01-02-24.mp4, video 86/120\n", - "Traitement de 02-01-04-02-02-01-24.mp4, video 87/120\n", - "Traitement de 02-01-04-02-02-02-24.mp4, video 88/120\n", - "Traitement de 02-01-05-01-01-01-24.mp4, video 89/120\n", - "Traitement de 02-01-05-01-01-02-24.mp4, video 90/120\n", - "Traitement de 02-01-05-01-02-01-24.mp4, video 91/120\n", - "Traitement de 02-01-05-01-02-02-24.mp4, video 92/120\n", - "Traitement de 02-01-05-02-01-01-24.mp4, video 93/120\n", - "Traitement de 02-01-05-02-01-02-24.mp4, video 94/120\n", - "Traitement de 02-01-05-02-02-01-24.mp4, video 95/120\n", - "Traitement de 02-01-05-02-02-02-24.mp4, video 96/120\n", - "Traitement de 02-01-06-01-01-01-24.mp4, video 97/120\n", - "Traitement de 02-01-06-01-01-02-24.mp4, video 98/120\n", - "Traitement de 02-01-06-01-02-01-24.mp4, video 99/120\n", - "Traitement de 02-01-06-01-02-02-24.mp4, video 100/120\n", - "Traitement de 02-01-06-02-01-01-24.mp4, video 101/120\n", - "Traitement de 02-01-06-02-01-02-24.mp4, video 102/120\n", - "Traitement de 02-01-06-02-02-01-24.mp4, video 103/120\n", - "Traitement de 02-01-06-02-02-02-24.mp4, video 104/120\n", - "Traitement de 02-01-07-01-01-01-24.mp4, video 105/120\n", - "Traitement de 02-01-07-01-01-02-24.mp4, video 106/120\n", - "Traitement de 02-01-07-01-02-01-24.mp4, video 107/120\n", - "Traitement de 02-01-07-01-02-02-24.mp4, video 108/120\n", - "Traitement de 02-01-07-02-01-01-24.mp4, video 109/120\n", - "Traitement de 02-01-07-02-01-02-24.mp4, video 110/120\n", - "Traitement de 02-01-07-02-02-01-24.mp4, video 111/120\n", - "Traitement de 02-01-07-02-02-02-24.mp4, video 112/120\n", - "Traitement de 02-01-08-01-01-01-24.mp4, video 113/120\n", - "Traitement de 02-01-08-01-01-02-24.mp4, video 114/120\n", - "Traitement de 02-01-08-01-02-01-24.mp4, video 115/120\n", - "Traitement de 02-01-08-01-02-02-24.mp4, video 116/120\n", - "Traitement de 02-01-08-02-01-01-24.mp4, video 117/120\n", - "Traitement de 02-01-08-02-01-02-24.mp4, video 118/120\n", - "Traitement de 02-01-08-02-02-01-24.mp4, video 119/120\n", - "Traitement de 02-01-08-02-02-02-24.mp4, video 120/120\n", - "TRAITEMENT RAVDESS: traitement des 10282 visages détectés sur les vidéos de Ravdess...\n", - "10282 données chargées depuis Ravdess.\n", - "\n", - "CHARGEMENT DE 90000 DONNEES DEPUIS EXPW...\n", - "1000 données chargées depuis expW (sur 1000 données traités).\n", - "2000 données chargées depuis expW (sur 2000 données traités).\n", - "3000 données chargées depuis expW (sur 3000 données traités).\n", - "4000 données chargées depuis expW (sur 4000 données traités).\n", - "5000 données chargées depuis expW (sur 5000 données traités).\n", - "6000 données chargées depuis expW (sur 6000 données traités).\n", - "7000 données chargées depuis expW (sur 7000 données traités).\n", - "8000 données chargées depuis expW (sur 8000 données traités).\n", - "9000 données chargées depuis expW (sur 9000 données traités).\n", - "10000 données chargées depuis expW (sur 10000 données traités).\n", - "11000 données chargées depuis expW (sur 11000 données traités).\n", - "12000 données chargées depuis expW (sur 12000 données traités).\n", - "13000 données chargées depuis expW (sur 13000 données traités).\n", - "14000 données chargées depuis expW (sur 14000 données traités).\n", - "15000 données chargées depuis expW (sur 15000 données traités).\n", - "16000 données chargées depuis expW (sur 16000 données traités).\n", - "17000 données chargées depuis expW (sur 17000 données traités).\n", - "18000 données chargées depuis expW (sur 18000 données traités).\n", - "19000 données chargées depuis expW (sur 19000 données traités).\n", - "20000 données chargées depuis expW (sur 20000 données traités).\n", - "21000 données chargées depuis expW (sur 21000 données traités).\n", - "22000 données chargées depuis expW (sur 22000 données traités).\n", - "23000 données chargées depuis expW (sur 23000 données traités).\n", - "24000 données chargées depuis expW (sur 24000 données traités).\n", - "25000 données chargées depuis expW (sur 25000 données traités).\n", - "26000 données chargées depuis expW (sur 26000 données traités).\n", - "27000 données chargées depuis expW (sur 27000 données traités).\n", - "28000 données chargées depuis expW (sur 28000 données traités).\n", - "29000 données chargées depuis expW (sur 29000 données traités).\n", - "30000 données chargées depuis expW (sur 30000 données traités).\n", - "31000 données chargées depuis expW (sur 31000 données traités).\n", - "32000 données chargées depuis expW (sur 32000 données traités).\n", - "33000 données chargées depuis expW (sur 33000 données traités).\n", - "34000 données chargées depuis expW (sur 34000 données traités).\n", - "35000 données chargées depuis expW (sur 35000 données traités).\n", - "36000 données chargées depuis expW (sur 36000 données traités).\n", - "37000 données chargées depuis expW (sur 37000 données traités).\n", - "38000 données chargées depuis expW (sur 38000 données traités).\n", - "39000 données chargées depuis expW (sur 39000 données traités).\n", - "40000 données chargées depuis expW (sur 40000 données traités).\n", - "41000 données chargées depuis expW (sur 41000 données traités).\n", - "42000 données chargées depuis expW (sur 42000 données traités).\n", - "43000 données chargées depuis expW (sur 43000 données traités).\n", - "44000 données chargées depuis expW (sur 44000 données traités).\n", - "45000 données chargées depuis expW (sur 45000 données traités).\n", - "46000 données chargées depuis expW (sur 46000 données traités).\n", - "47000 données chargées depuis expW (sur 47000 données traités).\n", - "48000 données chargées depuis expW (sur 48000 données traités).\n", - "49000 données chargées depuis expW (sur 49000 données traités).\n", - "50000 données chargées depuis expW (sur 50000 données traités).\n", - "51000 données chargées depuis expW (sur 51000 données traités).\n", - "52000 données chargées depuis expW (sur 52000 données traités).\n", - "53000 données chargées depuis expW (sur 53000 données traités).\n", - "54000 données chargées depuis expW (sur 54000 données traités).\n", - "55000 données chargées depuis expW (sur 55000 données traités).\n", - "56000 données chargées depuis expW (sur 56000 données traités).\n", - "57000 données chargées depuis expW (sur 57000 données traités).\n", - "58000 données chargées depuis expW (sur 58000 données traités).\n", - "59000 données chargées depuis expW (sur 59000 données traités).\n", - "60000 données chargées depuis expW (sur 60000 données traités).\n", - "61000 données chargées depuis expW (sur 61000 données traités).\n", - "62000 données chargées depuis expW (sur 62000 données traités).\n", - "63000 données chargées depuis expW (sur 63000 données traités).\n", - "64000 données chargées depuis expW (sur 64000 données traités).\n", - "65000 données chargées depuis expW (sur 65000 données traités).\n", - "66000 données chargées depuis expW (sur 66000 données traités).\n", - "67000 données chargées depuis expW (sur 67000 données traités).\n", - "68000 données chargées depuis expW (sur 68000 données traités).\n", - "69000 données chargées depuis expW (sur 69000 données traités).\n", - "70000 données chargées depuis expW (sur 70000 données traités).\n", - "71000 données chargées depuis expW (sur 71000 données traités).\n", - "72000 données chargées depuis expW (sur 72000 données traités).\n", - "73000 données chargées depuis expW (sur 73000 données traités).\n", - "74000 données chargées depuis expW (sur 74000 données traités).\n", - "75000 données chargées depuis expW (sur 75000 données traités).\n", - "76000 données chargées depuis expW (sur 76000 données traités).\n", - "77000 données chargées depuis expW (sur 77000 données traités).\n", - "78000 données chargées depuis expW (sur 78000 données traités).\n", - "79000 données chargées depuis expW (sur 79000 données traités).\n", - "80000 données chargées depuis expW (sur 80000 données traités).\n", - "81000 données chargées depuis expW (sur 81000 données traités).\n", - "82000 données chargées depuis expW (sur 82000 données traités).\n", - "83000 données chargées depuis expW (sur 83000 données traités).\n", - "84000 données chargées depuis expW (sur 84000 données traités).\n", - "85000 données chargées depuis expW (sur 85000 données traités).\n", - "86000 données chargées depuis expW (sur 86000 données traités).\n", - "87000 données chargées depuis expW (sur 87000 données traités).\n", - "88000 données chargées depuis expW (sur 88000 données traités).\n", - "89000 données chargées depuis expW (sur 89000 données traités).\n", - "90000 données chargées depuis expW (sur 90000 données traités).\n", - "\n", - "\n", - "\n", - "CHARGEMENT DE 10000000000 DONNEES DEPUIS AFFWILD...\n", - "Traitement de 1-30-1280x720.mp4, video 1/79\n", - "Traitement de 108-15-640x480.mp4, video 2/79\n", - "Traitement de 111-25-1920x1080.mp4, video 3/79\n", - "Traitement de 117-25-1920x1080.mp4, video 4/79\n", - "Traitement de 118-30-640x480.mp4, video 5/79\n", - "Traitement de 121-24-1920x1080.mp4, video 6/79\n", - "Traitement de 122-60-1920x1080-5.mp4, video 7/79\n", - "Traitement de 126-30-1080x1920.mp4, video 8/79\n", - "Traitement de 13-30-1920x1080.mp4, video 9/79\n", - "Traitement de 130-25-1280x720.mp4, video 10/79\n", - "Traitement de 132-30-426x240.mp4, video 11/79\n", - "Traitement de 133-30-1280x720.mp4, video 12/79\n", - "Traitement de 134-30-1280x720.mp4, video 13/79\n", - "Traitement de 135-24-1920x1080.mp4, video 14/79\n", - "Traitement de 136-30-1920x1080.mp4, video 15/79\n", - "Traitement de 138-30-1280x720.mp4, video 16/79\n", - "Traitement de 139-14-720x480.mp4, video 17/79\n", - "Traitement de 14-30-1920x1080.mp4, video 18/79\n", - "Traitement de 16-30-1920x1080.mp4, video 19/79\n", - "Traitement de 18-24-1920x1080.mp4, video 20/79\n", - "Traitement de 198.avi, video 21/79\n", - "Traitement de 20-24-1920x1080.mp4, video 22/79\n", - "Traitement de 207.mp4, video 23/79\n", - "Traitement de 21-24-1920x1080.mp4, video 24/79\n", - "Traitement de 212.mp4, video 25/79\n", - "Traitement de 221.mp4, video 26/79\n", - "Traitement de 225.mp4, video 27/79\n", - "Traitement de 24-30-1920x1080-2.mp4, video 28/79\n", - "Traitement de 28-30-1280x720-1.mp4, video 29/79\n", - "Traitement de 28-30-1280x720-2.mp4, video 30/79\n", - "Traitement de 28-30-1280x720-3.mp4, video 31/79\n", - "Traitement de 28-30-1280x720-4.mp4, video 32/79\n", - "Traitement de 282.mp4, video 33/79\n", - "Traitement de 38-30-1920x1080.mp4, video 34/79\n", - "Traitement de 40-30-1280x720.mp4, video 35/79\n", - "Traitement de 43-30-406x720.mp4, video 36/79\n", - "Traitement de 44-25-426x240.mp4, video 37/79\n", - "Traitement de 45-24-1280x720.mp4, video 38/79\n", - "Traitement de 46-30-484x360.mp4, video 39/79\n", - "Traitement de 58-30-640x480.mp4, video 40/79\n", - "Traitement de 6-30-1920x1080.mp4, video 41/79\n", - "Traitement de 7-60-1920x1080.mp4, video 42/79\n", - "Traitement de 79-30-960x720.mp4, video 43/79\n", - "Traitement de 8-30-1280x720.mp4, video 44/79\n", - "Traitement de 82-25-854x480.mp4, video 45/79\n", - "Traitement de 85-24-1280x720.mp4, video 46/79\n", - "Traitement de 87-25-1920x1080.mp4, video 47/79\n", - "Traitement de 9-15-1920x1080.mp4, video 48/79\n", - "Traitement de 92-24-1920x1080.mp4, video 49/79\n", - "Traitement de 99-30-720x720.mp4, video 50/79\n", - "Traitement de video24.mp4, video 51/79\n", - "Traitement de video34.mp4, video 52/79\n", - "Traitement de video4.mp4, video 53/79\n", - "Traitement de video40.mp4, video 54/79\n", - "Traitement de video45_1.mp4, video 55/79\n", - "Traitement de video45_2.mp4, video 56/79\n", - "Traitement de video45_3.mp4, video 57/79\n", - "Traitement de video45_4.mp4, video 58/79\n", - "Traitement de video45_5.mp4, video 59/79\n", - "Traitement de video45_6.mp4, video 60/79\n", - "Traitement de video45_7.mp4, video 61/79\n", - "Traitement de video47.mp4, video 62/79\n", - "Traitement de video48.mp4, video 63/79\n", - "Traitement de video49.mp4, video 64/79\n", - "Traitement de video56.mp4, video 65/79\n", - "Traitement de video58.mp4, video 66/79\n", - "Traitement de video6.mp4, video 67/79\n", - "Traitement de video61.mp4, video 68/79\n", - "Traitement de video63.mp4, video 69/79\n", - "Traitement de video65.mp4, video 70/79\n", - "Traitement de video66.mp4, video 71/79\n", - "Traitement de video67.mp4, video 72/79\n", - "Traitement de video72.mp4, video 73/79\n", - "Traitement de video73.mp4, video 74/79\n", - "Traitement de video79.mp4, video 75/79\n", - "Traitement de video87.mp4, video 76/79\n", - "Traitement de video93.mp4, video 77/79\n", - "Traitement de video94.mp4, video 78/79\n", - "Traitement de video95.mp4, video 79/79\n", - "TRAITEMENT AFFWILD: traitement des 6495 visages détectés sur les vidéos de AffWild...\n", - "6495 données chargées depuis AffWild.\n" - ] - }, - { - "output_type": "error", - "ename": "MemoryError", - "evalue": "", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mMemoryError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m<ipython-input-2-3417f05429fb>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mXa\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYa\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mloadAffwildData\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 7\u001b[1;33m \u001b[0mX_train\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mY_train\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mX_test\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mY_test\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmergeToDatabase\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mXf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXe\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXa\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mYf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYe\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYa\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;32mc:\\Users\\timot\\facial-expression-detection\\utils.py\u001b[0m in \u001b[0;36mmergeToDatabase\u001b[1;34m(listOfX, listOfY, validation_repart)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[0mlistOfY_test\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mY_test\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 70\u001b[0m \u001b[1;31m# Merge\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 71\u001b[1;33m \u001b[0mBigX_train\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstackImages\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlistOfX_train\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 72\u001b[0m \u001b[0mBigY_train\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstackImages\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlistOfY_train\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 73\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mc:\\Users\\timot\\facial-expression-detection\\utils.py\u001b[0m in \u001b[0;36mstackImages\u001b[1;34m(listOfArrayImage)\u001b[0m\n\u001b[0;32m 46\u001b[0m \u001b[0mliste\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 47\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mX\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mlistOfArrayImage\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 48\u001b[1;33m \u001b[0mliste\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtolist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 49\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mliste\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 50\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mMemoryError\u001b[0m: " - ] - } + "Yf = np.load(\"data/array/Yf\")\n", + "Ye = np.load(\"data/array/Ye\")\n", + "Ya = np.load(\"data/array/Ya\")\n", + "Yr = np.load(\"data/array/Yr\")\n", + "\n", + "print(\"Concatenation...\")\n", + "X = np.concatenate([Xf, Xa, Xe, Xr])\n", + "Y = np.concatenate([Yf, Ya, Ye, Yr])" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "output_type": "error", - "ename": "MemoryError", - "evalue": "", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mMemoryError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m<ipython-input-12-1df8f39f5f0e>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mX_train\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstackImages\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mXa\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXe\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;36m5000\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;36m5000\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mX_test\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstackImages\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mXe\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m25000\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m35000\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mc:\\Users\\timot\\facial-expression-detection\\utils.py\u001b[0m in \u001b[0;36mstackImages\u001b[1;34m(listOfArrayImage)\u001b[0m\n\u001b[0;32m 46\u001b[0m \u001b[0mliste\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 47\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mX\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mlistOfArrayImage\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 48\u001b[1;33m \u001b[0mliste\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtolist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 49\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mliste\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 50\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mMemoryError\u001b[0m: " - ] - } - ], + "outputs": [], "source": [ - "\n", - "X_train = stackImages([Xa, Xr])\n", - "X_test = stackImages([Xe[25000:], Xf[35000:]])" + "#Enregistre X et Y directement, à faire si assez de ram\n", + "np.save(\"data/array/X\", X)\n", + "np.save(\"data/array/Y\", Y)\n", + "def loadData():\n", + " return np.load(\"data/array/X\"), np.load(\"data/array/Y\")" ] }, { @@ -553,21 +141,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "output_type": "error", - "ename": "NameError", - "evalue": "name 'X_train' is not defined", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m<ipython-input-5-6d0d9ec25cf6>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m#Visualisation du dataset global\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"X_train:\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mX_train\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Y_train:\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mY_train\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"\\nX_test:\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mX_test\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mNameError\u001b[0m: name 'X_train' is not defined" - ] - } - ], + "outputs": [], "source": [ "#Visualisation du dataset global\n", "print(\"X_train:\", X_train.shape)\n", @@ -593,44 +169,32 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#@title Hyperparamètres\n", - "epochs = \n", + "epochs = 2\n", "batch_size = 128\n", "validation_size = 0.1" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "X_train: (81000, 48, 48, 1)\nY_train: (81000, 7)\n\nX_test_cat: (9001, 48, 48, 1)\nY_test_cat: (9001, 7)\n" - ] - } - ], + "outputs": [], "source": [ "#Labels catégoriques\n", - "Y_train_cat = keras.utils.to_categorical(Y_train)\n", - "Y_test_cat = keras.utils.to_categorical(Y_test)\n", - "\n", - "print(\"X_train:\", X_train.shape)\n", - "print(\"Y_train:\", Y_train_cat.shape)\n", + "Ycat = keras.utils.to_categorical(Y)\n", "\n", - "print(\"\\nX_test_cat:\", X_test.shape)\n", - "print(\"Y_test_cat:\", Y_test_cat.shape)" + "print(\"X\", X_train.shape)\n", + "print(\"Y\", Y_train_cat.shape)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -639,24 +203,39 @@ "\n", " def __init__(self, input_shape):\n", " super(MyModel, self).__init__()\n", + " #Pre processing\n", + " self.add(keras.layers.experimental.preprocessing.RandomContrast(factor=(0.5,0.5)))\n", + " self.add(keras.layers.experimental.preprocessing.RandomFlip(mode=\"horizontal\"))\n", + " \n", + " #48*48 *1\n", " self.add(keras.layers.Conv2D(32, kernel_size = (3, 3), activation = 'relu', input_shape = input_shape)) \n", " self.add(keras.layers.MaxPooling2D(pool_size = 2))\n", " self.add(keras.layers.BatchNormalization())\n", "\n", + " #23*23 *32\n", " self.add(keras.layers.Conv2D(64, kernel_size = (3, 3), activation = 'relu'))\n", " self.add(keras.layers.MaxPooling2D(pool_size = 2))\n", " self.add(keras.layers.BatchNormalization())\n", "\n", - " self.add(keras.layers.Conv2D(96, kernel_size = (3, 3), activation = 'relu'))\n", + " #10*10 *64\n", + " self.add(keras.layers.Conv2D(128, kernel_size = (3, 3), activation = 'relu'))\n", " self.add(keras.layers.MaxPooling2D(pool_size = 2))\n", " self.add(keras.layers.BatchNormalization())\n", "\n", - " self.add(keras.layers.Flatten())\n", + " #4*4 *128\n", + " self.add(keras.layers.Conv2D(256, kernel_size = (3, 3), activation = 'relu'))\n", + " self.add(keras.layers.MaxPooling2D(pool_size = 2))\n", + " self.add(keras.layers.BatchNormalization())\n", "\n", + " #1*1 *256\n", + " self.add(keras.layers.Flatten())\n", + " self.add(keras.layers.Dense(128, activation = 'relu'))\n", + " self.add(keras.layers.Dropout(0.2))\n", " self.add(keras.layers.Dense(64, activation = 'relu'))\n", - " self.add(keras.layers.BatchNormalization())\n", - " \n", + " self.add(keras.layers.Dropout(0.2))\n", + " #self.add(keras.layers.BatchNormalization())\n", " self.add(keras.layers.Dense(7, activation = 'softmax'))\n", + " #7\n", " \n", " def predir(self, monImage):\n", " return self.predict(np.array([monImage]))[0,:]\n", @@ -670,50 +249,22 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[0.15433358 0.14506394 0.16671737 0.1411671 0.13488784 0.13087346\n 0.12695667]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": "<Figure size 432x288 with 1 Axes>", - "image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<svg height=\"250.052344pt\" version=\"1.1\" viewBox=\"0 0 251.565 250.052344\" width=\"251.565pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <metadata>\r\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\r\n <cc:Work>\r\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\r\n <dc:date>2021-05-04T23:17:39.951349</dc:date>\r\n <dc:format>image/svg+xml</dc:format>\r\n <dc:creator>\r\n <cc:Agent>\r\n <dc:title>Matplotlib v3.4.1, https://matplotlib.org/</dc:title>\r\n </cc:Agent>\r\n </dc:creator>\r\n </cc:Work>\r\n </rdf:RDF>\r\n </metadata>\r\n <defs>\r\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n <g id=\"patch_1\">\r\n <path d=\"M 0 250.052344 \r\nL 251.565 250.052344 \r\nL 251.565 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n </g>\r\n <g id=\"axes_1\">\r\n <g id=\"patch_2\">\r\n <path d=\"M 26.925 226.174219 \r\nL 244.365 226.174219 \r\nL 244.365 8.734219 \r\nL 26.925 8.734219 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n </g>\r\n <g clip-path=\"url(#pb9c2e2cd6d)\">\r\n <image height=\"218\" id=\"image727a5096cb\" transform=\"scale(1 -1)translate(0 -218)\" width=\"218\" x=\"26.925\" xlink:href=\"data:image/png;base64,\r\n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\" y=\"-8.174219\"/>\r\n </g>\r\n <g id=\"matplotlib.axis_1\">\r\n <g id=\"xtick_1\">\r\n <g id=\"line2d_1\">\r\n <defs>\r\n <path d=\"M 0 0 \r\nL 0 3.5 \r\n\" id=\"md0bafdaabc\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n </defs>\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"29.19\" xlink:href=\"#md0bafdaabc\" y=\"226.174219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_1\">\r\n <!-- 0 -->\r\n <g transform=\"translate(26.00875 240.772656)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 2034 4250 \r\nQ 1547 4250 1301 3770 \r\nQ 1056 3291 1056 2328 \r\nQ 1056 1369 1301 889 \r\nQ 1547 409 2034 409 \r\nQ 2525 409 2770 889 \r\nQ 3016 1369 3016 2328 \r\nQ 3016 3291 2770 3770 \r\nQ 2525 4250 2034 4250 \r\nz\r\nM 2034 4750 \r\nQ 2819 4750 3233 4129 \r\nQ 3647 3509 3647 2328 \r\nQ 3647 1150 3233 529 \r\nQ 2819 -91 2034 -91 \r\nQ 1250 -91 836 529 \r\nQ 422 1150 422 2328 \r\nQ 422 3509 836 4129 \r\nQ 1250 4750 2034 4750 \r\nz\r\n\" id=\"DejaVuSans-30\" transform=\"scale(0.015625)\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_2\">\r\n <g id=\"line2d_2\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"74.49\" xlink:href=\"#md0bafdaabc\" y=\"226.174219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_2\">\r\n <!-- 10 -->\r\n <g transform=\"translate(68.1275 240.772656)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 794 531 \r\nL 1825 531 \r\nL 1825 4091 \r\nL 703 3866 \r\nL 703 4441 \r\nL 1819 4666 \r\nL 2450 4666 \r\nL 2450 531 \r\nL 3481 531 \r\nL 3481 0 \r\nL 794 0 \r\nL 794 531 \r\nz\r\n\" id=\"DejaVuSans-31\" transform=\"scale(0.015625)\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-31\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_3\">\r\n <g id=\"line2d_3\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"119.79\" xlink:href=\"#md0bafdaabc\" y=\"226.174219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_3\">\r\n <!-- 20 -->\r\n <g transform=\"translate(113.4275 240.772656)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 1228 531 \r\nL 3431 531 \r\nL 3431 0 \r\nL 469 0 \r\nL 469 531 \r\nQ 828 903 1448 1529 \r\nQ 2069 2156 2228 2338 \r\nQ 2531 2678 2651 2914 \r\nQ 2772 3150 2772 3378 \r\nQ 2772 3750 2511 3984 \r\nQ 2250 4219 1831 4219 \r\nQ 1534 4219 1204 4116 \r\nQ 875 4013 500 3803 \r\nL 500 4441 \r\nQ 881 4594 1212 4672 \r\nQ 1544 4750 1819 4750 \r\nQ 2544 4750 2975 4387 \r\nQ 3406 4025 3406 3419 \r\nQ 3406 3131 3298 2873 \r\nQ 3191 2616 2906 2266 \r\nQ 2828 2175 2409 1742 \r\nQ 1991 1309 1228 531 \r\nz\r\n\" id=\"DejaVuSans-32\" transform=\"scale(0.015625)\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-32\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_4\">\r\n <g id=\"line2d_4\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"165.09\" xlink:href=\"#md0bafdaabc\" y=\"226.174219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_4\">\r\n <!-- 30 -->\r\n <g transform=\"translate(158.7275 240.772656)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 2597 2516 \r\nQ 3050 2419 3304 2112 \r\nQ 3559 1806 3559 1356 \r\nQ 3559 666 3084 287 \r\nQ 2609 -91 1734 -91 \r\nQ 1441 -91 1130 -33 \r\nQ 819 25 488 141 \r\nL 488 750 \r\nQ 750 597 1062 519 \r\nQ 1375 441 1716 441 \r\nQ 2309 441 2620 675 \r\nQ 2931 909 2931 1356 \r\nQ 2931 1769 2642 2001 \r\nQ 2353 2234 1838 2234 \r\nL 1294 2234 \r\nL 1294 2753 \r\nL 1863 2753 \r\nQ 2328 2753 2575 2939 \r\nQ 2822 3125 2822 3475 \r\nQ 2822 3834 2567 4026 \r\nQ 2313 4219 1838 4219 \r\nQ 1578 4219 1281 4162 \r\nQ 984 4106 628 3988 \r\nL 628 4550 \r\nQ 988 4650 1302 4700 \r\nQ 1616 4750 1894 4750 \r\nQ 2613 4750 3031 4423 \r\nQ 3450 4097 3450 3541 \r\nQ 3450 3153 3228 2886 \r\nQ 3006 2619 2597 2516 \r\nz\r\n\" id=\"DejaVuSans-33\" transform=\"scale(0.015625)\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-33\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_5\">\r\n <g id=\"line2d_5\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"210.39\" xlink:href=\"#md0bafdaabc\" y=\"226.174219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_5\">\r\n <!-- 40 -->\r\n <g transform=\"translate(204.0275 240.772656)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 2419 4116 \r\nL 825 1625 \r\nL 2419 1625 \r\nL 2419 4116 \r\nz\r\nM 2253 4666 \r\nL 3047 4666 \r\nL 3047 1625 \r\nL 3713 1625 \r\nL 3713 1100 \r\nL 3047 1100 \r\nL 3047 0 \r\nL 2419 0 \r\nL 2419 1100 \r\nL 313 1100 \r\nL 313 1709 \r\nL 2253 4666 \r\nz\r\n\" id=\"DejaVuSans-34\" transform=\"scale(0.015625)\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-34\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"matplotlib.axis_2\">\r\n <g id=\"ytick_1\">\r\n <g id=\"line2d_6\">\r\n <defs>\r\n <path d=\"M 0 0 \r\nL -3.5 0 \r\n\" id=\"mcfe59a5668\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n </defs>\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#mcfe59a5668\" y=\"10.999219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_6\">\r\n <!-- 0 -->\r\n <g transform=\"translate(13.5625 14.798437)scale(0.1 -0.1)\">\r\n <use xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"ytick_2\">\r\n <g id=\"line2d_7\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#mcfe59a5668\" y=\"56.299219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_7\">\r\n <!-- 10 -->\r\n <g transform=\"translate(7.2 60.098437)scale(0.1 -0.1)\">\r\n <use xlink:href=\"#DejaVuSans-31\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"ytick_3\">\r\n <g id=\"line2d_8\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#mcfe59a5668\" y=\"101.599219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_8\">\r\n <!-- 20 -->\r\n <g transform=\"translate(7.2 105.398437)scale(0.1 -0.1)\">\r\n <use xlink:href=\"#DejaVuSans-32\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"ytick_4\">\r\n <g id=\"line2d_9\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#mcfe59a5668\" y=\"146.899219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_9\">\r\n <!-- 30 -->\r\n <g transform=\"translate(7.2 150.698437)scale(0.1 -0.1)\">\r\n <use xlink:href=\"#DejaVuSans-33\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"ytick_5\">\r\n <g id=\"line2d_10\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#mcfe59a5668\" y=\"192.199219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_10\">\r\n <!-- 40 -->\r\n <g transform=\"translate(7.2 195.998437)scale(0.1 -0.1)\">\r\n <use xlink:href=\"#DejaVuSans-34\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"patch_3\">\r\n <path d=\"M 26.925 226.174219 \r\nL 26.925 8.734219 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"patch_4\">\r\n <path d=\"M 244.365 226.174219 \r\nL 244.365 8.734219 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"patch_5\">\r\n <path d=\"M 26.925 226.174219 \r\nL 244.365 226.174219 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"patch_6\">\r\n <path d=\"M 26.925 8.734219 \r\nL 244.365 8.734219 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <defs>\r\n <clipPath id=\"pb9c2e2cd6d\">\r\n <rect height=\"217.44\" width=\"217.44\" x=\"26.925\" y=\"8.734219\"/>\r\n </clipPath>\r\n </defs>\r\n</svg>\r\n", - "image/png": "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\n" - }, - "metadata": { - "needs_background": "light" - } - } - ], + "outputs": [], "source": [ - "theImage = X_train[5]\n", + "theImage = X_train[0]\n", "afficher(theImage)\n", "print(predir(myModel, theImage))" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Epoch 1/5\n", - " 880/2532 [=========>....................] - ETA: 1:01 - loss: 0.8081 - accuracy: 0.7104" - ] - } - ], + "outputs": [], "source": [ - "history = myModel.fit(X_train, Y_train_cat, epochs=epochs, validation_data=(X_test, Y_test_cat))\n", + "history = myModel.fit(X, Y, epochs=5, validation_rate=0.05)\n", "\n", "#Affichage de l'historique de l'apprentissage\n", "plt.plot(history.history['accuracy'], label='accuracy')\n", @@ -725,19 +276,11 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "INFO:tensorflow:Assets written to: exp901\\assets\n" - ] - } - ], + "outputs": [], "source": [ - "myModel.save('exp901')" + "myModel.save('exp904')" ] }, { diff --git a/buildEmotionModel2.ipynb b/buildEmotionModel2.ipynb index b1a19e9c22b00ef69ae0e5289d71efcc72332843..5bedc2075e5b1c89220184b0133487334f638c6b 100644 --- a/buildEmotionModel2.ipynb +++ b/buildEmotionModel2.ipynb @@ -10,7 +10,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.4-final" + "version": "3.9.4" }, "orig_nbformat": 2, "kernelspec": { @@ -77,452 +77,67 @@ "from config import *" ] }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[1, 2, 3, 4],\n", + " [1, 2, 3, 4],\n", + " [1, 2, 3, 4],\n", + " [1, 2, 3, 4]])" + ] + }, + "metadata": {}, + "execution_count": 14 + } + ], + "source": [ + "a = np.array([[1,2], [3,4]])\t \n", + "np.resize(a, (4,4))" + ] + }, { "source": [ "#CHargement des données\n", - "# Xf, Yf = loadFer2013Data()\n", - "# Xr, Yr = loadRavdessData()\n", - "# Xe, Ye = loadExpWData(90000, count=True)\n", - "# Xa, Ya = loadAffwildData()\n", + "Xf, Yf = loadFer2013Data()\n", + "Xr, Yr = loadRavdessData()\n", + "Xe, Ye = loadExpWData(90000, count=True)\n", + "Xa, Ya = loadAffwildData()\n", "\n", - "#X_train, Y_train, X_test, Y_test = mergeToDatabase([Xf, Xr, Xe, Xa], [Yf, Yr, Ye, Ya])" + "X_train, Y_train, X_test, Y_test = mergeToDatabase([Xf, Xr, Xe, Xa], [Yf, Yr, Ye, Ya])" ], "cell_type": "code", "metadata": { - "tags": [ - "outputPrepend" - ] + "tags": [] }, - "execution_count": 2, + "execution_count": 3, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "ideo 62/120\n", - "Traitement de 02-01-01-01-02-01-23.mp4, video 63/120\n", - "Traitement de 02-01-01-01-02-02-23.mp4, video 64/120\n", - "Traitement de 02-01-02-01-01-01-23.mp4, video 65/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-01-01-02-23.mp4, video 66/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-01-02-01-23.mp4, video 67/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-01-02-02-23.mp4, video 68/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-01-01-23.mp4, video 69/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-01-02-23.mp4, video 70/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-02-01-23.mp4, video 71/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-02-02-23.mp4, video 72/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-03-01-01-01-23.mp4, video 73/120\n", - "Traitement de 02-01-03-01-01-02-23.mp4, video 74/120\n", - "Traitement de 02-01-03-01-02-01-23.mp4, video 75/120\n", - "Traitement de 02-01-03-01-02-02-23.mp4, video 76/120\n", - "Traitement de 02-01-03-02-01-01-23.mp4, video 77/120\n", - "Traitement de 02-01-03-02-01-02-23.mp4, video 78/120\n", - "Traitement de 02-01-03-02-02-01-23.mp4, video 79/120\n", - "Traitement de 02-01-03-02-02-02-23.mp4, video 80/120\n", - "Traitement de 02-01-04-01-01-01-23.mp4, video 81/120\n", - "Traitement de 02-01-04-01-01-02-23.mp4, video 82/120\n", - "Traitement de 02-01-04-01-02-01-23.mp4, video 83/120\n", - "Traitement de 02-01-04-01-02-02-23.mp4, video 84/120\n", - "Traitement de 02-01-04-02-01-01-23.mp4, video 85/120\n", - "Traitement de 02-01-04-02-01-02-23.mp4, video 86/120\n", - "Traitement de 02-01-04-02-02-01-23.mp4, video 87/120\n", - "Traitement de 02-01-04-02-02-02-23.mp4, video 88/120\n", - "Erreur pour la donnée : Aucun ou plusieurs visages détectés\n", - "Traitement de 02-01-05-01-01-01-23.mp4, video 89/120\n", - "Traitement de 02-01-05-01-01-02-23.mp4, video 90/120\n", - "Traitement de 02-01-05-01-02-01-23.mp4, video 91/120\n", - "Traitement de 02-01-05-01-02-02-23.mp4, video 92/120\n", - "Traitement de 02-01-05-02-01-01-23.mp4, video 93/120\n", - "Traitement de 02-01-05-02-01-02-23.mp4, video 94/120\n", - "Traitement de 02-01-05-02-02-01-23.mp4, video 95/120\n", - "Traitement de 02-01-05-02-02-02-23.mp4, video 96/120\n", - "Traitement de 02-01-06-01-01-01-23.mp4, video 97/120\n", - "Traitement de 02-01-06-01-01-02-23.mp4, video 98/120\n", - "Traitement de 02-01-06-01-02-01-23.mp4, video 99/120\n", - "Traitement de 02-01-06-01-02-02-23.mp4, video 100/120\n", - "Traitement de 02-01-06-02-01-01-23.mp4, video 101/120\n", - "Traitement de 02-01-06-02-01-02-23.mp4, video 102/120\n", - "Traitement de 02-01-06-02-02-01-23.mp4, video 103/120\n", - "Traitement de 02-01-06-02-02-02-23.mp4, video 104/120\n", - "Traitement de 02-01-07-01-01-01-23.mp4, video 105/120\n", - "Traitement de 02-01-07-01-01-02-23.mp4, video 106/120\n", - "Traitement de 02-01-07-01-02-01-23.mp4, video 107/120\n", - "Traitement de 02-01-07-01-02-02-23.mp4, video 108/120\n", - "Traitement de 02-01-07-02-01-01-23.mp4, video 109/120\n", - "Traitement de 02-01-07-02-01-02-23.mp4, video 110/120\n", - "Traitement de 02-01-07-02-02-01-23.mp4, video 111/120\n", - "Traitement de 02-01-07-02-02-02-23.mp4, video 112/120\n", - "Traitement de 02-01-08-01-01-01-23.mp4, video 113/120\n", - "Traitement de 02-01-08-01-01-02-23.mp4, video 114/120\n", - "Traitement de 02-01-08-01-02-01-23.mp4, video 115/120\n", - "Traitement de 02-01-08-01-02-02-23.mp4, video 116/120\n", - "Traitement de 02-01-08-02-01-01-23.mp4, video 117/120\n", - "Traitement de 02-01-08-02-01-02-23.mp4, video 118/120\n", - "Traitement de 02-01-08-02-02-01-23.mp4, video 119/120\n", - "Traitement de 02-01-08-02-02-02-23.mp4, video 120/120\n", - "TRAITEMENT ACTEUR N°24\n", - "Traitement de 01-01-01-01-01-01-24.mp4, video 1/120\n", - "Traitement de 01-01-01-01-01-02-24.mp4, video 2/120\n", - "Traitement de 01-01-01-01-02-01-24.mp4, video 3/120\n", - "Traitement de 01-01-01-01-02-02-24.mp4, video 4/120\n", - "Traitement de 01-01-02-01-01-01-24.mp4, video 5/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-01-01-02-24.mp4, video 6/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-01-02-01-24.mp4, video 7/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-01-02-02-24.mp4, video 8/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-02-01-01-24.mp4, video 9/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-02-01-02-24.mp4, video 10/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-02-02-01-24.mp4, video 11/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-02-02-02-02-24.mp4, video 12/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 01-01-03-01-01-01-24.mp4, video 13/120\n", - "Traitement de 01-01-03-01-01-02-24.mp4, video 14/120\n", - "Traitement de 01-01-03-01-02-01-24.mp4, video 15/120\n", - "Traitement de 01-01-03-01-02-02-24.mp4, video 16/120\n", - "Traitement de 01-01-03-02-01-01-24.mp4, video 17/120\n", - "Traitement de 01-01-03-02-01-02-24.mp4, video 18/120\n", - "Traitement de 01-01-03-02-02-01-24.mp4, video 19/120\n", - "Traitement de 01-01-03-02-02-02-24.mp4, video 20/120\n", - "Traitement de 01-01-04-01-01-01-24.mp4, video 21/120\n", - "Traitement de 01-01-04-01-01-02-24.mp4, video 22/120\n", - "Traitement de 01-01-04-01-02-01-24.mp4, video 23/120\n", - "Traitement de 01-01-04-01-02-02-24.mp4, video 24/120\n", - "Traitement de 01-01-04-02-01-01-24.mp4, video 25/120\n", - "Traitement de 01-01-04-02-01-02-24.mp4, video 26/120\n", - "Traitement de 01-01-04-02-02-01-24.mp4, video 27/120\n", - "Traitement de 01-01-04-02-02-02-24.mp4, video 28/120\n", - "Traitement de 01-01-05-01-01-01-24.mp4, video 29/120\n", - "Traitement de 01-01-05-01-01-02-24.mp4, video 30/120\n", - "Traitement de 01-01-05-01-02-01-24.mp4, video 31/120\n", - "Traitement de 01-01-05-01-02-02-24.mp4, video 32/120\n", - "Traitement de 01-01-05-02-01-01-24.mp4, video 33/120\n", - "Traitement de 01-01-05-02-01-02-24.mp4, video 34/120\n", - "Traitement de 01-01-05-02-02-01-24.mp4, video 35/120\n", - "Traitement de 01-01-05-02-02-02-24.mp4, video 36/120\n", - "Traitement de 01-01-06-01-01-01-24.mp4, video 37/120\n", - "Traitement de 01-01-06-01-01-02-24.mp4, video 38/120\n", - "Traitement de 01-01-06-01-02-01-24.mp4, video 39/120\n", - "Traitement de 01-01-06-01-02-02-24.mp4, video 40/120\n", - "Traitement de 01-01-06-02-01-01-24.mp4, video 41/120\n", - "Traitement de 01-01-06-02-01-02-24.mp4, video 42/120\n", - "Traitement de 01-01-06-02-02-01-24.mp4, video 43/120\n", - "Traitement de 01-01-06-02-02-02-24.mp4, video 44/120\n", - "Traitement de 01-01-07-01-01-01-24.mp4, video 45/120\n", - "Traitement de 01-01-07-01-01-02-24.mp4, video 46/120\n", - "Traitement de 01-01-07-01-02-01-24.mp4, video 47/120\n", - "Traitement de 01-01-07-01-02-02-24.mp4, video 48/120\n", - "Traitement de 01-01-07-02-01-01-24.mp4, video 49/120\n", - "Traitement de 01-01-07-02-01-02-24.mp4, video 50/120\n", - "Traitement de 01-01-07-02-02-01-24.mp4, video 51/120\n", - "Traitement de 01-01-07-02-02-02-24.mp4, video 52/120\n", - "Traitement de 01-01-08-01-01-01-24.mp4, video 53/120\n", - "Traitement de 01-01-08-01-01-02-24.mp4, video 54/120\n", - "Traitement de 01-01-08-01-02-01-24.mp4, video 55/120\n", - "Traitement de 01-01-08-01-02-02-24.mp4, video 56/120\n", - "Traitement de 01-01-08-02-01-01-24.mp4, video 57/120\n", - "Traitement de 01-01-08-02-01-02-24.mp4, video 58/120\n", - "Traitement de 01-01-08-02-02-01-24.mp4, video 59/120\n", - "Traitement de 01-01-08-02-02-02-24.mp4, video 60/120\n", - "Traitement de 02-01-01-01-01-01-24.mp4, video 61/120\n", - "Traitement de 02-01-01-01-01-02-24.mp4, video 62/120\n", - "Traitement de 02-01-01-01-02-01-24.mp4, video 63/120\n", - "Traitement de 02-01-01-01-02-02-24.mp4, video 64/120\n", - "Traitement de 02-01-02-01-01-01-24.mp4, video 65/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-01-01-02-24.mp4, video 66/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-01-02-01-24.mp4, video 67/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-01-02-02-24.mp4, video 68/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-01-01-24.mp4, video 69/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-01-02-24.mp4, video 70/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-02-01-24.mp4, video 71/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-02-02-02-02-24.mp4, video 72/120\n", - "Emotion 'Calme', non prise en compte\n", - "Traitement de 02-01-03-01-01-01-24.mp4, video 73/120\n", - "Traitement de 02-01-03-01-01-02-24.mp4, video 74/120\n", - "Traitement de 02-01-03-01-02-01-24.mp4, video 75/120\n", - "Traitement de 02-01-03-01-02-02-24.mp4, video 76/120\n", - "Traitement de 02-01-03-02-01-01-24.mp4, video 77/120\n", - "Traitement de 02-01-03-02-01-02-24.mp4, video 78/120\n", - "Traitement de 02-01-03-02-02-01-24.mp4, video 79/120\n", - "Traitement de 02-01-03-02-02-02-24.mp4, video 80/120\n", - "Traitement de 02-01-04-01-01-01-24.mp4, video 81/120\n", - "Erreur pour la donnée : Aucun ou plusieurs visages détectés\n", - "Traitement de 02-01-04-01-01-02-24.mp4, video 82/120\n", - "Traitement de 02-01-04-01-02-01-24.mp4, video 83/120\n", - "Traitement de 02-01-04-01-02-02-24.mp4, video 84/120\n", - "Traitement de 02-01-04-02-01-01-24.mp4, video 85/120\n", - "Traitement de 02-01-04-02-01-02-24.mp4, video 86/120\n", - "Traitement de 02-01-04-02-02-01-24.mp4, video 87/120\n", - "Traitement de 02-01-04-02-02-02-24.mp4, video 88/120\n", - "Traitement de 02-01-05-01-01-01-24.mp4, video 89/120\n", - "Traitement de 02-01-05-01-01-02-24.mp4, video 90/120\n", - "Traitement de 02-01-05-01-02-01-24.mp4, video 91/120\n", - "Traitement de 02-01-05-01-02-02-24.mp4, video 92/120\n", - "Traitement de 02-01-05-02-01-01-24.mp4, video 93/120\n", - "Traitement de 02-01-05-02-01-02-24.mp4, video 94/120\n", - "Traitement de 02-01-05-02-02-01-24.mp4, video 95/120\n", - "Traitement de 02-01-05-02-02-02-24.mp4, video 96/120\n", - "Traitement de 02-01-06-01-01-01-24.mp4, video 97/120\n", - "Traitement de 02-01-06-01-01-02-24.mp4, video 98/120\n", - "Traitement de 02-01-06-01-02-01-24.mp4, video 99/120\n", - "Traitement de 02-01-06-01-02-02-24.mp4, video 100/120\n", - "Traitement de 02-01-06-02-01-01-24.mp4, video 101/120\n", - "Traitement de 02-01-06-02-01-02-24.mp4, video 102/120\n", - "Traitement de 02-01-06-02-02-01-24.mp4, video 103/120\n", - "Traitement de 02-01-06-02-02-02-24.mp4, video 104/120\n", - "Traitement de 02-01-07-01-01-01-24.mp4, video 105/120\n", - "Traitement de 02-01-07-01-01-02-24.mp4, video 106/120\n", - "Traitement de 02-01-07-01-02-01-24.mp4, video 107/120\n", - "Traitement de 02-01-07-01-02-02-24.mp4, video 108/120\n", - "Traitement de 02-01-07-02-01-01-24.mp4, video 109/120\n", - "Traitement de 02-01-07-02-01-02-24.mp4, video 110/120\n", - "Traitement de 02-01-07-02-02-01-24.mp4, video 111/120\n", - "Traitement de 02-01-07-02-02-02-24.mp4, video 112/120\n", - "Traitement de 02-01-08-01-01-01-24.mp4, video 113/120\n", - "Traitement de 02-01-08-01-01-02-24.mp4, video 114/120\n", - "Traitement de 02-01-08-01-02-01-24.mp4, video 115/120\n", - "Traitement de 02-01-08-01-02-02-24.mp4, video 116/120\n", - "Traitement de 02-01-08-02-01-01-24.mp4, video 117/120\n", - "Traitement de 02-01-08-02-01-02-24.mp4, video 118/120\n", - "Traitement de 02-01-08-02-02-01-24.mp4, video 119/120\n", - "Traitement de 02-01-08-02-02-02-24.mp4, video 120/120\n", - "TRAITEMENT RAVDESS: traitement des 10282 visages détectés sur les vidéos de Ravdess...\n", - "10282 données chargées depuis Ravdess.\n", "\n", - "CHARGEMENT DE 90000 DONNEES DEPUIS EXPW...\n", - "1000 données chargées depuis expW (sur 1000 données traités).\n", - "2000 données chargées depuis expW (sur 2000 données traités).\n", - "3000 données chargées depuis expW (sur 3000 données traités).\n", - "4000 données chargées depuis expW (sur 4000 données traités).\n", - "5000 données chargées depuis expW (sur 5000 données traités).\n", - "6000 données chargées depuis expW (sur 6000 données traités).\n", - "7000 données chargées depuis expW (sur 7000 données traités).\n", - "8000 données chargées depuis expW (sur 8000 données traités).\n", - "9000 données chargées depuis expW (sur 9000 données traités).\n", - "10000 données chargées depuis expW (sur 10000 données traités).\n", - "11000 données chargées depuis expW (sur 11000 données traités).\n", - "12000 données chargées depuis expW (sur 12000 données traités).\n", - "13000 données chargées depuis expW (sur 13000 données traités).\n", - "14000 données chargées depuis expW (sur 14000 données traités).\n", - "15000 données chargées depuis expW (sur 15000 données traités).\n", - "16000 données chargées depuis expW (sur 16000 données traités).\n", - "17000 données chargées depuis expW (sur 17000 données traités).\n", - "18000 données chargées depuis expW (sur 18000 données traités).\n", - "19000 données chargées depuis expW (sur 19000 données traités).\n", - "20000 données chargées depuis expW (sur 20000 données traités).\n", - "21000 données chargées depuis expW (sur 21000 données traités).\n", - "22000 données chargées depuis expW (sur 22000 données traités).\n", - "23000 données chargées depuis expW (sur 23000 données traités).\n", - "24000 données chargées depuis expW (sur 24000 données traités).\n", - "25000 données chargées depuis expW (sur 25000 données traités).\n", - "26000 données chargées depuis expW (sur 26000 données traités).\n", - "27000 données chargées depuis expW (sur 27000 données traités).\n", - "28000 données chargées depuis expW (sur 28000 données traités).\n", - "29000 données chargées depuis expW (sur 29000 données traités).\n", - "30000 données chargées depuis expW (sur 30000 données traités).\n", - "31000 données chargées depuis expW (sur 31000 données traités).\n", - "32000 données chargées depuis expW (sur 32000 données traités).\n", - "33000 données chargées depuis expW (sur 33000 données traités).\n", - "34000 données chargées depuis expW (sur 34000 données traités).\n", - "35000 données chargées depuis expW (sur 35000 données traités).\n", - "36000 données chargées depuis expW (sur 36000 données traités).\n", - "37000 données chargées depuis expW (sur 37000 données traités).\n", - "38000 données chargées depuis expW (sur 38000 données traités).\n", - "39000 données chargées depuis expW (sur 39000 données traités).\n", - "40000 données chargées depuis expW (sur 40000 données traités).\n", - "41000 données chargées depuis expW (sur 41000 données traités).\n", - "42000 données chargées depuis expW (sur 42000 données traités).\n", - "43000 données chargées depuis expW (sur 43000 données traités).\n", - "44000 données chargées depuis expW (sur 44000 données traités).\n", - "45000 données chargées depuis expW (sur 45000 données traités).\n", - "46000 données chargées depuis expW (sur 46000 données traités).\n", - "47000 données chargées depuis expW (sur 47000 données traités).\n", - "48000 données chargées depuis expW (sur 48000 données traités).\n", - "49000 données chargées depuis expW (sur 49000 données traités).\n", - "50000 données chargées depuis expW (sur 50000 données traités).\n", - "51000 données chargées depuis expW (sur 51000 données traités).\n", - "52000 données chargées depuis expW (sur 52000 données traités).\n", - "53000 données chargées depuis expW (sur 53000 données traités).\n", - "54000 données chargées depuis expW (sur 54000 données traités).\n", - "55000 données chargées depuis expW (sur 55000 données traités).\n", - "56000 données chargées depuis expW (sur 56000 données traités).\n", - "57000 données chargées depuis expW (sur 57000 données traités).\n", - "58000 données chargées depuis expW (sur 58000 données traités).\n", - "59000 données chargées depuis expW (sur 59000 données traités).\n", - "60000 données chargées depuis expW (sur 60000 données traités).\n", - "61000 données chargées depuis expW (sur 61000 données traités).\n", - "62000 données chargées depuis expW (sur 62000 données traités).\n", - "63000 données chargées depuis expW (sur 63000 données traités).\n", - "64000 données chargées depuis expW (sur 64000 données traités).\n", - "65000 données chargées depuis expW (sur 65000 données traités).\n", - "66000 données chargées depuis expW (sur 66000 données traités).\n", - "67000 données chargées depuis expW (sur 67000 données traités).\n", - "68000 données chargées depuis expW (sur 68000 données traités).\n", - "69000 données chargées depuis expW (sur 69000 données traités).\n", - "70000 données chargées depuis expW (sur 70000 données traités).\n", - "71000 données chargées depuis expW (sur 71000 données traités).\n", - "72000 données chargées depuis expW (sur 72000 données traités).\n", - "73000 données chargées depuis expW (sur 73000 données traités).\n", - "74000 données chargées depuis expW (sur 74000 données traités).\n", - "75000 données chargées depuis expW (sur 75000 données traités).\n", - "76000 données chargées depuis expW (sur 76000 données traités).\n", - "77000 données chargées depuis expW (sur 77000 données traités).\n", - "78000 données chargées depuis expW (sur 78000 données traités).\n", - "79000 données chargées depuis expW (sur 79000 données traités).\n", - "80000 données chargées depuis expW (sur 80000 données traités).\n", - "81000 données chargées depuis expW (sur 81000 données traités).\n", - "82000 données chargées depuis expW (sur 82000 données traités).\n", - "83000 données chargées depuis expW (sur 83000 données traités).\n", - "84000 données chargées depuis expW (sur 84000 données traités).\n", - "85000 données chargées depuis expW (sur 85000 données traités).\n", - "86000 données chargées depuis expW (sur 86000 données traités).\n", - "87000 données chargées depuis expW (sur 87000 données traités).\n", - "88000 données chargées depuis expW (sur 88000 données traités).\n", - "89000 données chargées depuis expW (sur 89000 données traités).\n", - "90000 données chargées depuis expW (sur 90000 données traités).\n", - "\n", - "\n", - "\n", - "CHARGEMENT DE 10000000000 DONNEES DEPUIS AFFWILD...\n", - "Traitement de 1-30-1280x720.mp4, video 1/79\n", - "Traitement de 108-15-640x480.mp4, video 2/79\n", - "Traitement de 111-25-1920x1080.mp4, video 3/79\n", - "Traitement de 117-25-1920x1080.mp4, video 4/79\n", - "Traitement de 118-30-640x480.mp4, video 5/79\n", - "Traitement de 121-24-1920x1080.mp4, video 6/79\n", - "Traitement de 122-60-1920x1080-5.mp4, video 7/79\n", - "Traitement de 126-30-1080x1920.mp4, video 8/79\n", - "Traitement de 13-30-1920x1080.mp4, video 9/79\n", - "Traitement de 130-25-1280x720.mp4, video 10/79\n", - "Traitement de 132-30-426x240.mp4, video 11/79\n", - "Traitement de 133-30-1280x720.mp4, video 12/79\n", - "Traitement de 134-30-1280x720.mp4, video 13/79\n", - "Traitement de 135-24-1920x1080.mp4, video 14/79\n", - "Traitement de 136-30-1920x1080.mp4, video 15/79\n", - "Traitement de 138-30-1280x720.mp4, video 16/79\n", - "Traitement de 139-14-720x480.mp4, video 17/79\n", - "Traitement de 14-30-1920x1080.mp4, video 18/79\n", - "Traitement de 16-30-1920x1080.mp4, video 19/79\n", - "Traitement de 18-24-1920x1080.mp4, video 20/79\n", - "Traitement de 198.avi, video 21/79\n", - "Traitement de 20-24-1920x1080.mp4, video 22/79\n", - "Traitement de 207.mp4, video 23/79\n", - "Traitement de 21-24-1920x1080.mp4, video 24/79\n", - "Traitement de 212.mp4, video 25/79\n", - "Traitement de 221.mp4, video 26/79\n", - "Traitement de 225.mp4, video 27/79\n", - "Traitement de 24-30-1920x1080-2.mp4, video 28/79\n", - "Traitement de 28-30-1280x720-1.mp4, video 29/79\n", - "Traitement de 28-30-1280x720-2.mp4, video 30/79\n", - "Traitement de 28-30-1280x720-3.mp4, video 31/79\n", - "Traitement de 28-30-1280x720-4.mp4, video 32/79\n", - "Traitement de 282.mp4, video 33/79\n", - "Traitement de 38-30-1920x1080.mp4, video 34/79\n", - "Traitement de 40-30-1280x720.mp4, video 35/79\n", - "Traitement de 43-30-406x720.mp4, video 36/79\n", - "Traitement de 44-25-426x240.mp4, video 37/79\n", - "Traitement de 45-24-1280x720.mp4, video 38/79\n", - "Traitement de 46-30-484x360.mp4, video 39/79\n", - "Traitement de 58-30-640x480.mp4, video 40/79\n", - "Traitement de 6-30-1920x1080.mp4, video 41/79\n", - "Traitement de 7-60-1920x1080.mp4, video 42/79\n", - "Traitement de 79-30-960x720.mp4, video 43/79\n", - "Traitement de 8-30-1280x720.mp4, video 44/79\n", - "Traitement de 82-25-854x480.mp4, video 45/79\n", - "Traitement de 85-24-1280x720.mp4, video 46/79\n", - "Traitement de 87-25-1920x1080.mp4, video 47/79\n", - "Traitement de 9-15-1920x1080.mp4, video 48/79\n", - "Traitement de 92-24-1920x1080.mp4, video 49/79\n", - "Traitement de 99-30-720x720.mp4, video 50/79\n", - "Traitement de video24.mp4, video 51/79\n", - "Traitement de video34.mp4, video 52/79\n", - "Traitement de video4.mp4, video 53/79\n", - "Traitement de video40.mp4, video 54/79\n", - "Traitement de video45_1.mp4, video 55/79\n", - "Traitement de video45_2.mp4, video 56/79\n", - "Traitement de video45_3.mp4, video 57/79\n", - "Traitement de video45_4.mp4, video 58/79\n", - "Traitement de video45_5.mp4, video 59/79\n", - "Traitement de video45_6.mp4, video 60/79\n", - "Traitement de video45_7.mp4, video 61/79\n", - "Traitement de video47.mp4, video 62/79\n", - "Traitement de video48.mp4, video 63/79\n", - "Traitement de video49.mp4, video 64/79\n", - "Traitement de video56.mp4, video 65/79\n", - "Traitement de video58.mp4, video 66/79\n", - "Traitement de video6.mp4, video 67/79\n", - "Traitement de video61.mp4, video 68/79\n", - "Traitement de video63.mp4, video 69/79\n", - "Traitement de video65.mp4, video 70/79\n", - "Traitement de video66.mp4, video 71/79\n", - "Traitement de video67.mp4, video 72/79\n", - "Traitement de video72.mp4, video 73/79\n", - "Traitement de video73.mp4, video 74/79\n", - "Traitement de video79.mp4, video 75/79\n", - "Traitement de video87.mp4, video 76/79\n", - "Traitement de video93.mp4, video 77/79\n", - "Traitement de video94.mp4, video 78/79\n", - "Traitement de video95.mp4, video 79/79\n", - "TRAITEMENT AFFWILD: traitement des 6495 visages détectés sur les vidéos de AffWild...\n", - "6495 données chargées depuis AffWild.\n" + "CHARGEMENT DE 35887 DONNEES DEPUIS FER2013 ...\n" ] }, { "output_type": "error", - "ename": "MemoryError", - "evalue": "", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mMemoryError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m<ipython-input-2-3417f05429fb>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mXa\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYa\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mloadAffwildData\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 7\u001b[1;33m \u001b[0mX_train\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mY_train\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mX_test\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mY_test\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmergeToDatabase\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mXf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXe\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXa\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mYf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYe\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYa\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;32mc:\\Users\\timot\\facial-expression-detection\\utils.py\u001b[0m in \u001b[0;36mmergeToDatabase\u001b[1;34m(listOfX, listOfY, validation_repart)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[0mlistOfY_test\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mY_test\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 70\u001b[0m \u001b[1;31m# Merge\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 71\u001b[1;33m \u001b[0mBigX_train\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstackImages\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlistOfX_train\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 72\u001b[0m \u001b[0mBigY_train\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstackImages\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlistOfY_train\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 73\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mc:\\Users\\timot\\facial-expression-detection\\utils.py\u001b[0m in \u001b[0;36mstackImages\u001b[1;34m(listOfArrayImage)\u001b[0m\n\u001b[0;32m 46\u001b[0m \u001b[0mliste\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 47\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mX\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mlistOfArrayImage\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 48\u001b[1;33m \u001b[0mliste\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtolist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 49\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mliste\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 50\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mMemoryError\u001b[0m: " - ] - } - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "output_type": "error", - "ename": "MemoryError", + "ename": "KeyboardInterrupt", "evalue": "", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mMemoryError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m<ipython-input-12-1df8f39f5f0e>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mX_train\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstackImages\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mXa\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXe\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;36m5000\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;36m5000\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mX_test\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstackImages\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mXe\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m25000\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mXf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m35000\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mc:\\Users\\timot\\facial-expression-detection\\utils.py\u001b[0m in \u001b[0;36mstackImages\u001b[1;34m(listOfArrayImage)\u001b[0m\n\u001b[0;32m 46\u001b[0m \u001b[0mliste\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 47\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mX\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mlistOfArrayImage\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 48\u001b[1;33m \u001b[0mliste\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtolist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 49\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mliste\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 50\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mMemoryError\u001b[0m: " + "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m<ipython-input-3-3417f05429fb>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m#CHargement des données\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mXf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mloadFer2013Data\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mXr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mloadRavdessData\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mXe\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYe\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mloadExpWData\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m90000\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcount\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mXa\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYa\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mloadAffwildData\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\Users\\timot\\facial-expression-detection\\loadFer2013DS.py\u001b[0m in \u001b[0;36mloadFer2013Data\u001b[1;34m(maxNbrImages)\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[0memotionNbr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstringImage\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtypeImage\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mrow\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 58\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 59\u001b[1;33m \u001b[0mX\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnormAndResize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstrToArray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstringImage\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minput_shape\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 60\u001b[0m \u001b[0mY\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0memotionNbr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 61\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\Users\\timot\\facial-expression-detection\\utils.py\u001b[0m in \u001b[0;36mnormAndResize\u001b[1;34m(image, input_shape)\u001b[0m\n\u001b[0;32m 28\u001b[0m \u001b[1;31m# resize for h and l\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 29\u001b[0m \u001b[1;31m# print(image.shape) #\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 30\u001b[1;33m \u001b[0mimage\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcv2\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mresize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdsize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mh\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0ml\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minterpolation\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mcv2\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mINTER_CUBIC\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 31\u001b[0m \u001b[1;31m# if we want (h,l,3) -> (h,l,1) , we first transform it in to (h,l) (grey the image)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 32\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m3\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mp\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mKeyboardInterrupt\u001b[0m: " ] } - ], - "source": [ - "\n", - "X_train = stackImages([Xa, Xr])\n", - "X_test = stackImages([Xe[25000:], Xf[35000:]])" ] }, { diff --git a/config.py b/config.py index 39a9b19015377b70329585670715abf52a932d7a..450da6036807e8f5d92361c5d5c7e0eb4a93441b 100644 --- a/config.py +++ b/config.py @@ -1,8 +1,8 @@ # Name of model used -modelName = 'firstModel' +modelName = 'exp903' # Emotions provided by the dataset -emotions = ["Angry", "Disgust", "Fear", "Happy", "Sad", "Suprise", "Neutral"] +emotions = ["Angry", "Disgust", "Fear", "Happy", "Sad", "Surprise", "Neutral"] # Shape of input of the model input_shape = (48, 48, 1) diff --git a/game.py b/game.py new file mode 100644 index 0000000000000000000000000000000000000000..c5482446f4b3a17589e8d55329ea01d7cd72d2f6 --- /dev/null +++ b/game.py @@ -0,0 +1,49 @@ +#Use your camera for processing the video. Stop by pressing Q +import cv2 +import imageProcess as ip +import faceAnalysis as fa +import random +from config import emotions + +cap = cv2.VideoCapture(0) #0 means we capture the first camera, your webcam probably +score = 0 +t = 0 +N = 15 + +def smileyRandom(emotionToDodge): + emotionNbr = random.randrange(0,6) + emotion = emotions[emotionNbr] + if emotion == emotionToDodge: return smileyRandom(emotion) + smileyImagePath = "data/smileys/"+emotion+".png" + smiley = cv2.imread(smileyImagePath) + return smiley, emotion + +smiley, emotion = smileyRandom("") + +while cap.isOpened(): #or while 1. cap.isOpened() is false if there is a problem + ret, frame = cap.read() #Read next video frame, stop if frame not well read + if not ret: break + + emotionsList = ip.imageProcess(frame, returnEmotion=True) + if len(emotionsList)==1: + if emotionsList[0] == emotion: #If emotion recognized, increase score, reset smiley to mimick and write "GG!" + score += 1 + cv2.putText(smiley, "Emotion reconnue !", (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2) + cv2.imshow("Smiley", smiley) + smiley, emotion = smileyRandom(emotion) + + + cv2.imshow("Caméra", frame) #Show you making emotional faces + cv2.putText(smiley, "Score: "+str(score), (0,0), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2) + cv2.imshow("Smiley", smiley) #Show the smiley to mimic + + if cv2.waitKey(1) & 0xFF == ord('q'): #If you press Q, stop the while and so the capture + break + + if cv2.waitKey(1) & 0xFF == ord('q'): #If you press P, pass the smiley but lower your score + score -= 1 + smiley, emotion = smileyRandom(emotion) + + +cap.release() +cv2.destroyAllWindows() \ No newline at end of file diff --git a/imageProcess.py b/imageProcess.py index ef4f769b095f7bc01d9f680673e108ab7ac7cdf2..0234f78b612312258d355ad927cb34ef68f293b3 100644 --- a/imageProcess.py +++ b/imageProcess.py @@ -4,10 +4,11 @@ import numpy as np import faceAnalysis as fa import timeit as ti -def imageProcess(image, writeEmotion=True, writeRectangle=True): +def imageProcess(image, writeEmotion=True, writeRectangle=True, returnEmotion=False): #Objectives : detect faces, identify emotion associated on it, modify the image by framing faces and writing their emotions associated facesList = [] + emotionsList = [] #Import faces and eyes detectors from cv2 face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml') @@ -34,7 +35,9 @@ def imageProcess(image, writeEmotion=True, writeRectangle=True): if writeEmotion: emotion = fa.detectEmotion(face_color) cv2.putText(image, emotion, (x,y), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,0,0), 2) + emotionsList.append(emotion) + if returnEmotion: return emotionsList return facesList def selectFace(image): diff --git a/loadExpWDS.py b/loadExpWDS.py index 1e530fd57b494d59c56ae420df11743cc3852733..415f2ede36f4ba873674022b69dfa20867d00e15 100644 --- a/loadExpWDS.py +++ b/loadExpWDS.py @@ -32,28 +32,27 @@ def loadExpWData(nbrMaxImages=float('inf'), onlyDetected=False, detectedFace=Fal break #Add extracted data to our dataset - if len(facesDetected) == 1 or not onlyDetected: #Otherwise no face were detected or a no-face was detected as face - - #Select detected face (if there is 1) or face according to the dataset - if detectedFace: - facesDetected = ip.imageProcess(faceAccordingToDS, writeEmotion=False, writeRectangle=False) - if len(facesDetected) ==1: - face = facesDetected[0] - else: - face = faceAccordingToDS + + #Select detected face (if there is 1) or face according to the dataset + if detectedFace: + facesDetected = ip.imageProcess(faceAccordingToDS, writeEmotion=False, writeRectangle=False) + if len(facesDetected) ==1: + face = facesDetected[0] else: face = faceAccordingToDS + else: + face = faceAccordingToDS - #Colored N*M*3 face to gray 48*48*1 image. - gray = normAndResize(face, input_shape) + #Colored N*M*3 face to gray 48*48*1 image. + gray = normAndResize(face, input_shape) - X.append(gray) - Y.append(label) #Emotion order is the same as fer2013. - - nbrImages += 1 + X.append(gray) + Y.append(label) #Emotion order is the same as fer2013. + + nbrImages += 1 - #Print number of datas loaded every 1000 datas - if count and nbrImages%1000==0: print(f"{nbrImages} données chargées depuis expW (sur {k} données traités).") + #Print number of datas loaded every 1000 datas + if count and nbrImages%1000==0: print(f"{nbrImages} données chargées depuis expW (sur {k} données traités).") X = np.array(X) Y = np.array(Y) diff --git a/models/firstModel/exp901/keras_metadata.pb b/models/exp901/keras_metadata.pb similarity index 100% rename from models/firstModel/exp901/keras_metadata.pb rename to models/exp901/keras_metadata.pb diff --git a/models/firstModel/exp901/saved_model.pb b/models/exp901/saved_model.pb similarity index 100% rename from models/firstModel/exp901/saved_model.pb rename to models/exp901/saved_model.pb diff --git a/models/firstModel/exp901/variables/variables.data-00000-of-00001 b/models/exp901/variables/variables.data-00000-of-00001 similarity index 100% rename from models/firstModel/exp901/variables/variables.data-00000-of-00001 rename to models/exp901/variables/variables.data-00000-of-00001 diff --git a/models/firstModel/exp901/variables/variables.index b/models/exp901/variables/variables.index similarity index 100% rename from models/firstModel/exp901/variables/variables.index rename to models/exp901/variables/variables.index diff --git a/exp902/keras_metadata.pb b/models/exp902/keras_metadata.pb similarity index 100% rename from exp902/keras_metadata.pb rename to models/exp902/keras_metadata.pb diff --git a/exp902/saved_model.pb b/models/exp902/saved_model.pb similarity index 100% rename from exp902/saved_model.pb rename to models/exp902/saved_model.pb diff --git a/exp902/variables/variables.data-00000-of-00001 b/models/exp902/variables/variables.data-00000-of-00001 similarity index 100% rename from exp902/variables/variables.data-00000-of-00001 rename to models/exp902/variables/variables.data-00000-of-00001 diff --git a/exp902/variables/variables.index b/models/exp902/variables/variables.index similarity index 100% rename from exp902/variables/variables.index rename to models/exp902/variables/variables.index diff --git a/models/exp903/keras_metadata.pb b/models/exp903/keras_metadata.pb new file mode 100644 index 0000000000000000000000000000000000000000..88836e51ceac0420b5ce339c2d93ea266fc403a8 --- /dev/null +++ b/models/exp903/keras_metadata.pb @@ -0,0 +1,22 @@ + +��root"_tf_keras_sequential*݄{"name": "my_model_2", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "MyModel", "config": {"name": "my_model_2", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 48, 48, 1]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "conv2d_6_input"}}, {"class_name": "Conv2D", "config": {"name": "conv2d_6", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 48, 48, 1]}, "dtype": "float32", "filters": 32, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_6", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}}, {"class_name": "BatchNormalization", "config": {"name": "batch_normalization_8", "trainable": true, "dtype": "float32", "axis": [3], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}}, {"class_name": "Conv2D", "config": {"name": "conv2d_7", "trainable": true, "dtype": "float32", "filters": 64, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_7", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}}, {"class_name": "BatchNormalization", "config": {"name": "batch_normalization_9", "trainable": true, "dtype": "float32", "axis": [3], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}}, {"class_name": "Conv2D", "config": {"name": "conv2d_8", "trainable": true, "dtype": "float32", "filters": 128, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_8", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}}, {"class_name": "BatchNormalization", "config": {"name": "batch_normalization_10", "trainable": true, "dtype": "float32", "axis": [3], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}}, {"class_name": "Conv2D", "config": {"name": "conv2d_9", "trainable": true, "dtype": "float32", "filters": 256, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_9", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}}, {"class_name": "BatchNormalization", "config": {"name": "batch_normalization_11", "trainable": true, "dtype": "float32", "axis": [3], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}}, {"class_name": "Flatten", "config": {"name": "flatten_2", "trainable": true, "dtype": "float32", "data_format": "channels_last"}}, {"class_name": "Dense", "config": {"name": "dense_4", "trainable": true, "dtype": "float32", "units": 64, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_5", "trainable": true, "dtype": "float32", "units": 7, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 44, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 1}}, "shared_object_id": 45}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 48, 48, 1]}, "is_graph_network": true, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 48, 48, 1]}, "float32", "conv2d_6_input"]}, "keras_version": "2.5.0", "backend": "tensorflow", "model_config": {"class_name": "MyModel", "config": {"name": "my_model_2", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 48, 48, 1]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "conv2d_6_input"}, "shared_object_id": 0}, {"class_name": "Conv2D", "config": {"name": "conv2d_6", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 48, 48, 1]}, "dtype": "float32", "filters": 32, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_6", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 4}, {"class_name": "BatchNormalization", "config": {"name": "batch_normalization_8", "trainable": true, "dtype": "float32", "axis": [3], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "gamma_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 6}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 7}, "moving_variance_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 8}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "shared_object_id": 9}, {"class_name": "Conv2D", "config": {"name": "conv2d_7", "trainable": true, "dtype": "float32", "filters": 64, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 10}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 11}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 12}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_7", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 13}, {"class_name": "BatchNormalization", "config": {"name": "batch_normalization_9", "trainable": true, "dtype": "float32", "axis": [3], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 14}, "gamma_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 15}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 16}, "moving_variance_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 17}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "shared_object_id": 18}, {"class_name": "Conv2D", "config": {"name": "conv2d_8", "trainable": true, "dtype": "float32", "filters": 128, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 19}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 20}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 21}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_8", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 22}, {"class_name": "BatchNormalization", "config": {"name": "batch_normalization_10", "trainable": true, "dtype": "float32", "axis": [3], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 23}, "gamma_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 24}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 25}, "moving_variance_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 26}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "shared_object_id": 27}, {"class_name": "Conv2D", "config": {"name": "conv2d_9", "trainable": true, "dtype": "float32", "filters": 256, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 28}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 29}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 30}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_9", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 31}, {"class_name": "BatchNormalization", "config": {"name": "batch_normalization_11", "trainable": true, "dtype": "float32", "axis": [3], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 32}, "gamma_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 33}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 34}, "moving_variance_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 35}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "shared_object_id": 36}, {"class_name": "Flatten", "config": {"name": "flatten_2", "trainable": true, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 37}, {"class_name": "Dense", "config": {"name": "dense_4", "trainable": true, "dtype": "float32", "units": 64, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 38}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 39}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 40}, {"class_name": "Dense", "config": {"name": "dense_5", "trainable": true, "dtype": "float32", "units": 7, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 41}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 42}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 43}]}}, "training_config": {"loss": "categorical_crossentropy", "metrics": [[{"class_name": "MeanMetricWrapper", "config": {"name": "accuracy", "dtype": "float32", "fn": "categorical_accuracy"}, "shared_object_id": 46}]], "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "Adam", "config": {"name": "Adam", "learning_rate": 0.0010000000474974513, "decay": 0.0, "beta_1": 0.8999999761581421, "beta_2": 0.9990000128746033, "epsilon": 1e-07, "amsgrad": false}}}}2 +� +root.layer_with_weights-0"_tf_keras_layer*� +{"name": "conv2d_6", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 48, 48, 1]}, "stateful": false, "must_restore_from_config": false, "class_name": "Conv2D", "config": {"name": "conv2d_6", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 48, 48, 1]}, "dtype": "float32", "filters": 32, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 1}}, "shared_object_id": 45}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 48, 48, 1]}}2 +�root.layer-1"_tf_keras_layer*�{"name": "max_pooling2d_6", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_6", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 4, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {}}, "shared_object_id": 47}}2 +� root.layer_with_weights-1"_tf_keras_layer*�{"name": "batch_normalization_8", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "BatchNormalization", "config": {"name": "batch_normalization_8", "trainable": true, "dtype": "float32", "axis": [3], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "gamma_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 6}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 7}, "moving_variance_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 8}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "shared_object_id": 9, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {"3": 32}}, "shared_object_id": 48}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 23, 23, 32]}}2 +� root.layer_with_weights-2"_tf_keras_layer*� {"name": "conv2d_7", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Conv2D", "config": {"name": "conv2d_7", "trainable": true, "dtype": "float32", "filters": 64, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 10}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 11}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 12, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 32}}, "shared_object_id": 49}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 23, 23, 32]}}2 +�root.layer-4"_tf_keras_layer*�{"name": "max_pooling2d_7", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_7", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 13, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {}}, "shared_object_id": 50}}2 +� root.layer_with_weights-3"_tf_keras_layer*�{"name": "batch_normalization_9", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "BatchNormalization", "config": {"name": "batch_normalization_9", "trainable": true, "dtype": "float32", "axis": [3], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 14}, "gamma_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 15}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 16}, "moving_variance_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 17}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "shared_object_id": 18, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {"3": 64}}, "shared_object_id": 51}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 10, 10, 64]}}2 +� root.layer_with_weights-4"_tf_keras_layer*� {"name": "conv2d_8", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Conv2D", "config": {"name": "conv2d_8", "trainable": true, "dtype": "float32", "filters": 128, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 19}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 20}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 21, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 64}}, "shared_object_id": 52}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 10, 10, 64]}}2 +�root.layer-7"_tf_keras_layer*�{"name": "max_pooling2d_8", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_8", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 22, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {}}, "shared_object_id": 53}}2 +� root.layer_with_weights-5"_tf_keras_layer*�{"name": "batch_normalization_10", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "BatchNormalization", "config": {"name": "batch_normalization_10", "trainable": true, "dtype": "float32", "axis": [3], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 23}, "gamma_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 24}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 25}, "moving_variance_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 26}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "shared_object_id": 27, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {"3": 128}}, "shared_object_id": 54}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 4, 4, 128]}}2 +� +root.layer_with_weights-6"_tf_keras_layer*� {"name": "conv2d_9", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Conv2D", "config": {"name": "conv2d_9", "trainable": true, "dtype": "float32", "filters": 256, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 28}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 29}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 30, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 128}}, "shared_object_id": 55}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 4, 4, 128]}}2 +� root.layer-10"_tf_keras_layer*�{"name": "max_pooling2d_9", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_9", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 31, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {}}, "shared_object_id": 56}}2 +� root.layer_with_weights-7"_tf_keras_layer*�{"name": "batch_normalization_11", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "BatchNormalization", "config": {"name": "batch_normalization_11", "trainable": true, "dtype": "float32", "axis": [3], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 32}, "gamma_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 33}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 34}, "moving_variance_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 35}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "shared_object_id": 36, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {"3": 256}}, "shared_object_id": 57}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1, 1, 256]}}2 +� root.layer-12"_tf_keras_layer*�{"name": "flatten_2", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Flatten", "config": {"name": "flatten_2", "trainable": true, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 37, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 1, "axes": {}}, "shared_object_id": 58}}2 +�root.layer_with_weights-8"_tf_keras_layer*�{"name": "dense_4", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_4", "trainable": true, "dtype": "float32", "units": 64, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 38}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 39}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 40, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 256}}, "shared_object_id": 59}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 256]}}2 +�root.layer_with_weights-9"_tf_keras_layer*�{"name": "dense_5", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_5", "trainable": true, "dtype": "float32", "units": 7, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 41}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 42}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 43, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 64}}, "shared_object_id": 60}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 64]}}2 +��root.keras_api.metrics.0"_tf_keras_metric*�{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 61}2 +��root.keras_api.metrics.1"_tf_keras_metric*�{"class_name": "MeanMetricWrapper", "name": "accuracy", "dtype": "float32", "config": {"name": "accuracy", "dtype": "float32", "fn": "categorical_accuracy"}, "shared_object_id": 46}2 \ No newline at end of file diff --git a/models/exp903/saved_model.pb b/models/exp903/saved_model.pb new file mode 100644 index 0000000000000000000000000000000000000000..d941f16d60cd47380246aae7ee9a32f8fb7e88cc Binary files /dev/null and b/models/exp903/saved_model.pb differ diff --git a/models/exp903/variables/variables.data-00000-of-00001 b/models/exp903/variables/variables.data-00000-of-00001 new file mode 100644 index 0000000000000000000000000000000000000000..756291077a7efd17d9c8f19a55659193642f5af5 Binary files /dev/null and b/models/exp903/variables/variables.data-00000-of-00001 differ diff --git a/models/exp903/variables/variables.index b/models/exp903/variables/variables.index new file mode 100644 index 0000000000000000000000000000000000000000..8750d64a0950fa9576bb62e464aa323fd2282d0e Binary files /dev/null and b/models/exp903/variables/variables.index differ