diff --git a/benchmarks/Evaluate-Results.ipynb b/benchmarks/Evaluate-Results.ipynb new file mode 100644 index 0000000..28086ba --- /dev/null +++ b/benchmarks/Evaluate-Results.ipynb @@ -0,0 +1,1687 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "59b076ef", + "metadata": {}, + "source": [ + "# Evaluate DeepFace's Results In The Big Picture" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "79200f8c", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from IPython.display import display, HTML\n", + "from sklearn import metrics\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "bbc11592", + "metadata": {}, + "outputs": [], + "source": [ + "alignment = [False, True]\n", + "models = [\"Facenet512\", \"Facenet\", \"Dlib\", \"VGG-Face\", \"ArcFace\", \"GhostFaceNet\", \"SFace\", \"OpenFace\", \"DeepFace\", \"DeepID\"]\n", + "detectors = [\"retinaface\", \"mtcnn\", \"dlib\", \"yunet\", \"yolov8\", \"mediapipe\", \"ssd\", \"opencv\", \"skip\"]\n", + "distance_metrics = [\"euclidean\", \"euclidean_l2\", \"cosine\"]" + ] + }, + { + "cell_type": "markdown", + "id": "e0dabf1b", + "metadata": {}, + "source": [ + "# Main results" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "03b09fa3", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "euclidean for alignment False\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FacenetFacenet512VGG-FaceArcFaceDlibGhostFaceNetSFaceOpenFaceDeepFaceDeepID
detector
retinaface92.896.195.784.188.383.278.670.867.464.3
mtcnn92.595.995.581.889.383.276.370.965.963.2
dlib89.096.094.182.696.365.673.175.961.861.9
yolov890.894.895.283.288.477.671.668.968.266.3
yunet96.597.996.384.191.482.778.271.765.565.2
mediapipe87.194.993.171.191.961.973.277.661.762.4
ssd94.997.296.783.988.684.982.069.966.764.0
opencv90.294.195.889.891.291.086.971.168.461.1
skip64.192.090.656.669.075.181.457.460.860.7
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "euclidean_l2 for alignment False\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FacenetFacenet512VGG-FaceArcFaceDlibGhostFaceNetSFaceOpenFaceDeepFaceDeepID
detector
retinaface95.998.095.795.788.489.590.670.867.764.6
mtcnn96.297.895.595.989.288.091.170.967.064.0
dlib89.996.594.193.895.663.075.075.962.661.8
yolov895.897.795.295.088.188.789.868.968.965.3
yunet96.898.396.396.191.788.090.571.767.663.2
mediapipe90.096.393.189.391.865.674.677.664.961.6
ssd97.097.996.796.689.491.593.069.968.764.9
opencv92.996.295.893.291.593.391.771.168.361.6
skip67.691.490.657.269.378.483.457.462.661.6
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cosine for alignment False\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FacenetFacenet512VGG-FaceArcFaceDlibGhostFaceNetSFaceOpenFaceDeepFaceDeepID
detector
retinaface95.998.095.795.788.489.590.670.867.763.7
mtcnn96.297.895.595.989.288.091.170.967.064.0
dlib89.996.594.193.895.663.075.075.962.661.7
yolov895.897.795.295.088.188.789.868.968.965.3
yunet96.898.396.396.191.788.090.571.767.663.2
mediapipe90.096.393.189.391.864.874.677.664.961.6
ssd97.097.996.796.689.491.593.069.968.763.8
opencv92.996.295.893.291.593.391.771.168.161.1
skip67.691.490.654.869.378.483.457.462.661.1
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "euclidean for alignment True\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FacenetFacenet512VGG-FaceArcFaceDlibGhostFaceNetSFaceOpenFaceDeepFaceDeepID
detector
retinaface93.595.995.885.288.985.980.269.467.065.6
mtcnn93.895.295.983.789.483.077.470.266.563.3
dlib90.896.094.588.696.865.766.375.863.460.4
yolov891.994.495.084.189.277.673.468.769.066.5
yunet96.197.396.084.992.284.079.470.965.865.2
mediapipe88.695.192.973.293.163.272.578.761.862.2
ssd85.688.987.075.883.179.176.966.863.462.5
opencv84.288.287.373.084.483.881.166.465.559.6
skip64.192.090.656.669.075.181.457.460.860.7
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "euclidean_l2 for alignment True\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FacenetFacenet512VGG-FaceArcFaceDlibGhostFaceNetSFaceOpenFaceDeepFaceDeepID
detector
retinaface96.498.495.896.689.190.592.469.467.764.4
mtcnn96.897.695.996.090.089.890.570.266.464.0
dlib92.697.094.595.196.463.369.875.866.559.5
yolov895.797.395.095.588.888.991.968.767.566.0
yunet97.497.996.096.791.689.191.070.966.563.6
mediapipe90.696.192.990.392.664.475.478.764.763.0
ssd87.588.787.086.283.382.284.666.864.162.6
opencv84.887.687.384.684.085.083.666.463.860.9
skip67.691.490.657.269.378.483.457.462.661.6
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cosine for alignment True\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FacenetFacenet512VGG-FaceArcFaceDlibGhostFaceNetSFaceOpenFaceDeepFaceDeepID
detector
retinaface96.498.495.896.689.190.592.469.467.764.4
mtcnn96.897.695.996.090.089.890.570.266.363.0
dlib92.697.094.595.196.463.369.875.866.558.7
yolov895.797.395.095.588.888.991.968.767.565.9
yunet97.497.996.096.791.689.191.070.966.563.5
mediapipe90.696.192.990.392.664.375.478.764.863.0
ssd87.588.787.086.283.382.284.566.863.862.6
opencv84.987.687.284.684.085.083.666.263.760.1
skip67.691.490.654.869.378.483.457.462.661.1
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for align in alignment:\n", + " for metric in distance_metrics:\n", + " df = pd.read_csv(f\"results/pivot_{metric}_with_alignment_{align}.csv\")\n", + " df = df.rename(columns = {'Unnamed: 0': 'detector'})\n", + " df = df.set_index('detector')\n", + " print(f\"{metric} for alignment {align}\")\n", + " display(HTML(df.to_html()))\n", + " display(HTML(\"
\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "aef6dc64", + "metadata": {}, + "outputs": [], + "source": [ + "def create_github_table():\n", + " for metric in distance_metrics:\n", + " for align in [True, False]:\n", + " df = pd.read_csv(f\"results/pivot_{metric}_with_alignment_{align}.csv\")\n", + " df = df.rename(columns = {'Unnamed: 0': 'detector'})\n", + " df = df.set_index('detector')\n", + " \n", + " print(f\"Performance Matrix for {metric} while alignment is {align} \\n\")\n", + " header = \"| | \"\n", + " for col_name in df.columns.tolist():\n", + " header += f\"{col_name} |\"\n", + " print(header)\n", + " # -------------------------------\n", + " seperator = \"| --- | \"\n", + " for col_name in df.columns.tolist():\n", + " seperator += \" --- |\"\n", + " print(seperator)\n", + " # -------------------------------\n", + " for index, instance in df.iterrows():\n", + " line = f\"| {instance.name} |\"\n", + " for i in instance.values:\n", + " if i < 97.5:\n", + " line += f\"{i} |\"\n", + " else:\n", + " line += f\"**{i}** |\"\n", + " print(line)\n", + " \n", + " print(\"\\n---------------------------\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "5004caaa", + "metadata": {}, + "outputs": [], + "source": [ + "# create_github_table()" + ] + }, + { + "cell_type": "markdown", + "id": "965c655f", + "metadata": {}, + "source": [ + "# Alignment impact" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "6ce20a58", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
max_alignment_impact
ArcFace6.0
DeepFace3.9
GhostFaceNet2.7
Facenet2.7
SFace2.1
DeepID1.4
Dlib1.2
OpenFace1.1
Facenet5120.5
VGG-Face0.4
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "align_df = None\n", + "\n", + "for distance_metric in distance_metrics:\n", + " df1 = (\n", + " pd.read_csv(f\"results/pivot_{distance_metric}_with_alignment_True.csv\")\n", + " .rename(columns = {'Unnamed: 0': 'detector'})\n", + " .set_index('detector')\n", + " )\n", + " df2 = (\n", + " pd.read_csv(f\"results/pivot_{distance_metric}_with_alignment_False.csv\")\n", + " .rename(columns = {'Unnamed: 0': 'detector'})\n", + " .set_index('detector')\n", + " )\n", + " df1 = df1[df1.index != \"skip\"]\n", + " df2 = df2[df2.index != \"skip\"]\n", + " pivot_df = df1.subtract(df2)\n", + " \n", + " pivot_df = pivot_df.max()\n", + " pivot_df = pd.DataFrame(pivot_df, columns=[f'alignment_impact_of_{distance_metric}'])\n", + " # display(HTML(pivot_df.to_html()))\n", + "\n", + " if align_df is None:\n", + " align_df = pivot_df.copy()\n", + " else:\n", + " align_df = align_df.merge(pivot_df, left_index=True, right_index=True)\n", + "\n", + "# display(HTML(align_df.to_html()))\n", + "align_df = pd.DataFrame(align_df.max(axis=1), columns = [\"max_alignment_impact\"])\n", + "align_df = align_df.sort_values(by=[\"max_alignment_impact\"], ascending=False)\n", + "display(HTML(align_df.to_html()))" + ] + }, + { + "cell_type": "markdown", + "id": "f66e349f", + "metadata": {}, + "source": [ + "## Detection impact" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "34eca61b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
max_detection_impact
ArcFace41.8
Facenet32.4
Dlib27.3
OpenFace20.2
GhostFaceNet15.9
SFace9.6
DeepFace7.6
Facenet5126.9
VGG-Face6.1
DeepID5.6
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "detect_df = None\n", + "for distance_metric in distance_metrics:\n", + " tmp_df = (\n", + " pd.read_csv(f\"results/pivot_{distance_metric}_with_alignment_False.csv\")\n", + " .rename(columns = {'Unnamed: 0': 'detector'})\n", + " .set_index('detector')\n", + " )\n", + " ref_df = tmp_df[tmp_df.index == \"skip\"]\n", + " \n", + " j = []\n", + " for i in range(0, len(detectors) - 1):\n", + " j.append(ref_df)\n", + " minus_df = pd.concat(j)\n", + " \n", + " tmp_df = tmp_df[tmp_df.index != \"skip\"]\n", + " minus_df.index = tmp_df.index\n", + " \n", + " # print(\"performance with no detection\")\n", + " # display(HTML(ref_df.to_html()))\n", + " \n", + " # print(\"pivot\")\n", + " tmp_df = tmp_df.subtract(minus_df)\n", + " # display(HTML(tmp_df.to_html()))\n", + " \n", + " # print(\"avg of detector impact for models\")\n", + " # avg_df = pd.DataFrame(tmp_df.mean()).T\n", + " avg_df = pd.DataFrame(tmp_df.max(), columns=[f\"detection_impact_of_{distance_metric}\"])\n", + " # display(HTML(avg_df.to_html()))\n", + "\n", + " if detect_df is None:\n", + " detect_df = avg_df.copy()\n", + " else:\n", + " detect_df = detect_df.merge(avg_df, left_index=True, right_index=True)\n", + "\n", + "# display(HTML(detect_df.to_html()))\n", + "detect_df = pd.DataFrame(detect_df.max(axis=1), columns = [\"max_detection_impact\"])\n", + "detect_df = detect_df.sort_values(by=[\"max_detection_impact\"], ascending=False)\n", + "display(HTML(detect_df.to_html()))\n" + ] + }, + { + "cell_type": "markdown", + "id": "1bdf64a3", + "metadata": {}, + "source": [ + "# facial recognition model's best scores" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "0cb1f232", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
best_accuracy_score
Facenet51298.4
Human-beings97.5
Facenet97.4
Dlib96.8
VGG-Face96.7
ArcFace96.7
GhostFaceNet93.3
SFace93.0
OpenFace78.7
DeepFace69.0
DeepID66.5
\n", + "
" + ], + "text/plain": [ + " best_accuracy_score\n", + "Facenet512 98.4\n", + "Human-beings 97.5\n", + "Facenet 97.4\n", + "Dlib 96.8\n", + "VGG-Face 96.7\n", + "ArcFace 96.7\n", + "GhostFaceNet 93.3\n", + "SFace 93.0\n", + "OpenFace 78.7\n", + "DeepFace 69.0\n", + "DeepID 66.5" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame()\n", + "for align in alignment:\n", + " for distance_metric in distance_metrics:\n", + " tmp_df = (\n", + " pd.read_csv(f\"results/pivot_{distance_metric}_with_alignment_{align}.csv\")\n", + " .rename(columns = {'Unnamed: 0': 'detector'})\n", + " .set_index('detector')\n", + " )\n", + " df = pd.concat([df, tmp_df])\n", + "\n", + "pivot_df = pd.DataFrame(df.max(), columns = [\"best_accuracy_score\"])\n", + "\n", + "# add human comparison\n", + "pivot_df.loc[\"Human-beings\"] = 97.5\n", + "\n", + "pivot_df = pivot_df.sort_values(by = [\"best_accuracy_score\"], ascending = False)\n", + "pivot_df" + ] + }, + { + "cell_type": "markdown", + "id": "b81ebe92", + "metadata": {}, + "source": [ + "# ROC Curves" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "bcb4db0a", + "metadata": {}, + "outputs": [], + "source": [ + "def plot_roc(model_name, detector_backend, distance_metric, align):\n", + " alignment_text = \"aligned\" if align == True else \"unaligned\"\n", + "\n", + " df = pd.read_csv(f\"outputs/{model_name}_{detector_backend}_{distance_metric}_{alignment_text}.csv\")\n", + " \n", + " #normalize\n", + " df[\"distances_normalized\"] = df[\"distances\"] / df[\"distances\"].max()\n", + " df[\"actuals_normalized\"] = 0\n", + " idx = df[df[\"actuals\"] == False].index\n", + " df.loc[idx, \"actuals_normalized\"] = 1\n", + " \n", + " y_actual = df[\"actuals_normalized\"].values.tolist()\n", + " y_pred_proba = df[\"distances_normalized\"].values.tolist()\n", + " \n", + " fpr, tpr, _ = metrics.roc_curve(y_actual, y_pred_proba)\n", + " auc = metrics.roc_auc_score(y_actual, y_pred_proba)\n", + " auc = round(auc, 4)\n", + "\n", + " # best accuracy score\n", + " result_path = f\"results/pivot_{distance_metric}_with_alignment_{align}.csv\"\n", + " result_df = pd.read_csv(result_path)\n", + " acc = result_df[result_df[\"Unnamed: 0\"] == detector_backend][model_name].values[0]\n", + "\n", + " label = f\"{model_name}_{detector_backend}_{distance_metric}_{alignment_text} (acc: {acc}, auc: {auc})\"\n", + "\n", + " return acc, auc, fpr, tpr, label" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "84b3d5b5", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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p969e6t379466KCD9Nxzz+XzXcmrzz77TMcee6xCoZD69eunyy67TB0dHWnvY+fxlLTlHwb77befqqur1a9fP1188cWda1t/Hm//UlNT03nME088oQMPPFA77LCDampqdMABB+ihhx7qcg0eFwDZqdjA18SMEtF4txcTjRe6NMB1Rx11lNauXdvlZbfddsvpnJm6d7fv4B1RW62RvYJJX4aFer754apVq7q8X/369etc27Rpk/bff3/dddddSe8bDoe1ZMkSzZgxQ0uWLNETTzyhVatW6fjjj+9RLdLXG/z1RF1dneNdIG1tbfrHP/6hSZMmadCgQerVq5ej5y82wWCwy9dAMdppp51K6vPwi1/8Qg0NDfJ6i+chxZo1azRx4kQNGzZMb7zxhp5//nm9++67OuecczqPaWtr01FHHaVdd91Vb7zxhl577TX16tVLkyZNsvV9Onv27JL/h+HHH3+sY489VocffriWLVumH/3oRzrvvPP0wgsvpLzPc889pzPOOEMXXnihVqxYoV/+8pe6/fbbdeedd3Yec/fdd2vatGm6+uqr9e677+qaa67RxRdfrD/84Q+dxzzxxBNdfjavWLFCPp9PJ598cucxRx99tDZu3FjSf1zn00cffaRRo0bpT3/6k66//notXbpUCxcu1OWXX65nnnlGL730UqFLlCTNnTu3y+f66aefdu3a1dXVuu+++/T3v//dtWvCGbW1terTp0+hy8i7Unhcsq3HHntMvXv31vjx4wtdShfnnXeeXnzxRT300ENavny5jjzySE2cOFGff/555zHf+MY3dOedd2r58uV67bXXNHToUB155JFav359yvMOHjxYN954oxYvXqy33npL3/nOd3TCCSfo3XffdePdclQ8Htexxx6raDSqv/71r3rggQd0//33a+bMmSnvY+fxlCTddtttuuqqq3TllVfq3Xff1UsvvaRJkyZ1rjc2Nnb7W3PEiBFdfufvtNNOuuqqq7Rw4UK98847amhoUENDQ5fHJDwuALJkKsyGDRuMJPPej54zzVe8kvYlHulIeo5oe7u59ZRjza2nHGui7e0uvwfZi0QiZtasWWbWrFkmEokUuhxHJBIJ09GxKeVLJLLevDR/d/PS/N1NR8emvNfT3t5u3nvvPdNeAl8P25syZYo54YQTkq79/Oc/NyNHjjShUMgMHjzYXHTRRWbjxo1djnnttdfMYYcdZoLBoNlhhx3MkUceab788kvTkUiYJf/caH4w82ozaNchJlBdbb4xcqS55YGHzbINm8yyDZvMvc88ZySZ+//wrBkzZowJBoPmoIMOMu+//36Xazz55JNm1KhRJhAImN12281cffXVJhaLGWOMGTJkiJHU+TJkyBBjjDF/+ctfjCTzz3/+09bHQZL5n//5n4zHvfnmm0aS+fTTTzMe+/HHHxtJZt68eebQQw81gUDAzJ071xhjzL333mv22msvEwgEzPDhw81dd93VpZZtXw477DBjTPfP1WGHHWZ+8IMfmMsuu8zsuOOOpn///mbWrFldakj3Odz6Mdr25S9/+Yv54osvzOTJk82gQYNMMBg0I0eONI888kiX88bjcXPTTTeZPfbYw/j9flNfX2+uvfbazvXPPvvMnHzyyaaurs7suOOO5vjjjzcff/xxxo/ZVvfdd58ZMWKE8fv9ZsCAAebiiy/uXPv000/N8ccfb2pqakyvXr3MySefbFpaWjrXly1bZr797W+b2tpa06tXLzN69GizaNEiY4wxc+fONXV1dZ3Hzpo1y+y///7mwQcfNEOGDDG9e/c2p556qmltbe3yvl5//fVm6NChprq62uy3337m0UcftfV+dHR0mO9///ud9/3GN75hZs+e3eWYZJ/XSy+9tPPtNWvWmGOOOcZUV1eboUOHmt/85jdmyJAh5vbbb+88RpK59957zYknnmiCwaAZNmyYeeqpp7pcZ/ny5eaoo44yNTU1pl+/fubMM88069ev71xva2szZ511lqmpqTEDBgwwt956a7datvePf/zDeDwes2LFii635/Kzw5jMX1+Z/OpXvzL9+vUz8Xi887Z33nnHSDJ///vfjTHGLFq0yEgyn332WcpjUlm6dKnZZZddzNq1a23/7NjW6tWrzfHHH2/69etnampqzIEHHmhefPHFLsckO29dXV3nzxBjjGlubjaTJ082O+64owmFQmbMmDHmb3/7m+06Lr/8crPPPvt0ue3UU081kyZNSnmf0047zZx00kldbvvFL35hBg8ebBKJhDHGmIMOOsg0NjZ2OWbq1Klm/PjxKc97++23m169epm2trYutzc0NJgzzzzT1vtTaSZNmmQGDx7c7WO21dbPhzH2fkYsWLDAfPOb3+z8uXvFFVd0/q41xphHH33UjBw50lRXV5uddtrJHHHEEaatrc3MmjUr6e+SrddN9v3hxu+ZrT/fv/vd75qTTz658/alS5caSV2OTffzccqUKd3ePzu/zzJ9PA877DBz8cUXm4svvtj07t3b9OnTx0yfPr3L523z5s3mJz/5iRk0aJAJhUJm7NixnR9bY77+nfb888+bvfbay9TU1JhJkyaZNWvWdKkl1e/U0047zZxyyildjo1Go6ZPnz7mgQceyPg+ZvocvfPOO+bwww/v/Jo5//zzu/wu+Mtf/mK++c1vmlAoZOrq6szBBx9sPvnkE2PM15+/rbb+rrzlllvMgAEDzE477WT+8z//00SjUdsfr3S2v54xW34ubX1cabeGBx980IwZM8bU1taa/v37m9NOO82sW7euy/u87ePT7R+XGGPMz372M7Pzzjub2tpac+6555orrrgiLx+LuXPnmvr6ehMMBs2JJ55obr311m61bO/YY4/t9vP9zTffNBMnTjR9+vQxvXv3NoceeqhZvHhxl2P++c9/mgsuuMD069fPBAIBs88++5g//OEPnevpHhNkEg6Hjc/nM88880yX20ePHm2uuuqqlPfbmgu89NJLtq6z1Y477mh+/etf2z7ezmPBZI+3TjjhBDNlypTOtzdv3mwuv/xyM3jwYOP3+80ee+yRVR3PPvus8Xq9XR4z33333aZ3794pMwI7j6e+/PJLEwwGs/o4Llu2zEgyr7zyStrjRo0aZaZPn97lNrcfF5Ty3/koXlt//mzYsCGv1ymedpwi4x/SWx6LD08xMsZo8ZJTtODlfVO+vPrauEKXKWOMwtGOgrwYhzY783q9+sUvfqF3331XDzzwgP785z/r8ssv71xftmyZjjjiCI0YMUILFy7Ua6+9puOOO07x+JZO+ft+fquemfdb3TPnbi1fsUJXTJ2q6Recq/9b8qZG9gpqt1BAknT3tdfo5z//ud566y1VVVXp+9//fuc1Xn31VZ199tm69NJL9d577+lXv/qV7r//fl133XWS1Pl0ra0dRNs/feuAAw7QwIED9d3vflevv/56zh+TDRs2yOPxZNVpe+WVV+rSSy/VypUrNWnSJP3mN7/RzJkzdd1112nlypW6/vrrNWPGDD3wwAOSpDfffFOS9NJLL2nt2rV64oknUp77gQceUE1Njd544w3dfPPN+ulPf6oXX3yxcz3d5/Dggw/WqlWrJEmPP/641q5dq4MPPlibN2/WmDFj9Mc//lErVqzQBRdcoLPOOquzLkmaNm2abrzxRs2YMUPvvfeeHnnkEfXv31/Sli7mSZMmqVevXnr11Vf1+uuvq7a2VkcddZSi0WjGj9fdd9+tiy++WBdccIGWL1+up59+WsOGDZMkJRIJnXDCCfryyy/18ssv68UXX9RHH32kU089tfP+Z5xxhgYPHqxFixZp8eLFuvLKK2VZVsrrffjhh3ryySf1zDPP6JlnntHLL7+sG2+8sXP9hhtu0IMPPqg5c+bo3Xff1Y9//GOdeeaZevnllzO+L4lEQoMHD9ajjz6q9957TzNnztR//dd/6fe//33G+261dYzIggUL9Pjjj+uee+7RP/7xj27HXXPNNTrllFP0zjvv6JhjjtEZZ5yhL7/8UpL01Vdf6Tvf+Y5GjRqlt956S88//7zWrVunU045pfP+l112mV5++WU99dRT+tOf/qQFCxZoyZL0m1++9tprCoVC2nvvvbvcnuvPjnRfX9KWp1dv312yrUgkIr/f36XrOBgMdtYsScOHD1efPn103333KRqNqr29Xffdd5/23ntvDR06NOW5w+GwTj/9dN11110aMGBA2o9PKm1tbTrmmGM0f/58LV26VEcddZSOO+44ffbZZ1md47DDDtPnn3+up59+Wm+//bYuv/zyzqc5bh0Ns2DBgpTnWLhwoSZOnNjltkmTJmnhwoUp7xOJRFRdXd3ltmAwqP/93//Vp59+mvaYN998M2X39H333afJkyd3eXqnJI0dO1avvvpqynrywRij2ObNBXmx+/v7//7v//SnP/1JF198cbeP2Vbbd6Cn+xnx+eef65hjjtE3v/lNvf3227r77rt133336dprr5UkrV27Vqeddpq+//3va+XKlVqwYIG+973vyRijxsZGnXLKKV2eLXTwwQenrd/N3zM33nijHn/8cb311ltJa8n08/GOO+7QQQcdpPPPP7/z/auvr0/7/mX6eG71wAMPqKqqSm+++abuuOMO3Xbbbfr1r3/duX7JJZdo4cKFmjdvnt555x2dfPLJOuqoo7p0LIfDYd1666166KGH9Morr+izzz5TY2Nj53q636lnnHGG/vCHP3R5evYLL7ygcDisf/u3f0v7PkrpP0ebNm3SpEmTtOOOO2rRokV69NFH9dJLL+mSSy6RJHV0dOjEE0/UYYcdpnfeeUcLFy7UBRdckPaZE3/5y1/04Ycf6i9/+Utnd+K2Y2jsfLxylamGWCymn/3sZ3r77bf15JNP6pNPPkn7+2p7v/nNb3Tdddfppptu0uLFi7Xrrrvq7rvvzrqOTB+LN954Q+eee64uueQSLVu2TIcffni3r89kXnvtNR144IFdbtu4caOmTJmi1157TX/729+055576phjjtHGjRslbXksdPTRR+v111/Xww8/rPfee0833nijfD6fpMyPCe6///60XxcdHR2Kx+NJf+9s/Z2/vWg0qnvuuUd1dXXaf//9M77f0pYO2Xnz5mnTpk066KCDbN1HcuaxoLTl8eBvf/tb/eIXv9DKlSv1q1/9SrW1tZ3rQ4cO1dVXX53y/gsXLtS+++7b5fHUpEmT1NramrJj2c7jqRdffFGJREKff/659t57bw0ePFinnHKKmpubU9by61//Wt/4xjd0yCGHJF03xmj+/PlatWqVDj300C5rhXhcAJSsvMbJRWhrkr7qzcUmHulI+bLtf9e3R4dvYXV0bOrs3s30suitk9N+Lp2S7D9/myIxM+SKZwrysikSS1NtV1OmTDE+n8/U1NR0vmzfvbXVo48+avr06dP59mmnnZayY2tTe7upDoXMAy/+2XRs8zk499xzzWmnnWaM+brLYdv/CP/xj380kjo/lkcccYS5/vrru5z7oYceMgMHDux8W0k6iN5//30zZ84c89Zbb5nXX3/dNDQ0mKqqqm4dB+nOsb329nYzevRoc/rpp6c9bqutHb7b/xd/jz326NbJ9LOf/cwcdNBBXe63dOnSLsck6wSdMGFCl2O++c1vmiuuuCJlTdt/Dv/5z3926cZK5dhjjzU/+clPjDHGtLa2mkAgYO69996kxz700ENm+PDhXb73IpGICQaD5oUXXkh7HWOMGTRoUMqOjD/96U/G5/N16cp89913jSTz5ptvGmOM6dWrl7n//vuT3j9Zh28oFOrS0XvZZZeZcePGGWO2dFOEQiHz17/+tct5tv06ztbFF19s/v3f/73z7XQdvitXrjSSOjuUjTHm73//u5HUrcN32w6ItrY2I8k899xzxpgtX19HHnlklzqam5u3/D5ctcps3LjR+P1+8/vf/75z/f/+7/9MMBhM2+F7++23m9133z3j+5zNz45MX1/GGHPWWWeZK6+8MuX6ihUr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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# to show all models in same graph\n", + "plt.figure(figsize=(17, 8))\n", + "\n", + "for model_name in models:\n", + " # to show graphs model by model\n", + " # plt.figure(figsize=(17, 8))\n", + " accs = []\n", + " aucs = []\n", + " fprs = []\n", + " tprs = []\n", + " labels = []\n", + " for distance_metric in distance_metrics:\n", + " # for detector_backend in robust_face_detectors:\n", + " for detector_backend in detectors:\n", + " for align in alignment:\n", + " if detector_backend == \"skip\" and align is True:\n", + " continue\n", + " acc, auc, fpr, tpr, label = plot_roc(model_name, detector_backend, distance_metric, align)\n", + " accs.append(acc)\n", + " aucs.append(auc)\n", + " fprs.append(fpr)\n", + " tprs.append(tpr)\n", + " labels.append(label)\n", + " # ---------------------------------\n", + " #sort by auc\n", + " df = pd.DataFrame({\"acc\": accs, \"auc\": aucs, \"fpr\": fprs, \"tpr\": tprs, \"label\": labels})\n", + " # df = df.sort_values(by = [\"auc\"], ascending = False).reset_index()\n", + " df = df.sort_values(by = [\"acc\"], ascending = False).reset_index()\n", + " \n", + " for index, instance in df.iterrows():\n", + " fpr = instance[\"fpr\"]\n", + " tpr = instance[\"tpr\"]\n", + " auc = instance[\"auc\"]\n", + " acc = instance[\"acc\"]\n", + " label = instance[\"label\"]\n", + " \n", + " plt.plot(fpr, tpr, label=label)\n", + " plt.ylabel(\"True Positive Rate\")\n", + " plt.xlabel(\"False Positive Rate\")\n", + " plt.legend(loc=\"lower center\", ncol=2)\n", + " # normally this should be [0, 1] but that scale makes graphs not legible\n", + " # plt.xlim([0, 1])\n", + " plt.xlim([0, 0.3])\n", + "\n", + " # to show the best auc value\n", + " break\n", + " \n", + " # to show graphs model by model\n", + " # plt.show()\n", + " # print(\"----------------\")\n", + "\n", + "# to show all models in same graph\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "661c5236", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/benchmarks/Perform-Experiments.ipynb b/benchmarks/Perform-Experiments.ipynb new file mode 100644 index 0000000..fe5ac48 --- /dev/null +++ b/benchmarks/Perform-Experiments.ipynb @@ -0,0 +1,351 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8133a99d", + "metadata": {}, + "source": [ + "# Perform Experiments with DeepFace on LFW dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5aab0cbe", + "metadata": {}, + "outputs": [], + "source": [ + "# built-in dependencies\n", + "import os\n", + "\n", + "# 3rd party dependencies\n", + "import numpy as np\n", + "import pandas as pd\n", + "from tqdm import tqdm\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.metrics import accuracy_score\n", + "from sklearn.datasets import fetch_lfw_pairs\n", + "from deepface import DeepFace" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "64c9ed9a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This experiment is done with pip package of deepface with 0.0.89 version\n" + ] + } + ], + "source": [ + "print(f\"This experiment is done with pip package of deepface with {DeepFace.__version__} version\")" + ] + }, + { + "cell_type": "markdown", + "id": "feaec973", + "metadata": {}, + "source": [ + "### Configuration Sets" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "453104b4", + "metadata": {}, + "outputs": [], + "source": [ + "# all configuration alternatives for 4 dimensions of arguments\n", + "alignment = [True, False]\n", + "models = [\"Facenet\", \"Facenet512\", \"VGG-Face\", \"ArcFace\", \"Dlib\", \"GhostFaceNet\", \"SFace\", \"OpenFace\", \"DeepFace\", \"DeepID\"]\n", + "detectors = [\"retinaface\", \"mtcnn\", \"dlib\", \"yolov8\", \"yunet\", \"mediapipe\", \"ssd\", \"opencv\", \"skip\"]\n", + "metrics = [\"euclidean\", \"euclidean_l2\", \"cosine\"]\n", + "expand_percentage = 0" + ] + }, + { + "cell_type": "markdown", + "id": "c9aeb57a", + "metadata": {}, + "source": [ + "### Create Required Folders if necessary" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "671d8a00", + "metadata": {}, + "outputs": [], + "source": [ + "target_paths = [\"lfwe\", \"dataset\", \"outputs\", \"results\"]\n", + "for target_path in target_paths:\n", + " if os.path.exists(target_path) != True:\n", + " os.mkdir(target_path)\n", + " print(f\"{target_path} is just created\")" + ] + }, + { + "cell_type": "markdown", + "id": "fc31f03a", + "metadata": {}, + "source": [ + "### Load LFW Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "721a7d70", + "metadata": {}, + "outputs": [], + "source": [ + "pairs_touch = \"outputs/lfwe.txt\"\n", + "instances = 1000 #pairs.shape[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "010184d8", + "metadata": {}, + "outputs": [], + "source": [ + "target_path = \"dataset/lfw.npy\"\n", + "labels_path = \"dataset/labels.npy\"\n", + "\n", + "if os.path.exists(target_path) != True:\n", + " fetch_lfw_pairs = fetch_lfw_pairs(subset = 'test', color = True\n", + " , resize = 2\n", + " , funneled = False\n", + " , slice_=None\n", + " )\n", + " pairs = fetch_lfw_pairs.pairs\n", + " labels = fetch_lfw_pairs.target\n", + " target_names = fetch_lfw_pairs.target_names\n", + " np.save(target_path, pairs)\n", + " np.save(labels_path, labels)\n", + "else:\n", + " if os.path.exists(pairs_touch) != True:\n", + " # loading pairs takes some time. but if we extract these pairs as image, no need to load it anymore\n", + " pairs = np.load(target_path)\n", + " labels = np.load(labels_path) " + ] + }, + { + "cell_type": "markdown", + "id": "005f582e", + "metadata": {}, + "source": [ + "### Save LFW image pairs into file system" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5bc23313", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1000/1000 [00:00<00:00, 219746.63it/s]\n" + ] + } + ], + "source": [ + "for i in tqdm(range(0, instances)):\n", + " img1_target = f\"lfwe/{i}_1.jpg\"\n", + " img2_target = f\"lfwe/{i}_2.jpg\"\n", + " \n", + " if os.path.exists(img1_target) != True:\n", + " img1 = pairs[i][0]\n", + " # plt.imsave(img1_target, img1/255) #works for my mac\n", + " plt.imsave(img1_target, img1) #works for my debian\n", + " \n", + " if os.path.exists(img2_target) != True:\n", + " img2 = pairs[i][1]\n", + " # plt.imsave(img2_target, img2/255) #works for my mac\n", + " plt.imsave(img2_target, img2) #works for my debian\n", + " \n", + "if os.path.exists(pairs_touch) != True:\n", + " open(pairs_touch,'a').close()" + ] + }, + { + "cell_type": "markdown", + "id": "6f8fa8fa", + "metadata": {}, + "source": [ + "### Perform Experiments\n", + "\n", + "This block will save the experiments results in outputs folder" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e7fba936", + "metadata": {}, + "outputs": [], + "source": [ + "for model_name in models:\n", + " for detector_backend in detectors:\n", + " for distance_metric in metrics:\n", + " for align in alignment:\n", + " \n", + " if detector_backend == \"skip\" and align is True:\n", + " # Alignment is not possible for a skipped detector configuration\n", + " continue\n", + " \n", + " alignment_text = \"aligned\" if align is True else \"unaligned\"\n", + " task = f\"{model_name}_{detector_backend}_{distance_metric}_{alignment_text}\"\n", + " output_file = f\"outputs/{task}.csv\"\n", + " if os.path.exists(output_file) is True:\n", + " #print(f\"{output_file} is available already\")\n", + " continue\n", + " \n", + " distances = []\n", + " for i in tqdm(range(0, instances), desc = task):\n", + " img1_target = f\"lfwe/{i}_1.jpg\"\n", + " img2_target = f\"lfwe/{i}_2.jpg\"\n", + " result = DeepFace.verify(\n", + " img1_path=img1_target,\n", + " img2_path=img2_target,\n", + " model_name=model_name,\n", + " detector_backend=detector_backend,\n", + " distance_metric=distance_metric,\n", + " align=align,\n", + " enforce_detection=False,\n", + " expand_percentage=expand_percentage,\n", + " )\n", + " distance = result[\"distance\"]\n", + " distances.append(distance)\n", + " # -----------------------------------\n", + " df = pd.DataFrame(list(labels), columns = [\"actuals\"])\n", + " df[\"distances\"] = distances\n", + " df.to_csv(output_file, index=False)" + ] + }, + { + "cell_type": "markdown", + "id": "a0b8dafa", + "metadata": {}, + "source": [ + "### Calculate Results\n", + "\n", + "Experiments were responsible for calculating distances. We will calculate the best accuracy scores in this block." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "67376e76", + "metadata": {}, + "outputs": [], + "source": [ + "data = [[0 for _ in range(len(models))] for _ in range(len(detectors))]\n", + "base_df = pd.DataFrame(data, columns=models, index=detectors)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "f2cc536b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "results/pivot_euclidean_with_alignment_True.csv saved\n", + "results/pivot_euclidean_l2_with_alignment_True.csv saved\n", + "results/pivot_cosine_with_alignment_True.csv saved\n", + "results/pivot_euclidean_with_alignment_False.csv saved\n", + "results/pivot_euclidean_l2_with_alignment_False.csv saved\n", + "results/pivot_cosine_with_alignment_False.csv saved\n" + ] + } + ], + "source": [ + "for is_aligned in alignment:\n", + " for distance_metric in metrics:\n", + "\n", + " current_df = base_df.copy()\n", + " \n", + " target_file = f\"results/pivot_{distance_metric}_with_alignment_{is_aligned}.csv\"\n", + " if os.path.exists(target_file):\n", + " continue\n", + " \n", + " for model_name in models:\n", + " for detector_backend in detectors:\n", + "\n", + " align = \"aligned\" if is_aligned is True else \"unaligned\"\n", + "\n", + " if detector_backend == \"skip\" and is_aligned is True:\n", + " # Alignment is not possible for a skipped detector configuration\n", + " align = \"unaligned\"\n", + "\n", + " source_file = f\"outputs/{model_name}_{detector_backend}_{distance_metric}_{align}.csv\"\n", + " df = pd.read_csv(source_file)\n", + " \n", + " positive_mean = df[(df[\"actuals\"] == True) | (df[\"actuals\"] == 1)][\"distances\"].mean()\n", + " negative_mean = df[(df[\"actuals\"] == False) | (df[\"actuals\"] == 0)][\"distances\"].mean()\n", + "\n", + " distances = sorted(df[\"distances\"].values.tolist())\n", + "\n", + " items = []\n", + " for i, distance in enumerate(distances):\n", + " if distance >= positive_mean and distance <= negative_mean:\n", + " sandbox_df = df.copy()\n", + " sandbox_df[\"predictions\"] = False\n", + " idx = sandbox_df[sandbox_df[\"distances\"] < distance].index\n", + " sandbox_df.loc[idx, \"predictions\"] = True\n", + "\n", + " actuals = sandbox_df.actuals.values.tolist()\n", + " predictions = sandbox_df.predictions.values.tolist()\n", + " accuracy = 100*accuracy_score(actuals, predictions)\n", + " items.append((distance, accuracy))\n", + "\n", + " pivot_df = pd.DataFrame(items, columns = [\"distance\", \"accuracy\"])\n", + " pivot_df = pivot_df.sort_values(by = [\"accuracy\"], ascending = False)\n", + " # threshold = pivot_df.iloc[0][\"distance\"]\n", + " accuracy = pivot_df.iloc[0][\"accuracy\"]\n", + "\n", + " # print(source_file, round(accuracy, 1))\n", + " current_df.at[detector_backend, model_name] = round(accuracy, 1)\n", + " \n", + " current_df.to_csv(target_file)\n", + " print(f\"{target_file} saved\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/benchmarks/README.md b/benchmarks/README.md new file mode 100644 index 0000000..ff97823 --- /dev/null +++ b/benchmarks/README.md @@ -0,0 +1,104 @@ +# Benchmarks + +DeepFace offers various configurations that significantly impact accuracy, including the facial recognition model, face detector model, distance metric, and alignment mode. Our experiments conducted on the [LFW dataset](https://sefiks.com/2020/08/27/labeled-faces-in-the-wild-for-face-recognition/) using different combinations of these configurations yield the following results. + +You can reproduce the results by executing the `Perform-Experiments.ipynb` and `Evaluate-Results.ipynb` notebooks, respectively. + +## ROC Curves + +ROC curves provide a valuable means of evaluating the performance of different models on a broader scale. The following illusration shows ROC curves for different facial recognition models alongside their optimal configurations yielding the highest accuracy scores. + + +

+ +In summary, FaceNet-512d surpasses human-level accuracy, while FaceNet-128d reaches it, with Dlib, VGG-Face, and ArcFace closely trailing but slightly below, and GhostFaceNet and SFace making notable contributions despite not leading, while OpenFace, DeepFace, and DeepId exhibit lower performance. + +## Accuracy Scores + +Please note that humans achieve a 97.5% accuracy score on the same dataset. Configurations that outperform this benchmark are highlighted in bold. + +### Performance Matrix for Euclidean while alignment is True + +| | Facenet |Facenet512 |VGG-Face |ArcFace |Dlib |GhostFaceNet |SFace |OpenFace |DeepFace |DeepID | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| retinaface |93.5 |95.9 |95.8 |85.2 |88.9 |85.9 |80.2 |69.4 |67.0 |65.6 | +| mtcnn |93.8 |95.2 |95.9 |83.7 |89.4 |83.0 |77.4 |70.2 |66.5 |63.3 | +| dlib |90.8 |96.0 |94.5 |88.6 |96.8 |65.7 |66.3 |75.8 |63.4 |60.4 | +| yolov8 |91.9 |94.4 |95.0 |84.1 |89.2 |77.6 |73.4 |68.7 |69.0 |66.5 | +| yunet |96.1 |97.3 |96.0 |84.9 |92.2 |84.0 |79.4 |70.9 |65.8 |65.2 | +| mediapipe |88.6 |95.1 |92.9 |73.2 |93.1 |63.2 |72.5 |78.7 |61.8 |62.2 | +| ssd |85.6 |88.9 |87.0 |75.8 |83.1 |79.1 |76.9 |66.8 |63.4 |62.5 | +| opencv |84.2 |88.2 |87.3 |73.0 |84.4 |83.8 |81.1 |66.4 |65.5 |59.6 | +| skip |64.1 |92.0 |90.6 |56.6 |69.0 |75.1 |81.4 |57.4 |60.8 |60.7 | + +### Performance Matrix for Euclidean while alignment is False + +| | Facenet |Facenet512 |VGG-Face |ArcFace |Dlib |GhostFaceNet |SFace |OpenFace |DeepFace |DeepID | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| retinaface |92.8 |96.1 |95.7 |84.1 |88.3 |83.2 |78.6 |70.8 |67.4 |64.3 | +| mtcnn |92.5 |95.9 |95.5 |81.8 |89.3 |83.2 |76.3 |70.9 |65.9 |63.2 | +| dlib |89.0 |96.0 |94.1 |82.6 |96.3 |65.6 |73.1 |75.9 |61.8 |61.9 | +| yolov8 |90.8 |94.8 |95.2 |83.2 |88.4 |77.6 |71.6 |68.9 |68.2 |66.3 | +| yunet |96.5 |**97.9** |96.3 |84.1 |91.4 |82.7 |78.2 |71.7 |65.5 |65.2 | +| mediapipe |87.1 |94.9 |93.1 |71.1 |91.9 |61.9 |73.2 |77.6 |61.7 |62.4 | +| ssd |94.9 |97.2 |96.7 |83.9 |88.6 |84.9 |82.0 |69.9 |66.7 |64.0 | +| opencv |90.2 |94.1 |95.8 |89.8 |91.2 |91.0 |86.9 |71.1 |68.4 |61.1 | +| skip |64.1 |92.0 |90.6 |56.6 |69.0 |75.1 |81.4 |57.4 |60.8 |60.7 | + +### Performance Matrix for L2 normalized Euclidean while alignment is True + +| | Facenet |Facenet512 |VGG-Face |ArcFace |Dlib |GhostFaceNet |SFace |OpenFace |DeepFace |DeepID | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| retinaface |96.4 |**98.4** |95.8 |96.6 |89.1 |90.5 |92.4 |69.4 |67.7 |64.4 | +| mtcnn |96.8 |**97.6** |95.9 |96.0 |90.0 |89.8 |90.5 |70.2 |66.4 |64.0 | +| dlib |92.6 |97.0 |94.5 |95.1 |96.4 |63.3 |69.8 |75.8 |66.5 |59.5 | +| yolov8 |95.7 |97.3 |95.0 |95.5 |88.8 |88.9 |91.9 |68.7 |67.5 |66.0 | +| yunet |97.4 |**97.9** |96.0 |96.7 |91.6 |89.1 |91.0 |70.9 |66.5 |63.6 | +| mediapipe |90.6 |96.1 |92.9 |90.3 |92.6 |64.4 |75.4 |78.7 |64.7 |63.0 | +| ssd |87.5 |88.7 |87.0 |86.2 |83.3 |82.2 |84.6 |66.8 |64.1 |62.6 | +| opencv |84.8 |87.6 |87.3 |84.6 |84.0 |85.0 |83.6 |66.4 |63.8 |60.9 | +| skip |67.6 |91.4 |90.6 |57.2 |69.3 |78.4 |83.4 |57.4 |62.6 |61.6 | + +### Performance Matrix for L2 normalized Euclidean while alignment is False + +| | Facenet |Facenet512 |VGG-Face |ArcFace |Dlib |GhostFaceNet |SFace |OpenFace |DeepFace |DeepID | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| retinaface |95.9 |**98.0** |95.7 |95.7 |88.4 |89.5 |90.6 |70.8 |67.7 |64.6 | +| mtcnn |96.2 |**97.8** |95.5 |95.9 |89.2 |88.0 |91.1 |70.9 |67.0 |64.0 | +| dlib |89.9 |96.5 |94.1 |93.8 |95.6 |63.0 |75.0 |75.9 |62.6 |61.8 | +| yolov8 |95.8 |**97.7** |95.2 |95.0 |88.1 |88.7 |89.8 |68.9 |68.9 |65.3 | +| yunet |96.8 |**98.3** |96.3 |96.1 |91.7 |88.0 |90.5 |71.7 |67.6 |63.2 | +| mediapipe |90.0 |96.3 |93.1 |89.3 |91.8 |65.6 |74.6 |77.6 |64.9 |61.6 | +| ssd |97.0 |**97.9** |96.7 |96.6 |89.4 |91.5 |93.0 |69.9 |68.7 |64.9 | +| opencv |92.9 |96.2 |95.8 |93.2 |91.5 |93.3 |91.7 |71.1 |68.3 |61.6 | +| skip |67.6 |91.4 |90.6 |57.2 |69.3 |78.4 |83.4 |57.4 |62.6 |61.6 | + +### Performance Matrix for cosine while alignment is True + +| | Facenet |Facenet512 |VGG-Face |ArcFace |Dlib |GhostFaceNet |SFace |OpenFace |DeepFace |DeepID | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| retinaface |96.4 |**98.4** |95.8 |96.6 |89.1 |90.5 |92.4 |69.4 |67.7 |64.4 | +| mtcnn |96.8 |**97.6** |95.9 |96.0 |90.0 |89.8 |90.5 |70.2 |66.3 |63.0 | +| dlib |92.6 |97.0 |94.5 |95.1 |96.4 |63.3 |69.8 |75.8 |66.5 |58.7 | +| yolov8 |95.7 |97.3 |95.0 |95.5 |88.8 |88.9 |91.9 |68.7 |67.5 |65.9 | +| yunet |97.4 |**97.9** |96.0 |96.7 |91.6 |89.1 |91.0 |70.9 |66.5 |63.5 | +| mediapipe |90.6 |96.1 |92.9 |90.3 |92.6 |64.3 |75.4 |78.7 |64.8 |63.0 | +| ssd |87.5 |88.7 |87.0 |86.2 |83.3 |82.2 |84.5 |66.8 |63.8 |62.6 | +| opencv |84.9 |87.6 |87.2 |84.6 |84.0 |85.0 |83.6 |66.2 |63.7 |60.1 | +| skip |67.6 |91.4 |90.6 |54.8 |69.3 |78.4 |83.4 |57.4 |62.6 |61.1 | + +### Performance Matrix for cosine while alignment is False + +| | Facenet |Facenet512 |VGG-Face |ArcFace |Dlib |GhostFaceNet |SFace |OpenFace |DeepFace |DeepID | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| retinaface |95.9 |**98.0** |95.7 |95.7 |88.4 |89.5 |90.6 |70.8 |67.7 |63.7 | +| mtcnn |96.2 |**97.8** |95.5 |95.9 |89.2 |88.0 |91.1 |70.9 |67.0 |64.0 | +| dlib |89.9 |96.5 |94.1 |93.8 |95.6 |63.0 |75.0 |75.9 |62.6 |61.7 | +| yolov8 |95.8 |**97.7** |95.2 |95.0 |88.1 |88.7 |89.8 |68.9 |68.9 |65.3 | +| yunet |96.8 |**98.3** |96.3 |96.1 |91.7 |88.0 |90.5 |71.7 |67.6 |63.2 | +| mediapipe |90.0 |96.3 |93.1 |89.3 |91.8 |64.8 |74.6 |77.6 |64.9 |61.6 | +| ssd |97.0 |**97.9** |96.7 |96.6 |89.4 |91.5 |93.0 |69.9 |68.7 |63.8 | +| opencv |92.9 |96.2 |95.8 |93.2 |91.5 |93.3 |91.7 |71.1 |68.1 |61.1 | +| skip |67.6 |91.4 |90.6 |54.8 |69.3 |78.4 |83.4 |57.4 |62.6 |61.1 | \ No newline at end of file diff --git a/icon/benchmarks.jpg b/icon/benchmarks.jpg new file mode 100644 index 0000000..adcd846 Binary files /dev/null and b/icon/benchmarks.jpg differ