diff --git a/HW-Acceleration-with-Movidious-NCS/Python/.ipynb_checkpoints/HW_Acceleration_with_Movidius_NCS-checkpoint.ipynb b/HW-Acceleration-with-Movidious-NCS/Python/.ipynb_checkpoints/HW_Acceleration_with_Movidius_NCS-checkpoint.ipynb new file mode 100644 index 00000000..fc45d99a --- /dev/null +++ b/HW-Acceleration-with-Movidious-NCS/Python/.ipynb_checkpoints/HW_Acceleration_with_Movidius_NCS-checkpoint.ipynb @@ -0,0 +1,261 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "# Intel® Movidius™ Neural Compute Stick (NCS)\n", + "\n", + "This lab shows how the Intel® Distribution of OpenVINO™ toolkit provides hardware abstraction to run the sample object detection application which was built in previous modules on Intel® Movidius™ Neural Compute Stick.\n", + "
\n", + "\n", + "### Connect Intel® Movidius™ Neural Compute Stick to your development laptop\n", + "
\n", + "\n", + "
\n", + "\n", + "### System check\n", + "
\n", + "\n", + "First make sure the USB rules are set up." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%writefile myriad1.sh\n", + "\n", + "cat < 97-myriad-usbboot.rules\n", + "SUBSYSTEM==\"usb\", ATTRS{idProduct}==\"2150\", ATTRS{idVendor}==\"03e7\", GROUP=\"users\", MODE=\"0666\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"\n", + "SUBSYSTEM==\"usb\", ATTRS{idProduct}==\"2485\", ATTRS{idVendor}==\"03e7\", GROUP=\"users\", MODE=\"0666\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"\n", + "SUBSYSTEM==\"usb\", ATTRS{idProduct}==\"f63b\", ATTRS{idVendor}==\"03e7\", GROUP=\"users\", MODE=\"0666\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"\n", + "EOF" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "sh myriad1.sh" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"intel123\" | sudo -S cp 97-myriad-usbboot.rules /etc/udev/rules.d/ >/dev/null 2>&1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"intel123\" | sudo -S udevadm control --reload-rules >/dev/null 2>&1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"intel123\" | sudo -S udevadm trigger >/dev/null 2>&1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "Then check if the device is visible with lsusb." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!lsusb" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "The output will be If using NCS1,\n", + "\n", + "```\n", + "Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub\n", + "Bus 001 Device 015: ID 03e7:2150 \n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "If useing NCS2,\n", + "```\n", + "Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub\n", + "Bus 001 Device 015: ID 03e7:2485 \n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "Here ID 03e7:2150 without a description string is the Movidius device.\n", + "
\n", + "\n", + "Setting up the Environment variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! /opt/intel/openvino/bin/setupvars.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "### Run the sample application on Intel® Movidius™ Neural Compute Stick (NCS)\n", + "\n", + "Set target hardware as Intel® Movidius™ NCS with -d MYRIAD" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!cd /opt/intel/workshop/smart-video-workshop/object-detection && python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -d MYRIAD" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "You will get an error as Intel® Movidius™ NCS supports only FP16 format. \n", + "
\n", + "\n", + "
\n", + "\n", + "The Model Optimizer by default generate FP32 IR files if the data type is not particularly specified.\n", + "\n", + "Let's run the Model Optimizer to get IR files in FP16 format suitable for the Intel® Movidius™ NCS by setting the data_type flag to FP16." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!cd /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd && mkdir -p FP16" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!cd /opt/intel/openvino/deployment_tools/model_optimizer && python3 mo_caffe.py --input_model /opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/mobilenet-ssd/caffe/mobilenet-ssd.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP16 --scale 256 --mean_values [127,127,127] --data_type FP16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "Check if the .xml and .bin files are created in folder $SV/object-detection/mobilenet-ssd/FP16." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " !cd /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP16 && ls" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "Now run the example application with these new IR files." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!cd /opt/intel/workshop/smart-video-workshop/object-detection/ && python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP16/mobilenet-ssd.xml -d MYRIAD" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/HW-Acceleration-with-Movidious-NCS/Python/97-myriad-usbboot.rules b/HW-Acceleration-with-Movidious-NCS/Python/97-myriad-usbboot.rules new file mode 100644 index 00000000..1ac82f40 --- /dev/null +++ b/HW-Acceleration-with-Movidious-NCS/Python/97-myriad-usbboot.rules @@ -0,0 +1,3 @@ +SUBSYSTEM=="usb", ATTRS{idProduct}=="2150", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1" +SUBSYSTEM=="usb", ATTRS{idProduct}=="2485", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1" +SUBSYSTEM=="usb", ATTRS{idProduct}=="f63b", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1" diff --git a/HW-Acceleration-with-Movidious-NCS/Python/FP32.png b/HW-Acceleration-with-Movidious-NCS/Python/FP32.png new file mode 100644 index 00000000..82a1345a Binary files /dev/null and b/HW-Acceleration-with-Movidious-NCS/Python/FP32.png differ diff --git a/HW-Acceleration-with-Movidious-NCS/Python/HW_Acceleration_with_Movidius_NCS.ipynb b/HW-Acceleration-with-Movidious-NCS/Python/HW_Acceleration_with_Movidius_NCS.ipynb new file mode 100644 index 00000000..c069edfc --- /dev/null +++ b/HW-Acceleration-with-Movidious-NCS/Python/HW_Acceleration_with_Movidius_NCS.ipynb @@ -0,0 +1,260 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Intel® Movidius™ Neural Compute Stick (NCS)\n", + "\n", + "This lab shows how the Intel® Distribution of OpenVINO™ toolkit provides hardware abstraction to run the sample object detection application which was built in previous modules on Intel® Movidius™ Neural Compute Stick.\n", + "\n", + "\n", + "## Connect Intel® Movidius™ Neural Compute Stick to your development laptop\n", + "\n", + "\n", + "\n", + "\n", + "## System check\n", + "\n", + "\n", + "First make sure the USB rules are set up." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%writefile myriad.sh\n", + "\n", + "cat < 97-myriad-usbboot.rules\n", + "SUBSYSTEM==\"usb\", ATTRS{idProduct}==\"2150\", ATTRS{idVendor}==\"03e7\", GROUP=\"users\", MODE=\"0666\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"\n", + "SUBSYSTEM==\"usb\", ATTRS{idProduct}==\"2485\", ATTRS{idVendor}==\"03e7\", GROUP=\"users\", MODE=\"0666\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"\n", + "SUBSYSTEM==\"usb\", ATTRS{idProduct}==\"f63b\", ATTRS{idVendor}==\"03e7\", GROUP=\"users\", MODE=\"0666\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"\n", + "EOF" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "sh myriad.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- *Note: Replace \"xxxxx\" with your system-password.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"xxxxx\" | sudo -S cp 97-myriad-usbboot.rules /etc/udev/rules.d/ >/dev/null 2>&1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"xxxxx\" | sudo -S udevadm control --reload-rules >/dev/null 2>&1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"xxxxx\" | sudo -S udevadm trigger >/dev/null 2>&1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "Then check if the device is visible with lsusb." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!lsusb" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "The output will be If using NCS1,\n", + "\n", + "```\n", + "Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub\n", + "Bus 001 Device 015: ID 03e7:2150 \n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "If useing NCS2,\n", + "```\n", + "Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub\n", + "Bus 001 Device 015: ID 03e7:2485 \n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Here ID 03e7:2150 without a description string is the Movidius device.\n", + "\n", + "\n", + "Setting up the Environment variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! /opt/intel/openvino/bin/setupvars.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "## Run the sample application on Intel® Movidius™ Neural Compute Stick (NCS)\n", + "\n", + "Set target hardware as Intel® Movidius™ NCS with -d MYRIAD" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -d MYRIAD" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "You will get an error as Intel® Movidius™ NCS supports only FP16 format. \n", + "\n", + "\n", + "\n", + "\n", + "The Model Optimizer by default generate FP32 IR files if the data type is not particularly specified.\n", + "\n", + "Let's run the Model Optimizer to get IR files in FP16 format suitable for the Intel® Movidius™ NCS by setting the data_type flag to FP16." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!cd /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd && mkdir -p FP16" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!cd /opt/intel/openvino/deployment_tools/model_optimizer && python3 mo_caffe.py --input_model /opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/mobilenet-ssd/caffe/mobilenet-ssd.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP16 --scale 256 --mean_values [127,127,127] --data_type FP16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "Check if the .xml and .bin files are created in folder $SV/object-detection/mobilenet-ssd/FP16." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " !cd /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP16 && ls" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "Now run the example application with these new IR files." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP16/mobilenet-ssd.xml -d MYRIAD" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/HW-Acceleration-with-Movidious-NCS/Python/Movidius.png b/HW-Acceleration-with-Movidious-NCS/Python/Movidius.png new file mode 100644 index 00000000..581131b5 Binary files /dev/null and b/HW-Acceleration-with-Movidious-NCS/Python/Movidius.png differ diff --git a/HW-Acceleration-with-Movidious-NCS/Python/ROIs.txt b/HW-Acceleration-with-Movidious-NCS/Python/ROIs.txt new file mode 100644 index 00000000..88071bb9 --- /dev/null +++ b/HW-Acceleration-with-Movidious-NCS/Python/ROIs.txt @@ -0,0 +1,1018 @@ +0 1 6.0 0.99609375 0.44799805 0.7988281 0.63671875 0.99902344 +0 1 6.0 0.9921875 0.6254883 0.4165039 0.7729492 0.6118164 +0 1 6.0 0.99121094 0.41088867 0.52441406 0.5649414 0.7285156 +0 1 6.0 0.76123047 0.46289062 0.27392578 0.5800781 0.42236328 +0 1 6.0 0.5439453 0.32421875 0.37646484 0.4560547 0.5336914 +0 1 6.0 0.5097656 0.23937988 0.29003906 0.33935547 0.39404297 +0 2 6.0 0.9951172 0.4482422 0.8017578 0.6386719 0.99902344 +0 2 6.0 0.9941406 0.6328125 0.42382812 0.7783203 0.6201172 +0 2 6.0 0.9941406 0.41186523 0.52978516 0.56689453 0.72998047 +0 2 6.0 0.75097656 0.46411133 0.2758789 0.5805664 0.42382812 +0 2 6.0 0.7182617 0.3244629 0.37548828 0.45874023 0.53564453 +0 3 6.0 0.9951172 0.63183594 0.42407227 0.78027344 0.62353516 +0 3 6.0 0.9951172 0.4152832 0.53515625 0.56933594 0.73339844 +0 3 6.0 0.9951172 0.4489746 0.7973633 0.63623047 0.9995117 +0 3 6.0 0.7524414 0.32470703 0.3798828 0.46142578 0.53808594 +0 3 6.0 0.7006836 0.46606445 0.27685547 0.5839844 0.4243164 +0 3 6.0 0.53125 0.15734863 0.265625 0.23034668 0.32861328 +0 4 6.0 0.9951172 0.63623047 0.42895508 0.7817383 0.6274414 +0 4 6.0 0.9951172 0.4169922 0.53808594 0.5698242 0.7421875 +0 4 6.0 0.99316406 0.4477539 0.80126953 0.63623047 0.9995117 +0 4 6.0 0.7446289 0.46728516 0.27734375 0.5854492 0.42578125 +0 4 6.0 0.73046875 0.32641602 0.37890625 0.46166992 0.5390625 +0 4 6.0 0.55810547 0.1529541 0.26293945 0.23205566 0.33129883 +0 4 6.0 0.5048828 0.23754883 0.2854004 0.34301758 0.3972168 +0 5 6.0 0.99609375 0.6328125 0.42993164 0.78125 0.6274414 +0 5 6.0 0.9951172 0.44604492 0.8076172 0.6425781 1.0009766 +0 5 6.0 0.9921875 0.42016602 0.5415039 0.5708008 0.74560547 +0 5 6.0 0.76660156 0.46923828 0.2775879 0.58935547 0.42651367 +0 5 6.0 0.6748047 0.32958984 0.3828125 0.46777344 0.53515625 +0 5 6.0 0.5839844 0.1538086 0.26245117 0.22729492 0.3293457 +0 5 6.0 0.50634766 0.2388916 0.27929688 0.34375 0.39648438 +0 6 6.0 0.99609375 0.6357422 0.43530273 0.7832031 0.63378906 +0 6 6.0 0.9941406 0.41992188 0.5361328 0.56884766 0.7480469 +0 6 6.0 0.9892578 0.44213867 0.8144531 0.6386719 0.9980469 +0 6 6.0 0.73339844 0.32885742 0.3828125 0.46704102 0.53808594 +0 6 6.0 0.60595703 0.47094727 0.28076172 0.5913086 0.42382812 +0 6 6.0 0.57421875 0.15283203 0.26464844 0.22241211 0.3310547 +0 6 6.0 0.5048828 0.23852539 0.2788086 0.3449707 0.39746094 +0 7 6.0 0.99609375 0.41992188 0.53515625 0.57177734 0.7558594 +0 7 6.0 0.9951172 0.6333008 0.4345703 0.7836914 0.64453125 +0 7 6.0 0.9838867 0.43896484 0.82177734 0.64208984 0.99853516 +0 7 6.0 0.7631836 0.328125 0.3840332 0.46972656 0.5336914 +0 7 6.0 0.5883789 0.4729004 0.28515625 0.59472656 0.42626953 +0 7 6.0 0.54248047 0.15527344 0.26123047 0.2277832 0.3310547 +0 7 6.0 0.5332031 0.23608398 0.27905273 0.3449707 0.39819336 +0 8 6.0 0.9980469 0.42089844 0.5415039 0.57373047 0.75927734 +0 8 6.0 0.9941406 0.63671875 0.44140625 0.78515625 0.6484375 +0 8 6.0 0.96972656 0.4399414 0.8300781 0.64697266 0.99902344 +0 8 6.0 0.75683594 0.3293457 0.38085938 0.4724121 0.5332031 +0 8 6.0 0.55322266 0.2331543 0.27685547 0.34594727 0.3984375 +0 8 6.0 0.5151367 0.15222168 0.25756836 0.22937012 0.3322754 +0 8 6.0 0.50439453 0.4736328 0.2836914 0.59472656 0.4248047 +0 9 6.0 0.99902344 0.42163086 0.5419922 0.5751953 0.7597656 +0 9 6.0 0.9951172 0.6425781 0.4453125 0.7871094 0.64746094 +0 9 6.0 0.984375 0.43798828 0.8359375 0.64990234 1.0009766 +0 9 6.0 0.78222656 0.3305664 0.3798828 0.47314453 0.5366211 +0 9 6.0 0.53759766 0.23461914 0.2775879 0.3449707 0.40014648 +0 9 6.0 0.5175781 0.15332031 0.26049805 0.22827148 0.33325195 +0 10 6.0 0.99902344 0.42114258 0.55029297 0.57421875 0.76904297 +0 10 6.0 0.9941406 0.6435547 0.43945312 0.7910156 0.6386719 +0 10 6.0 0.96875 0.43603516 0.84277344 0.6557617 1.0029297 +0 10 6.0 0.74853516 0.3322754 0.39111328 0.47436523 0.53466797 +0 10 6.0 0.51123047 0.15625 0.26098633 0.23339844 0.3317871 +0 10 6.0 0.5029297 0.23632812 0.28295898 0.34472656 0.39624023 +0 11 6.0 0.99902344 0.42163086 0.54541016 0.5776367 0.7758789 +0 11 6.0 0.9980469 0.6464844 0.44189453 0.7939453 0.64404297 +0 11 6.0 0.96875 0.43481445 0.8515625 0.65625 1.0078125 +0 11 6.0 0.7553711 0.33447266 0.41601562 0.47314453 0.56640625 +0 11 6.0 0.53515625 0.15405273 0.25976562 0.23339844 0.33154297 +0 12 6.0 0.99902344 0.64453125 0.44384766 0.7949219 0.6489258 +0 12 6.0 0.99902344 0.42285156 0.5493164 0.57714844 0.77490234 +0 12 6.0 0.9589844 0.4350586 0.8544922 0.65478516 1.0117188 +0 12 6.0 0.7524414 0.33496094 0.41235352 0.47265625 0.5654297 +0 12 6.0 0.5097656 0.15698242 0.25927734 0.2331543 0.32861328 +0 13 6.0 1.0 0.6484375 0.44580078 0.7998047 0.6508789 +0 13 6.0 0.99902344 0.42358398 0.55371094 0.57958984 0.7792969 +0 13 6.0 0.9267578 0.43652344 0.8569336 0.64941406 1.0087891 +0 13 6.0 0.8183594 0.33642578 0.41064453 0.47558594 0.56640625 +0 13 6.0 0.5493164 0.15576172 0.2578125 0.23339844 0.32958984 +0 14 6.0 1.0 0.6489258 0.4482422 0.7993164 0.6513672 +0 14 6.0 0.9980469 0.4248047 0.5522461 0.57910156 0.7807617 +0 14 6.0 0.9248047 0.43554688 0.8613281 0.65722656 1.0087891 +0 14 6.0 0.7558594 0.3383789 0.42211914 0.47802734 0.5678711 +0 14 6.0 0.5629883 0.15283203 0.25317383 0.234375 0.33032227 +0 15 6.0 0.99902344 0.6503906 0.44726562 0.8027344 0.6542969 +0 15 6.0 0.9980469 0.4243164 0.56103516 0.58447266 0.78466797 +0 15 6.0 0.8496094 0.44311523 0.8618164 0.65234375 1.0039062 +0 15 6.0 0.7158203 0.34301758 0.4194336 0.48120117 0.5673828 +0 15 6.0 0.62841797 0.15063477 0.2553711 0.23364258 0.33203125 +0 16 6.0 1.0 0.6513672 0.44970703 0.8017578 0.65771484 +0 16 6.0 0.99902344 0.4267578 0.56933594 0.5859375 0.79296875 +0 16 6.0 0.8310547 0.33862305 0.41577148 0.48266602 0.5732422 +0 16 6.0 0.7211914 0.44750977 0.8647461 0.65283203 1.0019531 +0 16 6.0 0.65722656 0.33691406 0.3564453 0.4736328 0.4736328 +0 16 6.0 0.5883789 0.15319824 0.25341797 0.23181152 0.3310547 +0 17 6.0 1.0 0.6533203 0.45043945 0.8046875 0.66064453 +0 17 6.0 0.99902344 0.42651367 0.5751953 0.5878906 0.7988281 +0 17 6.0 0.8432617 0.33862305 0.4194336 0.48364258 0.5727539 +0 17 6.0 0.6582031 0.46044922 0.8676758 0.6586914 1.0029297 +0 17 6.0 0.5600586 0.33666992 0.35986328 0.46899414 0.47021484 +0 17 6.0 0.52685547 0.15478516 0.2536621 0.23144531 0.33081055 +0 18 6.0 1.0 0.65527344 0.45483398 0.8105469 0.66796875 +0 18 6.0 0.99902344 0.4272461 0.58203125 0.59033203 0.7998047 +0 18 6.0 0.8730469 0.34204102 0.41259766 0.4831543 0.57421875 +0 18 6.0 0.5209961 0.4555664 0.8798828 0.6567383 1.0078125 +0 19 6.0 1.0 0.65722656 0.45751953 0.8144531 0.67041016 +0 19 6.0 0.9970703 0.43139648 0.58691406 0.58984375 0.80566406 +0 19 6.0 0.7553711 0.34570312 0.42626953 0.4873047 0.57470703 +0 19 6.0 0.55126953 0.15686035 0.25097656 0.23449707 0.32958984 +0 20 6.0 0.99902344 0.65966797 0.46240234 0.81591797 0.6743164 +0 20 6.0 0.99902344 0.42822266 0.5834961 0.5942383 0.8051758 +0 20 6.0 0.7597656 0.34375 0.42773438 0.48583984 0.578125 +0 20 6.0 0.5336914 0.15454102 0.2475586 0.23291016 0.32958984 +0 21 6.0 0.99902344 0.4267578 0.5839844 0.59472656 0.8095703 +0 21 6.0 0.9980469 0.6591797 0.46044922 0.81933594 0.67626953 +0 21 6.0 0.6411133 0.34375 0.42749023 0.48828125 0.5751953 +0 21 6.0 0.53808594 0.48779297 0.29638672 0.6098633 0.4580078 +0 21 6.0 0.5083008 0.15710449 0.25048828 0.23205566 0.32861328 +0 22 6.0 0.99902344 0.43408203 0.5839844 0.59716797 0.8125 +0 22 6.0 0.9951172 0.66015625 0.45898438 0.8183594 0.68066406 +0 22 6.0 0.7338867 0.34521484 0.43725586 0.4873047 0.5800781 +0 22 6.0 0.5366211 0.1586914 0.25219727 0.23168945 0.32836914 +0 23 6.0 0.99902344 0.4375 0.5854492 0.5966797 0.82177734 +0 23 6.0 0.9902344 0.6591797 0.46289062 0.8183594 0.6767578 +0 23 6.0 0.74658203 0.34765625 0.42700195 0.49169922 0.58203125 +0 23 6.0 0.6386719 0.15405273 0.24291992 0.23510742 0.33032227 +0 23 6.0 0.5463867 0.49536133 0.29760742 0.6118164 0.45629883 +0 24 6.0 0.99902344 0.43896484 0.58447266 0.59814453 0.8256836 +0 24 6.0 0.9873047 0.66308594 0.46557617 0.8232422 0.6875 +0 24 6.0 0.67578125 0.3479004 0.4267578 0.49194336 0.578125 +0 24 6.0 0.58447266 0.15588379 0.24414062 0.23425293 0.32958984 +0 24 6.0 0.5800781 0.49487305 0.29614258 0.61376953 0.4567871 +0 24 6.0 0.55908203 0.34692383 0.38134766 0.4855957 0.5029297 +0 25 6.0 0.9980469 0.44140625 0.5864258 0.6015625 0.8305664 +0 25 6.0 0.9921875 0.66748047 0.46679688 0.82666016 0.6933594 +0 25 6.0 0.6323242 0.15466309 0.24279785 0.23400879 0.32958984 +0 25 6.0 0.59375 0.3491211 0.4345703 0.48876953 0.5761719 +0 25 6.0 0.54296875 0.34570312 0.36669922 0.47998047 0.4741211 +0 26 6.0 0.9980469 0.6665039 0.46728516 0.8276367 0.6958008 +0 26 6.0 0.9970703 0.4399414 0.5932617 0.6010742 0.83447266 +0 26 6.0 0.6621094 0.15539551 0.24353027 0.23522949 0.32910156 +0 26 6.0 0.6230469 0.35107422 0.42822266 0.4921875 0.57958984 +0 26 6.0 0.5917969 0.5 0.2993164 0.6152344 0.4555664 +0 26 6.0 0.53515625 0.34960938 0.38085938 0.4873047 0.50341797 +0 27 6.0 0.9970703 0.4399414 0.60253906 0.6020508 0.8388672 +0 27 6.0 0.99316406 0.67041016 0.46728516 0.82958984 0.6958008 +0 27 6.0 0.65185547 0.15661621 0.2487793 0.23669434 0.3293457 +0 27 6.0 0.6230469 0.35107422 0.4333496 0.49316406 0.5854492 +0 28 6.0 0.99609375 0.67041016 0.47485352 0.8305664 0.6982422 +0 28 6.0 0.9863281 0.44604492 0.60546875 0.6020508 0.8466797 +0 28 6.0 0.65478516 0.15661621 0.24584961 0.23840332 0.32983398 +0 28 6.0 0.5683594 0.3491211 0.4272461 0.49414062 0.57958984 +0 28 6.0 0.55078125 0.3491211 0.38623047 0.4892578 0.50878906 +0 28 6.0 0.52734375 0.5029297 0.3034668 0.6142578 0.4567871 +0 29 6.0 0.9980469 0.6738281 0.48046875 0.8339844 0.7001953 +0 29 6.0 0.98535156 0.44311523 0.6113281 0.60253906 0.8564453 +0 29 6.0 0.7011719 0.15478516 0.24523926 0.23876953 0.33007812 +0 29 6.0 0.5317383 0.5024414 0.30273438 0.61572266 0.45703125 +0 30 6.0 0.9980469 0.67626953 0.48608398 0.83935547 0.7026367 +0 30 6.0 0.99121094 0.44702148 0.6230469 0.609375 0.8564453 +0 30 6.0 0.6870117 0.15612793 0.2479248 0.23718262 0.32910156 +0 31 6.0 0.9970703 0.4482422 0.62597656 0.6123047 0.859375 +0 31 6.0 0.9951172 0.68115234 0.48779297 0.84033203 0.7036133 +0 31 6.0 0.6328125 0.15686035 0.24914551 0.23571777 0.32861328 +0 31 6.0 0.61376953 0.36108398 0.46484375 0.5058594 0.6201172 +0 31 6.0 0.5498047 0.50341797 0.30273438 0.6166992 0.4580078 +0 32 6.0 0.9970703 0.6816406 0.48779297 0.8417969 0.70947266 +0 32 6.0 0.9951172 0.44873047 0.6303711 0.6147461 0.86083984 +0 32 6.0 0.7368164 0.3569336 0.46166992 0.5048828 0.6220703 +0 32 6.0 0.6381836 0.15698242 0.2475586 0.2368164 0.3305664 +0 32 6.0 0.5439453 0.5029297 0.30517578 0.61816406 0.46142578 +0 32 6.0 0.5175781 0.3466797 0.38183594 0.4897461 0.5083008 +0 33 6.0 0.9980469 0.68408203 0.49731445 0.84228516 0.71484375 +0 33 6.0 0.9970703 0.44921875 0.6279297 0.6152344 0.86621094 +0 33 6.0 0.7602539 0.35913086 0.4621582 0.5053711 0.625 +0 33 6.0 0.64208984 0.15991211 0.25 0.23535156 0.32861328 +0 33 6.0 0.61572266 0.5029297 0.30249023 0.6201172 0.46264648 +0 34 6.0 0.99902344 0.4489746 0.6298828 0.6196289 0.87597656 +0 34 6.0 0.9980469 0.6850586 0.49975586 0.8432617 0.71484375 +0 34 6.0 0.7709961 0.36645508 0.46411133 0.5097656 0.62402344 +0 34 6.0 0.68359375 0.5019531 0.30151367 0.6220703 0.46606445 +0 34 6.0 0.59521484 0.16210938 0.25048828 0.23486328 0.32763672 +0 35 6.0 0.99902344 0.4501953 0.63183594 0.6201172 0.88183594 +0 35 6.0 0.9980469 0.68652344 0.5019531 0.8466797 0.7207031 +0 35 6.0 0.64746094 0.36547852 0.4663086 0.50878906 0.6254883 +0 35 6.0 0.6147461 0.15686035 0.24731445 0.2376709 0.3293457 +0 35 6.0 0.51416016 0.50390625 0.30419922 0.62109375 0.46728516 +0 36 6.0 0.99902344 0.453125 0.63378906 0.62109375 0.88671875 +0 36 6.0 0.9970703 0.69091797 0.5097656 0.8491211 0.7236328 +0 36 6.0 0.8251953 0.36987305 0.46606445 0.5102539 0.6274414 +0 36 6.0 0.640625 0.50341797 0.30029297 0.62939453 0.46240234 +0 36 6.0 0.57666016 0.16149902 0.24890137 0.23693848 0.32861328 +0 36 6.0 0.5371094 0.3486328 0.3798828 0.4892578 0.5131836 +0 37 6.0 0.99902344 0.69189453 0.51123047 0.8540039 0.7260742 +0 37 6.0 0.99902344 0.45239258 0.6386719 0.62402344 0.890625 +0 37 6.0 0.75146484 0.37182617 0.4675293 0.5131836 0.62890625 +0 37 6.0 0.7211914 0.5024414 0.3005371 0.6303711 0.4650879 +0 37 6.0 0.55078125 0.1640625 0.24926758 0.23608398 0.32739258 +0 38 6.0 0.9980469 0.69628906 0.51416016 0.85546875 0.7270508 +0 38 6.0 0.9980469 0.44628906 0.6435547 0.625 0.9003906 +0 38 6.0 0.7998047 0.50683594 0.30126953 0.63378906 0.46679688 +0 38 6.0 0.5996094 0.3701172 0.46557617 0.51220703 0.6303711 +0 38 6.0 0.58496094 0.16516113 0.24902344 0.23669434 0.32714844 +0 38 6.0 0.53466797 0.34570312 0.37548828 0.48632812 0.5151367 +0 39 6.0 0.99902344 0.4477539 0.64746094 0.62841797 0.9091797 +0 39 6.0 0.99609375 0.6958008 0.5205078 0.8598633 0.73535156 +0 39 6.0 0.8051758 0.3696289 0.46679688 0.5131836 0.63671875 +0 39 6.0 0.7626953 0.51220703 0.3022461 0.63623047 0.47070312 +0 39 6.0 0.62109375 0.16662598 0.2536621 0.23669434 0.32739258 +0 40 6.0 0.99902344 0.45092773 0.65625 0.62841797 0.9121094 +0 40 6.0 0.99609375 0.6953125 0.5209961 0.86035156 0.7446289 +0 40 6.0 0.8769531 0.36621094 0.4711914 0.515625 0.6411133 +0 40 6.0 0.83740234 0.5126953 0.3022461 0.640625 0.47509766 +0 40 6.0 0.6425781 0.16601562 0.25439453 0.23632812 0.32714844 +0 41 6.0 0.9980469 0.6982422 0.5234375 0.859375 0.7529297 +0 41 6.0 0.9970703 0.45507812 0.66552734 0.6328125 0.9067383 +0 41 6.0 0.9375 0.5136719 0.30004883 0.6435547 0.48364258 +0 41 6.0 0.8911133 0.3720703 0.4699707 0.5185547 0.64697266 +0 41 6.0 0.64501953 0.16711426 0.25317383 0.23620605 0.32592773 +0 42 6.0 0.9980469 0.69873047 0.5229492 0.86083984 0.76123047 +0 42 6.0 0.9970703 0.45410156 0.6689453 0.6298828 0.9169922 +0 42 6.0 0.95947266 0.51171875 0.30151367 0.64746094 0.48266602 +0 42 6.0 0.88134766 0.38256836 0.47192383 0.52246094 0.64746094 +0 42 6.0 0.67041016 0.16577148 0.2536621 0.23632812 0.32641602 +0 43 6.0 0.99902344 0.7026367 0.5239258 0.86572266 0.7495117 +0 43 6.0 0.9980469 0.4572754 0.6767578 0.6328125 0.921875 +0 43 6.0 0.9248047 0.38085938 0.4729004 0.52246094 0.65185547 +0 43 6.0 0.9160156 0.51660156 0.3017578 0.64941406 0.48339844 +0 43 6.0 0.6767578 0.16271973 0.24902344 0.2376709 0.32714844 +0 44 6.0 0.99902344 0.7050781 0.5253906 0.8652344 0.7529297 +0 44 6.0 0.9980469 0.45703125 0.6821289 0.6357422 0.93310547 +0 44 6.0 0.92578125 0.3786621 0.47607422 0.52441406 0.65283203 +0 44 6.0 0.8828125 0.5175781 0.3022461 0.6503906 0.48242188 +0 44 6.0 0.6850586 0.16223145 0.24743652 0.23864746 0.32714844 +0 45 6.0 0.99902344 0.45703125 0.6845703 0.6376953 0.93847656 +0 45 6.0 0.9980469 0.7109375 0.5307617 0.86816406 0.75439453 +0 45 6.0 0.9267578 0.51464844 0.30029297 0.6376953 0.48242188 +0 45 6.0 0.9223633 0.38183594 0.4790039 0.52441406 0.65283203 +0 45 6.0 0.67333984 0.16516113 0.25048828 0.23669434 0.3251953 +0 46 6.0 0.99902344 0.46142578 0.68847656 0.6411133 0.9453125 +0 46 6.0 0.9980469 0.7114258 0.5371094 0.87158203 0.7626953 +0 46 6.0 0.9658203 0.38085938 0.47998047 0.52685547 0.6616211 +0 46 6.0 0.93359375 0.51660156 0.3005371 0.640625 0.48608398 +0 46 6.0 0.65283203 0.16625977 0.24743652 0.23706055 0.32470703 +0 47 6.0 0.99902344 0.71240234 0.53808594 0.8774414 0.7675781 +0 47 6.0 0.99902344 0.45922852 0.69140625 0.640625 0.95214844 +0 47 6.0 0.9760742 0.3828125 0.4802246 0.5288086 0.6621094 +0 47 6.0 0.9165039 0.51708984 0.3005371 0.6411133 0.4855957 +0 47 6.0 0.6176758 0.16577148 0.25097656 0.23754883 0.3256836 +0 48 6.0 0.99902344 0.46069336 0.69677734 0.64453125 0.95751953 +0 48 6.0 0.9970703 0.71191406 0.53564453 0.8769531 0.77490234 +0 48 6.0 0.9790039 0.37939453 0.4790039 0.5317383 0.66064453 +0 48 6.0 0.9448242 0.51660156 0.30273438 0.6425781 0.4873047 +0 48 6.0 0.6323242 0.16442871 0.2512207 0.2388916 0.32739258 +0 49 6.0 0.9970703 0.71240234 0.5419922 0.8803711 0.78125 +0 49 6.0 0.99609375 0.4663086 0.7011719 0.64501953 0.9628906 +0 49 6.0 0.9614258 0.5161133 0.30371094 0.64404297 0.4892578 +0 49 6.0 0.9394531 0.3798828 0.47973633 0.53222656 0.66308594 +0 49 6.0 0.5913086 0.16540527 0.25048828 0.23718262 0.3256836 +0 50 6.0 0.99902344 0.46533203 0.7011719 0.64208984 0.9580078 +0 50 6.0 0.9970703 0.7109375 0.55078125 0.8847656 0.7841797 +0 50 6.0 0.96875 0.3876953 0.5048828 0.53808594 0.6796875 +0 50 6.0 0.9453125 0.5180664 0.30688477 0.64501953 0.4885254 +0 50 6.0 0.58496094 0.16662598 0.24841309 0.2364502 0.32421875 +0 51 6.0 0.9980469 0.7114258 0.5522461 0.8852539 0.78759766 +0 51 6.0 0.9970703 0.47021484 0.70654297 0.64404297 0.97216797 +0 51 6.0 0.9614258 0.38793945 0.50146484 0.54003906 0.6801758 +0 51 6.0 0.9560547 0.51953125 0.30786133 0.64746094 0.48999023 +0 51 6.0 0.6044922 0.16699219 0.24768066 0.23730469 0.32250977 +0 52 6.0 0.9980469 0.71191406 0.5605469 0.88964844 0.7939453 +0 52 6.0 0.9980469 0.47021484 0.71777344 0.64501953 0.9765625 +0 52 6.0 0.97802734 0.39160156 0.5 0.5444336 0.6855469 +0 52 6.0 0.95166016 0.5229492 0.30810547 0.6489258 0.48876953 +0 52 6.0 0.61572266 0.16748047 0.24804688 0.23730469 0.3227539 +0 53 6.0 0.99902344 0.7138672 0.56396484 0.8935547 0.7963867 +0 53 6.0 0.99902344 0.47070312 0.7236328 0.64746094 0.9785156 +0 53 6.0 0.9819336 0.3918457 0.50146484 0.54589844 0.6870117 +0 53 6.0 0.9716797 0.5239258 0.3083496 0.65185547 0.49291992 +0 53 6.0 0.58251953 0.16870117 0.25073242 0.23608398 0.32202148 +0 53 6.0 0.5019531 0.2944336 0.31835938 0.3955078 0.46191406 +0 54 6.0 0.99902344 0.7167969 0.5644531 0.89453125 0.8017578 +0 54 6.0 0.99902344 0.46899414 0.7294922 0.6479492 0.98828125 +0 54 6.0 0.9970703 0.39086914 0.50146484 0.55078125 0.6928711 +0 54 6.0 0.98095703 0.5253906 0.31030273 0.6533203 0.49243164 +0 54 6.0 0.5205078 0.16906738 0.25195312 0.23571777 0.32226562 +0 55 6.0 0.99902344 0.7182617 0.5756836 0.89697266 0.80322266 +0 55 6.0 0.99902344 0.47021484 0.7314453 0.65283203 0.98828125 +0 55 6.0 0.9970703 0.3935547 0.49804688 0.55371094 0.6982422 +0 55 6.0 0.9819336 0.52441406 0.31445312 0.65527344 0.4970703 +0 55 6.0 0.51660156 0.2956543 0.32202148 0.3996582 0.4645996 +0 56 6.0 0.99902344 0.47265625 0.7324219 0.64941406 0.9902344 +0 56 6.0 0.9970703 0.71875 0.5776367 0.89746094 0.8051758 +0 56 6.0 0.99316406 0.39379883 0.50097656 0.55371094 0.6972656 +0 56 6.0 0.98291016 0.5253906 0.31298828 0.6582031 0.50097656 +0 56 6.0 0.5283203 0.16967773 0.24890137 0.23657227 0.32104492 +0 57 6.0 0.99902344 0.71875 0.5786133 0.8984375 0.8100586 +0 57 6.0 0.99902344 0.47753906 0.7421875 0.6484375 0.99121094 +0 57 6.0 0.9902344 0.3930664 0.50390625 0.5551758 0.703125 +0 57 6.0 0.97802734 0.5341797 0.32080078 0.66308594 0.5058594 +0 57 6.0 0.53271484 0.17163086 0.24853516 0.23583984 0.3178711 +0 57 6.0 0.5292969 0.29638672 0.31347656 0.40185547 0.46484375 +0 58 6.0 0.99902344 0.72216797 0.57910156 0.8989258 0.81347656 +0 58 6.0 0.99902344 0.47851562 0.7416992 0.64746094 0.9897461 +0 58 6.0 0.98828125 0.39379883 0.5078125 0.5566406 0.70703125 +0 58 6.0 0.9741211 0.5361328 0.32495117 0.6640625 0.50683594 +0 58 6.0 0.5805664 0.36694336 0.43920898 0.52246094 0.57421875 +0 58 6.0 0.52734375 0.17224121 0.24743652 0.23571777 0.31762695 +0 58 6.0 0.5024414 0.2944336 0.3112793 0.40429688 0.4675293 +0 59 6.0 0.99902344 0.7270508 0.58203125 0.90185547 0.8183594 +0 59 6.0 0.9980469 0.47802734 0.7451172 0.65478516 0.9921875 +0 59 6.0 0.9790039 0.3930664 0.5053711 0.5600586 0.7104492 +0 59 6.0 0.96533203 0.5390625 0.32763672 0.6660156 0.50878906 +0 60 6.0 0.99902344 0.7314453 0.5878906 0.9082031 0.82714844 +0 60 6.0 0.99902344 0.4807129 0.74902344 0.65234375 0.99609375 +0 60 6.0 0.9716797 0.39501953 0.5083008 0.5605469 0.71240234 +0 60 6.0 0.9633789 0.5439453 0.32958984 0.6660156 0.5102539 +0 60 6.0 0.5390625 0.34326172 0.43017578 0.4794922 0.59033203 +0 61 6.0 0.99902344 0.7338867 0.5883789 0.91259766 0.8354492 +0 61 6.0 0.99902344 0.48291016 0.7548828 0.65283203 0.9980469 +0 61 6.0 0.9536133 0.39404297 0.5097656 0.5600586 0.71972656 +0 61 6.0 0.9472656 0.5444336 0.3330078 0.66845703 0.51171875 +0 61 6.0 0.60498047 0.3635254 0.4404297 0.51904297 0.5859375 +0 62 6.0 0.99902344 0.48339844 0.76708984 0.6542969 0.9995117 +0 62 6.0 0.9980469 0.73583984 0.59375 0.91552734 0.8378906 +0 62 6.0 0.9790039 0.39941406 0.5209961 0.5605469 0.7182617 +0 62 6.0 0.9526367 0.5488281 0.33642578 0.6689453 0.51220703 +0 63 6.0 0.9980469 0.73535156 0.59765625 0.9160156 0.8417969 +0 63 6.0 0.9970703 0.48608398 0.7709961 0.65722656 0.9975586 +0 63 6.0 0.9716797 0.40063477 0.52783203 0.56347656 0.72509766 +0 63 6.0 0.9506836 0.54833984 0.33984375 0.67041016 0.5151367 +0 64 6.0 0.9980469 0.7363281 0.6040039 0.9199219 0.8491211 +0 64 6.0 0.99316406 0.484375 0.7841797 0.6621094 0.9941406 +0 64 6.0 0.96875 0.4020996 0.5263672 0.5644531 0.72558594 +0 64 6.0 0.9326172 0.5498047 0.33691406 0.671875 0.5185547 +0 64 6.0 0.5131836 0.1685791 0.24389648 0.23864746 0.32250977 +0 65 6.0 0.99902344 0.7421875 0.6074219 0.92089844 0.85546875 +0 65 6.0 0.99121094 0.48486328 0.78759766 0.6665039 0.99365234 +0 65 6.0 0.9707031 0.4050293 0.53808594 0.56396484 0.7373047 +0 65 6.0 0.9536133 0.55126953 0.3359375 0.67333984 0.52197266 +0 65 6.0 0.5263672 0.16796875 0.24230957 0.24023438 0.32421875 +0 66 6.0 0.99902344 0.7451172 0.61621094 0.921875 0.8535156 +0 66 6.0 0.9863281 0.40527344 0.53222656 0.5683594 0.7402344 +0 66 6.0 0.98095703 0.48486328 0.7963867 0.6635742 0.99560547 +0 66 6.0 0.9199219 0.55126953 0.33813477 0.6743164 0.5234375 +0 67 6.0 0.99902344 0.74365234 0.62060547 0.9223633 0.8569336 +0 67 6.0 0.99316406 0.50097656 0.79589844 0.6738281 1.0009766 +0 67 6.0 0.9770508 0.4086914 0.5371094 0.5673828 0.7421875 +0 67 6.0 0.93359375 0.5517578 0.34155273 0.67578125 0.5258789 +0 68 6.0 0.99609375 0.7446289 0.6230469 0.9243164 0.86328125 +0 68 6.0 0.99121094 0.49414062 0.7993164 0.68066406 1.0 +0 68 6.0 0.9863281 0.41259766 0.5415039 0.5703125 0.74658203 +0 68 6.0 0.86865234 0.55322266 0.3413086 0.6772461 0.52783203 +0 69 6.0 0.9970703 0.7480469 0.62890625 0.9238281 0.8652344 +0 69 6.0 0.9951172 0.49682617 0.80566406 0.6816406 1.0009766 +0 69 6.0 0.9863281 0.41186523 0.5439453 0.57177734 0.74902344 +0 69 6.0 0.93408203 0.55322266 0.34692383 0.6791992 0.53027344 +0 69 6.0 0.5810547 0.3540039 0.47509766 0.48388672 0.6323242 +0 70 6.0 0.99609375 0.50146484 0.80859375 0.68115234 1.0 +0 70 6.0 0.99316406 0.7446289 0.6254883 0.9291992 0.8725586 +0 70 6.0 0.99121094 0.41357422 0.5473633 0.5703125 0.75439453 +0 70 6.0 0.81640625 0.5546875 0.34716797 0.6845703 0.53027344 +0 70 6.0 0.56933594 0.35595703 0.48095703 0.4814453 0.6323242 +0 70 6.0 0.5253906 0.30371094 0.33007812 0.41796875 0.48291016 +0 71 6.0 0.9970703 0.5004883 0.81640625 0.6772461 0.9980469 +0 71 6.0 0.99609375 0.4165039 0.54785156 0.57373047 0.75878906 +0 71 6.0 0.9951172 0.75390625 0.62646484 0.9355469 0.87646484 +0 71 6.0 0.6899414 0.3544922 0.4650879 0.484375 0.63427734 +0 71 6.0 0.64746094 0.5546875 0.3461914 0.6845703 0.5317383 +0 72 6.0 0.9970703 0.41674805 0.5493164 0.57666016 0.76220703 +0 72 6.0 0.9951172 0.4975586 0.8227539 0.6772461 0.99560547 +0 72 6.0 0.9921875 0.7548828 0.6323242 0.93652344 0.8852539 +0 72 6.0 0.8027344 0.5488281 0.33642578 0.6875 0.53027344 +0 72 6.0 0.6694336 0.35717773 0.4675293 0.48168945 0.6352539 +0 73 6.0 0.9951172 0.4194336 0.5625 0.5776367 0.7675781 +0 73 6.0 0.9951172 0.75097656 0.63183594 0.9433594 0.8925781 +0 73 6.0 0.99121094 0.49658203 0.8310547 0.6821289 0.9970703 +0 73 6.0 0.9536133 0.5566406 0.3413086 0.6972656 0.5288086 +0 73 6.0 0.6479492 0.35620117 0.48388672 0.47827148 0.6411133 +0 74 6.0 0.9970703 0.41992188 0.55908203 0.578125 0.77490234 +0 74 6.0 0.99609375 0.76220703 0.6411133 0.9506836 0.9008789 +0 74 6.0 0.9902344 0.5605469 0.3408203 0.7001953 0.5332031 +0 74 6.0 0.9892578 0.5004883 0.84033203 0.6850586 1.0009766 +0 74 6.0 0.68408203 0.3557129 0.4699707 0.48413086 0.64453125 +0 75 6.0 0.9951172 0.7602539 0.64208984 0.9536133 0.90478516 +0 75 6.0 0.99121094 0.4206543 0.5673828 0.578125 0.7753906 +0 75 6.0 0.9863281 0.49951172 0.8442383 0.68896484 1.0019531 +0 75 6.0 0.984375 0.5644531 0.34375 0.7011719 0.53271484 +0 75 6.0 0.5991211 0.3557129 0.4831543 0.4802246 0.6435547 +0 75 6.0 0.5649414 0.30737305 0.33764648 0.42700195 0.49389648 +0 76 6.0 0.9970703 0.7661133 0.64746094 0.95947266 0.9042969 +0 76 6.0 0.99316406 0.42333984 0.5703125 0.5805664 0.78125 +0 76 6.0 0.9716797 0.4975586 0.8491211 0.69189453 1.0009766 +0 76 6.0 0.96875 0.55566406 0.33984375 0.6875 0.5366211 +0 76 6.0 0.69677734 0.3527832 0.48510742 0.48364258 0.64746094 +0 77 6.0 0.99902344 0.76708984 0.6586914 0.9604492 0.9067383 +0 77 6.0 0.99316406 0.42578125 0.5810547 0.58203125 0.78515625 +0 77 6.0 0.9790039 0.49731445 0.8520508 0.69921875 1.0019531 +0 77 6.0 0.96533203 0.5571289 0.3413086 0.6899414 0.53759766 +0 77 6.0 0.68066406 0.37109375 0.4975586 0.50439453 0.64697266 +0 78 6.0 0.9980469 0.76660156 0.6616211 0.9638672 0.9067383 +0 78 6.0 0.99609375 0.42749023 0.5751953 0.5839844 0.78808594 +0 78 6.0 0.9790039 0.5600586 0.3400879 0.6928711 0.5415039 +0 78 6.0 0.96777344 0.49853516 0.859375 0.70166016 1.0019531 +0 78 6.0 0.69091797 0.35424805 0.48339844 0.48657227 0.64941406 +0 79 6.0 0.99609375 0.43066406 0.5864258 0.58691406 0.7963867 +0 79 6.0 0.9951172 0.76660156 0.6621094 0.96484375 0.92089844 +0 79 6.0 0.95166016 0.5004883 0.8623047 0.7026367 1.0019531 +0 79 6.0 0.93603516 0.56103516 0.3413086 0.6928711 0.54248047 +0 79 6.0 0.6879883 0.3552246 0.48339844 0.48266602 0.64941406 +0 80 6.0 0.9970703 0.43041992 0.5854492 0.5859375 0.7973633 +0 80 6.0 0.99316406 0.765625 0.6669922 0.9658203 0.93066406 +0 80 6.0 0.9633789 0.5620117 0.34423828 0.6958008 0.5419922 +0 80 6.0 0.8828125 0.50341797 0.86816406 0.69970703 1.0 +0 80 6.0 0.6660156 0.35742188 0.47851562 0.48583984 0.64941406 +0 81 6.0 0.9980469 0.43310547 0.58740234 0.5883789 0.7993164 +0 81 6.0 0.9970703 0.76660156 0.67822266 0.9736328 0.93310547 +0 81 6.0 0.9589844 0.5644531 0.34814453 0.6972656 0.54248047 +0 81 6.0 0.8378906 0.50146484 0.87402344 0.6958008 1.0019531 +0 81 6.0 0.7763672 0.37304688 0.48583984 0.5078125 0.6508789 +0 82 6.0 0.99902344 0.43139648 0.5786133 0.59375 0.80126953 +0 82 6.0 0.9970703 0.76904297 0.6791992 0.97509766 0.93896484 +0 82 6.0 0.97509766 0.56689453 0.3527832 0.69970703 0.54248047 +0 82 6.0 0.8520508 0.36987305 0.4807129 0.50683594 0.65234375 +0 82 6.0 0.7788086 0.51171875 0.87939453 0.6972656 1.0019531 +0 83 6.0 0.99902344 0.42895508 0.57958984 0.59765625 0.80615234 +0 83 6.0 0.99316406 0.76904297 0.6816406 0.97802734 0.9482422 +0 83 6.0 0.9604492 0.5683594 0.3515625 0.6982422 0.54541016 +0 83 6.0 0.69433594 0.37060547 0.48364258 0.5083008 0.64990234 +0 83 6.0 0.5810547 0.5175781 0.8901367 0.6972656 1.0058594 +0 84 6.0 1.0 0.43066406 0.5786133 0.5986328 0.8129883 +0 84 6.0 0.9941406 0.77246094 0.6870117 0.9824219 0.9526367 +0 84 6.0 0.9472656 0.56933594 0.35351562 0.703125 0.5463867 +0 84 6.0 0.60009766 0.37426758 0.49291992 0.5029297 0.65234375 +0 84 6.0 0.52978516 0.5234375 0.9008789 0.6953125 1.0009766 +0 85 6.0 0.99902344 0.43164062 0.58203125 0.6015625 0.8222656 +0 85 6.0 0.99121094 0.77734375 0.69140625 0.9824219 0.9609375 +0 85 6.0 0.9667969 0.56884766 0.3552246 0.70654297 0.5498047 +0 85 6.0 0.79003906 0.37158203 0.4814453 0.5107422 0.6533203 +0 85 6.0 0.6152344 0.51904297 0.9057617 0.69384766 1.0019531 +0 86 6.0 0.99902344 0.4321289 0.58447266 0.6010742 0.8276367 +0 86 6.0 0.99121094 0.7788086 0.6801758 0.98095703 0.9614258 +0 86 6.0 0.9589844 0.5703125 0.35986328 0.70996094 0.55322266 +0 86 6.0 0.79296875 0.37182617 0.50683594 0.51660156 0.67578125 +0 86 6.0 0.53466797 0.52197266 0.91015625 0.6948242 1.0029297 +0 86 6.0 0.51464844 0.31933594 0.36791992 0.45263672 0.52246094 +0 87 6.0 0.99902344 0.4362793 0.5966797 0.60058594 0.83203125 +0 87 6.0 0.99316406 0.78564453 0.68652344 0.9838867 0.9628906 +0 87 6.0 0.92089844 0.5810547 0.36621094 0.71484375 0.5605469 +0 87 6.0 0.8598633 0.3720703 0.5024414 0.51660156 0.68115234 +0 87 6.0 0.6503906 0.31445312 0.36401367 0.453125 0.53027344 +0 88 6.0 0.9980469 0.43798828 0.6064453 0.6020508 0.83691406 +0 88 6.0 0.9863281 0.7871094 0.69091797 0.9873047 0.9692383 +0 88 6.0 0.9589844 0.58447266 0.36938477 0.7182617 0.56347656 +0 88 6.0 0.91503906 0.3701172 0.49780273 0.5151367 0.6850586 +0 88 6.0 0.54785156 0.31396484 0.37353516 0.45751953 0.5239258 +0 89 6.0 0.9970703 0.43920898 0.6035156 0.60058594 0.8388672 +0 89 6.0 0.99316406 0.7895508 0.69921875 0.98876953 0.97558594 +0 89 6.0 0.96875 0.5854492 0.37060547 0.7192383 0.56591797 +0 89 6.0 0.92089844 0.37402344 0.49853516 0.52001953 0.6850586 +0 89 6.0 0.6850586 0.31347656 0.36328125 0.45166016 0.5283203 +0 90 6.0 0.9951172 0.44140625 0.61035156 0.6015625 0.8417969 +0 90 6.0 0.97802734 0.7885742 0.7026367 0.9897461 0.97802734 +0 90 6.0 0.9291992 0.58691406 0.36791992 0.7207031 0.56933594 +0 90 6.0 0.9223633 0.37573242 0.50927734 0.52490234 0.6899414 +0 91 6.0 0.9892578 0.44091797 0.6118164 0.60791016 0.8520508 +0 91 6.0 0.98828125 0.7910156 0.71777344 0.99121094 0.9824219 +0 91 6.0 0.98095703 0.58935547 0.37036133 0.7211914 0.5703125 +0 91 6.0 0.9404297 0.37646484 0.49853516 0.5214844 0.69384766 +0 91 6.0 0.5498047 0.3137207 0.37060547 0.4519043 0.53466797 +0 92 6.0 0.99316406 0.44482422 0.62109375 0.6088867 0.85253906 +0 92 6.0 0.9892578 0.7895508 0.7260742 1.0039062 0.99072266 +0 92 6.0 0.98095703 0.58935547 0.3708496 0.7241211 0.5761719 +0 92 6.0 0.9453125 0.3779297 0.5097656 0.51904297 0.69921875 +0 92 6.0 0.5390625 0.31079102 0.3671875 0.4494629 0.53027344 +0 93 6.0 0.9941406 0.44384766 0.6220703 0.61083984 0.85546875 +0 93 6.0 0.9921875 0.59228516 0.3774414 0.7270508 0.58251953 +0 93 6.0 0.9921875 0.7895508 0.7265625 1.0068359 0.9921875 +0 93 6.0 0.9267578 0.3786621 0.5004883 0.5151367 0.70458984 +0 94 6.0 0.9980469 0.44628906 0.62402344 0.61328125 0.8642578 +0 94 6.0 0.9819336 0.7885742 0.7285156 1.0068359 0.9951172 +0 94 6.0 0.9633789 0.5957031 0.38305664 0.7265625 0.5859375 +0 94 6.0 0.9038086 0.37597656 0.50927734 0.5180664 0.7026367 +0 95 6.0 0.9980469 0.44580078 0.62597656 0.6147461 0.86816406 +0 95 6.0 0.9892578 0.79248047 0.7314453 1.0058594 0.9951172 +0 95 6.0 0.93359375 0.59521484 0.38427734 0.72802734 0.5991211 +0 95 6.0 0.92822266 0.3803711 0.5097656 0.5229492 0.703125 +0 95 6.0 0.6669922 0.31640625 0.36523438 0.45166016 0.5395508 +0 96 6.0 0.99902344 0.4440918 0.62353516 0.6152344 0.8745117 +0 96 6.0 0.99316406 0.79589844 0.73779297 0.99902344 0.99853516 +0 96 6.0 0.9453125 0.3857422 0.5185547 0.5288086 0.70410156 +0 96 6.0 0.89746094 0.59521484 0.3828125 0.73095703 0.5991211 +0 96 6.0 0.73095703 0.31347656 0.3647461 0.4477539 0.53564453 +0 97 6.0 0.9970703 0.44580078 0.63134766 0.61572266 0.8803711 +0 97 6.0 0.9951172 0.79589844 0.7416992 0.99902344 0.9995117 +0 97 6.0 0.92822266 0.5966797 0.38256836 0.7324219 0.60546875 +0 97 6.0 0.8701172 0.38232422 0.52734375 0.5180664 0.71191406 +0 98 6.0 0.99902344 0.44018555 0.6308594 0.6191406 0.8857422 +0 98 6.0 0.9921875 0.80126953 0.74560547 0.99658203 1.0087891 +0 98 6.0 0.98828125 0.59814453 0.38134766 0.7348633 0.5878906 +0 98 6.0 0.8574219 0.38549805 0.52734375 0.5361328 0.7109375 +0 98 6.0 0.5410156 0.3190918 0.37304688 0.44702148 0.5366211 +0 99 6.0 0.99902344 0.43945312 0.63134766 0.6201172 0.88916016 +0 99 6.0 0.9941406 0.6010742 0.38232422 0.73876953 0.59472656 +0 99 6.0 0.98828125 0.80371094 0.75097656 0.99609375 1.0039062 +0 99 6.0 0.86572266 0.38867188 0.53222656 0.52490234 0.7236328 +0 99 6.0 0.62597656 0.31933594 0.37451172 0.4453125 0.5419922 +0 100 6.0 0.99902344 0.4387207 0.63916016 0.625 0.8959961 +0 100 6.0 0.9951172 0.8144531 0.75634766 0.9970703 1.0 +0 100 6.0 0.9589844 0.5996094 0.38183594 0.7392578 0.5957031 +0 100 6.0 0.9277344 0.38867188 0.5229492 0.52978516 0.72509766 +0 100 6.0 0.51171875 0.32006836 0.37597656 0.44750977 0.53466797 +0 101 6.0 0.99902344 0.43798828 0.6425781 0.62646484 0.9013672 +0 101 6.0 0.9951172 0.8183594 0.7636719 0.9970703 0.99609375 +0 101 6.0 0.97509766 0.38842773 0.52734375 0.5292969 0.73339844 +0 101 6.0 0.9350586 0.60058594 0.38256836 0.7421875 0.5986328 +0 101 6.0 0.5048828 0.3232422 0.38500977 0.44873047 0.53515625 +0 102 6.0 0.99902344 0.4411621 0.6508789 0.6269531 0.9057617 +0 102 6.0 0.99609375 0.81640625 0.77001953 1.0 0.99658203 +0 102 6.0 0.9658203 0.6020508 0.38427734 0.74560547 0.5986328 +0 102 6.0 0.94921875 0.39233398 0.5239258 0.53466797 0.73583984 +0 102 6.0 0.67626953 0.3232422 0.37304688 0.44970703 0.5449219 +0 103 6.0 0.99902344 0.4423828 0.6616211 0.63183594 0.91259766 +0 103 6.0 0.9921875 0.60546875 0.38500977 0.75 0.60058594 +0 103 6.0 0.9921875 0.8173828 0.7734375 0.99609375 0.99316406 +0 103 6.0 0.79003906 0.39672852 0.5566406 0.5410156 0.74316406 +0 103 6.0 0.5253906 0.32958984 0.38378906 0.44677734 0.5546875 +0 104 6.0 1.0 0.44335938 0.66748047 0.63183594 0.9135742 +0 104 6.0 0.9838867 0.60839844 0.38623047 0.75 0.60058594 +0 104 6.0 0.98095703 0.81884766 0.78125 0.9975586 0.9902344 +0 104 6.0 0.75390625 0.40112305 0.57421875 0.5683594 0.74121094 +0 105 6.0 0.99902344 0.44091797 0.6645508 0.63134766 0.9213867 +0 105 6.0 0.9892578 0.60839844 0.3876953 0.75097656 0.60498047 +0 105 6.0 0.984375 0.82128906 0.78222656 0.9980469 0.99121094 +0 105 6.0 0.8730469 0.39892578 0.5419922 0.55029297 0.75097656 +0 105 6.0 0.6635742 0.33081055 0.39013672 0.4489746 0.5551758 +0 106 6.0 0.9980469 0.44189453 0.66796875 0.6333008 0.9355469 +0 106 6.0 0.9921875 0.8232422 0.79052734 0.9970703 0.99658203 +0 106 6.0 0.984375 0.6123047 0.38989258 0.7558594 0.609375 +0 106 6.0 0.86035156 0.39990234 0.54003906 0.5678711 0.7480469 +0 106 6.0 0.61376953 0.33325195 0.3852539 0.45141602 0.55810547 +0 107 6.0 0.99902344 0.45214844 0.67871094 0.63378906 0.93652344 +0 107 6.0 0.99121094 0.8310547 0.79833984 0.99902344 1.0009766 +0 107 6.0 0.9589844 0.6113281 0.39233398 0.75683594 0.6123047 +0 107 6.0 0.9560547 0.40161133 0.53564453 0.5654297 0.75341797 +0 108 6.0 0.99902344 0.45410156 0.6816406 0.6347656 0.9453125 +0 108 6.0 0.9892578 0.8286133 0.7998047 1.0019531 1.0019531 +0 108 6.0 0.9707031 0.6113281 0.39672852 0.7636719 0.6166992 +0 108 6.0 0.9375 0.40112305 0.5488281 0.56347656 0.7558594 +0 108 6.0 0.6645508 0.33276367 0.39624023 0.45532227 0.56689453 +0 109 6.0 0.99902344 0.45825195 0.69140625 0.6357422 0.94628906 +0 109 6.0 0.99121094 0.8354492 0.8066406 1.0019531 1.0019531 +0 109 6.0 0.9892578 0.6113281 0.40112305 0.765625 0.6220703 +0 109 6.0 0.9614258 0.40185547 0.5439453 0.5649414 0.75097656 +0 109 6.0 0.7290039 0.33276367 0.3930664 0.45629883 0.57373047 +0 110 6.0 0.99902344 0.45263672 0.6982422 0.63623047 0.9501953 +0 110 6.0 0.9902344 0.8388672 0.8095703 1.0019531 1.0009766 +0 110 6.0 0.9819336 0.6069336 0.40625 0.7602539 0.6230469 +0 110 6.0 0.9580078 0.40478516 0.5576172 0.56689453 0.75 +0 110 6.0 0.6455078 0.33569336 0.40698242 0.4572754 0.57470703 +0 111 6.0 0.99902344 0.4609375 0.703125 0.63964844 0.953125 +0 111 6.0 0.98535156 0.8354492 0.81347656 1.0019531 1.0029297 +0 111 6.0 0.97998047 0.6088867 0.4086914 0.7631836 0.62353516 +0 111 6.0 0.9550781 0.4033203 0.5595703 0.56591797 0.76171875 +0 111 6.0 0.72509766 0.33789062 0.40283203 0.45654297 0.57373047 +0 112 6.0 0.99902344 0.46142578 0.70654297 0.6401367 0.9633789 +0 112 6.0 0.9838867 0.8388672 0.8227539 1.0029297 0.9975586 +0 112 6.0 0.9790039 0.61035156 0.4091797 0.76464844 0.62890625 +0 112 6.0 0.90527344 0.40673828 0.57128906 0.56689453 0.76953125 +0 112 6.0 0.7636719 0.3359375 0.40185547 0.45751953 0.57373047 +0 113 6.0 0.99902344 0.45874023 0.7167969 0.6386719 0.96484375 +0 113 6.0 0.9716797 0.8354492 0.8286133 1.0019531 0.9975586 +0 113 6.0 0.9667969 0.6123047 0.4104004 0.76953125 0.6357422 +0 113 6.0 0.9160156 0.4091797 0.5673828 0.56933594 0.76953125 +0 113 6.0 0.7753906 0.33813477 0.40722656 0.45874023 0.5727539 +0 114 6.0 0.99902344 0.45898438 0.72558594 0.640625 0.96875 +0 114 6.0 0.9892578 0.61328125 0.4140625 0.77246094 0.640625 +0 114 6.0 0.96435547 0.40942383 0.5644531 0.5698242 0.7783203 +0 114 6.0 0.9550781 0.83496094 0.8364258 1.0019531 0.9975586 +0 114 6.0 0.6425781 0.3413086 0.43408203 0.46728516 0.5756836 +0 115 6.0 0.99902344 0.46411133 0.72314453 0.640625 0.97802734 +0 115 6.0 0.9951172 0.6176758 0.41503906 0.7739258 0.64746094 +0 115 6.0 0.9770508 0.41137695 0.5698242 0.5722656 0.7817383 +0 115 6.0 0.84472656 0.8330078 0.83984375 1.0029297 1.0068359 +0 115 6.0 0.7285156 0.34033203 0.42626953 0.46142578 0.58251953 +0 116 6.0 0.9980469 0.4650879 0.7246094 0.6411133 0.9824219 +0 116 6.0 0.99316406 0.62060547 0.41967773 0.7758789 0.6508789 +0 116 6.0 0.9375 0.41259766 0.57910156 0.57177734 0.77246094 +0 116 6.0 0.87158203 0.34423828 0.41870117 0.47509766 0.5888672 +0 116 6.0 0.7949219 0.8330078 0.84472656 1.0019531 1.0097656 +0 117 6.0 0.99902344 0.46191406 0.72558594 0.6464844 0.98535156 +0 117 6.0 0.9951172 0.6245117 0.42138672 0.77685547 0.6508789 +0 117 6.0 0.95947266 0.4169922 0.59033203 0.5756836 0.7963867 +0 117 6.0 0.88720703 0.8364258 0.8486328 0.9995117 1.0 +0 117 6.0 0.8852539 0.3359375 0.41601562 0.46484375 0.59277344 +0 118 6.0 0.9970703 0.46972656 0.72558594 0.6464844 0.9892578 +0 118 6.0 0.98095703 0.6279297 0.42773438 0.7763672 0.65625 +0 118 6.0 0.9506836 0.41625977 0.5830078 0.57128906 0.7988281 +0 118 6.0 0.8769531 0.33911133 0.41064453 0.47387695 0.59814453 +0 118 6.0 0.7441406 0.8354492 0.8574219 0.99853516 1.0048828 +0 119 6.0 0.99902344 0.46557617 0.7319336 0.6513672 0.9946289 +0 119 6.0 0.97314453 0.6352539 0.43115234 0.77783203 0.65478516 +0 119 6.0 0.94970703 0.41674805 0.5859375 0.57128906 0.79785156 +0 119 6.0 0.8408203 0.33984375 0.41674805 0.4736328 0.6015625 +0 119 6.0 0.59472656 0.8388672 0.86035156 1.0 1.0068359 +0 120 6.0 0.9970703 0.46777344 0.73583984 0.6513672 0.99072266 +0 120 6.0 0.98535156 0.6352539 0.4338379 0.7807617 0.6557617 +0 120 6.0 0.9667969 0.4165039 0.5864258 0.57470703 0.8022461 +0 120 6.0 0.93115234 0.3371582 0.4091797 0.4802246 0.60546875 +0 121 6.0 0.9980469 0.46826172 0.7392578 0.6508789 0.9941406 +0 121 6.0 0.9873047 0.63671875 0.4350586 0.7832031 0.65966797 +0 121 6.0 0.9863281 0.42163086 0.58496094 0.5805664 0.80566406 +0 121 6.0 0.96240234 0.3413086 0.41015625 0.47998047 0.6074219 +0 122 6.0 0.9980469 0.4716797 0.7373047 0.6503906 0.9921875 +0 122 6.0 0.99609375 0.42163086 0.5859375 0.5839844 0.8095703 +0 122 6.0 0.98535156 0.64160156 0.42626953 0.7841797 0.6557617 +0 122 6.0 0.9453125 0.33984375 0.41430664 0.4794922 0.6069336 +0 123 6.0 0.9951172 0.4741211 0.7519531 0.64990234 0.9951172 +0 123 6.0 0.9921875 0.42089844 0.5917969 0.58691406 0.81640625 +0 123 6.0 0.9902344 0.640625 0.42919922 0.7841797 0.6567383 +0 123 6.0 0.94628906 0.33813477 0.4165039 0.47973633 0.6098633 +0 123 6.0 0.5229492 0.24731445 0.25097656 0.32885742 0.33496094 +0 124 6.0 0.9941406 0.42138672 0.5986328 0.5854492 0.81640625 +0 124 6.0 0.99121094 0.6455078 0.43310547 0.7871094 0.6616211 +0 124 6.0 0.9819336 0.47265625 0.765625 0.65234375 0.9951172 +0 124 6.0 0.9116211 0.33666992 0.41455078 0.4807129 0.6147461 +0 125 5.0 0.52197266 0.64160156 0.4326172 0.79296875 0.66308594 +0 125 6.0 0.98291016 0.4777832 0.76464844 0.6533203 0.9970703 +0 125 6.0 0.95703125 0.6459961 0.44067383 0.79052734 0.6689453 +0 125 6.0 0.9350586 0.4255371 0.6069336 0.5839844 0.80810547 +0 125 6.0 0.8959961 0.3383789 0.41748047 0.48291016 0.61865234 +0 125 6.0 0.5307617 0.24145508 0.24731445 0.32836914 0.3347168 +0 126 5.0 0.60302734 0.6464844 0.43554688 0.7949219 0.6660156 +0 126 6.0 0.9838867 0.4255371 0.6123047 0.58691406 0.828125 +0 126 6.0 0.9770508 0.48095703 0.76660156 0.65478516 1.0009766 +0 126 6.0 0.9316406 0.6513672 0.4404297 0.7949219 0.6621094 +0 126 6.0 0.85546875 0.33618164 0.4321289 0.4729004 0.6225586 +0 126 6.0 0.53515625 0.23986816 0.24365234 0.33251953 0.33691406 +0 127 5.0 0.6772461 0.6455078 0.43969727 0.796875 0.67041016 +0 127 6.0 0.9941406 0.42700195 0.60839844 0.5878906 0.83691406 +0 127 6.0 0.98291016 0.48095703 0.77246094 0.6557617 1.0019531 +0 127 6.0 0.9580078 0.6489258 0.4465332 0.79833984 0.6689453 +0 127 6.0 0.8769531 0.3347168 0.4296875 0.47827148 0.62402344 +0 127 6.0 0.5463867 0.2409668 0.24804688 0.33129883 0.33740234 +0 128 6.0 0.9980469 0.64990234 0.44433594 0.79833984 0.6777344 +0 128 6.0 0.9902344 0.42749023 0.6176758 0.58984375 0.8364258 +0 128 6.0 0.9277344 0.4794922 0.7783203 0.66308594 1.0058594 +0 128 6.0 0.8911133 0.34057617 0.4416504 0.48754883 0.625 +0 128 6.0 0.53564453 0.24243164 0.2512207 0.32885742 0.33666992 +0 129 6.0 0.99316406 0.42919922 0.6220703 0.5932617 0.83984375 +0 129 6.0 0.9921875 0.6484375 0.44921875 0.8046875 0.6816406 +0 129 6.0 0.97509766 0.47851562 0.78466797 0.6621094 1.0048828 +0 129 6.0 0.88134766 0.3383789 0.4399414 0.48828125 0.62841797 +0 130 6.0 0.99609375 0.4267578 0.62109375 0.5859375 0.859375 +0 130 6.0 0.9921875 0.64941406 0.44921875 0.8095703 0.6845703 +0 130 6.0 0.96777344 0.4819336 0.7915039 0.6635742 1.0019531 +0 130 6.0 0.96435547 0.33764648 0.4333496 0.49145508 0.63378906 +0 131 6.0 0.99316406 0.4296875 0.62402344 0.5888672 0.8623047 +0 131 6.0 0.98095703 0.48510742 0.7949219 0.6621094 0.9980469 +0 131 6.0 0.97314453 0.33569336 0.43017578 0.49194336 0.6401367 +0 131 6.0 0.9589844 0.65185547 0.45874023 0.80615234 0.69677734 +0 132 5.0 0.58691406 0.65722656 0.45751953 0.8046875 0.68310547 +0 132 6.0 0.98828125 0.42919922 0.62597656 0.58740234 0.8701172 +0 132 6.0 0.9819336 0.48608398 0.79785156 0.6640625 0.9980469 +0 132 6.0 0.96972656 0.3413086 0.4321289 0.49267578 0.63916016 +0 132 6.0 0.80126953 0.65527344 0.45654297 0.80859375 0.69189453 +0 132 6.0 0.5102539 0.23046875 0.24194336 0.32910156 0.3347168 +0 133 6.0 0.9980469 0.43115234 0.63183594 0.5932617 0.875 +0 133 6.0 0.9760742 0.48608398 0.7988281 0.6640625 0.9980469 +0 133 6.0 0.92333984 0.34375 0.4345703 0.49658203 0.6435547 +0 133 6.0 0.91015625 0.65625 0.45996094 0.8125 0.69628906 +0 134 6.0 0.99609375 0.4333496 0.6323242 0.5996094 0.87939453 +0 134 6.0 0.9873047 0.34423828 0.43774414 0.49853516 0.6484375 +0 134 6.0 0.97802734 0.6621094 0.46606445 0.8144531 0.70214844 +0 134 6.0 0.9536133 0.48364258 0.8041992 0.6660156 0.99560547 +0 135 6.0 0.9970703 0.43603516 0.63183594 0.6020508 0.88378906 +0 135 6.0 0.9921875 0.34472656 0.4321289 0.50097656 0.65283203 +0 135 6.0 0.9770508 0.6621094 0.46850586 0.8183594 0.7036133 +0 135 6.0 0.9375 0.48266602 0.80908203 0.66796875 0.9946289 +0 136 6.0 0.9941406 0.43798828 0.63720703 0.6088867 0.8930664 +0 136 6.0 0.9902344 0.34423828 0.43408203 0.5053711 0.65283203 +0 136 6.0 0.97265625 0.66259766 0.4716797 0.8208008 0.70410156 +0 136 6.0 0.8852539 0.47851562 0.8173828 0.6699219 0.9941406 +0 137 6.0 0.98828125 0.6640625 0.47485352 0.82421875 0.7050781 +0 137 6.0 0.9863281 0.43896484 0.63964844 0.6098633 0.89160156 +0 137 6.0 0.98291016 0.34375 0.43139648 0.5078125 0.6533203 +0 137 6.0 0.8613281 0.47753906 0.82421875 0.6796875 0.9970703 +0 138 6.0 0.99121094 0.66308594 0.47705078 0.8261719 0.70654297 +0 138 6.0 0.9892578 0.34472656 0.43969727 0.50878906 0.65966797 +0 138 6.0 0.98828125 0.4404297 0.6425781 0.6171875 0.8964844 +0 138 6.0 0.8510742 0.484375 0.83203125 0.68359375 0.99609375 +0 139 6.0 0.9951172 0.34277344 0.4404297 0.5102539 0.6611328 +0 139 6.0 0.98095703 0.44360352 0.64990234 0.6123047 0.89990234 +0 139 6.0 0.9770508 0.6699219 0.47875977 0.82910156 0.7080078 +0 139 6.0 0.79541016 0.48657227 0.83691406 0.6845703 0.9980469 +0 140 6.0 0.99609375 0.34399414 0.44091797 0.51171875 0.6635742 +0 140 6.0 0.9741211 0.43920898 0.66064453 0.6152344 0.88916016 +0 140 6.0 0.9589844 0.6699219 0.4807129 0.83203125 0.7138672 +0 140 6.0 0.91015625 0.48583984 0.84375 0.68603516 1.0 +0 141 6.0 0.9970703 0.6699219 0.4819336 0.83496094 0.7211914 +0 141 6.0 0.99316406 0.3461914 0.44311523 0.5102539 0.66796875 +0 141 6.0 0.9873047 0.4428711 0.6640625 0.6147461 0.8935547 +0 141 6.0 0.85058594 0.48632812 0.8466797 0.69140625 1.0009766 +0 142 6.0 0.9970703 0.3461914 0.44458008 0.5131836 0.66796875 +0 142 6.0 0.9921875 0.67871094 0.48535156 0.83496094 0.7265625 +0 142 6.0 0.984375 0.4440918 0.67089844 0.62109375 0.90234375 +0 142 6.0 0.8798828 0.48828125 0.85302734 0.68652344 1.0019531 +0 143 6.0 0.99609375 0.3461914 0.4482422 0.5102539 0.67578125 +0 143 6.0 0.9902344 0.6796875 0.4868164 0.83691406 0.7260742 +0 143 6.0 0.98828125 0.44360352 0.6796875 0.62109375 0.9042969 +0 143 6.0 0.8833008 0.48828125 0.85546875 0.6894531 1.0019531 +0 143 6.0 0.5698242 0.22644043 0.24523926 0.328125 0.34033203 +0 144 6.0 0.99609375 0.34326172 0.45947266 0.49560547 0.67333984 +0 144 6.0 0.98828125 0.68310547 0.49267578 0.84033203 0.73779297 +0 144 6.0 0.96875 0.44580078 0.68896484 0.6225586 0.90185547 +0 144 6.0 0.78125 0.49121094 0.85839844 0.6826172 1.0019531 +0 144 6.0 0.63427734 0.23071289 0.23986816 0.33520508 0.34179688 +0 145 6.0 0.99609375 0.3425293 0.45996094 0.49731445 0.6767578 +0 145 6.0 0.9921875 0.45141602 0.6801758 0.62109375 0.9165039 +0 145 6.0 0.9892578 0.6845703 0.4975586 0.84765625 0.7426758 +0 145 6.0 0.7734375 0.4873047 0.86035156 0.6826172 1.0019531 +0 145 6.0 0.65722656 0.22912598 0.2421875 0.3359375 0.33984375 +0 146 6.0 0.9941406 0.34423828 0.46411133 0.5004883 0.67871094 +0 146 6.0 0.9892578 0.4482422 0.68359375 0.62402344 0.9169922 +0 146 6.0 0.98535156 0.6850586 0.49902344 0.85009766 0.7529297 +0 146 6.0 0.7080078 0.4873047 0.85595703 0.67871094 1.0009766 +0 146 6.0 0.65185547 0.22314453 0.2409668 0.3383789 0.3400879 +0 147 5.0 0.8173828 0.6870117 0.5 0.8461914 0.73828125 +0 147 6.0 0.99316406 0.34936523 0.46923828 0.50390625 0.68603516 +0 147 6.0 0.98535156 0.45483398 0.69628906 0.6220703 0.9345703 +0 147 6.0 0.8989258 0.68847656 0.50439453 0.8466797 0.7504883 +0 147 6.0 0.67089844 0.22387695 0.23571777 0.33764648 0.34277344 +0 147 6.0 0.5307617 0.50634766 0.8779297 0.68310547 1.0068359 +0 148 6.0 0.99609375 0.44970703 0.69677734 0.62646484 0.94873047 +0 148 6.0 0.9892578 0.3461914 0.46777344 0.50390625 0.6894531 +0 148 6.0 0.9863281 0.6894531 0.5078125 0.8544922 0.7548828 +0 148 6.0 0.6738281 0.22314453 0.23803711 0.33789062 0.34448242 +0 149 6.0 0.9970703 0.6923828 0.51416016 0.8564453 0.7573242 +0 149 6.0 0.9921875 0.3486328 0.46606445 0.5058594 0.69628906 +0 149 6.0 0.98535156 0.4597168 0.7055664 0.6381836 0.9506836 +0 149 6.0 0.65722656 0.22375488 0.23291016 0.3413086 0.34521484 +0 150 6.0 0.9970703 0.45507812 0.7026367 0.63964844 0.97314453 +0 150 6.0 0.9951172 0.35107422 0.47607422 0.5073242 0.6977539 +0 150 6.0 0.97265625 0.6977539 0.5151367 0.85791016 0.7583008 +0 150 6.0 0.6586914 0.22460938 0.23120117 0.33984375 0.34301758 +0 151 5.0 0.6064453 0.69921875 0.5258789 0.859375 0.75634766 +0 151 6.0 0.9980469 0.3515625 0.47314453 0.5078125 0.7036133 +0 151 6.0 0.9951172 0.45410156 0.7109375 0.6435547 0.9716797 +0 151 6.0 0.7128906 0.22631836 0.23217773 0.33862305 0.3449707 +0 151 6.0 0.65625 0.7001953 0.5180664 0.859375 0.76220703 +0 152 5.0 0.6196289 0.70214844 0.52441406 0.85839844 0.7597656 +0 152 6.0 0.9980469 0.35302734 0.47509766 0.5102539 0.7055664 +0 152 6.0 0.9980469 0.46142578 0.70996094 0.6430664 0.9814453 +0 152 6.0 0.6298828 0.22277832 0.23608398 0.33740234 0.3479004 +0 152 6.0 0.53564453 0.70214844 0.51953125 0.85839844 0.76660156 +0 153 6.0 0.9980469 0.35375977 0.47583008 0.5126953 0.7128906 +0 153 6.0 0.9970703 0.46240234 0.71435547 0.64208984 0.97509766 +0 153 6.0 0.75439453 0.7026367 0.5180664 0.86572266 0.7729492 +0 153 6.0 0.6176758 0.22253418 0.24194336 0.33764648 0.3479004 +0 154 6.0 0.99902344 0.35620117 0.4790039 0.5107422 0.71240234 +0 154 6.0 0.99609375 0.46044922 0.71728516 0.6459961 0.9790039 +0 154 6.0 0.9223633 0.7036133 0.5253906 0.8666992 0.7685547 +0 154 6.0 0.671875 0.22399902 0.23864746 0.33764648 0.34936523 +0 155 6.0 0.99902344 0.35913086 0.484375 0.51123047 0.71875 +0 155 6.0 0.9892578 0.46899414 0.72265625 0.64697266 0.98339844 +0 155 6.0 0.9819336 0.7114258 0.5307617 0.87060547 0.77001953 +0 155 6.0 0.6699219 0.22460938 0.23901367 0.3388672 0.34936523 +0 156 6.0 0.99902344 0.36035156 0.484375 0.51660156 0.7167969 +0 156 6.0 0.9951172 0.46850586 0.72265625 0.6542969 0.9824219 +0 156 6.0 0.95410156 0.7104492 0.53222656 0.87060547 0.7783203 +0 156 6.0 0.6933594 0.22607422 0.24243164 0.3388672 0.3479004 +0 157 6.0 1.0 0.36523438 0.48510742 0.51660156 0.71875 +0 157 6.0 0.9951172 0.4724121 0.7285156 0.6513672 0.98828125 +0 157 6.0 0.96777344 0.70947266 0.53515625 0.8725586 0.7832031 +0 157 6.0 0.6621094 0.22509766 0.24438477 0.33789062 0.34448242 +0 158 6.0 1.0 0.36083984 0.49023438 0.5180664 0.72558594 +0 158 6.0 0.99609375 0.4699707 0.73095703 0.65625 0.9848633 +0 158 6.0 0.9707031 0.7089844 0.5371094 0.8769531 0.7910156 +0 158 6.0 0.63134766 0.22473145 0.24499512 0.3388672 0.34570312 +0 159 6.0 1.0 0.36621094 0.49023438 0.5214844 0.7294922 +0 159 6.0 0.9951172 0.70703125 0.54003906 0.88183594 0.796875 +0 159 6.0 0.9951172 0.47314453 0.74121094 0.66064453 0.9921875 +0 159 6.0 0.58691406 0.2232666 0.24902344 0.34106445 0.3515625 +0 160 6.0 1.0 0.36816406 0.49243164 0.5214844 0.74121094 +0 160 6.0 0.9951172 0.7089844 0.5439453 0.8847656 0.8017578 +0 160 6.0 0.9838867 0.47460938 0.75 0.65722656 0.98828125 +0 160 6.0 0.63378906 0.22814941 0.25170898 0.33984375 0.35131836 +0 161 6.0 1.0 0.36816406 0.49047852 0.5234375 0.7480469 +0 161 6.0 0.99609375 0.47631836 0.75390625 0.65234375 0.9892578 +0 161 6.0 0.99121094 0.70996094 0.5449219 0.88671875 0.8017578 +0 161 6.0 0.7109375 0.22814941 0.25146484 0.33911133 0.34960938 +0 162 6.0 1.0 0.36694336 0.4946289 0.52490234 0.75634766 +0 162 6.0 0.9980469 0.4724121 0.7553711 0.6513672 0.99560547 +0 162 6.0 0.9941406 0.7133789 0.5493164 0.8901367 0.80615234 +0 162 6.0 0.77246094 0.22583008 0.25048828 0.33911133 0.3544922 +0 163 6.0 0.99902344 0.36914062 0.5029297 0.5263672 0.7597656 +0 163 6.0 0.9951172 0.4741211 0.7631836 0.65185547 0.9926758 +0 163 6.0 0.99316406 0.7158203 0.5527344 0.8925781 0.8076172 +0 163 6.0 0.78564453 0.22509766 0.25 0.3408203 0.35742188 +0 164 6.0 0.99902344 0.36816406 0.5097656 0.53027344 0.76464844 +0 164 6.0 0.9980469 0.47583008 0.77197266 0.6503906 0.99560547 +0 164 6.0 0.94970703 0.72021484 0.5605469 0.89404297 0.8144531 +0 164 6.0 0.77246094 0.22705078 0.2536621 0.34228516 0.35620117 +0 165 6.0 0.9980469 0.3635254 0.5078125 0.5332031 0.77734375 +0 165 6.0 0.9970703 0.47729492 0.78027344 0.64941406 0.9941406 +0 165 6.0 0.9707031 0.72216797 0.5761719 0.8989258 0.8154297 +0 165 6.0 0.7890625 0.22753906 0.2553711 0.34179688 0.3540039 +0 166 6.0 0.99902344 0.37109375 0.5175781 0.5283203 0.7607422 +0 166 6.0 0.99902344 0.47705078 0.78515625 0.65478516 0.9980469 +0 166 6.0 0.94921875 0.7236328 0.5805664 0.9013672 0.82470703 +0 166 6.0 0.75683594 0.22766113 0.25585938 0.3400879 0.36035156 +0 167 5.0 0.56591797 0.72509766 0.57421875 0.90966797 0.8359375 +0 167 6.0 0.99902344 0.3671875 0.5151367 0.5371094 0.77978516 +0 167 6.0 0.9970703 0.47753906 0.7939453 0.65625 1.0 +0 167 6.0 0.7841797 0.72558594 0.5810547 0.90722656 0.8310547 +0 167 6.0 0.73291016 0.2290039 0.25830078 0.34033203 0.36132812 +0 168 5.0 0.8100586 0.7260742 0.5839844 0.91064453 0.83496094 +0 168 6.0 0.99902344 0.36914062 0.5214844 0.53222656 0.7685547 +0 168 6.0 0.9970703 0.47607422 0.7988281 0.6567383 1.0 +0 168 6.0 0.7495117 0.22973633 0.25756836 0.34155273 0.3605957 +0 168 6.0 0.56347656 0.7270508 0.5839844 0.9086914 0.84375 +0 169 6.0 0.99902344 0.36767578 0.5239258 0.5336914 0.77685547 +0 169 6.0 0.984375 0.47436523 0.80322266 0.65966797 1.0009766 +0 169 6.0 0.8984375 0.73095703 0.58203125 0.9116211 0.84277344 +0 169 6.0 0.7133789 0.23071289 0.2602539 0.3425293 0.3564453 +0 170 5.0 0.8432617 0.7373047 0.5908203 0.9160156 0.8486328 +0 170 6.0 0.99902344 0.3701172 0.52441406 0.54248047 0.78027344 +0 170 6.0 0.984375 0.47558594 0.7973633 0.6611328 1.0009766 +0 170 6.0 0.66259766 0.23095703 0.25854492 0.34179688 0.35864258 +0 170 6.0 0.54248047 0.7373047 0.5864258 0.9140625 0.8461914 +0 171 5.0 0.8232422 0.7373047 0.59472656 0.92089844 0.85253906 +0 171 6.0 1.0 0.37060547 0.5292969 0.53515625 0.77734375 +0 171 6.0 0.9941406 0.47558594 0.8046875 0.65722656 1.0019531 +0 171 6.0 0.6933594 0.73876953 0.5888672 0.9165039 0.8496094 +0 171 6.0 0.6425781 0.23181152 0.25878906 0.3413086 0.3618164 +0 172 6.0 1.0 0.37109375 0.5292969 0.53808594 0.7919922 +0 172 6.0 0.9921875 0.47558594 0.8144531 0.65625 1.0019531 +0 172 6.0 0.9394531 0.73828125 0.5913086 0.9238281 0.86083984 +0 172 6.0 0.6298828 0.23339844 0.25976562 0.34375 0.36132812 +0 173 6.0 1.0 0.37451172 0.53125 0.54003906 0.7890625 +0 173 6.0 0.99121094 0.4765625 0.8251953 0.65722656 1.0019531 +0 173 6.0 0.9428711 0.7421875 0.58691406 0.9248047 0.8613281 +0 173 6.0 0.5986328 0.23461914 0.26000977 0.34350586 0.36108398 +0 174 6.0 1.0 0.37890625 0.53271484 0.5395508 0.7944336 +0 174 6.0 0.97998047 0.4765625 0.82910156 0.66015625 1.0009766 +0 174 6.0 0.9350586 0.74365234 0.5986328 0.9243164 0.8574219 +0 174 6.0 0.5644531 0.23510742 0.25561523 0.34204102 0.36157227 +0 175 6.0 1.0 0.3803711 0.53759766 0.5395508 0.8041992 +0 175 6.0 0.9760742 0.74609375 0.6040039 0.9267578 0.86279297 +0 175 6.0 0.9741211 0.47583008 0.83496094 0.6621094 1.0029297 +0 175 6.0 0.5551758 0.23632812 0.25708008 0.3413086 0.36108398 +0 176 6.0 1.0 0.37841797 0.54345703 0.5395508 0.80615234 +0 176 6.0 0.98095703 0.47021484 0.84228516 0.6665039 1.0039062 +0 176 6.0 0.96777344 0.75 0.6152344 0.9277344 0.8691406 +0 176 6.0 0.6020508 0.23376465 0.2548828 0.3449707 0.3618164 +0 177 6.0 0.99902344 0.38085938 0.54589844 0.54052734 0.8144531 +0 177 6.0 0.9790039 0.47070312 0.8466797 0.67089844 1.0048828 +0 177 6.0 0.7265625 0.7524414 0.6171875 0.93896484 0.8779297 +0 177 6.0 0.57910156 0.23535156 0.25830078 0.34570312 0.3623047 +0 178 6.0 0.99902344 0.38208008 0.55078125 0.5395508 0.8203125 +0 178 6.0 0.9472656 0.48095703 0.8535156 0.6791992 1.0029297 +0 178 6.0 0.7734375 0.7558594 0.6225586 0.93359375 0.88427734 +0 178 6.0 0.5449219 0.23376465 0.25341797 0.34887695 0.3647461 +0 179 6.0 0.9970703 0.38354492 0.5546875 0.54296875 0.82128906 +0 179 6.0 0.95410156 0.48291016 0.85302734 0.6772461 1.0019531 +0 179 6.0 0.8364258 0.7626953 0.62597656 0.94433594 0.8886719 +0 179 6.0 0.5732422 0.23413086 0.25219727 0.3474121 0.3635254 +0 180 6.0 0.9980469 0.38061523 0.56640625 0.5498047 0.8232422 +0 180 6.0 0.93603516 0.48217773 0.8598633 0.6777344 1.0019531 +0 180 6.0 0.9086914 0.765625 0.6308594 0.95214844 0.89160156 +0 180 6.0 0.5522461 0.23693848 0.2553711 0.34423828 0.36376953 +0 181 6.0 0.9980469 0.38305664 0.56591797 0.55126953 0.82373047 +0 181 6.0 0.9472656 0.7680664 0.6357422 0.95654297 0.89746094 +0 181 6.0 0.90625 0.47680664 0.8618164 0.68359375 1.0029297 +0 181 6.0 0.50683594 0.23840332 0.25830078 0.34277344 0.36328125 +0 182 6.0 0.9970703 0.38232422 0.5673828 0.55859375 0.8300781 +0 182 6.0 0.9838867 0.76708984 0.63720703 0.9604492 0.89990234 +0 182 6.0 0.7519531 0.48535156 0.8623047 0.6845703 1.0009766 +0 182 6.0 0.546875 0.23730469 0.2541504 0.34570312 0.3630371 +0 183 6.0 0.9980469 0.3815918 0.5683594 0.55859375 0.8330078 +0 183 6.0 0.9448242 0.76953125 0.640625 0.9638672 0.8984375 +0 183 6.0 0.63623047 0.23706055 0.25048828 0.34887695 0.3618164 +0 184 6.0 0.9980469 0.38378906 0.5727539 0.5600586 0.83447266 +0 184 6.0 0.96435547 0.77246094 0.64208984 0.96484375 0.9086914 +0 184 6.0 0.5253906 0.23962402 0.2475586 0.3466797 0.36328125 +0 185 6.0 0.99902344 0.3876953 0.57177734 0.55859375 0.8413086 +0 185 6.0 0.98291016 0.77246094 0.6430664 0.96972656 0.91064453 +0 186 6.0 0.9980469 0.3828125 0.5810547 0.55859375 0.85058594 +0 186 6.0 0.97265625 0.7758789 0.64746094 0.97021484 0.9121094 +0 187 6.0 0.9980469 0.38183594 0.58251953 0.5595703 0.85791016 +0 187 6.0 0.984375 0.7739258 0.6489258 0.97216797 0.9243164 +0 188 6.0 0.99902344 0.38671875 0.5859375 0.56347656 0.8652344 +0 188 6.0 0.9658203 0.7792969 0.65234375 0.9746094 0.9355469 +0 189 6.0 0.99902344 0.3840332 0.58984375 0.5625 0.86816406 +0 189 6.0 0.96240234 0.7783203 0.66015625 0.97558594 0.94628906 +0 190 6.0 0.99902344 0.3864746 0.5917969 0.5654297 0.8720703 +0 190 6.0 0.92333984 0.78027344 0.66503906 0.97558594 0.94628906 +0 191 6.0 0.99902344 0.38745117 0.5942383 0.5708008 0.8833008 +0 191 6.0 0.7988281 0.7832031 0.6772461 0.9785156 0.9526367 +0 192 5.0 0.54003906 0.78515625 0.6611328 0.9785156 0.96484375 +0 192 6.0 0.9980469 0.3881836 0.6020508 0.5722656 0.8754883 +0 192 6.0 0.80371094 0.7832031 0.6816406 0.98046875 0.9658203 +0 193 6.0 0.99902344 0.3869629 0.60498047 0.57421875 0.8823242 +0 193 6.0 0.9873047 0.7817383 0.6791992 0.9975586 0.9682617 +0 194 6.0 1.0 0.38623047 0.61035156 0.57421875 0.8886719 +0 194 6.0 0.9135742 0.78271484 0.69189453 0.9916992 0.9692383 +0 195 6.0 1.0 0.3869629 0.6118164 0.57421875 0.90185547 +0 195 6.0 0.9482422 0.7915039 0.6923828 0.99072266 0.9707031 +0 196 6.0 1.0 0.38964844 0.61621094 0.578125 0.90625 +0 196 6.0 0.9140625 0.79248047 0.69140625 0.99365234 0.9794922 +0 197 6.0 1.0 0.3930664 0.62109375 0.5761719 0.9013672 +0 197 6.0 0.9560547 0.79003906 0.6953125 0.99902344 0.9863281 +0 198 6.0 1.0 0.39257812 0.6225586 0.58203125 0.90283203 +0 198 6.0 0.9550781 0.79833984 0.69970703 0.99853516 0.98779297 +0 199 6.0 1.0 0.39404297 0.6254883 0.5805664 0.90478516 +0 199 6.0 0.9448242 0.8071289 0.7036133 0.9995117 0.9946289 +0 200 6.0 1.0 0.39990234 0.62841797 0.5805664 0.91845703 +0 200 6.0 0.97314453 0.80908203 0.7050781 0.9995117 0.9941406 +0 201 6.0 1.0 0.3984375 0.6333008 0.58447266 0.9243164 +0 201 6.0 0.96875 0.8105469 0.7084961 0.99902344 0.9916992 +0 202 6.0 1.0 0.39990234 0.6381836 0.58496094 0.9399414 +0 202 6.0 0.97314453 0.81152344 0.71972656 0.9980469 0.9941406 +0 203 6.0 0.99902344 0.40039062 0.63964844 0.5854492 0.9472656 +0 203 6.0 0.9741211 0.8149414 0.7236328 0.9975586 0.9941406 +0 204 6.0 0.99902344 0.3894043 0.6489258 0.5859375 0.94970703 +0 204 6.0 0.9658203 0.8178711 0.73046875 0.9975586 0.99609375 +0 205 6.0 1.0 0.3959961 0.65283203 0.5878906 0.95654297 +0 205 6.0 0.96240234 0.8203125 0.73779297 0.99609375 1.0019531 +0 206 6.0 1.0 0.3984375 0.6660156 0.5883789 0.95703125 +0 206 6.0 0.9716797 0.82470703 0.7392578 0.99560547 1.0009766 +0 207 6.0 0.99902344 0.3959961 0.6669922 0.58984375 0.9560547 +0 207 6.0 0.9863281 0.82958984 0.7392578 0.99560547 1.0009766 +0 208 6.0 0.99902344 0.4025879 0.66748047 0.5917969 0.9604492 +0 208 6.0 0.984375 0.83203125 0.7470703 0.9970703 0.9980469 +0 209 6.0 0.99902344 0.40600586 0.6743164 0.5996094 0.97021484 +0 209 6.0 0.97265625 0.8334961 0.74658203 0.99658203 1.0019531 +0 210 6.0 0.99902344 0.40576172 0.67578125 0.59814453 0.9814453 +0 210 6.0 0.98535156 0.8383789 0.7548828 0.99560547 1.0039062 +0 211 6.0 0.99902344 0.40820312 0.6796875 0.60058594 0.98339844 +0 211 6.0 0.9707031 0.8432617 0.7583008 0.99560547 1.0019531 +0 212 6.0 1.0 0.4116211 0.6826172 0.6020508 0.9902344 +0 212 6.0 0.94384766 0.8432617 0.7636719 0.99658203 1.0078125 +0 213 6.0 0.99902344 0.41796875 0.6928711 0.6015625 0.99658203 +0 213 6.0 0.94921875 0.8413086 0.76904297 0.9975586 1.0068359 +0 214 6.0 1.0 0.41357422 0.70458984 0.60498047 0.9916992 +0 214 6.0 0.94384766 0.84277344 0.7783203 0.9970703 1.0039062 +0 215 6.0 1.0 0.4169922 0.7036133 0.59765625 0.9946289 +0 215 6.0 0.95166016 0.8432617 0.78125 0.99658203 1.0039062 +0 215 6.0 0.52490234 0.2841797 0.26245117 0.39648438 0.40161133 +0 216 6.0 1.0 0.4165039 0.7080078 0.60009766 0.9970703 +0 216 6.0 0.9633789 0.8496094 0.7919922 0.99609375 1.0029297 +0 216 6.0 0.53808594 0.2849121 0.25952148 0.39819336 0.40600586 +0 217 6.0 1.0 0.41552734 0.71484375 0.6010742 0.9980469 +0 217 6.0 0.9892578 0.85058594 0.7998047 0.9970703 1.0029297 +0 218 6.0 1.0 0.42041016 0.72265625 0.61376953 0.9873047 +0 218 6.0 0.97802734 0.85546875 0.8051758 0.99609375 1.0087891 +0 218 6.0 0.6948242 0.2866211 0.25732422 0.40234375 0.40820312 +0 219 6.0 1.0 0.4182129 0.72753906 0.61279297 0.9892578 +0 219 6.0 0.94628906 0.86376953 0.8066406 0.99658203 1.0126953 +0 219 6.0 0.7519531 0.28515625 0.25585938 0.40478516 0.41015625 +0 220 6.0 1.0 0.41992188 0.72802734 0.6113281 0.9848633 +0 220 6.0 0.9482422 0.86328125 0.8120117 0.9941406 1.0136719 +0 220 6.0 0.63916016 0.2866211 0.25732422 0.40234375 0.4091797 +0 221 6.0 0.99902344 0.42041016 0.72998047 0.61376953 0.9838867 +0 221 6.0 0.9316406 0.8647461 0.8125 0.99365234 1.0136719 +0 221 6.0 0.7402344 0.2866211 0.25463867 0.40234375 0.41137695 +0 222 6.0 0.9980469 0.4189453 0.73291016 0.6220703 0.9848633 +0 222 6.0 0.88427734 0.86083984 0.81591797 0.9946289 1.0107422 +0 222 6.0 0.63623047 0.29077148 0.26000977 0.40356445 0.40844727 +0 223 6.0 0.9980469 0.42260742 0.74072266 0.6171875 0.98876953 +0 223 6.0 0.71191406 0.8666992 0.81689453 0.9946289 1.0146484 +0 223 6.0 0.67822266 0.29077148 0.2602539 0.40356445 0.41064453 +0 224 6.0 0.9941406 0.42236328 0.7480469 0.62646484 0.9902344 +0 224 6.0 0.70458984 0.2902832 0.26220703 0.40307617 0.41455078 +0 224 6.0 0.57666016 0.8720703 0.8364258 0.99902344 0.99853516 +0 225 6.0 0.99609375 0.42456055 0.75341797 0.62890625 0.99365234 +0 225 6.0 0.6958008 0.29052734 0.25830078 0.4038086 0.41503906 +0 225 6.0 0.61621094 0.8754883 0.84375 0.9995117 0.9951172 +0 226 6.0 0.9970703 0.42456055 0.75878906 0.6303711 0.9892578 +0 226 6.0 0.78271484 0.8676758 0.84716797 1.0009766 1.0039062 +0 226 6.0 0.5629883 0.29077148 0.26049805 0.40356445 0.4128418 +0 227 6.0 0.9980469 0.42382812 0.765625 0.6328125 0.99121094 +0 227 6.0 0.7841797 0.8730469 0.85009766 1.0039062 1.0039062 +0 227 6.0 0.6196289 0.29077148 0.2548828 0.40551758 0.42089844 +0 228 6.0 0.9970703 0.4267578 0.77197266 0.6347656 0.9916992 +0 228 6.0 0.72021484 0.87402344 0.8540039 1.0048828 1.0039062 +0 228 6.0 0.52685547 0.29248047 0.26171875 0.40478516 0.41992188 +0 229 6.0 0.99902344 0.43017578 0.7783203 0.63623047 0.99316406 +0 229 6.0 0.5541992 0.8833008 0.859375 1.0029297 1.0019531 +0 229 6.0 0.5175781 0.29125977 0.265625 0.40600586 0.4169922 +0 230 6.0 0.9970703 0.42700195 0.7871094 0.6401367 0.9970703 +0 230 6.0 0.5756836 0.2841797 0.2692871 0.41064453 0.4333496 +0 231 6.0 0.99316406 0.42529297 0.79296875 0.64404297 0.9941406 +0 232 6.0 0.9873047 0.42993164 0.79345703 0.6455078 0.9975586 +0 232 6.0 0.5336914 0.2861328 0.27148438 0.4111328 0.43847656 +0 233 6.0 0.99316406 0.4272461 0.79541016 0.64404297 0.99853516 +0 233 6.0 0.6040039 0.28588867 0.2783203 0.41625977 0.4350586 +0 234 6.0 0.9941406 0.42944336 0.8022461 0.6464844 0.99560547 +0 235 6.0 0.9951172 0.4243164 0.8105469 0.6489258 0.99609375 +0 235 6.0 0.53515625 0.2939453 0.28173828 0.41601562 0.4375 +0 236 6.0 0.99316406 0.42700195 0.81689453 0.6513672 0.9946289 +0 236 6.0 0.5703125 0.29467773 0.28173828 0.41870117 0.4399414 +0 237 6.0 0.9863281 0.43041992 0.82470703 0.6479492 0.9946289 +0 237 6.0 0.72509766 0.29785156 0.26660156 0.421875 0.44140625 +0 238 6.0 0.9863281 0.43164062 0.82910156 0.6503906 0.9951172 +0 239 6.0 0.9550781 0.43115234 0.83203125 0.65283203 0.9921875 +0 240 6.0 0.96875 0.42211914 0.8378906 0.65625 0.9980469 +0 240 6.0 0.6357422 0.29638672 0.28076172 0.4248047 0.44384766 +0 241 6.0 0.97802734 0.4321289 0.8461914 0.6616211 0.9995117 +0 241 6.0 0.59375 0.2993164 0.27783203 0.42529297 0.44140625 +0 242 6.0 0.98828125 0.43676758 0.8496094 0.66015625 1.0019531 +0 242 6.0 0.70996094 0.2993164 0.27978516 0.42529297 0.44726562 +0 243 6.0 0.98291016 0.44091797 0.8564453 0.6567383 1.0019531 +0 244 6.0 0.9580078 0.4375 0.859375 0.6611328 1.0039062 +0 245 6.0 0.71728516 0.43701172 0.8652344 0.65966797 1.0039062 +0 246 6.0 0.64990234 0.44091797 0.8666992 0.6635742 1.0039062 +0 247 6.0 0.5107422 0.44067383 0.8725586 0.6801758 1.0068359 +0 248 6.0 0.5102539 0.29785156 0.31274414 0.42626953 0.45483398 +0 249 6.0 0.50927734 0.29956055 0.30566406 0.42651367 0.4560547 diff --git a/HW-Acceleration-with-Movidious-NCS/Python/myriad.sh b/HW-Acceleration-with-Movidious-NCS/Python/myriad.sh new file mode 100644 index 00000000..d768d4f1 --- /dev/null +++ b/HW-Acceleration-with-Movidious-NCS/Python/myriad.sh @@ -0,0 +1,6 @@ + +cat < 97-myriad-usbboot.rules +SUBSYSTEM=="usb", ATTRS{idProduct}=="2150", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1" +SUBSYSTEM=="usb", ATTRS{idProduct}=="2485", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1" +SUBSYSTEM=="usb", ATTRS{idProduct}=="f63b", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1" +EOF diff --git a/HW-Acceleration-with-Movidious-NCS/Python/tutorial1.py b/HW-Acceleration-with-Movidious-NCS/Python/tutorial1.py new file mode 100644 index 00000000..a2bb3fd3 --- /dev/null +++ b/HW-Acceleration-with-Movidious-NCS/Python/tutorial1.py @@ -0,0 +1,236 @@ +#!/usr/bin/env python +""" + Copyright (c) 2019 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" + +from __future__ import print_function +import sys +import os +from argparse import ArgumentParser +import cv2 +import time +import logging as log +from openvino.inference_engine import IENetwork, IEPlugin +from enum import Enum +import collections + + + +class output_mode_type(Enum): + CLASSIFICATION_MODE=1 + SSD_MODE=2 + + +def build_argparser(): + parser = ArgumentParser() + parser.add_argument("-m", "--model", help="Path to an .xml file with a trained model.", required=True, type=str) + parser.add_argument("-i", "--input", + help="Path to video file or image. 'cam' for capturing video stream from camera", required=True, + type=str) + parser.add_argument("-l", "--cpu_extension", + help="MKLDNN (CPU)-targeted custom layers.Absolute path to a shared library with the kernels " + "impl.", type=str, default=None) + parser.add_argument("-pp", "--plugin_dir", help="Path to a plugin folder", type=str, default=None) + parser.add_argument("-d", "--device", + help="Specify the target device to infer on; CPU, GPU, FPGA or MYRIAD is acceptable. Demo " + "will look for a suitable plugin for device specified (CPU by default)", default="CPU", + type=str) + parser.add_argument("--labels", help="Labels mapping file", default=None, type=str) + parser.add_argument("-pt", "--prob_threshold", help="Probability threshold for detections filtering", + default=0.5, type=float) + parser.add_argument("-fr", help="maximum frames to process", default=256, type=int) + parser.add_argument("-b", help="Batch size", default=1, type=int) + + return parser + + +def main(): + log.basicConfig(format="[ %(levelname)s ] %(message)s", level=log.INFO, stream=sys.stdout) + args = build_argparser().parse_args() + model_xml = args.model + model_bin = os.path.splitext(model_xml)[0] + ".bin" + + preprocess_times = collections.deque() + infer_times = collections.deque() + postprocess_times = collections.deque() + + ROIfile=open("ROIs.txt","w"); # output stored here, view with ROIviewer + + # Plugin initialization for specified device and load extensions library if specified + log.info("Initializing plugin for {} device...".format(args.device)) + plugin = IEPlugin(device=args.device, plugin_dirs=args.plugin_dir) + if args.cpu_extension and 'CPU' in args.device: + plugin.add_cpu_extension(args.cpu_extension) + + + # Read IR + log.info("Reading IR...") + net = IENetwork(model=model_xml, weights=model_bin) + + if plugin.device == "CPU": + supported_layers = plugin.get_supported_layers(net) + not_supported_layers = [l for l in net.layers.keys() if l not in supported_layers] + if len(not_supported_layers) != 0: + log.error("Following layers are not supported by the plugin for specified device {}:\n {}". + format(plugin.device, ', '.join(not_supported_layers))) + log.error("Please try to specify cpu extensions library path in demo's command line parameters using -l " + "or --cpu_extension command line argument") + sys.exit(1) + + #Set Batch Size + net.batch_size = args.b + batchSize = net.batch_size + frameLimit = args.fr + assert len(net.inputs.keys()) == 1, "Demo supports only single input topologies" + assert len(net.outputs) == 1, "Demo supports only single output topologies" + input_blob = next(iter(net.inputs)) + out_blob = next(iter(net.outputs)) + log.info("Loading IR to the plugin...") + exec_net = plugin.load(network=net, num_requests=2) + + # Read and pre-process input image + n, c, h, w = net.inputs[input_blob].shape + output_dims=net.outputs[out_blob].shape + infer_width=w; + infer_height=h; + num_channels=c; + channel_size=infer_width*infer_height + full_image_size=channel_size*num_channels + + print("inputdims=",w,h,c,n) + print("outputdims=",output_dims[3],output_dims[2],output_dims[1],output_dims[0]) + if int(output_dims[3])>1 : + print("SSD Mode") + output_mode=output_mode_type.SSD_MODE + else: + print("Single Classification Mode") + output_mode=CLASSIFICATION_MODE + output_data_size=int(output_dims[2])*int(output_dims[1])*int(output_dims[0]) + del net + if args.input == 'cam': + input_stream = 0 + else: + input_stream = args.input + assert os.path.isfile(args.input), "Specified input file doesn't exist" + if args.labels: + with open(args.labels, 'r') as f: + labels_map = [x.strip() for x in f] + else: + labels_map = None + + cap = cv2.VideoCapture(input_stream) + + cur_request_id = 0 + next_request_id = 1 + + is_async_mode =True + if (is_async_mode == True): + log.info("Starting inference in async mode...") + else : + log.info("Starting inference in sync mode...") + + render_time = 0 + + framenum = 0 + process_more_frames=True + frames_in_output=batchSize + + while process_more_frames: + time1 = time.time() + for mb in range(0 , batchSize): + ret, frame = cap.read() + if not ret or (framenum >= frameLimit): + process_more_frames=False + frames_in_output=mb + + if (not process_more_frames): + break + + # convert image to blob + # Fill input tensor with planes. First b channel, then g and r channels + in_frame = cv2.resize(frame, (w, h)) + in_frame = in_frame.transpose((2, 0, 1)) # Change data layout from HWC to CHW + + + time2 = time.time() + diffPreProcess = time2 - time1 + if process_more_frames: + preprocess_times.append(diffPreProcess*1000) + + # Main sync point: + # in the truly Async mode we start the NEXT infer request, while waiting for the CURRENT to complete + # in the regular mode we start the CURRENT request and immediately wait for it's completion + inf_start = time.time() + if is_async_mode: + exec_net.start_async(request_id=next_request_id, inputs={input_blob: in_frame}) + else: + exec_net.start_async(request_id=cur_request_id, inputs={input_blob: in_frame}) + if exec_net.requests[cur_request_id].wait(-1) == 0: + inf_end = time.time() + det_time = inf_end - inf_start + infer_times.append(det_time*1000) + time1 = time.time() + + for mb in range(0 , batchSize): + if (framenum >= frameLimit): + process_more_frames=False; + break; + + # Parse detection results of the current request + res = exec_net.requests[cur_request_id].outputs[out_blob] + for obj in res[0][0]: + # Write into ROIs.txt only objects when probability more than specified threshold + if obj[2] > args.prob_threshold: + confidence=obj[2] + locallabel = obj[1] - 1 + print(str(0),str(framenum),str(locallabel),str(confidence),str(obj[3]),str(obj[4]),str(obj[5]),str(obj[6]), file=ROIfile) + + + sys.stdout.write("\rframenum:"+str(framenum + 1)) + sys.stdout.flush() + render_start = time.time() + framenum = framenum+1 + + time2 = time.time() + diffPostProcess = time2 - time1 + postprocess_times.append(diffPostProcess*1000) + + if is_async_mode: + cur_request_id, next_request_id = next_request_id, cur_request_id + + + print("\n") + preprocesstime=0 + inferencetime=0 + postprocesstime=0 + + for obj in preprocess_times: + preprocesstime+=obj + for obj in infer_times: + inferencetime+=obj + for obj in postprocess_times: + postprocesstime+=obj + + + print("Preprocess: {:.2f} ms/frame".format(preprocesstime/(len(preprocess_times)*batchSize))) + print("Inference: {:.2f} ms/frame ".format(inferencetime/(len(infer_times)*batchSize))) + print("Postprocess: {:.2f} ms/frame".format(postprocesstime/(len(postprocess_times)*batchSize))) + + del exec_net + del plugin + + +if __name__ == '__main__': + sys.exit(main() or 0) diff --git a/README.md b/README.md index 39554d6d..b2a3c86d 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,49 @@ -# Optimized Inference at the Edge with Intel® Tools and Technologies -This workshop will walk you through a computer vision workflow using the latest Intel® technologies and comprehensive toolkits including support for deep learning algorithms that help accelerate smart video applications. You will learn how to optimize and improve performance with and without external accelerators and utilize tools to help you identify the best hardware configuration for your needs. This workshop will also outline the various frameworks and topologies supported by Intel® accelerator tools. +# Optimized Inference at the Edge with Intel® Tools and Technologies +This workshop will walk you through a computer vision workflow using the latest Intel® technologies and comprehensive toolkits including support for deep learning algorithms that help accelerate smart video applications. You will learn how to optimize and improve performance with and without external accelerators and utilize tools to help you identify the best hardware configuration for your needs. This workshop will also outline the various frameworks and topologies supported by Intel® accelerator tools. ## How to Get Started - -> :warning: For the in-class training, the hardware and software setup part has already been done on the workshop hardware. In-class training participants should directly move to Workshop Agenda section. + +> :warning: For the in-class training, the hardware and software setup part has already been done on the workshop hardware. In-class training participants should directly move to Workshop Agenda section. In order to use this workshop content, you will need to setup your hardware and install the Intel® Distribution of OpenVINO™ toolkit for infering your computer vision application. ### 1. Hardware requirements The hardware requirements are mentioned in the System Requirement section of the [install guide](https://software.intel.com/en-us/articles/OpenVINO-Install-Linux) ### 2. Operating System -These labs have been validated on Ubuntu* 16.04 OS. +These labs have been validated on Ubuntu* 16.04 OS. ### 3. Software installation steps -#### a). Install Intel® Distribution of OpenVINO™ toolkit +#### a). Install Intel® Distribution of OpenVINO™ toolkit Use steps described in the [install guide](https://software.intel.com/en-us/articles/OpenVINO-Install-Linux) -to install the Intel® Distribution of OpenVINO™ toolkit, configure Model Optimizer, run the demos, additional steps to install Intel® Media SDK and OpenCL™ mentioned in the the guide. +to install the Intel® Distribution of OpenVINO™ toolkit, configure Model Optimizer, run the demos, additional steps to install Intel® Media SDK and OpenCL™ mentioned in the the guide. #### b). Install git, python libraries sudo apt install git sudo apt install python3-pip - + #### c). Run the demo scipts and compile samples -Delete $HOME/inference_engine_samples folder if it already exists. +Delete $HOME/inference_engine_samples folder if it already exists. rm -rf $HOME/inference_engine_samples - -Run demo scripts (any one of them or both if you want to both the demos) which will generate the folder $HOME/inference_engine_samples with the current Intel® Distribution of OpenVINO™ toolkit built. + +Run demo scripts (any one of them or both if you want to both the demos) which will generate the folder $HOME/inference_engine_samples with the current Intel® Distribution of OpenVINO™ toolkit built. cd /opt/intel/openvino/deployment_tools/demo ./demo_squeezenet_download_convert_run.sh ./demo_security_barrier_camera.sh - + sudo chown -R username.username $HOME/inference_engine_samples_build cd $HOME/inference_engine_samples_build make - + #### d). Download models using model downloader scripts in Intel® Distribution of OpenVINO™ toolkit installed folder - - Install python3 (version 3.5.2 or newer) + - Install python3 (version 3.5.2 or newer) - Install yaml and requests modules with command: sudo -E pip3 install pyyaml requests - + - Run model downloader script to download example deep learning models - + cd /opt/intel/openvino/deployment_tools/tools/model_downloader sudo python3 downloader.py --name mobilenet-ssd,ssd300,ssd512,squeezenet1.1,face-detection-retail-0004,face-detection-retail-0004-fp16,age-gender-recognition-retail-0013,age-gender-recognition-retail-0013-fp16,head-pose-estimation-adas-0001,head-pose-estimation-adas-0001-fp16,emotions-recognition-retail-0003,emotions-recognition-retail-0003-fp16,facial-landmarks-35-adas-0002,facial-landmarks-35-adas-0002-fp16 @@ -51,55 +51,108 @@ Run demo scripts (any one of them or both if you want to both the demos) which w #### e). Install Intel® System Studio, VNC viewer and Setup on development machine Follow the [guide](./up2-vision-kit/setup_intel_system_studio_2019.md) to install Intel® System Studio and VNC viewer on your development machine. - -> :warning: This workshop content has been validated with Intel® Distribution of OpenVINO™ toolkit version R1 (openvino_toolkit_2019.1.094). - +#### f). Install Jupyter Notebook and Opencv +Install Jupyter Notebook using below command + + pip3 install jupyter + +Install Opencv2 using below command + + pip3 install opencv-python + +#### g). Run the Jupyter Notebook +1. Create the workshop directory from a terminal: + +```bash +sudo mkdir -p /opt/intel/workshop/ +``` +2. Change ownership of the workshop directory to the current user: + +```bash +sudo chown username.username -R /opt/intel/workshop/ +``` +3. Navigate to the new directory: +```bash + cd /opt/intel/workshop/ +``` + +4. Clone the current Git Pull request repository to /opt/intel/workshop + +5. Navigate to Root directory in new terminal + +```bash + $ cd / +``` + + +6. Run the Jupyter Notebook +```bash + $ jupyter notebook +``` + +7. It opens in default browser, locate the required jupyter notebook (.ipynb) file and double click on it to open and run. + +> :warning: This workshop content has been validated with Intel® Distribution of OpenVINO™ toolkit version R1 (openvino_toolkit_2019.1.094). + + ## Workshop Agenda * **Smart Video/Computer Vision Tools Overview** + - Slides - [Introduction to Smart Video Tools](./presentations/01-Introduction-to-Intel-Smart-Video-Tools.pdf) * **Training a Deep Learning Model** - Slides - [Training a Deep Learning Model](./presentations/DL_training_model.pdf) - - Lab - [Training a Deep Learning Model](./dl-model-training/README.md) - + - Lab - Training a Deep Learning Model [[Default](./dl-model-training/README.md)] [[Python](./dl-model-training/Python/Deep_Learning_Tutorial.ipynb)] + * **Basic End to End Object Detection Inference Example** + - Slides - [Basic End to End Object Detection Example](./presentations/02-03_Basic-End-to-End-Object-Detection-Example.pdf) - - Lab - [Basic End to End Object Detection Example](./object-detection/README.md) - - Lab - [Tensor Flow example](./advanced-video-analytics/tensor_flow.md) + - Lab - Basic End to End Object Detection Example [[C++](./object-detection/README.md)] [[Python](./object-detection/Python/basic_end_to_end_object_detection.ipynb)] + - Lab - Tensor Flow example [[C++](./advanced-video-analytics/tensor_flow.md)] [[Python](./object-detection/Python/Tensor_Flow_example.ipynb)] * **Hardware Heterogeneity** - - Lab - [Hardware Heterogeneity](./hardware-heterogeneity/README.md) + + - Lab - Hardware Heterogeneity [[C++](./hardware-heterogeneity/README.md)] [[Python](./hardware-heterogeneity/Python/hardware-heterogeneity.ipynb)] * **HW Acceleration with Intel® Movidius™ Neural Compute Stick** - - Lab - [HW Acceleration with Intel® Movidius™ Neural Compute Stick](./HW-Acceleration-with-Movidious-NCS/README.md) - + - Lab - HW Acceleration with Intel® Movidius™ Neural Compute Stick [[C++](./HW-Acceleration-with-Movidious-NCS/README.md)] [[Python](./HW-Acceleration-with-Movidious-NCS/Python/HW_Acceleration_with_Movidius_NCS.ipynb)] + * **FPGA Inference Accelerator** + - Slides - [HW Acceleration with Intel® FPGA](./presentations/04-HW-Acceleration-with-FPGA.pdf) -* **Optimization Tools and Techniques** +* **Optimization Tools and Techniques** + - Slides - [Optimization Tools and Techniques](/presentations/04-05_Optimization_and_advanced_analytics.pdf) - - Lab 1 - [Optimization Tools and Techniques](./optimization-tools-and-techniques/README.md) + - Lab 1 - Optimization Tools and Techniques [[C++](./optimization-tools-and-techniques/README.md)] [[Python](./optimization-tools-and-techniques/Python/optimization_tools_and_techniques.ipynb)] - Lab 2- [Intel® VTune™ Amplifier tutorial](./optimization-tools-and-techniques/README_VTune.md) - + + * **Advanced Video Analytics** - - Lab - [Multiple models usage example](./advanced-video-analytics/multiple_models.md) - + + - Lab - Multiple models usage example [[C++](./advanced-video-analytics/multiple_models.md)] [[Python](./advanced-video-analytics/Python/advanced_video_analytics.ipynb)] + + * **UP²\* AI Vision Development kit as Edge** + - Setup - [Development machine and Internet Connection Sharing](./up2-vision-kit/dev_machine_setup.md) - Lab - [Interact face detection on UP2 kit using Intel® System Studio](./up2-vision-kit/openvino-projects-using-iss2019.md) - + + * **Additional Examples - Reference Implementations** - - Industrial - - [Safety Gear Detection](./safety-gear-example/README.md) + - Industrial + + - [Safety Gear Detection](./safety-gear-example/README.md) - [Restricted Zone Notifier](https://github.com/intel-iot-devkit/restricted-zone-notifier-cpp) - - [Object Size Detector](https://github.com/intel-iot-devkit/object-size-detector-cpp) - - Retail - - [Store Traffic Monitor](https://github.com/intel-iot-devkit/store-traffic-monitor) + - [Object Size Detector](https://github.com/intel-iot-devkit/object-size-detector-cpp) + - Retail + + - [Store Traffic Monitor](https://github.com/intel-iot-devkit/store-traffic-monitor) - [Shopper Gaze Monitor](https://github.com/intel-iot-devkit/shopper-gaze-monitor-cpp) - + > #### Disclaimer -> Intel and the Intel logo are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries. - +> Intel and the Intel logo are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries. + > *Other names and brands may be claimed as the property of others diff --git a/advanced-video-analytics/Python/.ipynb_checkpoints/advanced_video_analytics-checkpoint.ipynb b/advanced-video-analytics/Python/.ipynb_checkpoints/advanced_video_analytics-checkpoint.ipynb new file mode 100644 index 00000000..19d719b5 --- /dev/null +++ b/advanced-video-analytics/Python/.ipynb_checkpoints/advanced_video_analytics-checkpoint.ipynb @@ -0,0 +1,535 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "## Advanced Video Analytics\n", + "\n", + "The tutorial shows some techniques for developing advanced video analytics applications.
\n", + "\n", + "### Part 1. Chaining models: Use mutiple models in an application\n", + "\n", + "The Intel® Distribution of OpenVINO™ toolkit package includes security barrier sample which uses 3 models to detect cars, their number plates, color and number plate attributes from the input video or image of the cars. The sample demo script is provided in the Intel® Distribution of OpenVINO™ toolkit package to run the sample.\n", + "\n", + "#### 1. Navigate to the security camera barrier sample build directory and setup the environment variables" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[setupvars.sh] OpenVINO environment initialized\r\n" + ] + } + ], + "source": [ + "!/opt/intel/openvino/bin/setupvars.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### 2. Run the executable for the security barrier sample with the mobilenet-ssd* model used in the first tutorial" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ INFO ] Initializing plugin for CPU device...\n", + "[ INFO ] Loading network files for Vehicle Detection\n", + "[ INFO ] Checking Vehicle Detection network inputs\n", + "[ INFO ] Checking Vehicle Detection network outputs\n", + "[ INFO ] Loading IR to the plugin...\n", + "[ INFO ] Starting inference ...\n", + "[ INFO ] To stop the demo execution press Esc button\n", + "[ INFO ] Execution successful\n" + ] + } + ], + "source": [ + "! python3 demo_security_barrier_camera.py -i /opt/intel/openvino/deployment_tools/demo/car_1.bmp -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -d CPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "#### 3. Run the security camera sample with Intel optimized pre-trained models" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[sudo] password for intel: Run sudo -E apt -y install build-essential python3-pip virtualenv cmake libcairo2-dev libpango1.0-dev libglib2.0-dev libgtk2.0-dev libswscale-dev libavcodec-dev libavformat-dev libgstreamer1.0-0 gstreamer1.0-plugins-base\n", + "Get:1 https://download.docker.com/linux/ubuntu xenial InRelease [66.2 kB]\n", + "Hit:2 http://linux.teamviewer.com/deb stable InRelease \u001b[0m\n", + "Get:3 https://repos.influxdata.com/ubuntu xenial InRelease [4,731 B] \u001b[0m\n", + "Hit:4 http://ppa.launchpad.net/teejee2008/ppa/ubuntu xenial InRelease \u001b[0m\u001b[33m\u001b[33m\u001b[33m\n", + "Get:5 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB][0m\u001b[33m\u001b[33m\n", + "Hit:6 http://us.archive.ubuntu.com/ubuntu xenial InRelease0m\n", + "Get:7 http://us.archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB] \u001b[0m\u001b[33m\n", + "Hit:8 https://packages.grafana.com/oss/deb stable InRelease \u001b[0m\u001b[33m\u001b[33m\n", + "Get:9 http://security.ubuntu.com/ubuntu xenial-security/main amd64 DEP-11 Metadata [67.9 kB]\n", + "Get:10 http://us.archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB][0m0m\u001b[33m\u001b[33m\n", + "Get:11 http://security.ubuntu.com/ubuntu xenial-security/main DEP-11 64x64 Icons [67.0 kB]\n", + "Get:12 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 DEP-11 Metadata [116 kB]\n", + "Get:13 http://us.archive.ubuntu.com/ubuntu xenial-proposed InRelease [260 kB] \u001b[0m\u001b[33m\u001b[33m\u001b[33m\n", + "Get:14 http://security.ubuntu.com/ubuntu xenial-security/universe DEP-11 64x64 Icons [173 kB]3m\u001b[33m\u001b[33m\n", + "Get:15 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [941 kB]3m\u001b[33m\u001b[33m\u001b[33m\n", + "Get:16 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 DEP-11 Metadata [2,464 B]\n", + "Get:17 http://us.archive.ubuntu.com/ubuntu xenial-updates/main i386 Packages [817 kB]33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\n", + "Get:18 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 DEP-11 Metadata [318 kB]\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\n", + "Get:19 http://us.archive.ubuntu.com/ubuntu xenial-updates/main DEP-11 64x64 Icons [231 kB]33m\u001b[33m\u001b[33m\u001b[33m\u001b[33m\n", + "Get:20 http://us.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 DEP-11 Metadata [252 kB]m\u001b[33m\u001b[33m\n", + "Get:21 http://us.archive.ubuntu.com/ubuntu xenial-updates/universe DEP-11 64x64 Icons [350 kB][33m\u001b[33m\n", + "Get:22 http://us.archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 DEP-11 Metadata [5,964 B]33m\u001b[33m\n", + "Get:23 http://us.archive.ubuntu.com/ubuntu xenial-updates/multiverse DEP-11 64x64 Icons [14.3 kB]\n", + "Get:24 http://us.archive.ubuntu.com/ubuntu xenial-backports/main amd64 DEP-11 Metadata [3,328 B]\n", + "Get:25 http://us.archive.ubuntu.com/ubuntu xenial-backports/universe amd64 DEP-11 Metadata [5,104 B]\n", + "Get:26 http://us.archive.ubuntu.com/ubuntu xenial-proposed/main amd64 Packages [45.5 kB]\n", + "Get:27 http://us.archive.ubuntu.com/ubuntu xenial-proposed/main i386 Packages [31.2 kB]m\u001b[33m\n", + "Get:28 http://us.archive.ubuntu.com/ubuntu xenial-proposed/main Translation-en [18.1 kB]\u001b[33m\n", + "Get:29 http://us.archive.ubuntu.com/ubuntu xenial-proposed/universe amd64 DEP-11 Metadata [14.7 kB]\n", + "Fetched 4,131 kB in 27s (150 kB/s) \u001b[0m\u001b[33m\u001b[33m\n", + "Reading package lists... Done\n", + "Building dependency tree \n", + "Reading state information... Done\n", + "29 packages can be upgraded. Run 'apt list --upgradable' to see them.\n", + "Reading package lists... Done\n", + "Building dependency tree \n", + "Reading state information... Done\n", + "build-essential is already the newest version (12.1ubuntu2).\n", + "libcairo2-dev is already the newest version (1.14.6-1).\n", + "libpango1.0-dev is already the newest version (1.38.1-1).\n", + "cmake is already the newest version (3.5.1-1ubuntu3).\n", + "gstreamer1.0-plugins-base is already the newest version (1.8.3-1ubuntu0.2).\n", + "libglib2.0-dev is already the newest version (2.48.2-0ubuntu4.1).\n", + "libgstreamer1.0-0 is already the newest version (1.8.3-1~ubuntu0.1).\n", + "libgtk2.0-dev is already the newest version (2.24.30-1ubuntu1.16.04.2).\n", + "libavcodec-dev is already the newest version (7:2.8.15-0ubuntu0.16.04.1).\n", + "libavformat-dev is already the newest version (7:2.8.15-0ubuntu0.16.04.1).\n", + "libswscale-dev is already the newest version (7:2.8.15-0ubuntu0.16.04.1).\n", + "python3-pip is already the newest version (8.1.1-2ubuntu0.4).\n", + "virtualenv is already the newest version (15.0.1+ds-3ubuntu1).\n", + "0 upgraded, 0 newly installed, 0 to remove and 29 not upgraded.\n", + "Reading package lists... Done\n", + "Building dependency tree \n", + "Reading state information... Done\n", + "libpng12-dev is already the newest version (1.2.54-1ubuntu1.1).\n", + "0 upgraded, 0 newly installed, 0 to remove and 29 not upgraded.\n", + "\u001b[33mThe directory '/home/intel/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.\u001b[0m\n", + "\u001b[33mThe directory '/home/intel/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.\u001b[0m\n", + "Requirement already satisfied (use --upgrade to upgrade): pyyaml in /home/intel/.local/lib/python3.5/site-packages\n", + "Requirement already satisfied (use --upgrade to upgrade): requests in /usr/lib/python3/dist-packages\n", + "\u001b[33mYou are using pip version 8.1.1, however version 19.1 is available.\n", + "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n", + "[setupvars.sh] OpenVINO environment initialized\n", + "\n", + "\n", + "###################################################\n", + "\n", + "Downloading Intel models\n", + "\n", + "target_precision = FP32\n", + "\n", + "vehicle-license-plate-detection-barrier-0106 have been loaded previously, skip loading model step.\n", + "vehicle-attributes-recognition-barrier-0039 have been loaded previously, skip loading model step.\n", + "license-plate-recognition-barrier-0001 have been loaded previously, skip loading model step.\n", + "\n", + "\n", + "###################################################\n", + "\n", + "Build Inference Engine samples\n", + "\n", + "-- Looking for C++ include unistd.h\n", + "-- Looking for C++ include unistd.h - found\n", + "-- Looking for C++ include stdint.h\n", + "-- Looking for C++ include stdint.h - found\n", + "-- Looking for C++ include sys/types.h\n", + "-- Looking for C++ include sys/types.h - found\n", + "-- Looking for C++ include fnmatch.h\n", + "-- Looking for C++ include fnmatch.h - found\n", + "-- Looking for C++ include stddef.h\n", + "-- Looking for C++ include stddef.h - found\n", + "-- Check size of uint32_t\n", + "-- Check size of uint32_t - done\n", + "-- Looking for strtoll\n", + "-- Looking for strtoll - found\n", + "-- Found InferenceEngine: /opt/intel/openvino_2019.1.094/deployment_tools/inference_engine/lib/intel64/libinference_engine.so (Required is at least version \"1.6\") \n", + "-- Performing Test HAVE_CPUID_INFO\n", + "-- Performing Test HAVE_CPUID_INFO - Success\n", + "-- Host CPU features:\n", + "-- 3DNOW not supported\n", + "-- 3DNOWEXT not supported\n", + "-- ABM not supported\n", + "-- ADX supported\n", + "-- AES supported\n", + "-- AVX supported\n", + "-- AVX2 supported\n", + "-- AVX512CD not supported\n", + "-- AVX512F not supported\n", + "-- AVX512ER not supported\n", + "-- AVX512PF not supported\n", + "-- BMI1 supported\n", + "-- BMI2 supported\n", + "-- CLFSH supported\n", + "-- CMPXCHG16B supported\n", + "-- CX8 supported\n", + "-- ERMS supported\n", + "-- F16C supported\n", + "-- FMA supported\n", + "-- FSGSBASE supported\n", + "-- FXSR supported\n", + "-- HLE supported\n", + "-- INVPCID supported\n", + "-- LAHF supported\n", + "-- LZCNT supported\n", + "-- MMX supported\n", + "-- MMXEXT not supported\n", + "-- MONITOR supported\n", + "-- MOVBE supported\n", + "-- MSR supported\n", + "-- OSXSAVE supported\n", + "-- PCLMULQDQ supported\n", + "-- POPCNT supported\n", + "-- PREFETCHWT1 not supported\n", + "-- RDRAND supported\n", + "-- RDSEED supported\n", + "-- RDTSCP supported\n", + "-- RTM supported\n", + "-- SEP supported\n", + "-- SHA not supported\n", + "-- SSE supported\n", + "-- SSE2 supported\n", + "-- SSE3 supported\n", + "-- SSE4.1 supported\n", + "-- SSE4.2 supported\n", + "-- SSE4a not supported\n", + "-- SSSE3 supported\n", + "-- SYSCALL supported\n", + "-- TBM not supported\n", + "-- XOP not supported\n", + "-- XSAVE supported\n", + "-- TBB include: /opt/intel/openvino_2019.1.094/deployment_tools/inference_engine/external/tbb/include\n", + "-- TBB Release lib: /opt/intel/openvino_2019.1.094/deployment_tools/inference_engine/external/tbb/lib/libtbb.so\n", + "-- TBB Debug lib: /opt/intel/openvino_2019.1.094/deployment_tools/inference_engine/external/tbb/lib/libtbb_debug.so\n", + "-- Looking for pthread.h\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-- Looking for pthread.h - found\n", + "-- Looking for pthread_create\n", + "-- Looking for pthread_create - not found\n", + "-- Looking for pthread_create in pthreads\n", + "-- Looking for pthread_create in pthreads - not found\n", + "-- Looking for pthread_create in pthread\n", + "-- Looking for pthread_create in pthread - found\n", + "-- Found Threads: TRUE \n", + "-- Configuring done\n", + "-- Generating done\n", + "-- Build files have been written to: /home/intel/inference_engine_samples_build\n", + "[ 11%] Built target gflags_nothreads_static\n", + "[ 96%] Built target ie_cpu_extension\n", + "[100%] Built target security_barrier_camera_demo\n", + "\n", + "\n", + "###################################################\n", + "\n", + "Run Inference Engine security_barrier_camera demo\n", + "\n", + "Run ./security_barrier_camera_demo -d CPU -d_va CPU -d_lpr CPU -i /opt/intel/openvino/deployment_tools/demo/car_1.bmp -m /home/intel/openvino_models/ir/FP32/Security/object_detection/barrier/0106/dldt/vehicle-license-plate-detection-barrier-0106.xml -m_va /home/intel/openvino_models/ir/FP32/Security/object_attributes/vehicle/resnet10_update_1/dldt/vehicle-attributes-recognition-barrier-0039.xml -m_lpr /home/intel/openvino_models/ir/FP32/Security/optical_character_recognition/license_plate/dldt/license-plate-recognition-barrier-0001.xml \n", + "\n", + "[ INFO ] InferenceEngine: \n", + "\tAPI version ............ 1.6\n", + "\tBuild .................. custom_releases/2019/R1_c9b66a26e4d65bb986bb740e73f58c6e9e84c7c2\n", + "[ INFO ] Parsing input parameters\n", + "[ INFO ] Capturing video streams from the video files or loading images\n", + "[ INFO ] Files were added: 1\n", + "[ INFO ] /opt/intel/openvino/deployment_tools/demo/car_1.bmp\n", + "[ INFO ] Number of input image files: 1\n", + "[ INFO ] Number of input video files: 0\n", + "[ INFO ] Number of input channels: 1\n", + "[ INFO ] Display resolution: 1920x1080\n", + "[ INFO ] Loading plugin CPU\n", + "\n", + "\tAPI version ............ 1.6\n", + "\tBuild .................. 22443\n", + "\tDescription ....... MKLDNNPlugin\n", + "[ INFO ] Loading network files for VehicleDetection\n", + "[ INFO ] Batch size is forced to 1\n", + "[ INFO ] Checking Vehicle Detection inputs\n", + "[ INFO ] Checking Vehicle Detection outputs\n", + "[ INFO ] Loading Vehicle Detection model to the CPU plugin\n", + "[ INFO ] Loading network files for VehicleAttribs\n", + "[ INFO ] Batch size is forced to 1 for Vehicle Attribs\n", + "[ INFO ] Checking VehicleAttribs inputs\n", + "[ INFO ] Checking Vehicle Attribs outputs\n", + "[ INFO ] Loading Vehicle Attribs model to the CPU plugin\n", + "[ INFO ] Loading network files for Licence Plate Recognition (LPR)\n", + "[ INFO ] Batch size is forced to 1 for LPR Network\n", + "[ INFO ] Checking LPR Network inputs\n", + "[ INFO ] Checking LPR Network outputs\n", + "[ INFO ] Loading LPR model to the CPU plugin\n", + "[ INFO ] Start inference \n", + "To close the application, press 'CTRL+C' or any key with focus on the output window\n", + "\n", + "Average inference time: 16.6378 ms (60.104 fps)\n", + "\n", + "Average vehicle detection time: 5.35434 ms (186.764 fps)\n", + "\n", + "Average vehicle attribs time: 1.43492 ms (696.903 fps)\n", + "\n", + "Average lpr time: 9.83784 ms (101.648 fps)\n", + "\n", + "Total execution time: 4608.67\n", + "\n", + "[ INFO ] Execution successful\n", + "\n", + "\n", + "###################################################\n", + "\n", + "Demo completed successfully.\n", + "\n" + ] + } + ], + "source": [ + "!echo \"intel123\" | sudo -S /opt/intel/openvino/deployment_tools/demo/demo_security_barrier_camera.sh " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "Above script will run the security barrier camera example with Intel® pretrained models. Open the script to see the models used." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "!gedit /opt/intel/openvino/deployment_tools/demo/demo_security_barrier_camera.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "At the bottom of the script, you can see that tt uses three pretrained models, vehicle-license-plate-detection-barrier, vehicle-attributes-recognition-barrier and license-plate-recognition-barrier to detect the car, it's make, color and license plate attributes. These pretrained models are optimized for particular tasks which yield better performance over generic object detection models. You can find more of such pretrained models under /opt/intel/openvino/deployment_tools/intel_models.\n", + "\n", + "Following car image will appear the at end of the above command execution. It shows the detection of the car, number plate, its attributes and color.\n", + "\n", + "\n", + "\n", + "\n", + "### Part 2. Use multiple models on different hardware\n", + "\n", + "#### 0. Initialize the environmental variables" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[setupvars.sh] OpenVINO environment initialized\r\n" + ] + } + ], + "source": [ + "!/opt/intel/openvino/bin/setupvars.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "#### 1. Let's look at the face detection sample from the Intel® Distribution of OpenVINO™ toolkit package" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "#### 2. Check if a web cam is connected" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ls: cannot access '/dev/video*': No such file or directory\r\n" + ] + } + ], + "source": [ + "! ls /dev/video*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "#### 3. Run the face demo, face detection only, on the Intel® Movidius™ Neural Compute stick" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 interactive_face_detection.py -i cam -m /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_detection/face/sqnet1.0modif-ssd/0004/dldt/face-detection-retail-0004-fp16.xml -d MYRIAD" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### 4. Now we add (to the face detection) also an age and gender detection, running on the CPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 interactive_face_detection.py -i cam -m /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_detection/face/sqnet1.0modif-ssd/0004/dldt/face-detection-retail-0004-fp16.xml -d MYRIAD -m_ag /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_attributes/age_gender/dldt/age-gender-recognition-retail-0013.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -d_ag CPU " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "#### 5. Now let’s add head position detection running on GPU." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 interactive_face_detection.py -i cam -m /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_detection/face/sqnet1.0modif-ssd/0004/dldt/face-detection-retail-0004-fp16.xml -d MYRIAD -m_ag /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_attributes/age_gender/dldt/age-gender-recognition-retail-0013.xml -d_ag CPU -d_ag CPU -m_hp /opt/intel/openvino/deployment_tools/tools/model_downloader/Transportation/object_attributes/headpose/vanilla_cnn/dldt/head-pose-estimation-adas-0001-fp16.xml -d_hp GPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "#### 6. Now we’ll add an emotion detector, running on the GPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 interactive_face_detection.py -i cam -m /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_detection/face/sqnet1.0modif-ssd/0004/dldt/face-detection-retail-0004-fp16.xml -d MYRIAD -m_ag /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_attributes/age_gender/dldt/age-gender-recognition-retail-0013.xml -d_ag CPU -d_ag CPU -m_hp /opt/intel/openvino/deployment_tools/tools/model_downloader/Transportation/object_attributes/headpose/vanilla_cnn/dldt/head-pose-estimation-adas-0001-fp16.xml -d_hp GPU -d_hp GPU -m_em /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_attributes/emotions_recognition/0003/dldt/emotions-recognition-retail-0003-fp16.xml -d_em GPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "#### 7. Now let's add facial landmarks detector, running on the GPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 interactive_face_detection.py -i cam -m /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_detection/face/sqnet1.0modif-ssd/0004/dldt/face-detection-retail-0004-fp16.xml -d MYRIAD -m_ag /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_attributes/age_gender/dldt/age-gender-recognition-retail-0013.xml -d_ag CPU -d_ag CPU -m_hp /opt/intel/openvino/deployment_tools/tools/model_downloader/Transportation/object_attributes/headpose/vanilla_cnn/dldt/head-pose-estimation-adas-0001-fp16.xml -d_hp GPU -d_hp GPU -m_em /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_attributes/emotions_recognition/0003/dldt/emotions-recognition-retail-0003-fp16.xml -d_em GPU -m_lm /opt/intel/openvino/deployment_tools/tools/model_downloader/Transportation/object_attributes/facial_landmarks/custom-35-facial-landmarks/dldt/facial-landmarks-35-adas-0002.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -d_lm CPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/advanced-video-analytics/Python/advanced_video_analytics.ipynb b/advanced-video-analytics/Python/advanced_video_analytics.ipynb new file mode 100644 index 00000000..c1bb93c7 --- /dev/null +++ b/advanced-video-analytics/Python/advanced_video_analytics.ipynb @@ -0,0 +1,246 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " \n", + "# Advanced Video Analytics\n", + "\n", + "The tutorial shows some techniques for developing advanced video analytics applications.
\n", + "\n", + "## Part 1. Chaining models: Use mutiple models in an application\n", + "\n", + "The Intel® Distribution of OpenVINO™ toolkit package includes security barrier sample which uses 3 models to detect cars, their number plates, color and number plate attributes from the input video or image of the cars. The sample demo script is provided in the Intel® Distribution of OpenVINO™ toolkit package to run the sample.\n", + "\n", + "### 1. Navigate to the security camera barrier sample build directory and setup the environment variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!/opt/intel/openvino/bin/setupvars.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### 2. Run the executable for the security barrier sample with the mobilenet-ssd* model used in the first tutorial" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 security_barrier_camera.py -i /opt/intel/openvino/deployment_tools/demo/car_1.bmp -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l $HOME/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -d CPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 3. Run the security camera sample with Intel optimized pre-trained models\n", + "\n", + "- *Note: Replace \"xxxxx\" with your system-password*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"xxxxx\" | sudo -S /opt/intel/openvino/deployment_tools/demo/demo_security_barrier_camera.sh " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Above script will run the security barrier camera example with Intel® pretrained models. Open the script to see the models used." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!gedit /opt/intel/openvino/deployment_tools/demo/demo_security_barrier_camera.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "At the bottom of the script, you can see that tt uses three pretrained models, vehicle-license-plate-detection-barrier, vehicle-attributes-recognition-barrier and license-plate-recognition-barrier to detect the car, it's make, color and license plate attributes. These pretrained models are optimized for particular tasks which yield better performance over generic object detection models. You can find more of such pretrained models under /opt/intel/openvino/deployment_tools/intel_models.\n", + "\n", + "Following car image will appear the at end of the above command execution. It shows the detection of the car, number plate, its attributes and color.\n", + "\n", + "\n", + "\n", + "\n", + "## Part 2. Use multiple models on different hardware\n", + "\n", + "### 0. Initialize the environmental variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!/opt/intel/openvino/bin/setupvars.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 1. Let's look at the face detection sample from the Intel® Distribution of OpenVINO™ toolkit package" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "### 2. Check if a web cam is connected" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! ls /dev/video*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "### 3. Run the face demo, face detection only, on the Intel® Movidius™ Neural Compute stick" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 interactive_face_detection.py -i cam -m /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_detection/face/sqnet1.0modif-ssd/0004/dldt/face-detection-retail-0004-fp16.xml -d MYRIAD" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### 4. Now we add (to the face detection) also an age and gender detection, running on the CPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 interactive_face_detection.py -i cam -m /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_detection/face/sqnet1.0modif-ssd/0004/dldt/face-detection-retail-0004-fp16.xml -d MYRIAD -m_ag /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_attributes/age_gender/dldt/age-gender-recognition-retail-0013.xml -l $HOME/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -d_ag CPU " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "### 5. Now let’s add head position detection running on GPU." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 interactive_face_detection.py -i cam -m /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_detection/face/sqnet1.0modif-ssd/0004/dldt/face-detection-retail-0004-fp16.xml -d MYRIAD -m_ag /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_attributes/age_gender/dldt/age-gender-recognition-retail-0013.xml -d_ag CPU -d_ag CPU -m_hp /opt/intel/openvino/deployment_tools/tools/model_downloader/Transportation/object_attributes/headpose/vanilla_cnn/dldt/head-pose-estimation-adas-0001-fp16.xml -d_hp GPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "### 6. Now we’ll add an emotion detector, running on the GPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 interactive_face_detection.py -i cam -m /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_detection/face/sqnet1.0modif-ssd/0004/dldt/face-detection-retail-0004-fp16.xml -d MYRIAD -m_ag /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_attributes/age_gender/dldt/age-gender-recognition-retail-0013.xml -d_ag CPU -d_ag CPU -m_hp /opt/intel/openvino/deployment_tools/tools/model_downloader/Transportation/object_attributes/headpose/vanilla_cnn/dldt/head-pose-estimation-adas-0001-fp16.xml -d_hp GPU -d_hp GPU -m_em /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_attributes/emotions_recognition/0003/dldt/emotions-recognition-retail-0003-fp16.xml -d_em GPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "### 7. Now let's add facial landmarks detector, running on the GPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 interactive_face_detection.py -i cam -m /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_detection/face/sqnet1.0modif-ssd/0004/dldt/face-detection-retail-0004-fp16.xml -d MYRIAD -m_ag /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_attributes/age_gender/dldt/age-gender-recognition-retail-0013.xml -d_ag CPU -d_ag CPU -m_hp /opt/intel/openvino/deployment_tools/tools/model_downloader/Transportation/object_attributes/headpose/vanilla_cnn/dldt/head-pose-estimation-adas-0001-fp16.xml -d_hp GPU -d_hp GPU -m_em /opt/intel/openvino/deployment_tools/tools/model_downloader/Retail/object_attributes/emotions_recognition/0003/dldt/emotions-recognition-retail-0003-fp16.xml -d_em GPU -m_lm /opt/intel/openvino/deployment_tools/tools/model_downloader/Transportation/object_attributes/facial_landmarks/custom-35-facial-landmarks/dldt/facial-landmarks-35-adas-0002.xml -l $HOME/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -d_lm CPU" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/advanced-video-analytics/Python/car_1.png b/advanced-video-analytics/Python/car_1.png new file mode 100644 index 00000000..246269ba Binary files /dev/null and b/advanced-video-analytics/Python/car_1.png differ diff --git a/advanced-video-analytics/Python/interactive_face_detection.py b/advanced-video-analytics/Python/interactive_face_detection.py new file mode 100644 index 00000000..9b820fa3 --- /dev/null +++ b/advanced-video-analytics/Python/interactive_face_detection.py @@ -0,0 +1,560 @@ +#!/usr/bin/env python +""" + Copyright (c) 2019 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" + +from __future__ import print_function +import sys +import os +from argparse import ArgumentParser +import cv2 +import time +import numpy as np +import math +import logging as log +from PIL import Image +from openvino.inference_engine import IENetwork, IEPlugin +CV_PI=3.1415926535897932384626433832795 + +def build_argparser(): + parser = ArgumentParser() + parser.add_argument("-m", "--model", help="Path to an .xml file with a trained model.", required=True, type=str) + parser.add_argument("-m_ag", "--ag_model", help="Path to an .xml file with a trained model.", default=None, type=str) + parser.add_argument("-m_hp", "--hp_model", help="Path to an .xml file with a trained model.", default=None, type=str) + parser.add_argument("-m_em", "--em_model", help="Path to an .xml file with a trained model.", default=None, type=str) + parser.add_argument("-m_lm", "--lm_model", help="Path to an .xml file with a trained model.", default=None, type=str) + parser.add_argument("-pc", "--perf_counts", help="Report performance counters", default=False, action="store_true") + parser.add_argument("-i", "--input", + help="Path to video file or image. 'cam' for capturing video stream from camera", required=True, + type=str) + parser.add_argument("-l", "--cpu_extension", + help="MKLDNN (CPU)-targeted custom layers.Absolute path to a shared library with the kernels " + "impl.", type=str, default=None) + parser.add_argument("-pp", "--plugin_dir", help="Path to a plugin folder", type=str, default=None) + parser.add_argument("-d", "--device", + help="Specify the target device to infer on; CPU, GPU, FPGA or MYRIAD is acceptable. Demo " + "will look for a suitable plugin for device specified (CPU by default)", default="CPU", + type=str) + parser.add_argument("-d_ag", "--device_ag", + help="Target device for Age/Gender Recognition network (CPU, GPU, FPGA, or MYRIAD). The demo will look for a suitable plugin for a specified device. (CPU by default)", default="CPU", + type=str) + parser.add_argument("-d_hp", "--device_hp", + help="Target device for Head Pose Estimation network (CPU, GPU, FPGA, or MYRIAD). The demo will look for a suitable plugin for a specified device. (CPU by default)", default="CPU", + type=str) + parser.add_argument("-d_em", "--device_em", + help="Target device for Emotions Recognition network (CPU, GPU, FPGA, or MYRIAD). The demo will look for a suitable plugin for a specified device.(CPU by default)", default="CPU", + type=str) + parser.add_argument("-d_lm", "--device_lm", + help="Target device for Facial Landmarks Estimation network (CPU, GPU, FPGA, or MYRIAD). The demo will look for a suitable plugin for device specified.(CPU by default)", default="CPU", + type=str) + + parser.add_argument("--labels", help="Labels mapping file", default=None, type=str) + parser.add_argument("-pt", "--prob_threshold", help="Probability threshold for detections filtering", + default=0.5, type=float) + parser.add_argument("-no_show", "--no_show", help="do not show processed video", + default=False, action="store_true") + parser.add_argument("-r", "--raw", help="raw_output_message", + default=False, action="store_true") + return parser + +emotions = ["neutral", "happy", "sad", "surprise", "anger"] + +def drawAxes(pitch,yaw,roll,cpoint,frame): + + pitch *= CV_PI/180.0 + yaw *= CV_PI/180.0 + roll *= CV_PI/180.0 + + yawMatrix = np.matrix([[math.cos(yaw), 0, -math.sin(yaw)], [0, 1, 0], [math.sin(yaw), 0, math.cos(yaw)]]) + pitchMatrix = np.matrix([[1, 0, 0],[0, math.cos(pitch), -math.sin(pitch)], [0, math.sin(pitch), math.cos(pitch)]]) + rollMatrix = np.matrix([[math.cos(roll), -math.sin(roll), 0],[math.sin(roll), math.cos(roll), 0], [0, 0, 1]]) + + #Rotational Matrix + R = yawMatrix * pitchMatrix * rollMatrix + rows=frame.shape[0] + cols=frame.shape[1] + + cameraMatrix=np.zeros((3,3), dtype=np.float32) + cameraMatrix[0][0]= 950.0 + cameraMatrix[0][2]= cols/2 + cameraMatrix[1][0]= 950.0 + cameraMatrix[1][1]= rows/2 + cameraMatrix[2][1]= 1 + + xAxis=np.zeros((3,1), dtype=np.float32) + xAxis[0]=50 + xAxis[1]=0 + xAxis[2]=0 + + yAxis=np.zeros((3,1), dtype=np.float32) + yAxis[0]=0 + yAxis[1]=-50 + yAxis[2]=0 + + zAxis=np.zeros((3,1), dtype=np.float32) + zAxis[0]=0 + zAxis[1]=0 + zAxis[2]=-50 + + zAxis1=np.zeros((3,1), dtype=np.float32) + zAxis1[0]=0 + zAxis1[1]=0 + zAxis1[2]=50 + + o=np.zeros((3,1), dtype=np.float32) + o[2]=cameraMatrix[0][0] + + xAxis=R*xAxis+o + yAxis=R*yAxis+o + zAxis=R*zAxis+o + zAxis1=R*zAxis1+o + + p2x=int((xAxis[0]/xAxis[2]*cameraMatrix[0][0])+cpoint[0]) + p2y=int((xAxis[1]/xAxis[2]*cameraMatrix[1][0])+cpoint[1]) + cv2.line(frame,(cpoint[0],cpoint[1]),(p2x,p2y),(0,0,255),2) + + p2x=int((yAxis[0]/yAxis[2]*cameraMatrix[0][0])+cpoint[0]) + p2y=int((yAxis[1]/yAxis[2]*cameraMatrix[1][0])+cpoint[1]) + cv2.line(frame,(cpoint[0],cpoint[1]),(p2x,p2y),(0,255,0),2) + + p1x=int((zAxis1[0]/zAxis1[2]*cameraMatrix[0][0])+cpoint[0]) + p1y=int((zAxis1[1]/zAxis1[2]*cameraMatrix[1][0])+cpoint[1]) + + p2x=int((zAxis[0]/zAxis[2]*cameraMatrix[0][0])+cpoint[0]) + p2y=int((zAxis[1]/zAxis[2]*cameraMatrix[1][0])+cpoint[1]) + + cv2.line(frame,(p1x,p1y),(p2x,p2y),(255,0,0),2) + cv2.circle(frame,(p2x,p2y),3,(255,0,0)) + +def load_model(feature,model_xml,device,plugin_dirs,input_key_length,output_key_length,cpu_extension): + + model_bin = os.path.splitext(model_xml)[0] + ".bin" + + log.info("Initializing plugin for {} device...".format(device)) + plugin = IEPlugin(device, plugin_dirs) + + log.info("Loading network files for {}".format(feature)) + if cpu_extension and 'CPU' in device: + plugin.add_cpu_extension(cpu_extension) + else: + plugin.set_config({"PERF_COUNT":"YES"}) + net = IENetwork(model=model_xml, weights=model_bin) + + if plugin.device == "CPU": + supported_layers = plugin.get_supported_layers(net) + not_supported_layers = [l for l in net.layers.keys() if l not in supported_layers] + if len(not_supported_layers) != 0: + log.error("Following layers are not supported by the plugin for specified device {}:\n {}". + format(plugin.device, ', '.join(not_supported_layers))) + log.error("Please try to specify cpu extensions library path in demo's command line parameters using -l " + "or --cpu_extension command line argument") + sys.exit(1) + + log.info("Checking {} network inputs".format(feature)) + assert len(net.inputs.keys()) == input_key_length, "Demo supports only single input topologies" + log.info("Checking {} network outputs".format(feature)) + assert len(net.outputs) == output_key_length, "Demo supports only single output topologies" + return plugin,net + + +def main(): + log.basicConfig(format="[ %(levelname)s ] %(message)s", level=log.INFO, stream=sys.stdout) + args = build_argparser().parse_args() + age_enabled = False + headPose_enabled = False + emotions_enabled = False + landmarks_enabled = False + + #Make sure only one IEPlugin was created for one type of device + plugin,net = load_model("Face Detection",args.model,args.device,args.plugin_dir,1,1,args.cpu_extension) + + if args.model and args.ag_model: + plugin_ag,ag_net = load_model("Age/Gender Recognition",args.ag_model,args.device_ag,args.plugin_dir,1,2,args.cpu_extension) + if args.device == args.device_ag: + plugin_ag = plugin + if args.model and args.hp_model: + plugin_hp,hp_net=load_model("Head Pose Estimation",args.hp_model,args.device_hp,args.plugin_dir,1,3,args.cpu_extension) + if args.device == args.device_hp: + plugin_hp = plugin + if args.model and args.em_model: + plugin_em,em_net=load_model("Emotions Recognition",args.em_model,args.device_em,args.plugin_dir,1,1,args.cpu_extension) + if args.device == args.device_em: + plugin_em = plugin + if args.model and args.lm_model: + plugin_lm,lm_net=load_model("Facial Landmarks Estimation",args.lm_model,args.device_lm,args.plugin_dir,1,1,args.cpu_extension) + if args.device == args.device_lm: + plugin_lm = plugin + + else : + if args.model and args.lm_model: + plugin_lm,lm_net=load_model("Facial Landmarks Estimation",args.lm_model,args.device_lm,args.plugin_dir,1,1,args.cpu_extension) + if args.device_em == args.device_lm: + plugin_lm = plugin_em + elif args.device_hp == args.device_lm: + plugin_lm = plugin_hp + elif args.device_ag == args.device_lm: + plugin_lm = plugin_ag + elif args.device == args.device_lm: + plugin_lm = plugin + + else : + if args.model and args.em_model: + plugin_em,em_net=load_model("Emotions Recognition",args.em_model,args.device_em,args.plugin_dir,1,1,args.cpu_extension) + if args.device_hp == args.device_em: + plugin_em = plugin_hp + elif args.device_ag == args.device_em: + plugin_em = plugin_ag + elif args.device == args.device_em: + plugin_em = plugin + + if args.model and args.lm_model: + plugin_lm,lm_net=load_model("Facial Landmarks Estimation",args.lm_model,args.device_lm,args.plugin_dir,1,1,args.cpu_extension) + if args.device_em == args.device_lm: + plugin_lm = plugin_em + elif args.device_hp == args.device_lm: + plugin_lm = plugin_hp + elif args.device_ag == args.device_lm: + plugin_lm = plugin_ag + elif args.device == args.device_lm: + plugin_lm = plugin + + else : + if args.model and args.hp_model: + plugin_hp,hp_net=load_model("Head Pose Estimation",args.hp_model,args.device_hp,args.plugin_dir,1,3,args.cpu_extension) + if args.device_ag == args.device_hp: + plugin_hp = plugin_ag + elif args.device == args.device_hp: + plugin_hp = plugin + if args.model and args.em_model: + plugin_em,em_net=load_model("Emotions Recognition",args.em_model,args.device_em,args.plugin_dir,1,1,args.cpu_extension) + + if args.device_hp == args.device_em: + plugin_em = plugin_hp + elif args.device_ag == args.device_em: + plugin_em = plugin_ag + elif args.device == args.device_em: + plugin_em = plugin + if args.model and args.lm_model: + + plugin_lm,lm_net=load_model("Facial Landmarks Estimation",args.lm_model,args.device_lm,args.plugin_dir,1,1,args.cpu_extension) + if args.device_em == args.device_lm: + plugin_lm = plugin_em + elif args.device_hp == args.device_lm: + plugin_lm = plugin_hp + elif args.device_ag == args.device_lm: + plugin_lm = plugin_ag + elif args.device == args.device_lm: + plugin_lm = plugin + + else : + + + if args.model and args.hp_model: + plugin_hp,hp_net=load_model("Head Pose Estimation",args.hp_model,args.device_hp,args.plugin_dir,1,3,args.cpu_extension) + if args.device == args.device_hp: + plugin_hp = plugin + if args.model and args.em_model: + plugin_em,em_net=load_model("Emotions Recognition",args.em_model,args.device_em,args.plugin_dir,1,1,args.cpu_extension) + if args.device == args.device_em: + plugin_em = plugin + if args.model and args.lm_model: + plugin_lm,lm_net=load_model("Facial Landmarks Estimation",args.lm_model,args.device_lm,args.plugin_dir,1,1,args.cpu_extension) + if args.device == args.device_lm: + plugin_lm = plugin + + + # Face detection + input_blob = next(iter(net.inputs)) + out_blob = next(iter(net.outputs)) + exec_net = plugin.load(network=net, num_requests=2) + n, c, h, w = net.inputs[input_blob].shape + del net + + # age and gender + if args.model and args.ag_model: + age_enabled =True + age_input_blob=next(iter(ag_net.inputs)) + age_out_blob=next(iter(ag_net.outputs)) + age_exec_net=plugin_ag.load(network=ag_net, num_requests=2) + ag_n, ag_c, ag_h, ag_w = ag_net.inputs[input_blob].shape + del ag_net + + # Head Pose + if args.model and args.hp_model: + headPose_enabled = True + hp_input_blob=next(iter(hp_net.inputs)) + hp_out_blob=next(iter(hp_net.outputs)) + hp_exec_net=plugin_hp.load(network=hp_net, num_requests=2) + hp_n, hp_c, hp_h, hp_w = hp_net.inputs[input_blob].shape + del hp_net + + # Emotions + if args.model and args.em_model: + emotions_enabled = True + em_input_blob=next(iter(em_net.inputs)) + em_out_blob=next(iter(em_net.outputs)) + em_exec_net=plugin_em.load(network=em_net, num_requests=2) + em_n, em_c, em_h, em_w = em_net.inputs[input_blob].shape + del em_net + + # Facial Landmarks + if args.model and args.lm_model: + landmarks_enabled = True + lm_input_blob=next(iter(lm_net.inputs)) + lm_out_blob=next(iter(lm_net.outputs)) + lm_exec_net=plugin_lm.load(network=lm_net, num_requests=2) + lm_n, lm_c, lm_h, lm_w = lm_net.inputs[input_blob].shape + del lm_net + + total_start = time.time() + + if args.input == 'cam': + input_stream = 0 + else: + input_stream = args.input + assert os.path.isfile(args.input), "Specified input file doesn't exist" + if args.labels: + with open(args.labels, 'r') as f: + labels_map = [x.strip() for x in f] + else: + labels_map = None + + cap = cv2.VideoCapture(input_stream) + if not cap.isOpened(): + sys.exit(1) + cur_request_id = 0 + log.info("Starting inference ...") + log.info("To stop the demo execution press Esc button") + is_async_mode = True + render_time = 0 + framesCounter = 0 + decode_time = 0 + visual_time = 0 + + decode_prev_start = time.time() + ret, frame = cap.read() + decode_prev_finish = time.time() + decode_prev_time = decode_prev_finish - decode_prev_start + while cap.isOpened(): + analytics_time = 0 + decode_next_start = time.time() + ret, frame = cap.read() + decode_next_finish = time.time() + decode_next_time = decode_next_finish - decode_next_start + if not ret: + break + + framesCounter+=1 + initial_w = cap.get(3) + initial_h = cap.get(4) + + inf_start = time.time() + in_frame = cv2.resize(frame, (w, h)) + in_frame = in_frame.transpose((2, 0, 1)) # Change data layout from HWC to CHW + in_frame = in_frame.reshape((n, c, h, w)) + exec_net.start_async(request_id=cur_request_id, inputs={input_blob: in_frame}) + if exec_net.requests[cur_request_id].wait(-1) == 0: + inf_end = time.time() + det_time = inf_end - inf_start + + #analytics_start_time =time.time() + # Parse detection results of the current request + res = exec_net.requests[cur_request_id].outputs[out_blob] + for obj in res[0][0]: + # Draw only objects when probability more than specified threshold + if obj[2] > args.prob_threshold: + xmin = int(obj[3] * initial_w) + ymin = int(obj[4] * initial_h) + xmax = int(obj[5] * initial_w) + ymax = int(obj[6] * initial_h) + + #Crop the face rectangle for further processing + clippedRect = frame[ymin:ymax, xmin:xmax] + if (clippedRect.size)==0: + continue + + height = ymax - ymin + width = xmax -xmin + + #Age and Gender + age_inf_time=0 + if age_enabled: + age_inf_start = time.time() + clipped_face = cv2.resize(clippedRect, (ag_w, ag_h)) + clipped_face = clipped_face.transpose((2, 0, 1)) # Change data layout from HWC to CHW + clipped_face = clipped_face.reshape((ag_n, ag_c, ag_h, ag_w)) + ag_res = age_exec_net.start_async(request_id=0,inputs={'data': clipped_face}) + if age_exec_net.requests[cur_request_id].wait(-1) == 0: + age_inf_end = time.time() + age_inf_time=age_inf_end - age_inf_start + #Heapose + hp_inf_time=0 + if headPose_enabled: + hp_inf_start = time.time() + clipped_face_hp = cv2.resize(clippedRect, (hp_w, hp_h)) + clipped_face_hp = clipped_face_hp.transpose((2, 0, 1)) # Change data layout from HWC to CHW + clipped_face_hp = clipped_face_hp.reshape((hp_n, hp_c, hp_h, hp_w)) + hp_res = hp_exec_net.start_async(request_id=0,inputs={'data': clipped_face_hp}) + if hp_exec_net.requests[cur_request_id].wait(-1) == 0: + hp_inf_end = time.time() + hp_inf_time=hp_inf_end - hp_inf_start + #Emotion + em_inf_time=0 + if emotions_enabled: + em_inf_start = time.time() + clipped_face_em = cv2.resize(clippedRect, (em_w, em_h)) + clipped_face_em = clipped_face_em.transpose((2, 0, 1)) # Change data layout from HWC to CHW + clipped_face_em = clipped_face_em.reshape((em_n, em_c, em_h, em_w)) + em_res = em_exec_net.start_async(request_id=0,inputs={'data': clipped_face_em}) + if em_exec_net.requests[cur_request_id].wait(-1) == 0: + em_inf_end = time.time() + em_inf_time=em_inf_end - em_inf_start + + #Landmarks + lm_inf_time=0 + if landmarks_enabled: + lm_inf_start = time.time() + clipped_face_lm = cv2.resize(clippedRect, (lm_w, lm_h)) + clipped_face_lm = clipped_face_lm.transpose((2, 0, 1)) # Change data layout from HWC to CHW + clipped_face_lm = clipped_face_lm.reshape((lm_n, lm_c, lm_h, lm_w)) + lm_exec_net.start_async(request_id=0,inputs={'data': clipped_face_lm}) + if lm_exec_net.requests[cur_request_id].wait(-1) == 0: + lm_inf_end = time.time() + lm_inf_time=lm_inf_end - lm_inf_start + + analytics_time = age_inf_time + hp_inf_time + em_inf_time + lm_inf_time + + visual_start = time.time() + if args.no_show==False: + if age_enabled: + age = int((age_exec_net.requests[cur_request_id].outputs['age_conv3'][0][0][0][0])*100) + + if(((age_exec_net.requests[cur_request_id].outputs['prob'][0][0][0][0])) > 0.5): + gender = 'F' + cv2.putText(frame, str(gender) + ','+str(age), (xmin, ymin - 7), cv2.FONT_HERSHEY_COMPLEX, 0.6, (10,10,200), 1) + cv2.rectangle(frame, (xmin, ymin), (xmax, ymax), (10,10,200), 2) + else: + gender = 'M' + cv2.putText(frame, str(gender) + ','+str(age), (xmin, ymin - 7), cv2.FONT_HERSHEY_COMPLEX, 0.6, (10,10,200), 1) + cv2.rectangle(frame, (xmin, ymin), (xmax, ymax), (255, 10, 10), 2) + if args.raw: + print("Predicted gender, age = {},{}".format(gender, age) ) + else: + class_id = int(obj[1]) + # Draw box and label\class_id + color = (min(class_id * 12.5, 255), min(class_id * 7, 255), min(class_id * 5, 255)) + cv2.rectangle(frame, (xmin, ymin), (xmax, ymax), color, 2) + det_label = labels_map[class_id] if labels_map else str(class_id) + cv2.putText(frame, 'label' + ' ' + '#' + det_label + ': ' + str(obj[2]) ,(xmin, ymin - 7), \ + cv2.FONT_HERSHEY_COMPLEX, 0.6, (10,10,200), 1) + + if headPose_enabled: + pitch = ((hp_exec_net.requests[cur_request_id].outputs['angle_p_fc'][0][0])) + yaw = ((hp_exec_net.requests[cur_request_id].outputs['angle_y_fc'][0][0])) + roll = ((hp_exec_net.requests[cur_request_id].outputs['angle_r_fc'][0][0])) + cpoint=[int(xmin + (width/2)),int(ymin + (height/2))] + drawAxes(pitch,yaw,roll,cpoint,frame) + if args.raw: + print("Head pose results: yaw, pitch, roll = {}, {}, {}".format(yaw, pitch,roll)) + + if emotions_enabled: + emotion_values = em_exec_net.requests[cur_request_id].outputs['prob_emotion'] + emotion_type = emotion_values.argmax() + result = emotions[emotion_type] + cv2.putText(frame, ',' + result,(xmin + 40, ymin - 7), cv2.FONT_HERSHEY_COMPLEX, 0.6, (10,10,200), 1) + if args.raw: + print("Predicted emotion = {}".format(result)) + if landmarks_enabled: + if args.raw: + print("Normed Facial Landmarks coordinates (x, y):") + for i_lm in range(0,35): + normed_x= lm_exec_net.requests[0].outputs['align_fc3'][0][2*i_lm] + normed_y= lm_exec_net.requests[0].outputs['align_fc3'][0][(2*i_lm)+ 1] + x_lm = xmin + width * normed_x; + y_lm = ymin + height * normed_y; + cv2.circle(frame, (int(x_lm), int(y_lm)), 1+int(0.019 * width), (0,255,255), -1) + if args.raw: + print(normed_x, normed_y) + + render_time_message = "OpenCV cap/rendering time: {:.2f} ms".format(render_time * 1000) + inf_time_message = "Face Detection time: {:.2f} ms ({:.2f} fps)".format((det_time * 1000),1/(det_time)) + if (clippedRect.size)!= 0 and analytics_time: + Face_analytics_time_message = "Face Analytics Networks time: {:.2f} ms ({:.2f} fps)".format((analytics_time * 1000),1/(analytics_time)) + else: + Face_analytics_time_message = "Face Analytics Networks time: {:.2f} ms".format((analytics_time * 1000)) + + cv2.putText(frame, render_time_message, (15, 15), cv2.FONT_HERSHEY_COMPLEX, 0.5, (200, 10, 10), 1) + cv2.putText(frame, inf_time_message, (15, 30), cv2.FONT_HERSHEY_COMPLEX, 0.5, (200, 10, 10), 1) + if age_enabled or headPose_enabled or emotions_enabled or landmarks_enabled: + cv2.putText(frame, Face_analytics_time_message, (15,45), cv2.FONT_HERSHEY_COMPLEX, 0.5, (200, 10, 10), 1) + + # Rendering time + cv2.imshow("Detection Results", frame) + visual_end = time.time() + visual_time = visual_end - visual_start + + render_end = time.time() + render_time = decode_prev_time + decode_next_time + visual_time + elif args.raw: + if age_enabled: + age = int((age_exec_net.requests[cur_request_id].outputs['age_conv3'][0][0][0][0])*100) + if(((age_exec_net.requests[cur_request_id].outputs['prob'][0][0][0][0])) > 0.5): + gender = 'F' + else: + gender = 'M' + print("Predicted gender, age = {},{}".format(gender, age) ) + if emotions_enabled: + emotion_values = em_exec_net.requests[cur_request_id].outputs['prob_emotion'] + emotion_type = emotion_values.argmax() + result = emotions[emotion_type] + print("Predicted emotion = {}".format(result)) + if headPose_enabled: + pitch = ((hp_exec_net.requests[cur_request_id].outputs['angle_p_fc'][0][0])) + yaw = ((hp_exec_net.requests[cur_request_id].outputs['angle_y_fc'][0][0])) + roll = ((hp_exec_net.requests[cur_request_id].outputs['angle_r_fc'][0][0])) + print("Head pose results: yaw, pitch, roll = {}, {}, {}".format(yaw, pitch,roll)) + if landmarks_enabled: + print("Normed Facial Landmarks coordinates (x, y):") + for i_lm in range(0,35): + normed_x= lm_exec_net.requests[0].outputs['align_fc3'][0][2*i_lm] + normed_y= lm_exec_net.requests[0].outputs['align_fc3'][0][(2*i_lm)+ 1] + x_lm = xmin + width * normed_x; + y_lm = ymin + height * normed_y; + print(normed_x, normed_y) + + key = cv2.waitKey(1) + if key == 27: + break + total_finish = time.time() + total= total_finish - total_start + print("Total image throughput: ({:.2f} fps)".format(framesCounter*(1/total))) + # Showing performance results + if args.perf_counts: + perf_counts=exec_net.requests[0].get_perf_counts() + print("performance counts:\n") + total=0 + for layer, stats in perf_counts.items(): + total+=stats['real_time'] + print ("{:<40} {:<15} {:<10} {:<15} {:<8} {:<5} {:<5} {:<5} {:<10} {:<15}".format(layer, stats['status'], 'layerType:', stats['layer_type'], 'realTime:', stats['real_time'], 'cpu:', stats['cpu_time'],'execType:', stats['exec_type'] )) + print ("{:<20} {:<7} {:<20}".format('TotalTime:',total ,'microseconds')) + + cv2.destroyAllWindows() + log.info("Number of processed frames: {}".format(framesCounter)) + del exec_net + del plugin + log.info("Execution successful") + +if __name__ == '__main__': + sys.exit(main() or 0) diff --git a/advanced-video-analytics/Python/security_barrier_camera.py b/advanced-video-analytics/Python/security_barrier_camera.py new file mode 100644 index 00000000..eef77014 --- /dev/null +++ b/advanced-video-analytics/Python/security_barrier_camera.py @@ -0,0 +1,296 @@ +#!/usr/bin/env python +""" + Copyright (c) 2019 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" + +from __future__ import print_function +import sys +import os +from argparse import ArgumentParser +import cv2 +import numpy as np +import time +import logging as log +from openvino.inference_engine import IENetwork, IEPlugin + + +def build_argparser(): + parser = ArgumentParser() + parser.add_argument("-m", "--model", help="Path to an .xml file with a trained model.", required=True, type=str) + parser.add_argument("-m_va", "--model_va", help="Path to an .xml file with a trained model.", type=str, default=None ) + parser.add_argument("-m_lpr", "--model_lpr", help="Path to an .xml file with a trained model.", default=None ,type=str ) + parser.add_argument("-i", "--input", + help="Path to video file or image. 'cam' for capturing video stream from camera", required=True, + type=str) + parser.add_argument("-l", "--cpu_extension", + help="MKLDNN (CPU)-targeted custom layers.Absolute path to a shared library with the kernels " + "impl.", type=str, default=None) + parser.add_argument("-pp", "--plugin_dir", help="Path to a plugin folder", type=str, default=None) + parser.add_argument("-d", "--device", + help="Specify the target device to infer on; CPU, GPU, FPGA or MYRIAD is acceptable. Demo " + "will look for a suitable plugin for device specified (CPU by default)", default="CPU", + type=str) + parser.add_argument("-d_va", "--device_va", + help="Specify the target device for Vehicle Attributes (CPU, GPU, FPGA, MYRIAD, or HETERO).(CPU by default)", default="CPU", + type=str) + parser.add_argument("-d_lpr", "--device_lpr", + help="Specify the target device for License Plate Recognition (CPU, GPU, FPGA, MYRIAD, or HETERO).(CPU by default)", default="CPU", + type=str) + parser.add_argument("--labels", help="Labels mapping file", default=None, type=str) + parser.add_argument("-pt", "--prob_threshold", help="Probability threshold for detections filtering", + default=0.5, type=float) + parser.add_argument("-ni", "--ni_required", help="n infer request message",default=1, type=int) + parser.add_argument("-pc", "--perf_counts", help="Report performance counters", default=False, action="store_true") + + return parser + + +colors = ["white", "gray", "yellow", "red", "green", "blue", "black"] +types = ["car", "van", "truck", "bus"] +items = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", + "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", + "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", + "U", "V", "W", "X", "Y", "Z"] +maxSequenceSizePerPlate = 88 + +def load_model(feature,model_xml,device,plugin_dirs,input_key_length,output_key_length,cpu_extension): + + model_bin = os.path.splitext(model_xml)[0] + ".bin" + + log.info("Initializing plugin for {} device...".format(device)) + plugin = IEPlugin(device, plugin_dirs) + + log.info("Loading network files for {}".format(feature)) + if cpu_extension and 'CPU' in device: + plugin.add_cpu_extension(cpu_extension) + else: + plugin.set_config({"PERF_COUNT":"YES"}) + + net = IENetwork(model=model_xml, weights=model_bin) + + if plugin.device == "CPU": + supported_layers = plugin.get_supported_layers(net) + not_supported_layers = [l for l in net.layers.keys() if l not in supported_layers] + if len(not_supported_layers) != 0: + log.error("Following layers are not supported by the plugin for specified device {}:\n {}". + format(plugin.device, ', '.join(not_supported_layers))) + log.error("Please try to specify cpu extensions library path in demo's command line parameters using -l " + "or --cpu_extension command line argument") + sys.exit(1) + + log.info("Checking {} network inputs".format(feature)) + assert len(net.inputs.keys()) == input_key_length, "Demo supports only single input topologies" + log.info("Checking {} network outputs".format(feature)) + assert len(net.outputs) == output_key_length, "Demo supports only single output topologies" + return plugin,net + + +def main(): + log.basicConfig(format="[ %(levelname)s ] %(message)s", level=log.INFO, stream=sys.stdout) + args = build_argparser().parse_args() + va_enabled=False + lpr_enabled=False + + #Make sure only one IEPlugin was created for one type of device + plugin,net = load_model("Vehicle Detection",args.model,args.device,args.plugin_dir,1,1,args.cpu_extension) + + if args.model and args.model_va: + plugin_va,va_net = load_model("Vehicle Attribute Detection",args.model_va,args.device_va,args.plugin_dir,1,2,args.cpu_extension) + if args.device == args.device_va: + plugin_va = plugin + if args.model and args.model_lpr: + plugin_lpr,lpr_net=load_model("License Plate Recognition",args.model_lpr,args.device_lpr,args.plugin_dir,2,1,args.cpu_extension) + if args.device == args.device_lpr: + plugin_lpr = plugin + + + elif args.model and args.model_lpr: + plugin_lpr,lpr_net=load_model("License Plate Recognition",args.model_lpr,args.device_lpr,args.plugin_dir,2,1,args.cpu_extension) + if args.device_va == args.device_lpr: + plugin_lpr = plugin_va + elif args.device == args.device_lpr: + plugin_lpr = plugin + + + elif args.model and args.model_lpr: + plugin_lpr,lpr_net=load_model("License Plate Recognition",args.model_lpr,args.device_lpr,args.plugin_dir,2,1,args.cpu_extension) + if args.device == args.device_lpr: + plugin_lpr = plugin + + + + + #Vehicle Detection + input_blob = next(iter(net.inputs)) + out_blob = next(iter(net.outputs)) + log.info("Loading IR to the plugin...") + + exec_net = plugin.load(network=net, num_requests=2) + n, c, h, w = net.inputs[input_blob].shape + del net + + #For Vehicle Attribute Detection + if args.model and args.model_va : + va_enabled=True + va_input_blob=next(iter(va_net.inputs)) + va_out_blob=next(iter(va_net.outputs)) + va_exec_net = plugin_va.load(network=va_net, num_requests=2) + n_va,c_va,h_va,w_va = va_net.inputs[va_input_blob].shape + del va_net + + #For License Plate Recognition + if args.model and args.model_lpr: + lpr_enabled=True + lpr_input_data_blob=next(iter(lpr_net.inputs)) + lpr_seqBlob=next(iter(lpr_net.inputs)) + lpr_out_blob = next(iter(lpr_net.outputs)) + lpr_seqBlob=[[0.0]] + for i in range(1,maxSequenceSizePerPlate): + lpr_seqBlob[0].append(1.0) + + lpr_exec_net = plugin_lpr.load(network=lpr_net, num_requests=2) + n_lpr,c_lpr,h_lpr,w_lpr =lpr_net.inputs['data'].shape + del lpr_net + + + if args.input == 'cam': + input_stream = 0 + else: + input_stream = args.input + assert os.path.isfile(args.input), "Specified input file doesn't exist" + if args.labels: + with open(args.labels, 'r') as f: + labels_map = [x.strip() for x in f] + else: + labels_map = None + + log.info("Starting inference ...") + log.info("To stop the demo execution press Esc button") + render_time = 0 + lpr_det_time=0 + va_det_time=0 + framecount=0 + + while True: + img=cv2.imread(input_stream) + initial_w = img.shape[1] + initial_h = img.shape[0] + framecount+=1 + inf_start = time.time() + + in_frame = cv2.resize(img, (w, h)) + in_frame = in_frame.transpose((2, 0, 1)) # Change data layout from HWC to CHW + in_frame = in_frame.reshape((n, c, h, w)) + exec_net.start_async(request_id=0, inputs={input_blob: in_frame}) + infer_status = exec_net.requests[0].wait() + if infer_status == 0: + inf_end = time.time() + det_time = inf_end - inf_start + + # Parse detection results of the current request + res = exec_net.requests[0].outputs[out_blob] + + for obj in res[0][0]: + # Draw only objects when probability more than specified threshold + if obj[2] > args.prob_threshold: + xmin = int(obj[3] * initial_w) + ymin = int(obj[4] * initial_h) + xmax = int(obj[5] * initial_w) + ymax = int(obj[6] * initial_h) + class_id = int(obj[1]) + + # Draw box and label\class_id + color = (min(class_id * 12.5, 255), min(class_id * 7, 255), min(class_id * 5, 255)) + cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0,255,0), 2) + clippedRect=img[ymin:ymax, xmin:xmax] + det_label = labels_map[class_id] if labels_map else str(class_id) + # For vehicle attribute recognition + if det_label == '1' and va_enabled: + va_inf_start = time.time() + in_frame = cv2.resize(clippedRect, (w_va, h_va)) + in_frame = in_frame.transpose((2, 0, 1)) # Change data layout from HWC to CHW + in_frame = in_frame.reshape((n_va, c_va, h_va, w_va)) + va_exec_net.start_async(request_id=0, inputs={va_input_blob: in_frame}) + va_infer_status= va_exec_net.requests[0].wait() + va_inf_end = time.time() + va_det_time=va_inf_end-va_inf_start + colorsValues= va_exec_net.requests[0].outputs['color'] + typesValues= va_exec_net.requests[0].outputs['type'] + color_id=colorsValues.argmax() + type_id=typesValues.argmax() + cv2.putText(img, colors[color_id] , (xmin+2, ymin +15),cv2.FONT_HERSHEY_COMPLEX, 0.6, (255,0,0), 1, cv2.LINE_AA) + cv2.putText(img, types[type_id] , (xmin+2, ymin+30),cv2.FONT_HERSHEY_COMPLEX, 0.6, (255,0,0), 1, cv2.LINE_AA) + #For lpr recognition + elif det_label == '2' and lpr_enabled: + lpr_inf_start = time.time() + in_frame=cv2.resize(clippedRect,(w_lpr,h_lpr)) + in_frame = in_frame.transpose((2, 0, 1)) # Change data layout from HWC to CHW + in_frame = in_frame.reshape((n_lpr, c_lpr, h_lpr, w_lpr)) + lpr_exec_net.start_async(request_id=0, inputs={'data': in_frame, 'seq_ind': (lpr_seqBlob[0][1])}) + status=lpr_exec_net.requests[0].wait(-1) + lpr_inf_end = time.time() + lpr_det_time = lpr_inf_end - lpr_inf_start + lpr_res=lpr_exec_net.requests[0].outputs[lpr_out_blob] + result="" + for i in range(0,lpr_res.size): + if lpr_res[0][i] != -1: + result+=items[int(lpr_res[0][i])] + else: + cv2.putText(img, result , (xmin, ymin +50),cv2.FONT_HERSHEY_COMPLEX, 0.6, (0,0,255), 1, cv2.LINE_AA) + break + + #Inference Statistics + inf_time_message = "Time for processing 1 stream (nireq ={}): {:.3f} ms ({} fps)".format(args.ni_required,(det_time * 1000),int(1/det_time)) + render_time_message = "Rendering time ({}): {:.3f} ms".format(args.device,render_time * 1000) + vehicle_detection_time="Vehicle detection time ({}) : {:.3f} ms ({} fps)".format(args.device,(det_time*1000),int(1/(det_time)/framecount)) + if va_det_time : + vehicle_attrib_time_message="Vehicle Attribs time({}) : {:.3f} ms ({} fps)".format(args.device_va,(va_det_time*1000),int(1/(va_det_time)/framecount)) + cv2.putText(img, vehicle_attrib_time_message, (0, 60), cv2.FONT_HERSHEY_COMPLEX, 0.5, (200, 10, 10), 1) + if lpr_det_time : + lpr_time_message="Lpr recognition time({}) : {:.2f} ms ({} fps)".format(args.device_lpr,(lpr_det_time*1000),int(1/(lpr_det_time)/framecount)) + cv2.putText(img, lpr_time_message, (0, 80), cv2.FONT_HERSHEY_COMPLEX, 0.5, (200, 10, 10), 1) + cv2.putText(img, inf_time_message, (0, 20), cv2.FONT_HERSHEY_COMPLEX, 0.5, (200, 10, 10), 1,cv2.LINE_AA) + cv2.putText(img, vehicle_detection_time, (0, 40), cv2.FONT_HERSHEY_COMPLEX, 0.5, (200, 10, 10), 1,cv2.LINE_AA) + + cv2.imshow("Detection Results", img) + + + key = cv2.waitKey(0) + if key == 27: + break + if args.perf_counts: + perf_counts=exec_net.requests[0].get_perf_counts() + print("performance counts:\n") + total=0 + for layer, stats in perf_counts.items(): + total+=stats['real_time'] + print ("{:<40} {:<15} {:<10} {:<15} {:<8} {:<5} {:<5} {:<5} {:<10} {:<15}".format(layer, stats['status'], 'layerType:', stats['layer_type'], 'realTime:', stats['real_time'], 'cpu:', stats['cpu_time'],'execType:', stats['exec_type'] )) + print ("{:<20} {:<7} {:<20}".format('TotalTime:',total ,'microseconds')) + log.info("Execution successful") + + del exec_net + del plugin + cv2.destroyAllWindows() +if __name__ == '__main__': + sys.exit(main() or 0) diff --git a/dl-model-training/Python/.ipynb_checkpoints/Deep_Learning_Tutorial-checkpoint.ipynb b/dl-model-training/Python/.ipynb_checkpoints/Deep_Learning_Tutorial-checkpoint.ipynb new file mode 100644 index 00000000..5f39b36b --- /dev/null +++ b/dl-model-training/Python/.ipynb_checkpoints/Deep_Learning_Tutorial-checkpoint.ipynb @@ -0,0 +1,564 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "# Deep Learning Tutorial\n", + "
\n", + "\n", + "### MNIST Database - Handwritten digits (0-9)'\n", + "
\n", + "\n", + "On this tutorial we will use Python* to implement one Convolutional Neural Network - a simplified version of LeNet - that will recognized Handwritten digits. A project like this one, using the MNIST dataset is considered as the \"Hello World\" of Machine Learning.\n", + "\n", + "We will use Keras*, TensorFlow* and the MNIST database.\n", + "\n", + "According to the description on their website, \"Keras is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, or Theano. It was developed with a focus on enabling fast experimentation. Being able to go from idea to result with the least possible delay is key to doing good research.\"*\n", + "\n", + "We will use TensorFlow as the backend for Keras. TensorFlow is an open source software library for high performance numerical computation.\n", + "\n", + "The MNIST database is a large database of handwritten digits that is commonly used for training various image processing systems. MNIST database is also available as a Keras dataset, with 60k 28x28 images of the 10 digits along with a test set of 10k images, so it is very easy to import and use it on our code.\n", + "\n", + "One good visual and interactive reference on what we are developing can be found here. The basic difference between our code and this interactive sample is the number and size of convolutional and fully-connected layers (LeNet uses two of each, we will use a single one, to reduce training time). We also adjusted the layers size to balance between accuracy and training time. We are achieving 98,54% of accuracy with less than 2 minutes training time on an Intel® Core™ processor.\n", + "\n", + "This code can also be optimized by several ways to increase accuracy, and we would like to invite you to explore this later, changing the number of epochs, filters, fully-connected neurons and also including additional convolutional and fully connected layers. You can also use flattening, dropout and batch normalization layers. Other optimization techniques can also be applied, so feel free to use this tutorial code as a base to explore those optimization techniques.\n", + "\n", + "In a nutshell, the convolutional and pooling layers are responsible for extracting a set of features from the input images, and the fully-connected layers are responsible for classification.\n", + "\n", + "Convolutional layers applies a set of filters to the input image to extract important features from the image. The filters are small matrixes also called image kernels that can be repeatedly applied to the input image (\"sliding\" the filter on the image). You may already used those filters on traditional image processing applications such as GIMP (i.e. blurring, sharpening or embossing). This article gives a good overview on image kernels with some live experiments. Each filter will generate a new image that will be the input for the next layer, typically a pooling layer.\n", + "\n", + "Pooling layers reduces the spatial size of the image (downsampling), reducing the computation in the network and also controlling overfitting.\n", + "\n", + "Fully connected layers are traditional Neural Network layers.\n", + "
\n", + "\n", + "### Installing the Python* libraries\n", + "\n", + "To install the necessary Python libraries on Linux, you need to run:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! pip3 install keras tensorflow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "## Run the tutorial\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/dl-model-training/Deep_Learning_Tutorial.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "## How the tutorial code works\n", + "\n", + "The complete code for this tutorial can be found here\n", + "Importing the necessary objects from Keras*\n", + "
\n", + "\n", + "Sequential Network Model:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.models import Sequential" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "\n", + "### Core Layers:\n", + "\n", + "Dense: densely-connected NN layer, to be used as classification layer\n", + "Flatten: layer to flatten the convolutional layers\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.layers import Dense, Flatten" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "\n", + "### Convolutional Layers:\n", + "\n", + "Conv2D: 2D convolution Layer\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.layers import Conv2D" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + " \n", + "### Pooling Layer:\n", + "\n", + "MaxPooling2D: Max pooling operation for spatial data\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.layers import MaxPooling2D" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + " \n", + "### Utilities:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.utils import np_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + " \n", + "\n", + "### MNIST Dataset:\n", + "\n", + "Dataset of 60,000 28x28 handwritten images of the 10 digits, along with a test set of 10,000 images.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.datasets import mnist" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + " \n", + "\n", + "### Download and load the MNIST database\n", + "\n", + "This will load the MNIST Dataset on four different variables:\n", + "\n", + " train_set: Dataset with the training data (60k elements)\n", + " train_classes: Dataset with the equivalent training classes (60k elements)\n", + " test_dataset: Dataset with test data (10k elements)\n", + " test_classes: Dataset with the equivalent test classes (10k elements)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(train_dataset, train_classes),(test_dataset, test_classes) = mnist.load_data()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + " \n", + "\n", + "NOTE: only on the first run on your machine, this will download the MNIST Dataset.\n", + "Adjust the datasets to TensorFlow*\n", + "\n", + "First step, we need to reduce the image channels, from 3 (color) to 1 (grayscale):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_dataset = train_dataset.reshape(train_dataset.shape[0], 28, 28, 1)\n", + "test_dataset = test_dataset.reshape(test_dataset.shape[0], 28, 28, 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + " \n", + "Second step, we will convert the data from int8 to float32:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_dataset = train_dataset.astype('float32')\n", + "test_dataset = test_dataset.astype('float32')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + " \n", + "Third step, we need to normalize the data to speed up processing time:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_dataset = train_dataset / 255\n", + "test_dataset = test_dataset / 255" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + " \n", + "Forth step, convert the classes data from numerical to categorical:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_classes = np_utils.to_categorical(train_classes, 10)\n", + "test_classes = np_utils.to_categorical(test_classes, 10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + " \n", + "\n", + "Now the data is ready to be processed by the CNN.\n", + "
\n", + "\n", + "### Create our Convolutional Neural Network (CNN)\n", + "\n", + "It is very simple and easy to create Neural Networks with Keras. We basically create the network, add the necessary layers, compile and execute the training.\n", + "\n", + "First thing is to create a Sequential Neural Network:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn = Sequential()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + " \n", + "We now add the input layer, a 2D convolutional layer with 32 filters, 3x3 filter kernel size, input shape of 28 x 28 x 1 (as we adjusted on the training dataset) and using Rectified Linear Unit (relu) as the activation function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.add(Conv2D(32, (3,3), input_shape = (28, 28, 1), activation = 'relu'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + " \n", + " \n", + "NOTE: We need to inform the input_shape parameter only if the convolutional layer is the input layer (first CNN layer). If you add another layers later on, you don't need to use this parameter.\n", + "\n", + "We add one Pooling layer using the default 2x2 size. This means that this layer will reduce by half the input image in both spatial dimentions.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.add(MaxPooling2D())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + " \n", + "\n", + "At this point, a traditional LeNet network would add another two layers, one convolutional and one pooling, basically repeating the two lines of code we just created, (removing the input_shape from the first one). As explained before, to speed processing time and make it more easy to understand, we decided to use just the two layers we just created.\n", + "
\n", + "\n", + "Now we need to convert the output of the polling layer from a matrix to a vector, to be used by the classification part of our neural network. We do that using on flattening layer:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.add(Flatten())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + " \n", + "\n", + "Our data is now ready for the classification part of our neural network, that will be implemented using just two layers, one hidden layer and one output layer.\n", + "
\n", + "\n", + "The first classification layer will be a fully-connected layer with 128 neurons and using rectified linear unit as the activation function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.add(Dense(units = 128, activation = 'relu'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + " \n", + "\n", + "We now add another fully-connected layer that will be our output layer. Please note that this layer has 10 neurons, because we have 10 classes on our dataset. The activation function user here is Softmax." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.add(Dense(units = 10, activation = 'softmax'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + " \n", + "\n", + "Before we train the model, we need to \"compile\" it to configure the learning process.\n", + "\n", + "We will compile the CNN using categorical crossentropy as the loss function, adam as the optimizer and using accuracy as the results evaluation metric that will be show on the end of each apoch and also on the end of the training process." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + " \n", + " NOTE: Adam is a gradient descent optimization algorithm. A good introduction to Adam can be found here.\n", + "\n", + "Our CNN is now ready to be trained.\n", + "
\n", + "\n", + "### Training our CNN\n", + "\n", + "To train the CNN we call the Fit method. On this training we will define:\n", + "\n", + "- Training dataset and training classes: our training dataset and training classes adjusted on the beginning of this tutorial.\n", + "- Batch size: number of samples to be used per each gradient update, in our case, 128 (default is 32).\n", + "- epochs: number of epochs that will be used on the training, in our case, 5 (for time saving purposes).\n", + "- validation_data: the dataset used to validate the training on the end of each epoch. Here is where we inform out test dataset.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.fit(train_dataset, train_classes, batch_size = 128, epochs = 5, validation_data = (test_dataset, test_classes))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + " \n", + "\n", + "It will take a few minutes to run, and it will inform you the progress on the console. Note that it will inform the evolution of the loss (loss:) and accuracy (acc:) during the execution of each epoch, and this data is computed using the training data, so it cannot be used to evaluate the improvement of the epoch on the overall accuracy.\n", + "
\n", + "\n", + "At the end of each epoch, Keras will use the test dataset we provided to evaluate the epoch results, and this data will be displayed as val_loss: and val_acc: and those are good parameters to follow on each epoch to see how the accuracy improves. In general, the more epochs you run, more accuracy you will have (and more time you will need to run the training), but increasing the number of epochs is just one drop on the ocean of possibilities we have to optimize our CNN.\n", + "
\n", + "### Evaluating the training results\n", + "\n", + "The simplest way to evaluate the training results is to use the evaluate method. It will show the same data as we saw on val_loss and val_acc on the end of the last epoch, but now we can use this data. On our tutorial, we will just print it on the console:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "result = cnn.evaluate(test_dataset, test_classes)\n", + "print ('Accuracy = ' + str(result[1] * 100) + \"%\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "To have detailed information about our network accuracy for each class, we can use one confusion matrix (a.k.a error matrix). Scikit-learn library can be used to do that and more information about it can be found here. We will not implement the confusion matrix on this tutorial, but there are several online samples on how to create a confusion matrix using Keras and Scikit-learn and also on how to interpret the results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/dl-model-training/Python/Deep_Learning_Tutorial.ipynb b/dl-model-training/Python/Deep_Learning_Tutorial.ipynb new file mode 100644 index 00000000..5dfd5e0a --- /dev/null +++ b/dl-model-training/Python/Deep_Learning_Tutorial.ipynb @@ -0,0 +1,545 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Deep Learning Tutorial\n", + "\n", + "\n", + "## MNIST Database - Handwritten digits (0-9)'\n", + "\n", + "\n", + "On this tutorial we will use Python* to implement one Convolutional Neural Network - a simplified version of LeNet - that will recognized Handwritten digits. A project like this one, using the MNIST dataset is considered as the \"Hello World\" of Machine Learning.\n", + "\n", + "We will use Keras*, TensorFlow* and the MNIST database.\n", + "\n", + "According to the description on their website, \"Keras is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, or Theano. It was developed with a focus on enabling fast experimentation. Being able to go from idea to result with the least possible delay is key to doing good research.\"*\n", + "\n", + "We will use TensorFlow as the backend for Keras. TensorFlow is an open source software library for high performance numerical computation.\n", + "\n", + "The MNIST database is a large database of handwritten digits that is commonly used for training various image processing systems. MNIST database is also available as a Keras dataset, with 60k 28x28 images of the 10 digits along with a test set of 10k images, so it is very easy to import and use it on our code.\n", + "\n", + "One good visual and interactive reference on what we are developing can be found here. The basic difference between our code and this interactive sample is the number and size of convolutional and fully-connected layers (LeNet uses two of each, we will use a single one, to reduce training time). We also adjusted the layers size to balance between accuracy and training time. We are achieving 98,54% of accuracy with less than 2 minutes training time on an Intel® Core™ processor.\n", + "\n", + "This code can also be optimized by several ways to increase accuracy, and we would like to invite you to explore this later, changing the number of epochs, filters, fully-connected neurons and also including additional convolutional and fully connected layers. You can also use flattening, dropout and batch normalization layers. Other optimization techniques can also be applied, so feel free to use this tutorial code as a base to explore those optimization techniques.\n", + "\n", + "In a nutshell, the convolutional and pooling layers are responsible for extracting a set of features from the input images, and the fully-connected layers are responsible for classification.\n", + "\n", + "Convolutional layers applies a set of filters to the input image to extract important features from the image. The filters are small matrixes also called image kernels that can be repeatedly applied to the input image (\"sliding\" the filter on the image). You may already used those filters on traditional image processing applications such as GIMP (i.e. blurring, sharpening or embossing). This article gives a good overview on image kernels with some live experiments. Each filter will generate a new image that will be the input for the next layer, typically a pooling layer.\n", + "\n", + "Pooling layers reduces the spatial size of the image (downsampling), reducing the computation in the network and also controlling overfitting.\n", + "\n", + "Fully connected layers are traditional Neural Network layers.\n", + "\n", + "\n", + "## Installing the Python* libraries\n", + "\n", + "To install the necessary Python libraries on Linux, you need to run:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! pip3 install keras tensorflow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "## Run the tutorial\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 Deep_Learning_Tutorial.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " \n", + "\n", + "## How the tutorial code works\n", + "\n", + "The complete code for this tutorial can be found here\n", + "Importing the necessary objects from Keras*\n", + "\n", + "\n", + "Sequential Network Model:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.models import Sequential" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "## Core Layers:\n", + "\n", + "Dense: densely-connected NN layer, to be used as classification layer\n", + "Flatten: layer to flatten the convolutional layers\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.layers import Dense, Flatten" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "\n", + "## Convolutional Layers:\n", + "\n", + "Conv2D: 2D convolution Layer\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.layers import Conv2D" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + " \n", + "## Pooling Layer:\n", + "\n", + "MaxPooling2D: Max pooling operation for spatial data\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.layers import MaxPooling2D" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### Utilities:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.utils import np_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + " \n", + "\n", + "### MNIST Dataset:\n", + "\n", + "Dataset of 60,000 28x28 handwritten images of the 10 digits, along with a test set of 10,000 images.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from keras.datasets import mnist" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + " \n", + "\n", + "## Download and load the MNIST database\n", + "\n", + "This will load the MNIST Dataset on four different variables:\n", + "\n", + " train_set: Dataset with the training data (60k elements)\n", + " train_classes: Dataset with the equivalent training classes (60k elements)\n", + " test_dataset: Dataset with test data (10k elements)\n", + " test_classes: Dataset with the equivalent test classes (10k elements)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(train_dataset, train_classes),(test_dataset, test_classes) = mnist.load_data()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + " \n", + "\n", + "- NOTE: only on the first run on your machine, this will download the MNIST Dataset.\n", + "Adjust the datasets to TensorFlow*\n", + "\n", + "First step, we need to reduce the image channels, from 3 (color) to 1 (grayscale):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_dataset = train_dataset.reshape(train_dataset.shape[0], 28, 28, 1)\n", + "test_dataset = test_dataset.reshape(test_dataset.shape[0], 28, 28, 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "Second step, we will convert the data from int8 to float32:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_dataset = train_dataset.astype('float32')\n", + "test_dataset = test_dataset.astype('float32')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "Third step, we need to normalize the data to speed up processing time:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_dataset = train_dataset / 255\n", + "test_dataset = test_dataset / 255" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "Forth step, convert the classes data from numerical to categorical:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_classes = np_utils.to_categorical(train_classes, 10)\n", + "test_classes = np_utils.to_categorical(test_classes, 10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "\n", + "Now the data is ready to be processed by the CNN.\n", + "\n", + "\n", + "## Create our Convolutional Neural Network (CNN)\n", + "\n", + "It is very simple and easy to create Neural Networks with Keras. We basically create the network, add the necessary layers, compile and execute the training.\n", + "\n", + "First thing is to create a Sequential Neural Network:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn = Sequential()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "We now add the input layer, a 2D convolutional layer with 32 filters, 3x3 filter kernel size, input shape of 28 x 28 x 1 (as we adjusted on the training dataset) and using Rectified Linear Unit (relu) as the activation function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.add(Conv2D(32, (3,3), input_shape = (28, 28, 1), activation = 'relu'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "NOTE: We need to inform the input_shape parameter only if the convolutional layer is the input layer (first CNN layer). If you add another layers later on, you don't need to use this parameter.\n", + "\n", + "We add one Pooling layer using the default 2x2 size. This means that this layer will reduce by half the input image in both spatial dimentions.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.add(MaxPooling2D())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + " \n", + "\n", + "At this point, a traditional LeNet network would add another two layers, one convolutional and one pooling, basically repeating the two lines of code we just created, (removing the input_shape from the first one). As explained before, to speed processing time and make it more easy to understand, we decided to use just the two layers we just created.\n", + "
\n", + "\n", + "Now we need to convert the output of the polling layer from a matrix to a vector, to be used by the classification part of our neural network. We do that using on flattening layer:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.add(Flatten())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + " \n", + "\n", + "Our data is now ready for the classification part of our neural network, that will be implemented using just two layers, one hidden layer and one output layer.\n", + "\n", + "\n", + "The first classification layer will be a fully-connected layer with 128 neurons and using rectified linear unit as the activation function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.add(Dense(units = 128, activation = 'relu'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "We now add another fully-connected layer that will be our output layer. Please note that this layer has 10 neurons, because we have 10 classes on our dataset. The activation function user here is Softmax." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.add(Dense(units = 10, activation = 'softmax'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " \n", + " \n", + "\n", + "Before we train the model, we need to \"compile\" it to configure the learning process.\n", + "\n", + "We will compile the CNN using categorical crossentropy as the loss function, adam as the optimizer and using accuracy as the results evaluation metric that will be show on the end of each apoch and also on the end of the training process." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + " \n", + " NOTE: Adam is a gradient descent optimization algorithm. A good introduction to Adam can be found here.\n", + "\n", + "Our CNN is now ready to be trained.\n", + "\n", + "\n", + "## Training our CNN\n", + "\n", + "To train the CNN we call the Fit method. On this training we will define:\n", + "\n", + "- Training dataset and training classes: our training dataset and training classes adjusted on the beginning of this tutorial.\n", + "- Batch size: number of samples to be used per each gradient update, in our case, 128 (default is 32).\n", + "- epochs: number of epochs that will be used on the training, in our case, 5 (for time saving purposes).\n", + "- validation_data: the dataset used to validate the training on the end of each epoch. Here is where we inform out test dataset.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cnn.fit(train_dataset, train_classes, batch_size = 128, epochs = 5, validation_data = (test_dataset, test_classes))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + " \n", + "\n", + "It will take a few minutes to run, and it will inform you the progress on the console. Note that it will inform the evolution of the loss (loss:) and accuracy (acc:) during the execution of each epoch, and this data is computed using the training data, so it cannot be used to evaluate the improvement of the epoch on the overall accuracy.\n", + "\n", + "\n", + "At the end of each epoch, Keras will use the test dataset we provided to evaluate the epoch results, and this data will be displayed as val_loss: and val_acc: and those are good parameters to follow on each epoch to see how the accuracy improves. In general, the more epochs you run, more accuracy you will have (and more time you will need to run the training), but increasing the number of epochs is just one drop on the ocean of possibilities we have to optimize our CNN.\n", + "\n", + "## Evaluating the training results\n", + "\n", + "The simplest way to evaluate the training results is to use the evaluate method. It will show the same data as we saw on val_loss and val_acc on the end of the last epoch, but now we can use this data. On our tutorial, we will just print it on the console:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "result = cnn.evaluate(test_dataset, test_classes)\n", + "print ('Accuracy = ' + str(result[1] * 100) + \"%\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "To have detailed information about our network accuracy for each class, we can use one confusion matrix (a.k.a error matrix). Scikit-learn library can be used to do that and more information about it can be found here. We will not implement the confusion matrix on this tutorial, but there are several online samples on how to create a confusion matrix using Keras and Scikit-learn and also on how to interpret the results." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/dl-model-training/Python/Deep_Learning_Tutorial.py b/dl-model-training/Python/Deep_Learning_Tutorial.py new file mode 100644 index 00000000..1f768cd3 --- /dev/null +++ b/dl-model-training/Python/Deep_Learning_Tutorial.py @@ -0,0 +1,95 @@ +''' + Copyright (c) 2018 Intel Corporation. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +''' + +# Good visual ilustration of the model we will build +# http://scs.ryerson.ca/~aharley/vis/conv/ + +# Sequential Network Model https://keras.io/models/sequential/ +from keras.models import Sequential +# Core Layers https://keras.io/layers/core/ +# Dense: densely-connected NN layer, to be used as classification layer +# Flatten: layer to flatten the convolutional layers +from keras.layers import Dense, Flatten +# Convolutional Layers https://keras.io/layers/convolutional/ +# Conv2D: 2D convolution Layer +from keras.layers import Conv2D +# Pooling Layer: https://keras.io/layers/pooling/ +# MaxPooling2D: Max pooling operation for spatial data +from keras.layers import MaxPooling2D +# Utilities https://keras.io/utils/ +from keras.utils import np_utils +# MNIST Dataset https://keras.io/datasets/ +# Dataset of 60,000 28x28 handwritten images of the 10 digits, along with a test set of 10,000 images. +from keras.datasets import mnist + +# Load MNIST data set in two sets: Trainning (60K IMAGES) and Testing (10k images) +(train_dataset, train_classes),(test_dataset, test_classes) = mnist.load_data() + +# Adjust datasets to TensorFlow +# Reduce image channels from 3 to 1 +train_dataset = train_dataset.reshape(train_dataset.shape[0], 28, 28, 1) +test_dataset = test_dataset.reshape(test_dataset.shape[0], 28, 28, 1) + +# Covert data from int8 to float32 +train_dataset = train_dataset.astype('float32') +test_dataset = test_dataset.astype('float32') + +# Normalize data to speed up processing time +train_dataset = train_dataset / 255 +test_dataset = test_dataset / 255 + +# Convert class data from numerical to categorical +train_classes = np_utils.to_categorical(train_classes, 10) +test_classes = np_utils.to_categorical(test_classes, 10) + +# Create the Convolutional Neural Network +cnn = Sequential() + +# Add the convolutional layer with 32 filters, 3x3 convolution window, +# 28 x 28 x 1 pixels imput array and Rectified Linear Unit activation function +cnn.add(Conv2D(32, (3,3), input_shape = (28, 28, 1), activation = 'relu')) + +# Add one Pooling layer with default 2x2 size +cnn.add(MaxPooling2D()) + +# Add one flattening layer to convert the output matrix to a vector to be the Deep Neural Network input +cnn.add(Flatten()) + +# Add one hidden layer with 128 neurons and Rectified Linear Unit activation function +cnn.add(Dense(units = 128, activation = 'relu')) + +# Add the output layer with 10 neurons (one for each class) with Softmax as the activation function +cnn.add(Dense(units = 10, activation = 'softmax')) + +# Compile the CNN with: +# - Categorical crossentropy as the loss function +# - Adam optimizer +# - Accuracy as the results evaluation metric +cnn.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy']) + +# Execute the training on 5 epochs, validating the generated model with test dataset on each epoch +cnn.fit(train_dataset, train_classes, batch_size = 128, epochs = 5, validation_data = (test_dataset, test_classes)) + +# Extract and print the Accuracy results +result = cnn.evaluate(test_dataset, test_classes) +print ('Accuracy = ' + str(result[1] * 100) + "%") diff --git a/dl-model-training/Python/README.md b/dl-model-training/Python/README.md new file mode 100644 index 00000000..aefe0156 --- /dev/null +++ b/dl-model-training/Python/README.md @@ -0,0 +1,188 @@ +# Deep Learning Tutorial +## MNIST Database - Handwritten digits (0-9) + +On this tutorial we will use Python* to implement one [Convolutional Neural Network](https://en.wikipedia.org/wiki/Convolutional_neural_network) - a simplified version of [LeNet](https://en.wikipedia.org/wiki/Convolutional_neural_network#LeNet-5) - that will recognized Handwritten digits. A project like this one, using the MNIST dataset is considered as the "Hello World" of Machine Learning. + +We will use [Keras*](https://keras.io), [TensorFlow*](https://www.tensorflow.org) and the [MNIST database](https://en.wikipedia.org/wiki/MNIST_database). + +According to the description on their website, *"**Keras** is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, or Theano*. **It was developed with a focus on enabling fast experimentation. Being able to go from idea to result with the least possible delay is key to doing good research.**"* + +We will use TensorFlow as the backend for Keras. TensorFlow is an open source software library for high performance numerical computation. + +The MNIST database is a large database of handwritten digits that is commonly used for training various image processing systems. MNIST database is also available as a Keras dataset, with 60k 28x28 images of the 10 digits along with a test set of 10k images, so it is very easy to import and use it on our code. + +One good visual and interactive reference on what we are developing can be found [here](http://scs.ryerson.ca/~aharley/vis/conv/). The basic difference between our code and this interactive sample is the number and size of convolutional and fully-connected layers (LeNet uses two of each, we will use a single one, to reduce training time). We also adjusted the layers size to balance between accuracy and training time. We are achieving 98,54% of accuracy with less than 2 minutes training time on an Intel® Core™ processor. + +This code can also be optimized by several ways to increase accuracy, and we would like to invite you to explore this later, changing the number of epochs, filters, fully-connected neurons and also including additional convolutional and fully connected layers. You can also use [flattening](https://keras.io/layers/core/#flatten), [dropout](https://keras.io/layers/core/#dropout) and [batch normalization](https://keras.io/layers/normalization/) layers. Other optimization techniques can also be applied, so feel free to use this tutorial code as a base to explore those optimization techniques. + +In a nutshell, the convolutional and pooling layers are responsible for extracting a set of features from the input images, and the fully-connected layers are responsible for classification. + +Convolutional layers applies a set of filters to the input image to extract important features from the image. The filters are small matrixes also called image kernels that can be repeatedly applied to the input image ("sliding" the filter on the image). You may already used those filters on traditional image processing applications such as GIMP (i.e. blurring, sharpening or embossing). [This article](http://setosa.io/ev/image-kernels/) gives a good overview on image kernels with some live experiments. Each filter will generate a new image that will be the input for the next layer, typically a pooling layer. + +Pooling layers reduces the spatial size of the image (downsampling), reducing the computation in the network and also controlling overfitting. + +Fully connected layers are traditional Neural Network layers. + +## Installing the Python* libraries + +To install the necessary Python libraries on Linux, you need to run: +``` +sudo pip3 install keras tensorflow +``` +## Run the tutorial + +``` +cd ~/smart-video-workshop/dl-model-training +python3 Deep_Learning_Tutorial.py +``` + +## How the tutorial code works + +The complete code for this tutorial can be found [here](https://github.com/intel-iot-devkit/smart-video-workshop/blob/master/dl-model-training/Deep_Learning_Tutorial.py) + +### Importing the necessary objects from Keras* + +[Sequential Network Model](https://keras.io/models/sequential): + +```Python +from keras.models import Sequential +``` +[Core Layers](https://keras.io/layers/core/): + * **Dense:** densely-connected NN layer, to be used as classification layer + * **Flatten:** layer to flatten the convolutional layers + +```Python +from keras.layers import Dense, Flatten +``` +[Convolutional Layers](https://keras.io/layers/convolutional/): + * **Conv2D:** 2D convolution Layer + +```Python +from keras.layers import Conv2D +``` +[Pooling Layer](https://keras.io/layers/pooling/): + * **MaxPooling2D:** Max pooling operation for spatial data + +```Python +from keras.layers import MaxPooling2D +``` +[Utilities](https://keras.io/utils/): +```Python +from keras.utils import np_utils +``` +[MNIST Dataset](https://keras.io/datasets/): + * Dataset of 60,000 28x28 handwritten images of the 10 digits, along with a test set of 10,000 images. + +```Python +from keras.datasets import mnist +``` +### Download and load the MNIST database +This will load the MNIST Dataset on four different variables: + * **train_set:** Dataset with the training data (60k elements) + * **train_classes:** Dataset with the equivalent training classes (60k elements) + * **test_dataset:** Dataset with test data (10k elements) + * **test_classes:** Dataset with the equivalent test classes (10k elements) + +```Python +(train_dataset, train_classes),(test_dataset, test_classes) = mnist.load_data() +``` +**NOTE:** only on the first run on your machine, this will download the MNIST Dataset. + +### Adjust the datasets to TensorFlow* + +First step, we need to reduce the image channels, from 3 (color) to 1 (grayscale): +```Python +train_dataset = train_dataset.reshape(train_dataset.shape[0], 28, 28, 1) +test_dataset = test_dataset.reshape(test_dataset.shape[0], 28, 28, 1) +``` + +Second step, we will convert the data from int8 to float32: +```Python +train_dataset = train_dataset.astype('float32') +test_dataset = test_dataset.astype('float32') +``` +Third step, we need to normalize the data to speed up processing time: + +```Python +train_dataset = train_dataset / 255 +test_dataset = test_dataset / 255 +``` +Forth step, convert the classes data from numerical to categorical: +```Python +train_classes = np_utils.to_categorical(train_classes, 10) +test_classes = np_utils.to_categorical(test_classes, 10) +``` +Now the data is ready to be processed by the CNN. + +### Create our Convolutional Neural Network (CNN) + +It is very simple and easy to create Neural Networks with Keras. We basically create the network, add the necessary layers, compile and execute the training. + +First thing is to create a Sequential Neural Network: +```Python +cnn = Sequential() +``` +We now add the input layer, a 2D convolutional layer with 32 filters, 3x3 filter kernel size, input shape of 28 x 28 x 1 (as we adjusted on the training dataset) and using Rectified Linear Unit (relu) as the activation function. + +```Python +cnn.add(Conv2D(32, (3,3), input_shape = (28, 28, 1), activation = 'relu')) +``` +**NOTE:** We need to inform the *input_shape* parameter only if the convolutional layer is the input layer (first CNN layer). If you add another layers later on, you don't need to use this parameter. + +We add one Pooling layer using the default 2x2 size. This means that this layer will reduce by half the input image in both spatial dimentions. +```Python +cnn.add(MaxPooling2D()) +``` +At this point, a traditional LeNet network would add another two layers, one convolutional and one pooling, basically repeating the two lines of code we just created, (removing the *input_shape* from the first one). As explained before, to speed processing time and make it more easy to understand, we decided to use just the two layers we just created. + +Now we need to convert the output of the polling layer from a matrix to a vector, to be used by the classification part of our neural network. We do that using on flattening layer: +```Python +cnn.add(Flatten()) +``` + +Our data is now ready for the classification part of our neural network, that will be implemented using just two layers, one hidden layer and one output layer. + +The first classification layer will be a fully-connected layer with 128 neurons and using rectified linear unit as the activation function. +```Python +cnn.add(Dense(units = 128, activation = 'relu')) +``` + +We now add another fully-connected layer that will be our output layer. Please note that this layer has 10 neurons, because we have 10 classes on our dataset. The activation function user here is Softmax. +```Python +cnn.add(Dense(units = 10, activation = 'softmax')) +``` + +Before we train the model, we need to "compile" it to configure the learning process. + +We will compile the CNN using *categorical crossentropy* as the loss function, *adam* as the optimizer and using accuracy as the results evaluation metric that will be show on the end of each apoch and also on the end of the training process. + +```Python +cnn.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy']) +``` +**NOTE:** Adam is a gradient descent optimization algorithm. A good introduction to Adam can be found [here](https://machinelearningmastery.com/adam-optimization-algorithm-for-deep-learning/). + +Our CNN is now ready to be trained. + +### Training our CNN + +To train the CNN we call the Fit method. On this training we will define: + * **Training dataset and training classes:** our training dataset and training classes adjusted on the beginning of this tutorial. + * **Batch size:** number of samples to be used per each gradient update, in our case, 128 (default is 32). + * **epochs:** number of epochs that will be used on the training, in our case, 5 (for time saving purposes). + * **validation_data:** the dataset used to validate the training on the end of each epoch. Here is where we inform out test dataset. + +```Python +cnn.fit(train_dataset, train_classes, batch_size = 128, epochs = 5, validation_data = (test_dataset, test_classes)) +``` +It will take a few minutes to run, and it will inform you the progress on the console. Note that it will inform the evolution of the loss (*loss:*) and accuracy (*acc:*) during the execution of each epoch, and this data is computed using the training data, so it cannot be used to evaluate the improvement of the epoch on the overall accuracy. + +At the end of each epoch, Keras will use the test dataset we provided to evaluate the epoch results, and this data will be displayed as *val_loss:* and *val_acc:* and those are good parameters to follow on each epoch to see how the accuracy improves. In general, the more epochs you run, more accuracy you will have (and more time you will need to run the training), but **increasing the number of epochs is just one drop on the ocean of possibilities we have to optimize our CNN.** + +### Evaluating the training results + +The simplest way to evaluate the training results is to use the *evaluate* method. It will show the same data as we saw on *val_loss* and *val_acc* on the end of the last epoch, but now we can use this data. On our tutorial, we will just print it on the console: +```Python +result = cnn.evaluate(test_dataset, test_classes) +print ('Accuracy = ' + str(result[1] * 100) + "%") +``` +To have detailed information about our network accuracy for each class, we can use one confusion matrix (a.k.a error matrix). *Scikit-learn* library can be used to do that and more information about it can be found [here](http://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html). We will not implement the confusion matrix on this tutorial, but there are several online samples on how to create a confusion matrix using Keras and Scikit-learn and also on how to interpret the results. diff --git a/hardware-heterogeneity/Python/.ipynb_checkpoints/hardware-heterogeneity-checkpoint.ipynb b/hardware-heterogeneity/Python/.ipynb_checkpoints/hardware-heterogeneity-checkpoint.ipynb new file mode 100644 index 00000000..913081b6 --- /dev/null +++ b/hardware-heterogeneity/Python/.ipynb_checkpoints/hardware-heterogeneity-checkpoint.ipynb @@ -0,0 +1,204 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "\n", + "# Intel® Distribution of OpenVINO™ toolkit hetero plugin\n", + "\n", + "
\n", + " \n", + "This example shows how to use hetero plugin to define preferences to run different network layers on different hardware types. Here, we will use the command line option to define hetero plugin usage where the layer distribution is already defined. However, hetero plugin also allows developers to customize distribution of layers execution on different hardware by specifying it in the application code.\n", + "\n", + "### Car detection tutorial example\n", + "\n", + "#### 1. Setting the Environment variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!/opt/intel/openvino/bin/setupvars.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "#### 2. Run the car detection tutorial with hetero plugin\n", + "\n", + "##### a) Prioritizing running on GPU first." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -d HETERO:GPU,CPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "##### b) Prioritizing running on CPU first." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -d HETERO:CPU,GPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "Observe the performance time required to process each frame by Inference Engine. For this particular example, inferance ran faster when prioritized for CPU as oppose to when GPU was the first priority.\n", + "
\n", + " \n", + "### Inference Engine classification sample\n", + "
\n", + "\n", + "Intel® Distribution of OpenVINO™ toolkit install folder (/opt/intel/computer_vision_sdk/) includes various samples for developers to understand how Inference Engine APIs can be used. These samples have -pc flag implmented which shows per topology layer performance report. This will allow to see which layers are running on which hardware. We will run a very basic classification sample as an example in this section. We will provide car image as input to the classification sample. The output will be object labels with confidence numbers.\n", + "
\n", + "\n", + "#### 1. First, get the classification model and convert that to IR using Model Optimizer\n", + "\n", + "For this example, we will use squeezenet model downloaded with the model downlaoder script while setting up the OS for the workshop." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! /opt/intel/openvino/deployment_tools/tools/model_downloader/downloader.py --name squeezenet1.1 " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! /opt/intel/openvino/deployment_tools/model_optimizer/mo_caffe.py --input_model /opt/intel/workshop/smart-video-workshop/hardware-heterogeneity/classification/squeezenet/1.1/caffe/squeezenet1.1.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "To display labels after classifictaion, you will need a labels file for the SqueezeNet* model. Get the available labels file from demo directory to your working directory." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%cp /opt/intel/openvino/deployment_tools/demo/squeezenet1.1.labels /opt/intel/workshop/smart-video-workshop/object-detection/" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### 2. Run classification sample with hetero plugin, prioritizing running on GPU first." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 classification_sample.py -i car_1.bmp -m /home/intel/Desktop/workshop/smart-video-workshop/object-detection/sqeezenet/FP32/squeezenet1.1.xml -d HETERO:GPU,CPU -pc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "perfromance counts:\n", + "\n", + "\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### 3. Now, run with CPU first" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 classification_sample.py -i car_1.bmp -m /home/intel/Desktop/workshop/smart-video-workshop/object-detection/sqeezenet/FP32/squeezenet1.1.xml -d HETERO:CPU,GPU -pc\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "performance counts:\n", + "\n", + "\n", + "" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/hardware-heterogeneity/Python/ROIs.txt b/hardware-heterogeneity/Python/ROIs.txt new file mode 100644 index 00000000..7e03eb5c --- /dev/null +++ b/hardware-heterogeneity/Python/ROIs.txt @@ -0,0 +1,1024 @@ +0 1 6.0 0.9964658 0.44761842 0.79922295 0.6364841 0.9990165 +0 1 6.0 0.9926847 0.6256053 0.41670576 0.7727745 0.6113744 +0 1 6.0 0.9909576 0.41138658 0.5242579 0.56503105 0.72822225 +0 1 6.0 0.7625294 0.46290958 0.27411702 0.5801413 0.4220737 +0 1 6.0 0.53976077 0.32432455 0.3768512 0.45632356 0.5337407 +0 1 6.0 0.5151692 0.23920403 0.29027542 0.33928698 0.39405224 +0 2 6.0 0.9954222 0.44760248 0.80186516 0.6383569 0.99910706 +0 2 6.0 0.9947024 0.6328486 0.42395604 0.7784077 0.61978865 +0 2 6.0 0.9942959 0.41226456 0.5295723 0.5671027 0.7297891 +0 2 6.0 0.750623 0.4641972 0.27610734 0.5803963 0.42358008 +0 2 6.0 0.7141999 0.3246013 0.37574682 0.4591242 0.53584516 +0 3 6.0 0.99572766 0.6323187 0.42458817 0.78010625 0.62362313 +0 3 6.0 0.9954581 0.44869733 0.7972397 0.6356696 0.9986244 +0 3 6.0 0.99536765 0.41554058 0.53543514 0.56903505 0.7326973 +0 3 6.0 0.75139654 0.32479182 0.38018942 0.4617783 0.53798795 +0 3 6.0 0.70303583 0.4662448 0.27694562 0.58363974 0.4243566 +0 3 6.0 0.55453944 0.15724075 0.26623008 0.22998264 0.32844386 +0 4 6.0 0.9956666 0.6363875 0.4295171 0.7820316 0.6276184 +0 4 6.0 0.9953695 0.41724658 0.5385295 0.56967604 0.74189615 +0 4 6.0 0.99379045 0.44797772 0.8013418 0.63618046 0.99891067 +0 4 6.0 0.74382234 0.46737447 0.27740034 0.58517605 0.4253783 +0 4 6.0 0.73045725 0.3265366 0.379369 0.4619162 0.53887945 +0 4 6.0 0.5816072 0.15328564 0.263449 0.23195316 0.33066553 +0 4 6.0 0.50847673 0.23733582 0.28538144 0.34301183 0.39693284 +0 5 6.0 0.995905 0.6332835 0.43035203 0.7812604 0.6273057 +0 5 6.0 0.99533254 0.4463455 0.80734247 0.64266557 1.0003978 +0 5 6.0 0.9921017 0.42020932 0.54212826 0.5703625 0.7455339 +0 5 6.0 0.76590854 0.46934956 0.27757213 0.58908993 0.4262494 +0 5 6.0 0.676946 0.32981002 0.3832909 0.46814877 0.53549635 +0 5 6.0 0.60633725 0.15392816 0.263262 0.2268379 0.32903436 +0 5 6.0 0.51572645 0.23867662 0.27957273 0.3438068 0.39625084 +0 6 6.0 0.9962993 0.63596576 0.43572846 0.7831666 0.6339741 +0 6 6.0 0.99442226 0.41992217 0.53620344 0.56904554 0.747477 +0 6 6.0 0.99090064 0.4423406 0.814306 0.63891053 0.9975537 +0 6 6.0 0.73141384 0.32889262 0.38311115 0.46723238 0.5382607 +0 6 6.0 0.6011291 0.15275128 0.2654744 0.22210585 0.33090302 +0 6 6.0 0.59949946 0.4715327 0.28082255 0.5918398 0.42368802 +0 6 6.0 0.512303 0.23823681 0.27906156 0.3452625 0.39731568 +0 7 6.0 0.99575377 0.4200381 0.5351944 0.5717191 0.7552264 +0 7 6.0 0.9954893 0.63374555 0.43494853 0.78333414 0.6438796 +0 7 6.0 0.9853837 0.43881285 0.8215549 0.64186335 0.9976454 +0 7 6.0 0.7612601 0.3283985 0.38451594 0.47001997 0.53350586 +0 7 6.0 0.5797536 0.4731653 0.2850881 0.59451634 0.42605773 +0 7 6.0 0.56274706 0.15548052 0.26202434 0.2274075 0.33098137 +0 7 6.0 0.53878903 0.23605242 0.2792865 0.34508166 0.39805335 +0 8 6.0 0.9975636 0.42083487 0.5413753 0.5735713 0.7586535 +0 8 6.0 0.9943305 0.6371516 0.4422245 0.7851727 0.6482022 +0 8 6.0 0.97284365 0.43998387 0.8299627 0.64668 0.99836034 +0 8 6.0 0.75751835 0.32970214 0.38174394 0.4725284 0.5329103 +0 8 6.0 0.5543651 0.23304553 0.276955 0.3458567 0.3980925 +0 8 6.0 0.53619266 0.15243368 0.25800544 0.22920491 0.33156407 +0 9 6.0 0.9988103 0.4218455 0.5415692 0.57477766 0.75946313 +0 9 6.0 0.99550724 0.6430491 0.44582224 0.78703177 0.64712715 +0 9 6.0 0.9852705 0.43751204 0.8355535 0.64969087 1.0000966 +0 9 6.0 0.7784254 0.33081996 0.38101757 0.47308326 0.53629327 +0 9 6.0 0.54048735 0.2344573 0.27780378 0.34518242 0.3998474 +0 9 6.0 0.5402935 0.1531557 0.2612576 0.22792171 0.33286458 +0 10 6.0 0.999355 0.42256695 0.54844683 0.57521296 0.7695605 +0 10 6.0 0.9940177 0.64401025 0.4394288 0.7908332 0.63826585 +0 10 6.0 0.9703957 0.43586093 0.8429302 0.6556588 1.003197 +0 10 6.0 0.74887407 0.33267248 0.39144716 0.47453952 0.53468776 +0 10 6.0 0.5373873 0.1562757 0.26162013 0.233324 0.3316842 +0 10 6.0 0.50261426 0.23626819 0.28299993 0.3451064 0.3957466 +0 11 6.0 0.99924797 0.42167485 0.54475015 0.5775272 0.7752362 +0 11 6.0 0.9981523 0.6466424 0.44186467 0.7940878 0.6436898 +0 11 6.0 0.97026575 0.4347592 0.8515484 0.65605015 1.007845 +0 11 6.0 0.74919105 0.33480924 0.416406 0.47351795 0.56618077 +0 11 6.0 0.5566421 0.15399848 0.2600117 0.23333456 0.33104357 +0 12 6.0 0.99908936 0.64430726 0.44389403 0.79506826 0.64871514 +0 12 6.0 0.9989317 0.4227776 0.54869527 0.57695484 0.7741247 +0 12 6.0 0.96044576 0.43463212 0.85422426 0.65445596 1.0118972 +0 12 6.0 0.7482295 0.3352438 0.41257617 0.47296855 0.56476915 +0 12 6.0 0.5321983 0.15715146 0.25949797 0.23314616 0.32803127 +0 13 6.0 0.99965906 0.6489596 0.44594312 0.79974335 0.65084815 +0 13 6.0 0.99900717 0.42363244 0.55322963 0.5792362 0.77897996 +0 13 6.0 0.93109065 0.43639466 0.8570765 0.64920795 1.0085187 +0 13 6.0 0.81774634 0.33698046 0.41083014 0.47572201 0.56641203 +0 13 6.0 0.5683634 0.15590574 0.25822994 0.23315825 0.3288485 +0 14 6.0 0.99970645 0.6489603 0.44840443 0.7997981 0.6513729 +0 14 6.0 0.9978248 0.4249113 0.5518857 0.57863504 0.7804338 +0 14 6.0 0.9274369 0.4354539 0.86139715 0.65692353 1.0091904 +0 14 6.0 0.75272435 0.3386834 0.42278332 0.47825763 0.56746393 +0 14 6.0 0.57958883 0.1530083 0.25322208 0.23405872 0.32935128 +0 15 6.0 0.9995216 0.65031976 0.44709748 0.80280775 0.653814 +0 15 6.0 0.997519 0.42424905 0.5608558 0.5840498 0.7841348 +0 15 6.0 0.8583661 0.44372034 0.8620765 0.6523495 1.0036374 +0 15 6.0 0.71549565 0.34331048 0.4203509 0.48148507 0.56705594 +0 15 6.0 0.64847094 0.15086949 0.25549647 0.23361817 0.33110383 +0 16 6.0 0.9996326 0.65134037 0.4493882 0.8017615 0.6570386 +0 16 6.0 0.99890006 0.4269349 0.56903297 0.5855883 0.7922067 +0 16 6.0 0.8285161 0.33911932 0.41652626 0.48308742 0.57328546 +0 16 6.0 0.73129696 0.4479262 0.8648691 0.65301025 1.0017387 +0 16 6.0 0.6624073 0.33768362 0.357062 0.47387177 0.47338846 +0 16 6.0 0.6082052 0.15337816 0.25388312 0.23167545 0.3302499 +0 17 6.0 0.99972576 0.6535322 0.45063168 0.80484444 0.66080636 +0 17 6.0 0.9988192 0.42688763 0.57505244 0.5881983 0.7983609 +0 17 6.0 0.8412626 0.33886698 0.42016873 0.48383036 0.5723357 +0 17 6.0 0.66589797 0.46093658 0.8679185 0.6583985 1.0030954 +0 17 6.0 0.561481 0.33711982 0.3602669 0.46931785 0.4698898 +0 17 6.0 0.54261804 0.15487391 0.25434014 0.23120946 0.33016822 +0 18 6.0 0.9997336 0.6555492 0.45481485 0.8111877 0.667919 +0 18 6.0 0.9987709 0.42737675 0.5821713 0.5902909 0.79931176 +0 18 6.0 0.8754751 0.34235173 0.4127911 0.4834625 0.5743173 +0 18 6.0 0.5446561 0.45516893 0.87981915 0.65715945 1.0067732 +0 18 6.0 0.5019917 0.33836865 0.36141047 0.4709041 0.47211227 +0 19 6.0 0.9995634 0.65720314 0.4573614 0.81443304 0.6700538 +0 19 6.0 0.99737155 0.4303468 0.5818963 0.5916372 0.8022815 +0 19 6.0 0.75563675 0.3460983 0.42715454 0.48761547 0.57496035 +0 19 6.0 0.5729108 0.15681651 0.25161913 0.2345053 0.32940426 +0 20 6.0 0.99921775 0.6596163 0.46234322 0.8161853 0.67448866 +0 20 6.0 0.99903643 0.4282126 0.583642 0.5940187 0.8050271 +0 20 6.0 0.76183593 0.3442161 0.4287562 0.48603576 0.5779692 +0 20 6.0 0.55564064 0.154605 0.24827883 0.23285091 0.32920435 +0 21 6.0 0.99936944 0.42665353 0.58414984 0.5943083 0.8094722 +0 21 6.0 0.9980415 0.65976787 0.46048406 0.8192673 0.67608786 +0 21 6.0 0.6332147 0.344174 0.42868212 0.48844466 0.57513136 +0 21 6.0 0.5344087 0.48805374 0.29666728 0.6097271 0.45735335 +0 21 6.0 0.52583134 0.1571871 0.25117624 0.2318168 0.3281659 +0 22 6.0 0.9991196 0.433553 0.58442533 0.59715974 0.81184363 +0 22 6.0 0.9958383 0.6607491 0.45894736 0.8186177 0.6802798 +0 22 6.0 0.72782624 0.34557274 0.43847027 0.48748305 0.58001566 +0 22 6.0 0.5522376 0.1586452 0.2526946 0.23156796 0.32802492 +0 23 6.0 0.9988224 0.43744096 0.58564526 0.5968616 0.8217618 +0 23 6.0 0.99047464 0.6592416 0.46273232 0.8186205 0.6763723 +0 23 6.0 0.74977845 0.34817743 0.4283284 0.4918291 0.58191466 +0 23 6.0 0.65842557 0.1541518 0.24380589 0.23487273 0.32992655 +0 23 6.0 0.55117905 0.495824 0.2977473 0.61188406 0.4559508 +0 24 6.0 0.9989371 0.43926626 0.5847388 0.5982843 0.82530695 +0 24 6.0 0.98850596 0.6633031 0.46530783 0.8230333 0.6875708 +0 24 6.0 0.676721 0.34834054 0.42755783 0.49224094 0.57769465 +0 24 6.0 0.6044984 0.15617879 0.24505782 0.23418833 0.3291872 +0 24 6.0 0.582759 0.49522093 0.2962941 0.6134573 0.45630872 +0 24 6.0 0.559198 0.3471942 0.38180795 0.48586923 0.5023294 +0 25 6.0 0.9983981 0.44121495 0.5868235 0.6013532 0.8303998 +0 25 6.0 0.992986 0.6673048 0.46641332 0.8266645 0.69306165 +0 25 6.0 0.6498247 0.1547663 0.24349304 0.23403461 0.32929966 +0 25 6.0 0.5853207 0.34967828 0.43562284 0.488824 0.575921 +0 25 6.0 0.54174393 0.3460303 0.36711535 0.4803232 0.47403184 +0 26 6.0 0.9978269 0.6666453 0.46698418 0.8274517 0.6956161 +0 26 6.0 0.996867 0.44007647 0.59316444 0.60075176 0.8343693 +0 26 6.0 0.6814031 0.15553762 0.24399213 0.2355013 0.32884926 +0 26 6.0 0.61929595 0.35128966 0.42890888 0.49223587 0.5791473 +0 26 6.0 0.5917561 0.50001913 0.2993733 0.61476547 0.4551424 +0 26 6.0 0.53036624 0.34992635 0.38133755 0.48780662 0.50301284 +0 27 6.0 0.9968652 0.4400296 0.60306346 0.60199314 0.8386072 +0 27 6.0 0.9932713 0.67058885 0.4665684 0.82969415 0.69538015 +0 27 6.0 0.67060786 0.1566752 0.24944314 0.23664863 0.32894716 +0 27 6.0 0.6276555 0.3514392 0.43383247 0.493387 0.58492225 +0 28 6.0 0.99646544 0.6705284 0.47387406 0.8306558 0.6975497 +0 28 6.0 0.98723906 0.44628555 0.6057763 0.6019731 0.84610724 +0 28 6.0 0.6735219 0.15669985 0.24661139 0.23843603 0.3294401 +0 28 6.0 0.56916666 0.34995055 0.42842498 0.49417788 0.57904315 +0 28 6.0 0.5500965 0.34982824 0.3873675 0.48936307 0.5082554 +0 28 6.0 0.52542347 0.5029503 0.30350152 0.6141306 0.456351 +0 29 6.0 0.9980354 0.67416984 0.4798453 0.8334902 0.6999818 +0 29 6.0 0.9852989 0.44308835 0.61137223 0.60240084 0.85612917 +0 29 6.0 0.7193801 0.15488355 0.2458888 0.23884414 0.32956734 +0 29 6.0 0.52701795 0.5023298 0.30306 0.6157265 0.45631832 +0 30 6.0 0.998295 0.6764646 0.4853485 0.83902305 0.7017015 +0 30 6.0 0.9916231 0.44716838 0.62290466 0.60972154 0.856096 +0 30 6.0 0.70722514 0.15611392 0.24854755 0.23735756 0.32903212 +0 31 6.0 0.99693227 0.44811684 0.6259903 0.61200076 0.8587948 +0 31 6.0 0.99513865 0.68085414 0.48713088 0.8401198 0.70355415 +0 31 6.0 0.65195364 0.15703021 0.25025117 0.23589136 0.32826114 +0 31 6.0 0.6194588 0.36114344 0.46521053 0.5060828 0.6198683 +0 31 6.0 0.55153805 0.50333124 0.30335552 0.6162519 0.45757043 +0 32 6.0 0.9969099 0.6819218 0.48707834 0.8413293 0.7087796 +0 32 6.0 0.9955388 0.4489971 0.63036466 0.6145381 0.8602582 +0 32 6.0 0.7380449 0.35707283 0.46199667 0.5050734 0.6217358 +0 32 6.0 0.6548235 0.15709299 0.24837461 0.23704877 0.33028582 +0 32 6.0 0.5453626 0.50294685 0.30558914 0.6175796 0.4607523 +0 32 6.0 0.5243931 0.3471619 0.38261023 0.48974776 0.50809884 +0 33 6.0 0.9980604 0.684389 0.49663883 0.842033 0.7140116 +0 33 6.0 0.99702924 0.44960788 0.6278251 0.61514854 0.865212 +0 33 6.0 0.7590272 0.35927823 0.4625888 0.5050964 0.6244819 +0 33 6.0 0.6579567 0.16023067 0.25074542 0.23553061 0.32833904 +0 33 6.0 0.61629665 0.503095 0.30274367 0.6195653 0.46232837 +0 34 6.0 0.9991053 0.44895095 0.62966406 0.6193641 0.87544084 +0 34 6.0 0.99805474 0.6851263 0.49974853 0.8428494 0.71482235 +0 34 6.0 0.7737759 0.36670846 0.46444315 0.50971466 0.6234464 +0 34 6.0 0.6769262 0.5024066 0.3017975 0.6217009 0.46568954 +0 34 6.0 0.6112527 0.16244268 0.25103948 0.23480883 0.3271931 +0 35 6.0 0.9989849 0.45014402 0.6322167 0.6199088 0.88136625 +0 35 6.0 0.99765176 0.68650496 0.5014099 0.84675467 0.7205783 +0 35 6.0 0.6493182 0.36568493 0.46683806 0.5086324 0.62526983 +0 35 6.0 0.6307689 0.1571376 0.2477593 0.23772833 0.32888603 +0 35 6.0 0.5086187 0.5040935 0.30419502 0.6206467 0.4667985 +0 36 6.0 0.99943227 0.4459984 0.6304346 0.6206311 0.8844188 +0 36 6.0 0.9970476 0.69077355 0.50946915 0.8488501 0.72317433 +0 36 6.0 0.8293337 0.36993313 0.46578512 0.51042587 0.62723064 +0 36 6.0 0.6369914 0.5039014 0.3005395 0.62922615 0.46247017 +0 36 6.0 0.5919688 0.16183692 0.24924031 0.2369886 0.32817253 +0 36 6.0 0.53518814 0.3491099 0.3803209 0.48943794 0.5127679 +0 37 6.0 0.9993919 0.44470683 0.63447595 0.62220675 0.89000225 +0 37 6.0 0.999012 0.69177914 0.5112146 0.8540491 0.7258698 +0 37 6.0 0.75411695 0.37250063 0.46764064 0.513389 0.62907016 +0 37 6.0 0.713767 0.5026057 0.3005705 0.63012254 0.4649127 +0 37 6.0 0.56693864 0.16434485 0.24985954 0.23635224 0.3271328 +0 38 6.0 0.9984597 0.44619521 0.6438052 0.6246421 0.8993327 +0 38 6.0 0.9979037 0.69667846 0.5141874 0.85582894 0.7268236 +0 38 6.0 0.80222183 0.5070747 0.30152097 0.63397264 0.46695742 +0 38 6.0 0.6046701 0.16553853 0.24923757 0.23687707 0.32652268 +0 38 6.0 0.5955896 0.37080896 0.46528655 0.51241547 0.6295646 +0 38 6.0 0.5280508 0.3462438 0.37638682 0.48662835 0.51526 +0 39 6.0 0.99888366 0.44759655 0.6479474 0.62788415 0.908703 +0 39 6.0 0.9960349 0.6957684 0.5204478 0.85981256 0.7353856 +0 39 6.0 0.8057513 0.37008762 0.46697083 0.5131206 0.636291 +0 39 6.0 0.75793105 0.5122073 0.30252972 0.63612026 0.47078446 +0 39 6.0 0.6414908 0.16690865 0.25426093 0.23681682 0.32685813 +0 40 6.0 0.998782 0.4509206 0.65674996 0.62794906 0.9114629 +0 40 6.0 0.9963098 0.69561976 0.52080274 0.8604961 0.74432516 +0 40 6.0 0.87922144 0.36651134 0.47144896 0.51580703 0.6408344 +0 40 6.0 0.8322636 0.51271534 0.3023081 0.6406704 0.47540453 +0 40 6.0 0.6595438 0.16639584 0.2548669 0.23648551 0.32692498 +0 41 6.0 0.99802655 0.69854236 0.52327514 0.8591505 0.7524513 +0 41 6.0 0.99760085 0.45520753 0.6655978 0.6324869 0.90639365 +0 41 6.0 0.93989164 0.5138334 0.30032492 0.6434605 0.4838261 +0 41 6.0 0.88919324 0.37233874 0.46984679 0.5188173 0.6466059 +0 41 6.0 0.6590036 0.16761357 0.25387368 0.2364124 0.32556298 +0 42 6.0 0.9985049 0.69886297 0.51652354 0.8623627 0.7470127 +0 42 6.0 0.99758947 0.45397288 0.66932684 0.62985045 0.9168274 +0 42 6.0 0.96153384 0.51224214 0.3018275 0.6476659 0.48285472 +0 42 6.0 0.87854284 0.38274467 0.47201037 0.5222634 0.64656997 +0 42 6.0 0.6836163 0.16621588 0.2543747 0.23658325 0.3263047 +0 43 6.0 0.9987943 0.7027694 0.52359736 0.8657092 0.74929976 +0 43 6.0 0.9977296 0.45716953 0.67657137 0.6323191 0.92120194 +0 43 6.0 0.9227665 0.38085088 0.47287312 0.5224175 0.65131754 +0 43 6.0 0.916534 0.5172822 0.30183858 0.6493067 0.48360693 +0 43 6.0 0.6921923 0.16301733 0.24952589 0.23786303 0.32688612 +0 44 6.0 0.9988226 0.7055346 0.5245801 0.86529505 0.7525418 +0 44 6.0 0.99797124 0.44983023 0.68208563 0.6316741 0.93441296 +0 44 6.0 0.9251891 0.37879345 0.4758373 0.52462006 0.6521043 +0 44 6.0 0.8838506 0.5179799 0.30235428 0.65014535 0.4824527 +0 44 6.0 0.69793063 0.16249043 0.24760963 0.23893088 0.3271067 +0 45 6.0 0.9989391 0.45088506 0.6825876 0.6358421 0.93899536 +0 45 6.0 0.9977107 0.7110097 0.53065604 0.86855596 0.75375813 +0 45 6.0 0.9280225 0.51436424 0.30058464 0.63759327 0.48242602 +0 45 6.0 0.92028123 0.38187462 0.4786736 0.52447736 0.65192705 +0 45 6.0 0.6852354 0.1656688 0.25102898 0.2369728 0.32512113 +0 46 6.0 0.9992067 0.45701838 0.6863011 0.64012074 0.9461584 +0 46 6.0 0.99832696 0.7119176 0.53485215 0.8756713 0.7624192 +0 46 6.0 0.96646816 0.38115516 0.47959238 0.52688 0.66115385 +0 46 6.0 0.93614936 0.51641554 0.30062076 0.6404329 0.48629168 +0 46 6.0 0.6646493 0.16653046 0.24809268 0.23732468 0.32465556 +0 47 6.0 0.999015 0.7126147 0.53774893 0.8771418 0.76702917 +0 47 6.0 0.99892515 0.45903695 0.691388 0.64008737 0.95202386 +0 47 6.0 0.9762917 0.38273835 0.4801882 0.5289355 0.66180176 +0 47 6.0 0.92140913 0.5165914 0.30094242 0.6409123 0.48585582 +0 47 6.0 0.632993 0.1660761 0.2512051 0.23795062 0.3256734 +0 48 6.0 0.9990662 0.45729548 0.6934517 0.6440038 0.95979077 +0 48 6.0 0.997451 0.71202517 0.53519106 0.87639403 0.7740208 +0 48 6.0 0.9798518 0.37953836 0.47914165 0.5319646 0.6603599 +0 48 6.0 0.94859344 0.5159097 0.3030244 0.64237344 0.48734754 +0 48 6.0 0.6440611 0.16481398 0.25173962 0.23919247 0.327177 +0 49 6.0 0.9972042 0.71219444 0.54139817 0.8802285 0.78054917 +0 49 6.0 0.99656504 0.46623623 0.7014437 0.6450237 0.9639368 +0 49 6.0 0.96275264 0.515566 0.30408606 0.64342594 0.48964152 +0 49 6.0 0.9415093 0.37994096 0.47950888 0.5321554 0.66267467 +0 49 6.0 0.602764 0.16594912 0.2510734 0.23736273 0.32554808 +0 50 6.0 0.9992113 0.46550372 0.7011395 0.64204496 0.9581831 +0 50 6.0 0.9968407 0.71126026 0.55020154 0.8847217 0.7837174 +0 50 6.0 0.9684485 0.38785636 0.50485504 0.53803533 0.6797974 +0 50 6.0 0.94930226 0.5179954 0.30731326 0.6446864 0.48878092 +0 50 6.0 0.5996589 0.1670477 0.24864215 0.236724 0.32403725 +0 51 6.0 0.99823415 0.711571 0.5519323 0.8850248 0.7869957 +0 51 6.0 0.9969283 0.47031507 0.706165 0.6439891 0.9720716 +0 51 6.0 0.9615859 0.3879333 0.50139487 0.540097 0.6801568 +0 51 6.0 0.95890486 0.5184748 0.3080535 0.647043 0.4900337 +0 51 6.0 0.6148856 0.16759466 0.24776852 0.23745199 0.32173133 +0 52 6.0 0.99815434 0.7120894 0.56011844 0.8899267 0.7940532 +0 52 6.0 0.99806076 0.47016627 0.71767205 0.6448943 0.9766483 +0 52 6.0 0.9781302 0.3918905 0.49999636 0.5448587 0.6854504 +0 52 6.0 0.9548418 0.5222531 0.30842942 0.64846605 0.4888029 +0 52 6.0 0.63169676 0.16798395 0.24832708 0.23751616 0.32183713 +0 53 6.0 0.99919873 0.7138208 0.5635163 0.89372253 0.7960473 +0 53 6.0 0.99884856 0.47068688 0.7238278 0.64754343 0.97896796 +0 53 6.0 0.982209 0.39221427 0.5007085 0.5465519 0.68680996 +0 53 6.0 0.9727285 0.52312416 0.3087418 0.6514824 0.49292272 +0 53 6.0 0.59537697 0.16935152 0.25079763 0.23629421 0.32130778 +0 53 6.0 0.5028593 0.29421744 0.31824154 0.3954343 0.46166027 +0 54 6.0 0.99913377 0.71647596 0.56990063 0.89701855 0.799783 +0 54 6.0 0.99905545 0.4686921 0.7294661 0.64782494 0.9881549 +0 54 6.0 0.99739033 0.39117554 0.50057155 0.55088127 0.6926816 +0 54 6.0 0.982084 0.52462053 0.3107741 0.6535553 0.4924972 +0 54 6.0 0.53323984 0.16964875 0.25199026 0.23592933 0.3214386 +0 55 6.0 0.99930584 0.46666652 0.73217523 0.6530277 0.9859321 +0 55 6.0 0.9991757 0.71862185 0.57589436 0.8968214 0.80316806 +0 55 6.0 0.9974692 0.39376256 0.49760717 0.55391604 0.697715 +0 55 6.0 0.9829779 0.52405536 0.3146583 0.65527534 0.49701354 +0 55 6.0 0.5125862 0.2954369 0.32206067 0.39948663 0.46407482 +0 55 6.0 0.51077384 0.17001477 0.2507799 0.23723209 0.3219441 +0 56 6.0 0.9989768 0.4724126 0.7317438 0.6492357 0.99053 +0 56 6.0 0.99761957 0.7186483 0.5780203 0.8973738 0.8051173 +0 56 6.0 0.9931161 0.39407176 0.50007683 0.5540635 0.696794 +0 56 6.0 0.98361766 0.52475387 0.3131905 0.65797156 0.5011112 +0 56 6.0 0.54453593 0.17007203 0.24904117 0.23680033 0.32021794 +0 57 6.0 0.9992749 0.7186199 0.5792573 0.8981599 0.8096804 +0 57 6.0 0.9992175 0.47433597 0.74060345 0.6484619 0.989529 +0 57 6.0 0.9906578 0.39349377 0.5034182 0.5554662 0.70242393 +0 57 6.0 0.97758263 0.5250265 0.31578064 0.6615947 0.5040185 +0 57 6.0 0.5484794 0.17205298 0.2488236 0.23595268 0.31738892 +0 57 6.0 0.53030825 0.29619852 0.31321082 0.4015552 0.46463826 +0 58 6.0 0.9992487 0.7221968 0.5797342 0.8989023 0.8136233 +0 58 6.0 0.9986916 0.4789623 0.7420023 0.64717007 0.98998934 +0 58 6.0 0.98845005 0.3940854 0.50706065 0.5566185 0.70670927 +0 58 6.0 0.97408694 0.53600836 0.3252506 0.66366744 0.5066425 +0 58 6.0 0.5779464 0.3674597 0.44122964 0.5218432 0.57440823 +0 58 6.0 0.53860176 0.17252629 0.24731041 0.2359794 0.31685758 +0 59 6.0 0.99928254 0.7270056 0.58220893 0.90167236 0.81804746 +0 59 6.0 0.99770385 0.47762626 0.7452828 0.6545368 0.99221164 +0 59 6.0 0.97886974 0.3933546 0.5048483 0.5602879 0.71014446 +0 59 6.0 0.96400607 0.5385632 0.3278802 0.66563135 0.50848716 +0 60 6.0 0.99950707 0.73136723 0.58794224 0.9076288 0.8266616 +0 60 6.0 0.999102 0.4780095 0.7495272 0.65509146 0.9973105 +0 60 6.0 0.9721053 0.39520335 0.5077467 0.5609865 0.7118697 +0 60 6.0 0.96159 0.5436543 0.3298365 0.6661029 0.5100341 +0 60 6.0 0.5428741 0.3433248 0.43049124 0.47957495 0.5901876 +0 61 6.0 0.9992367 0.4792413 0.75735176 0.65618056 0.999416 +0 61 6.0 0.9989262 0.7337195 0.5888324 0.91255325 0.8348901 +0 61 6.0 0.954458 0.39445007 0.50924534 0.56043404 0.71964234 +0 61 6.0 0.9455627 0.54475087 0.33352625 0.66819245 0.5115391 +0 61 6.0 0.61492586 0.3635345 0.4412729 0.5190774 0.585874 +0 62 6.0 0.9988174 0.47945017 0.76899666 0.6597844 1.0019382 +0 62 6.0 0.9981698 0.73621726 0.59403896 0.9156438 0.83736384 +0 62 6.0 0.9794784 0.3993847 0.5202163 0.56074476 0.7181631 +0 62 6.0 0.95077574 0.5482653 0.3372831 0.6686606 0.51210576 +0 63 6.0 0.99765164 0.73565775 0.59805924 0.91567 0.84176177 +0 63 6.0 0.9969137 0.48301038 0.77159137 0.66339093 1.0005181 +0 63 6.0 0.97195214 0.40078482 0.5276867 0.5634924 0.7249311 +0 63 6.0 0.950505 0.54824555 0.33948195 0.67014146 0.51457083 +0 64 6.0 0.9977799 0.73660475 0.60466707 0.9200863 0.8489016 +0 64 6.0 0.99319696 0.4843148 0.78450006 0.66173506 0.9948408 +0 64 6.0 0.97023916 0.40231135 0.5259196 0.5644067 0.72524065 +0 64 6.0 0.9312085 0.54999995 0.3375839 0.6714103 0.5179996 +0 64 6.0 0.52694315 0.16916779 0.24432074 0.2389678 0.32211888 +0 65 6.0 0.998594 0.7417811 0.6076255 0.92065024 0.8554716 +0 65 6.0 0.99123 0.48481315 0.78770113 0.66634744 0.99435806 +0 65 6.0 0.9713027 0.4053527 0.5373353 0.56393 0.73686826 +0 65 6.0 0.95158553 0.5510321 0.33605364 0.67295724 0.5216464 +0 65 6.0 0.53970075 0.16847755 0.24288037 0.24043976 0.32409826 +0 66 6.0 0.99877495 0.7447069 0.61644423 0.9220405 0.8533703 +0 66 6.0 0.98716533 0.40529677 0.5315112 0.56850415 0.739599 +0 66 6.0 0.98207444 0.48511064 0.7965753 0.66320026 0.9957663 +0 66 6.0 0.9167097 0.55142754 0.3388761 0.67422265 0.5226344 +0 66 6.0 0.50756544 0.16931796 0.24402487 0.24067345 0.32456303 +0 67 6.0 0.99883944 0.743214 0.6203854 0.9223546 0.8571416 +0 67 6.0 0.9932904 0.50074923 0.7955754 0.6736443 1.000213 +0 67 6.0 0.9771941 0.4089267 0.53695095 0.56730586 0.74197936 +0 67 6.0 0.9329269 0.5516442 0.3412662 0.67572534 0.5258916 +0 68 6.0 0.9962345 0.7445209 0.62320447 0.9245037 0.8626075 +0 68 6.0 0.99092484 0.49380732 0.7992534 0.68071556 0.9999108 +0 68 6.0 0.9868873 0.41286635 0.5409556 0.5700835 0.7461147 +0 68 6.0 0.8675922 0.5530249 0.34179026 0.6768739 0.52782345 +0 69 6.0 0.99749434 0.747832 0.6293036 0.9235905 0.86507726 +0 69 6.0 0.994785 0.49641287 0.8053395 0.6814363 1.0002791 +0 69 6.0 0.9867194 0.41184154 0.54310584 0.571522 0.7483871 +0 69 6.0 0.9324722 0.5527453 0.34682053 0.6790555 0.5300496 +0 69 6.0 0.5806408 0.35446313 0.4755333 0.48362133 0.63240784 +0 70 6.0 0.9960896 0.50078773 0.8087176 0.6807984 0.9991319 +0 70 6.0 0.99347246 0.7447495 0.62639654 0.9282474 0.8717971 +0 70 6.0 0.99157387 0.4136503 0.546958 0.57034785 0.7537593 +0 70 6.0 0.814622 0.5547631 0.34651536 0.6843735 0.5302144 +0 70 6.0 0.575878 0.35608593 0.48101705 0.48137924 0.6322594 +0 70 6.0 0.53029954 0.30386755 0.32994223 0.41781345 0.48307484 +0 71 6.0 0.9972555 0.5001664 0.81608456 0.67669034 0.9976414 +0 71 6.0 0.99593216 0.41679823 0.5475392 0.57358533 0.75810426 +0 71 6.0 0.9955787 0.7541613 0.62689924 0.9357433 0.87645614 +0 71 6.0 0.68706167 0.35504574 0.46592045 0.48385066 0.6343893 +0 71 6.0 0.6387637 0.5547378 0.34612143 0.6841544 0.53167367 +0 72 6.0 0.99748 0.41684526 0.5489137 0.5765159 0.7616025 +0 72 6.0 0.99564666 0.4974438 0.8225702 0.6771859 0.9949751 +0 72 6.0 0.9921572 0.7553079 0.63251966 0.93660176 0.88456696 +0 72 6.0 0.8041463 0.54806995 0.3364043 0.6870073 0.5303645 +0 72 6.0 0.67222625 0.35768548 0.46776947 0.48121938 0.6349889 +0 73 6.0 0.9952415 0.7509226 0.6324887 0.9435831 0.89193773 +0 73 6.0 0.9950305 0.41934314 0.5620575 0.57764995 0.7671025 +0 73 6.0 0.9917452 0.4964152 0.8309725 0.6821025 0.9968174 +0 73 6.0 0.9567854 0.5567886 0.34146827 0.69739586 0.529074 +0 73 6.0 0.6458979 0.35688323 0.4850734 0.47779423 0.64133745 +0 74 6.0 0.99715626 0.42015135 0.55884075 0.5778858 0.7744893 +0 74 6.0 0.9957098 0.7619286 0.641373 0.95066434 0.90032023 +0 74 6.0 0.9900073 0.56026196 0.34082353 0.7005168 0.53331876 +0 74 6.0 0.9897069 0.500016 0.8403101 0.68494725 1.0001731 +0 74 6.0 0.6846691 0.35614142 0.47069842 0.48371258 0.644427 +0 74 6.0 0.50686085 0.3096172 0.33512393 0.42628863 0.48543486 +0 75 6.0 0.9953875 0.7487597 0.63754714 0.9519227 0.90642905 +0 75 6.0 0.991434 0.42073888 0.5662042 0.57819235 0.77492166 +0 75 6.0 0.98767686 0.49908042 0.84389323 0.6890446 1.0009828 +0 75 6.0 0.9852726 0.5646642 0.34388363 0.7008899 0.5326437 +0 75 6.0 0.59422797 0.3562627 0.48357612 0.48007372 0.64324206 +0 75 6.0 0.58005667 0.3075875 0.33769503 0.4265889 0.49405906 +0 76 6.0 0.9973157 0.7660665 0.6478809 0.959825 0.90347564 +0 76 6.0 0.9935662 0.42401433 0.57381463 0.5805845 0.78007424 +0 76 6.0 0.9731232 0.497386 0.8490038 0.692298 1.0007278 +0 76 6.0 0.9686602 0.5548781 0.3400431 0.6869085 0.536608 +0 76 6.0 0.6976005 0.35340396 0.48574767 0.4834316 0.64741373 +0 77 6.0 0.9986395 0.7668809 0.65913993 0.9609104 0.90670794 +0 77 6.0 0.99340916 0.4257664 0.5809025 0.5818208 0.784504 +0 77 6.0 0.98039573 0.49685544 0.85154784 0.6991511 1.0016215 +0 77 6.0 0.9664543 0.55645627 0.34126443 0.689598 0.5375455 +0 77 6.0 0.6800214 0.37127122 0.49787477 0.50460404 0.6469192 +0 78 6.0 0.99832755 0.76576215 0.6616367 0.96454924 0.91313016 +0 78 6.0 0.9959365 0.42756677 0.57549083 0.58375657 0.7876073 +0 78 6.0 0.9810761 0.55967 0.340231 0.69247794 0.5416406 +0 78 6.0 0.9705311 0.49769363 0.85925806 0.70139694 1.0011817 +0 78 6.0 0.6978986 0.35501748 0.48363337 0.48673302 0.6494721 +0 79 6.0 0.9960156 0.4311952 0.58626074 0.5868985 0.7962206 +0 79 6.0 0.9953908 0.7672734 0.6617836 0.9651246 0.9202894 +0 79 6.0 0.95617265 0.49992174 0.8622702 0.7023023 1.0017586 +0 79 6.0 0.93740827 0.5602547 0.34157655 0.6927657 0.54264784 +0 79 6.0 0.6942722 0.35549903 0.4841025 0.48249578 0.64936495 +0 80 6.0 0.99709356 0.43100375 0.5853429 0.5860205 0.7970805 +0 80 6.0 0.9929428 0.765904 0.666742 0.96629936 0.930419 +0 80 6.0 0.96546024 0.5615797 0.34427744 0.6953157 0.5423386 +0 80 6.0 0.89184815 0.5031067 0.8680886 0.699942 0.9992378 +0 80 6.0 0.66406727 0.35790867 0.47936642 0.48549026 0.6494434 +0 81 6.0 0.9979913 0.43320438 0.5872092 0.5880153 0.798805 +0 81 6.0 0.99747354 0.76680905 0.67813903 0.9740798 0.9325127 +0 81 6.0 0.9613702 0.56374574 0.34863442 0.69679666 0.5424515 +0 81 6.0 0.84588045 0.5009209 0.8738709 0.69555795 1.001543 +0 81 6.0 0.7732254 0.37344074 0.48608074 0.507632 0.65041065 +0 82 6.0 0.9990087 0.43128714 0.578513 0.5938889 0.80127585 +0 82 6.0 0.9968274 0.7691596 0.6789745 0.9757357 0.9383211 +0 82 6.0 0.9769155 0.56605595 0.35306346 0.6992609 0.5424333 +0 82 6.0 0.85354096 0.37030017 0.48113817 0.50718987 0.6520074 +0 82 6.0 0.7948213 0.51131403 0.87926686 0.6973835 1.0016241 +0 83 6.0 0.9991954 0.42863035 0.57974327 0.5971645 0.80537796 +0 83 6.0 0.9937882 0.768962 0.6814204 0.97816443 0.94726485 +0 83 6.0 0.9618537 0.56802744 0.35194582 0.69793147 0.54505473 +0 83 6.0 0.69921815 0.3707784 0.48413736 0.5084134 0.64959425 +0 83 6.0 0.6075218 0.51733047 0.8907319 0.6973323 1.0046915 +0 84 6.0 0.9996526 0.430765 0.5787519 0.59841794 0.8129566 +0 84 6.0 0.9945456 0.7721567 0.6870007 0.9830587 0.95206887 +0 84 6.0 0.9509572 0.56885266 0.35384944 0.7029015 0.5461663 +0 84 6.0 0.6037471 0.37484446 0.4936276 0.50266767 0.6522854 +0 84 6.0 0.5512591 0.5224449 0.9016536 0.6952979 1.000816 +0 85 6.0 0.9993025 0.43157914 0.58217096 0.601815 0.82155657 +0 85 6.0 0.992034 0.7771341 0.6914197 0.9830145 0.9595591 +0 85 6.0 0.967952 0.56855947 0.35559338 0.7060799 0.54964316 +0 85 6.0 0.79007673 0.37206477 0.48182172 0.5108214 0.6531916 +0 85 6.0 0.6326484 0.5183368 0.90620553 0.69403577 1.0018865 +0 86 6.0 0.99933726 0.43224776 0.584214 0.6007185 0.82724965 +0 86 6.0 0.99195695 0.77868634 0.6800494 0.98146254 0.9619204 +0 86 6.0 0.9617355 0.56942964 0.359968 0.7096052 0.5531504 +0 86 6.0 0.79500175 0.3720674 0.50692755 0.51569426 0.6760563 +0 86 6.0 0.552192 0.5210771 0.9101926 0.69543713 1.0024651 +0 86 6.0 0.51414317 0.32010663 0.36850226 0.4522308 0.52241695 +0 87 6.0 0.99941313 0.4364239 0.5970613 0.60083866 0.8318995 +0 87 6.0 0.99352914 0.7857767 0.6864184 0.98454136 0.9626869 +0 87 6.0 0.9245706 0.5801703 0.3665474 0.71466696 0.5603624 +0 87 6.0 0.8583159 0.37252787 0.50241697 0.5159201 0.6810529 +0 87 6.0 0.657645 0.31484127 0.36464596 0.45300817 0.5306586 +0 88 6.0 0.9981805 0.43791816 0.60610586 0.60204417 0.8367823 +0 88 6.0 0.9874987 0.7878276 0.6906539 0.98787165 0.9693053 +0 88 6.0 0.9598545 0.5841577 0.36993676 0.7176124 0.5632249 +0 88 6.0 0.915944 0.3703507 0.4981616 0.51454943 0.6852321 +0 88 6.0 0.55110717 0.31412265 0.37427416 0.45741263 0.5237912 +0 89 6.0 0.9972173 0.43904838 0.6033921 0.6005465 0.83910286 +0 89 6.0 0.99299777 0.7899782 0.6992648 0.9893642 0.9759801 +0 89 6.0 0.96907604 0.5851791 0.3714272 0.71872246 0.56568325 +0 89 6.0 0.91903806 0.37413108 0.4985408 0.519809 0.68481076 +0 89 6.0 0.69041115 0.31370115 0.36361635 0.451132 0.5284555 +0 90 6.0 0.99523985 0.44155824 0.6102304 0.6016388 0.8418738 +0 90 6.0 0.97752213 0.78855497 0.70262814 0.99053687 0.9777783 +0 90 6.0 0.9319964 0.5863893 0.36845392 0.72067356 0.5688948 +0 90 6.0 0.9242208 0.37607092 0.5093448 0.5248415 0.689934 +0 91 6.0 0.98963964 0.44116783 0.61143255 0.6077826 0.8518797 +0 91 6.0 0.98858136 0.79094136 0.7175596 0.9916072 0.98292994 +0 91 6.0 0.9817623 0.5888957 0.3705986 0.72112167 0.56979626 +0 91 6.0 0.9400512 0.37668312 0.49772966 0.5210785 0.6940944 +0 91 6.0 0.54091245 0.3143824 0.3722606 0.45133922 0.5343058 +0 92 6.0 0.9931851 0.4446642 0.6212977 0.6087614 0.85239744 +0 92 6.0 0.98885417 0.7896614 0.72621304 1.0054164 0.9904513 +0 92 6.0 0.9812912 0.58918697 0.3710129 0.7241716 0.57616997 +0 92 6.0 0.94620734 0.3781277 0.5092673 0.51904494 0.6999443 +0 92 6.0 0.5368867 0.31113085 0.3679232 0.44883117 0.52992827 +0 93 6.0 0.9946523 0.4438299 0.6217649 0.61041737 0.85563517 +0 93 6.0 0.9931346 0.5921186 0.37755904 0.7264986 0.58240104 +0 93 6.0 0.9922862 0.7894513 0.7276989 1.0073487 0.9920026 +0 93 6.0 0.92908293 0.37875763 0.50071496 0.51469254 0.70410854 +0 94 6.0 0.99855214 0.44595176 0.62362605 0.613149 0.8636511 +0 94 6.0 0.98137474 0.78855306 0.72943246 1.0084778 0.99487066 +0 94 6.0 0.96370137 0.5956664 0.3834706 0.72617614 0.58585304 +0 94 6.0 0.9017646 0.37629145 0.50935614 0.51819277 0.7024704 +0 95 6.0 0.9982843 0.44560623 0.6260995 0.6145661 0.86792046 +0 95 6.0 0.9896241 0.79237294 0.7320198 1.0072963 0.9952043 +0 95 6.0 0.9352899 0.5951232 0.38463557 0.72762764 0.59857565 +0 95 6.0 0.9283198 0.3804058 0.50947064 0.52275604 0.7033586 +0 95 6.0 0.6687261 0.31688356 0.36627865 0.4515413 0.53913605 +0 96 6.0 0.99895656 0.4440723 0.6235135 0.6153924 0.87427694 +0 96 6.0 0.99348325 0.7954605 0.73819625 0.9993023 0.99847484 +0 96 6.0 0.9464997 0.3859504 0.51804954 0.528823 0.704192 +0 96 6.0 0.898564 0.5952914 0.38353783 0.73063326 0.5988439 +0 96 6.0 0.74041116 0.31360036 0.36521614 0.44749576 0.53553486 +0 97 6.0 0.997416 0.44010624 0.6308959 0.616122 0.8794305 +0 97 6.0 0.99460286 0.7950678 0.74243236 0.9994339 0.9996706 +0 97 6.0 0.9294597 0.5965882 0.38314146 0.73197335 0.6055373 +0 97 6.0 0.87394834 0.38268563 0.5283528 0.51732224 0.71181434 +0 98 6.0 0.99880576 0.44012642 0.63084185 0.619056 0.88493884 +0 98 6.0 0.99257797 0.8009235 0.7459558 0.9968893 1.0082735 +0 98 6.0 0.98870265 0.5980098 0.3817563 0.73443973 0.5872999 +0 98 6.0 0.85267323 0.38617575 0.5274994 0.53620744 0.71100324 +0 98 6.0 0.5536671 0.31943414 0.37361485 0.4471523 0.5365279 +0 99 6.0 0.99935037 0.43923545 0.63175917 0.61988354 0.8889359 +0 99 6.0 0.9943605 0.60100967 0.38240495 0.7383235 0.59472084 +0 99 6.0 0.9890822 0.80341804 0.7513836 0.9964129 1.0034994 +0 99 6.0 0.86821616 0.38925642 0.5339276 0.52436155 0.72294205 +0 99 6.0 0.64231324 0.3195762 0.3746003 0.4452818 0.5418649 +0 100 6.0 0.9989981 0.4386132 0.6392871 0.6247783 0.89512885 +0 100 6.0 0.99480754 0.8138927 0.75630087 0.9966221 1.0003848 +0 100 6.0 0.95980936 0.5997534 0.38202178 0.7389684 0.5955843 +0 100 6.0 0.9309849 0.38921872 0.52306855 0.5294584 0.72487247 +0 100 6.0 0.5165415 0.32067934 0.37632078 0.4473054 0.5344025 +0 101 6.0 0.99930716 0.4377531 0.642373 0.62662506 0.9008252 +0 101 6.0 0.99529207 0.8181834 0.7637344 0.99680746 0.99651533 +0 101 6.0 0.97481525 0.38853735 0.52756137 0.5286657 0.73292726 +0 101 6.0 0.9304081 0.60004157 0.3825832 0.74212366 0.5983409 +0 101 6.0 0.50250715 0.32385406 0.3865194 0.44872823 0.53488535 +0 102 6.0 0.99927014 0.4410506 0.65070045 0.62729913 0.9052832 +0 102 6.0 0.99589396 0.8161293 0.77002174 0.9993682 0.9966039 +0 102 6.0 0.96594495 0.6019184 0.38441968 0.74526197 0.59857297 +0 102 6.0 0.94772243 0.39251316 0.5239377 0.5344222 0.7358409 +0 102 6.0 0.68295276 0.3237984 0.3738399 0.44971034 0.54436743 +0 103 6.0 0.9994286 0.44228446 0.6617164 0.6313646 0.91235787 +0 103 6.0 0.9925402 0.8172854 0.77345186 0.9957807 0.99333316 +0 103 6.0 0.9923906 0.6050026 0.38486725 0.74936265 0.60074145 +0 103 6.0 0.7887974 0.39713192 0.5560049 0.54103464 0.74276495 +0 103 6.0 0.53757095 0.33024108 0.38537574 0.44644147 0.5544443 +0 104 6.0 0.9995328 0.44358972 0.6675102 0.63173306 0.91340774 +0 104 6.0 0.9840507 0.6082966 0.38638029 0.7503198 0.6006813 +0 104 6.0 0.981875 0.8187068 0.7811558 0.9966137 0.9901526 +0 104 6.0 0.7478966 0.3945573 0.5517262 0.54153466 0.7424449 +0 105 6.0 0.9986935 0.44092783 0.6642562 0.63113 0.9210087 +0 105 6.0 0.9901276 0.60831845 0.38757098 0.7509562 0.60497814 +0 105 6.0 0.9852012 0.8210022 0.7825916 0.9974311 0.99132526 +0 105 6.0 0.8727097 0.39926806 0.5413176 0.55034983 0.7511798 +0 105 6.0 0.66559863 0.33142006 0.39189574 0.44904006 0.5548803 +0 106 6.0 0.99853575 0.43920875 0.671329 0.63199437 0.9302529 +0 106 6.0 0.9926312 0.8229275 0.7909304 0.9961351 0.99693596 +0 106 6.0 0.98566353 0.6117526 0.38981307 0.75576806 0.60940385 +0 106 6.0 0.8627643 0.39991614 0.53901255 0.5578086 0.7512013 +0 106 6.0 0.6285086 0.33370826 0.38644928 0.451678 0.5575018 +0 107 6.0 0.99932265 0.44526562 0.6796491 0.6333988 0.9333763 +0 107 6.0 0.9908755 0.8305482 0.79808074 0.99843615 1.0000232 +0 107 6.0 0.96000576 0.61088336 0.39243403 0.756868 0.6123661 +0 107 6.0 0.9579702 0.40168154 0.535304 0.5650457 0.7535768 +0 108 6.0 0.9995259 0.44748473 0.6821835 0.63543665 0.94442785 +0 108 6.0 0.9906461 0.8284839 0.80009276 1.001143 1.0012821 +0 108 6.0 0.97120374 0.6115147 0.39678714 0.76356184 0.61685514 +0 108 6.0 0.9381065 0.40139896 0.54828507 0.56348854 0.7561576 +0 108 6.0 0.6858121 0.33350658 0.39712694 0.45546508 0.56652415 +0 109 6.0 0.99936706 0.45362824 0.68985224 0.63604885 0.94836175 +0 109 6.0 0.99114555 0.83538747 0.8067621 1.00112 1.0010706 +0 109 6.0 0.9895835 0.6113703 0.4009623 0.7653352 0.6220179 +0 109 6.0 0.9605546 0.40208477 0.5434915 0.56461453 0.7509519 +0 109 6.0 0.7334368 0.33353627 0.39419672 0.45637238 0.57305783 +0 110 6.0 0.9988463 0.45276427 0.6982365 0.6357764 0.9505436 +0 110 6.0 0.99084693 0.8383391 0.8094517 1.0015448 1.0000292 +0 110 6.0 0.982248 0.60700834 0.40618366 0.76003635 0.6229189 +0 110 6.0 0.9571842 0.4052438 0.556903 0.5670275 0.7494488 +0 110 6.0 0.66118664 0.3360675 0.40761796 0.45742607 0.57417727 +0 111 6.0 0.9993649 0.45455295 0.7012573 0.6409896 0.9569612 +0 111 6.0 0.98662853 0.8350482 0.81356275 1.0011052 1.0022194 +0 111 6.0 0.98017764 0.60898143 0.40877613 0.7624956 0.6234771 +0 111 6.0 0.95415723 0.40347338 0.559054 0.565819 0.76141167 +0 111 6.0 0.7438696 0.33818486 0.40395108 0.45649198 0.5735903 +0 112 6.0 0.99942434 0.4611737 0.7070293 0.6398503 0.96384984 +0 112 6.0 0.9847877 0.83835864 0.8231399 1.00264 0.997138 +0 112 6.0 0.9799716 0.6105605 0.40967858 0.7645028 0.628644 +0 112 6.0 0.90164167 0.40696305 0.5710737 0.5665695 0.7695429 +0 112 6.0 0.7749228 0.3364455 0.4027092 0.45758605 0.5730976 +0 113 6.0 0.9991111 0.45927423 0.7254391 0.6360423 0.963781 +0 113 6.0 0.9738278 0.83543587 0.8289019 1.0021094 0.99689686 +0 113 6.0 0.9660267 0.6128769 0.41050106 0.7691442 0.63523334 +0 113 6.0 0.9169482 0.40946636 0.5669009 0.5693728 0.7697286 +0 113 6.0 0.788455 0.338637 0.40809947 0.4590538 0.5723459 +0 114 6.0 0.9991566 0.46094388 0.7307626 0.63688964 0.96956086 +0 114 6.0 0.9896393 0.6136317 0.4140408 0.7724732 0.64052165 +0 114 6.0 0.9655874 0.40988994 0.56386644 0.5699967 0.7783678 +0 114 6.0 0.95869774 0.8350725 0.83659434 1.0015061 0.99713063 +0 114 6.0 0.64575356 0.34164688 0.43493736 0.46728185 0.57541716 +0 115 6.0 0.99953306 0.45925742 0.71592647 0.64159185 0.9764896 +0 115 6.0 0.9954145 0.6184063 0.41558734 0.77368104 0.64721155 +0 115 6.0 0.9776254 0.41162926 0.56991655 0.5720199 0.78221303 +0 115 6.0 0.8547556 0.8326186 0.83970594 1.0022086 1.0060669 +0 115 6.0 0.73572433 0.34106854 0.427304 0.46160874 0.58200157 +0 116 6.0 0.99840826 0.46273544 0.7267599 0.6411448 0.9801518 +0 116 6.0 0.99381363 0.6212588 0.41973078 0.7758654 0.65023875 +0 116 6.0 0.9387082 0.41291934 0.5788664 0.57150555 0.7725466 +0 116 6.0 0.8786431 0.34513175 0.4190156 0.47540194 0.5885423 +0 116 6.0 0.80255544 0.83324635 0.844295 1.0015283 1.0093366 +0 117 6.0 0.99887913 0.4621134 0.7258966 0.64653456 0.9855287 +0 117 6.0 0.99493563 0.6250556 0.4219331 0.77706 0.65121466 +0 117 6.0 0.9582616 0.4168613 0.5904746 0.57530886 0.7961303 +0 117 6.0 0.8964955 0.8360404 0.8487443 0.9990727 0.99933755 +0 117 6.0 0.88888603 0.33672094 0.41749427 0.4648624 0.59225523 +0 118 6.0 0.9976071 0.46816468 0.72744316 0.6462929 0.98664516 +0 118 6.0 0.9818642 0.6287434 0.42802292 0.7760557 0.6558743 +0 118 6.0 0.9513155 0.41636148 0.5826626 0.5707356 0.7983277 +0 118 6.0 0.8832693 0.3394443 0.41128182 0.47393528 0.59787655 +0 118 6.0 0.7568363 0.8353348 0.8578535 0.99828506 1.0044777 +0 119 6.0 0.998705 0.4655612 0.7324206 0.6517183 0.9950157 +0 119 6.0 0.9753807 0.6355587 0.43221128 0.7776551 0.6553786 +0 119 6.0 0.9492391 0.41680303 0.58522844 0.5710619 0.7974231 +0 119 6.0 0.8516265 0.33999264 0.41678786 0.47373807 0.6016114 +0 119 6.0 0.6103449 0.8387056 0.86055565 0.99905425 1.0067058 +0 120 6.0 0.9971073 0.4678289 0.7363553 0.6511761 0.9907863 +0 120 6.0 0.9860956 0.6357634 0.4340304 0.7807566 0.65525687 +0 120 6.0 0.9679578 0.41655606 0.58596134 0.5745339 0.8015362 +0 120 6.0 0.9347572 0.33759272 0.40924048 0.48022604 0.6057036 +0 121 6.0 0.99773175 0.46834856 0.7397542 0.65048105 0.99450517 +0 121 6.0 0.98794633 0.63729626 0.4353778 0.78334695 0.6591512 +0 121 6.0 0.9867749 0.41967323 0.58652395 0.5779635 0.8056981 +0 121 6.0 0.9635267 0.3416767 0.41023415 0.48029095 0.6067646 +0 122 6.0 0.9977744 0.47184297 0.7378782 0.6500263 0.99242604 +0 122 6.0 0.99632406 0.42180014 0.5857006 0.5835568 0.80996186 +0 122 6.0 0.98637146 0.6417605 0.42628005 0.7841756 0.6552686 +0 122 6.0 0.94911957 0.34023193 0.41457385 0.47965804 0.60676795 +0 123 6.0 0.995707 0.4744211 0.75245255 0.64988714 0.99559003 +0 123 6.0 0.9922848 0.42111754 0.5914681 0.58650494 0.816494 +0 123 6.0 0.9907822 0.64086014 0.4294335 0.78411204 0.65620506 +0 123 6.0 0.95097524 0.33853358 0.41664737 0.47973663 0.6098198 +0 123 6.0 0.5339103 0.24735029 0.2519663 0.32842225 0.33506042 +0 124 6.0 0.99403 0.42160735 0.5984937 0.5849874 0.8161682 +0 124 6.0 0.9921051 0.6460507 0.4331441 0.7870908 0.66139126 +0 124 6.0 0.98263997 0.47285005 0.7661029 0.6521783 0.9957185 +0 124 6.0 0.91505826 0.33693838 0.41484392 0.4808113 0.6147456 +0 125 5.0 0.54077375 0.6416727 0.43225646 0.7929762 0.6619648 +0 125 6.0 0.9833204 0.4783253 0.7650736 0.65289074 0.9977918 +0 125 6.0 0.9601874 0.6462235 0.44092193 0.7904807 0.6686981 +0 125 6.0 0.93526065 0.42561278 0.60756373 0.583568 0.80776405 +0 125 6.0 0.9030558 0.33862972 0.4175494 0.48324007 0.61888593 +0 125 6.0 0.54800224 0.24150677 0.24835667 0.32813698 0.3346589 +0 126 5.0 0.61855555 0.6468391 0.43523327 0.7949932 0.66538215 +0 126 6.0 0.9840925 0.42573285 0.6123244 0.5867312 0.8281539 +0 126 6.0 0.97830725 0.48163274 0.76683116 0.65458953 1.0010488 +0 126 6.0 0.9282282 0.6516346 0.4406644 0.7953166 0.6615493 +0 126 6.0 0.8686234 0.3366763 0.43345505 0.47273815 0.62253994 +0 126 6.0 0.5406697 0.23985411 0.2448921 0.33206233 0.33674943 +0 127 5.0 0.6913124 0.64579344 0.439336 0.7972523 0.66989714 +0 127 6.0 0.9945486 0.4269371 0.60802627 0.58701193 0.83746004 +0 127 6.0 0.9830656 0.47801313 0.77129 0.65995085 1.0056243 +0 127 6.0 0.9581306 0.64893043 0.4464333 0.798121 0.6680263 +0 127 6.0 0.88870084 0.33499768 0.43053198 0.47802892 0.6240524 +0 127 6.0 0.55787677 0.24087702 0.24921523 0.33098197 0.337328 +0 128 6.0 0.9978417 0.64993864 0.44454083 0.7982932 0.6773882 +0 128 6.0 0.9906742 0.42748356 0.61778224 0.58968306 0.837155 +0 128 6.0 0.93220717 0.47976696 0.77974576 0.662689 1.006319 +0 128 6.0 0.9024262 0.34089112 0.44166046 0.48775005 0.624415 +0 128 6.0 0.54514176 0.2423603 0.25191775 0.32866573 0.33647683 +0 129 6.0 0.9937039 0.42944348 0.6222581 0.59294426 0.840645 +0 129 6.0 0.9923889 0.64841866 0.4494914 0.8049896 0.68117654 +0 129 6.0 0.97606224 0.47872674 0.7848463 0.66168594 1.0045849 +0 129 6.0 0.8938263 0.33875626 0.4402606 0.48840785 0.6286054 +0 129 6.0 0.51339126 0.23588617 0.25106514 0.32698 0.33363837 +0 130 6.0 0.99671704 0.42689538 0.62079406 0.5853852 0.8591355 +0 130 6.0 0.9922643 0.649937 0.44938222 0.80955 0.6844804 +0 130 6.0 0.96923995 0.48224616 0.79198223 0.66317 1.0026939 +0 130 6.0 0.968599 0.33798528 0.43306172 0.4917392 0.6340498 +0 131 6.0 0.99366015 0.42988575 0.6242654 0.5883293 0.8625172 +0 131 6.0 0.9811708 0.48539498 0.7952309 0.66219795 0.99779576 +0 131 6.0 0.976404 0.33599073 0.4302045 0.49234462 0.6403191 +0 131 6.0 0.9581266 0.652074 0.45857954 0.8060076 0.69609857 +0 132 5.0 0.61237395 0.6573146 0.45678508 0.8042616 0.68190587 +0 132 6.0 0.988566 0.42917764 0.6255936 0.58637357 0.8698582 +0 132 6.0 0.98333573 0.4862919 0.7981034 0.6638341 0.99753016 +0 132 6.0 0.9729442 0.3415208 0.43214595 0.4927528 0.63877153 +0 132 6.0 0.8048966 0.6557553 0.45643622 0.80865633 0.6912504 +0 132 6.0 0.51924205 0.23016682 0.24273483 0.32880536 0.3345488 +0 133 6.0 0.99804175 0.4312775 0.63213474 0.5924835 0.8753317 +0 133 6.0 0.97815657 0.48618922 0.7986193 0.6641237 0.997875 +0 133 6.0 0.93300605 0.3443424 0.4346111 0.49665654 0.64326227 +0 133 6.0 0.9141457 0.65658545 0.4601766 0.81177986 0.69630814 +0 134 6.0 0.9966474 0.4337309 0.6323866 0.59885675 0.87965685 +0 134 6.0 0.98942345 0.3444586 0.43748587 0.49873576 0.64795667 +0 134 6.0 0.97916085 0.6621381 0.46547335 0.8140384 0.7016913 +0 134 6.0 0.95728475 0.48366752 0.80405 0.66548944 0.99545556 +0 135 6.0 0.9975756 0.43577307 0.63152355 0.60129064 0.88376373 +0 135 6.0 0.99325013 0.3451673 0.43230385 0.50124633 0.6525876 +0 135 6.0 0.9773792 0.66253537 0.46819314 0.81823653 0.703523 +0 135 6.0 0.9432604 0.48288015 0.8089307 0.6677749 0.9941401 +0 136 6.0 0.9941387 0.43791145 0.63768864 0.60850006 0.8928647 +0 136 6.0 0.99203897 0.34483513 0.4342541 0.50533646 0.6528979 +0 136 6.0 0.9736545 0.66273624 0.4710113 0.82039446 0.7040559 +0 136 6.0 0.8884197 0.47851503 0.8168685 0.6694287 0.9932892 +0 137 6.0 0.9885007 0.66391903 0.4746272 0.8237578 0.7047127 +0 137 6.0 0.9866421 0.4389029 0.6391608 0.60916597 0.8914028 +0 137 6.0 0.98509556 0.34457126 0.43155947 0.50807405 0.6537411 +0 137 6.0 0.8686746 0.47747597 0.82375246 0.6792922 0.99655527 +0 138 6.0 0.99204755 0.6632971 0.4767217 0.82583565 0.7060241 +0 138 6.0 0.99112505 0.34538507 0.43977678 0.5090954 0.6596292 +0 138 6.0 0.9890777 0.44049284 0.64259255 0.61676675 0.8963442 +0 138 6.0 0.8560614 0.48429224 0.8320398 0.6832449 0.99653107 +0 139 6.0 0.99629766 0.34344435 0.44037932 0.5105095 0.6610512 +0 139 6.0 0.9814664 0.4435779 0.64996666 0.61147463 0.89961165 +0 139 6.0 0.97824436 0.6703951 0.47867215 0.8290083 0.70774806 +0 139 6.0 0.8002392 0.4862511 0.836907 0.68401694 0.9980346 +0 140 6.0 0.9966325 0.34443906 0.4406832 0.5121776 0.66350573 +0 140 6.0 0.97509265 0.439708 0.66106904 0.61533344 0.88911045 +0 140 6.0 0.96136814 0.6702492 0.48022014 0.83183587 0.7131873 +0 140 6.0 0.909913 0.4861356 0.8434076 0.6860845 1.0001585 +0 141 6.0 0.9972806 0.67009526 0.48156163 0.8348654 0.721012 +0 141 6.0 0.9941408 0.34662905 0.4427461 0.51065284 0.66752106 +0 141 6.0 0.98765093 0.44314307 0.66392374 0.6146237 0.89331293 +0 141 6.0 0.8535096 0.48597997 0.846907 0.6912256 1.0007551 +0 142 6.0 0.9975241 0.34702206 0.44472498 0.51353717 0.6676747 +0 142 6.0 0.992195 0.679117 0.4853011 0.835002 0.72586554 +0 142 6.0 0.98480713 0.44420844 0.6707076 0.6209385 0.9022875 +0 142 6.0 0.8817714 0.48821843 0.85320646 0.6866406 1.0017632 +0 143 6.0 0.9968464 0.3468672 0.4480974 0.5105119 0.6752103 +0 143 6.0 0.99089605 0.6801189 0.48692828 0.8362894 0.72579783 +0 143 6.0 0.98848385 0.44373548 0.6797742 0.6206205 0.9041074 +0 143 6.0 0.88802665 0.48868418 0.85619515 0.68921137 1.0022302 +0 143 6.0 0.5788477 0.22606796 0.2466231 0.32785022 0.34022194 +0 144 6.0 0.9961404 0.34300467 0.45936805 0.49541536 0.672519 +0 144 6.0 0.98892224 0.68345 0.49259564 0.840001 0.7370448 +0 144 6.0 0.9681397 0.44595945 0.6891457 0.6227375 0.90107787 +0 144 6.0 0.79113495 0.4914521 0.8586128 0.68246937 1.0020268 +0 144 6.0 0.6499373 0.23051697 0.2407177 0.33494085 0.34139305 +0 145 6.0 0.9961063 0.34241703 0.46016252 0.49694028 0.6760862 +0 145 6.0 0.99233985 0.451303 0.68046737 0.62034285 0.9171983 +0 145 6.0 0.9896979 0.68442965 0.4972388 0.8473586 0.7419295 +0 145 6.0 0.7828036 0.4873664 0.86035615 0.6825776 1.0022613 +0 145 6.0 0.6729146 0.22895841 0.24285087 0.3354863 0.33954284 +0 146 6.0 0.99481356 0.34409803 0.46347374 0.500419 0.67757434 +0 146 6.0 0.9902536 0.44888997 0.68397886 0.6238779 0.91632646 +0 146 6.0 0.98477143 0.684954 0.49893636 0.84959525 0.75255567 +0 146 6.0 0.72301555 0.4873555 0.85621893 0.6786972 1.0015924 +0 146 6.0 0.6582953 0.22265244 0.24184822 0.3382203 0.3400782 +0 147 5.0 0.8309282 0.6875982 0.49916142 0.8457041 0.7356923 +0 147 6.0 0.9935315 0.34953722 0.46883374 0.50405705 0.68561536 +0 147 6.0 0.9860941 0.45493308 0.69665277 0.6217831 0.9341316 +0 147 6.0 0.8961201 0.68851095 0.5043096 0.8464468 0.7501231 +0 147 6.0 0.68174714 0.22366162 0.2362949 0.33764684 0.3426858 +0 147 6.0 0.5538882 0.5064914 0.8781337 0.68306804 1.0063899 +0 148 6.0 0.9967018 0.4499059 0.69708943 0.6258679 0.94893277 +0 148 6.0 0.9912409 0.34644753 0.46756226 0.5037812 0.68885607 +0 148 6.0 0.9859124 0.6897715 0.5077833 0.8545361 0.75426304 +0 148 6.0 0.6788535 0.22277339 0.23869671 0.33765852 0.34431705 +0 149 6.0 0.99701655 0.6927545 0.51397824 0.856127 0.75717354 +0 149 6.0 0.9933495 0.3486918 0.46559244 0.5058704 0.6958466 +0 149 6.0 0.98648304 0.45995814 0.7049557 0.6376539 0.94998133 +0 149 6.0 0.66685617 0.22355784 0.23355365 0.34090477 0.34499353 +0 150 6.0 0.9975037 0.455112 0.7031778 0.6388688 0.973819 +0 150 6.0 0.9956215 0.35102662 0.47527722 0.5069831 0.6974015 +0 150 6.0 0.9716823 0.6981487 0.5147496 0.8574356 0.7583533 +0 150 6.0 0.66678715 0.22447257 0.23177713 0.33972597 0.34283698 +0 151 5.0 0.6320625 0.69934624 0.52539504 0.8591029 0.75548804 +0 151 6.0 0.9982717 0.3516824 0.47217593 0.5079062 0.7036624 +0 151 6.0 0.995344 0.45791227 0.6978359 0.64411837 0.97549546 +0 151 6.0 0.7170893 0.2260758 0.23295751 0.33848026 0.3449231 +0 151 6.0 0.6352875 0.7005379 0.5180116 0.859499 0.76215166 +0 152 5.0 0.6327734 0.70231867 0.5239938 0.857679 0.7589242 +0 152 6.0 0.9984749 0.35424352 0.47444463 0.50963455 0.7046119 +0 152 6.0 0.99842787 0.46155512 0.70994055 0.64223695 0.98165977 +0 152 6.0 0.63854754 0.22288543 0.23728056 0.3368132 0.3476561 +0 152 6.0 0.53199303 0.70228505 0.51955914 0.85805404 0.76604366 +0 153 6.0 0.9981571 0.3559855 0.47498354 0.5118332 0.709809 +0 153 6.0 0.9973074 0.462706 0.71445566 0.6418612 0.9752467 +0 153 6.0 0.75020677 0.70278853 0.5179837 0.8656302 0.772529 +0 153 6.0 0.63219804 0.22175941 0.24236171 0.3375406 0.34808627 +0 154 6.0 0.9989569 0.35978234 0.4786078 0.51106423 0.70997226 +0 154 6.0 0.9960892 0.4604983 0.7176745 0.6454767 0.97905946 +0 154 6.0 0.9195014 0.70381427 0.5245786 0.8665397 0.7681738 +0 154 6.0 0.67826533 0.2234703 0.23950945 0.33716795 0.3496785 +0 155 6.0 0.99940896 0.36259767 0.4815629 0.5120478 0.7137075 +0 155 6.0 0.99103045 0.46892554 0.72325206 0.6461846 0.9837719 +0 155 6.0 0.9825517 0.7114284 0.5302637 0.8700094 0.7696361 +0 155 6.0 0.679633 0.22429717 0.239599 0.33851898 0.3492175 +0 156 6.0 0.9994461 0.3653573 0.48160645 0.5171253 0.7150866 +0 156 6.0 0.99580836 0.46843126 0.72289586 0.65402704 0.9829582 +0 156 6.0 0.953854 0.71032137 0.53184986 0.8703932 0.77748585 +0 156 6.0 0.7062286 0.22532347 0.24349761 0.33865276 0.3480838 +0 157 6.0 0.99963224 0.36529148 0.48476595 0.5164738 0.71836776 +0 157 6.0 0.99587387 0.46818224 0.7288512 0.6500514 0.98562694 +0 157 6.0 0.9688343 0.7096274 0.5344161 0.8725569 0.78243625 +0 157 6.0 0.6763494 0.22449169 0.24539419 0.3377051 0.3444588 +0 158 6.0 0.9998388 0.36399573 0.48580283 0.5192156 0.724979 +0 158 6.0 0.99656135 0.46998256 0.73130625 0.655438 0.98496336 +0 158 6.0 0.9716303 0.70885223 0.5368905 0.8762328 0.79033494 +0 158 6.0 0.6471396 0.22406662 0.24585876 0.33857965 0.34550437 +0 159 6.0 0.9997794 0.36607784 0.48998642 0.5213782 0.72870684 +0 159 6.0 0.99535275 0.70715415 0.5396869 0.8814224 0.7964473 +0 159 6.0 0.99514514 0.47328165 0.7408859 0.6604848 0.9928288 +0 159 6.0 0.6035814 0.22270942 0.24980567 0.3410924 0.35141763 +0 160 6.0 0.99979526 0.3681162 0.49187544 0.52149755 0.7402179 +0 160 6.0 0.9956512 0.70886654 0.5437435 0.8846603 0.80099094 +0 160 6.0 0.9841891 0.47465852 0.7500339 0.6569247 0.98865265 +0 160 6.0 0.65187645 0.22771215 0.2523337 0.33963835 0.3511914 +0 161 6.0 0.9998859 0.36776286 0.4904238 0.5231938 0.74746466 +0 161 6.0 0.99619836 0.47606182 0.75362414 0.65213346 0.9898562 +0 161 6.0 0.9915639 0.71025836 0.5445489 0.8861439 0.8014037 +0 161 6.0 0.7277054 0.2275243 0.2523974 0.33925694 0.34950885 +0 162 6.0 0.999713 0.36698198 0.49453068 0.52478534 0.7552582 +0 162 6.0 0.99853957 0.47231668 0.75547445 0.65127105 0.9962777 +0 162 6.0 0.9945076 0.713069 0.5493252 0.88966125 0.80581737 +0 162 6.0 0.78399175 0.22481434 0.2513722 0.33907273 0.35438958 +0 163 6.0 0.9990872 0.36909583 0.50260687 0.5265424 0.75925434 +0 163 6.0 0.9952819 0.47383273 0.7633678 0.6516944 0.993217 +0 163 6.0 0.9937151 0.71565056 0.55277175 0.8919623 0.80682033 +0 163 6.0 0.7984767 0.22417541 0.2507648 0.34105366 0.35753483 +0 164 6.0 0.9988488 0.36822522 0.51058304 0.5304188 0.7637565 +0 164 6.0 0.99810815 0.47565696 0.7726437 0.6498616 0.99597156 +0 164 6.0 0.9489473 0.72016895 0.5606933 0.8934512 0.8139973 +0 164 6.0 0.7875566 0.22629377 0.2543945 0.3423141 0.35601 +0 165 6.0 0.9985442 0.36447722 0.50596213 0.5286728 0.7581551 +0 165 6.0 0.9972421 0.47723344 0.78030777 0.6494266 0.9941343 +0 165 6.0 0.9676627 0.7219543 0.57557297 0.8984602 0.8151083 +0 165 6.0 0.8036722 0.22698337 0.25593117 0.34175128 0.35381076 +0 166 6.0 0.9988933 0.47703916 0.7856289 0.65427953 0.9981272 +0 166 6.0 0.99880147 0.37132642 0.5172725 0.5283038 0.7601539 +0 166 6.0 0.9408698 0.7237888 0.5807458 0.9008612 0.82440305 +0 166 6.0 0.7710051 0.22712195 0.25669593 0.34024316 0.3603109 +0 167 5.0 0.5872207 0.72650385 0.580737 0.90879 0.82884884 +0 167 6.0 0.9993017 0.36879516 0.51805896 0.53137964 0.76424366 +0 167 6.0 0.99717987 0.47784048 0.7941118 0.6562237 1.0003076 +0 167 6.0 0.76929575 0.72642154 0.57773834 0.9062434 0.8395303 +0 167 6.0 0.7483195 0.22814538 0.25904843 0.3401144 0.36098108 +0 168 5.0 0.827145 0.724267 0.5758975 0.9097421 0.83919984 +0 168 6.0 0.99873513 0.369161 0.52093965 0.53246564 0.76799506 +0 168 6.0 0.9976794 0.47613084 0.79890203 0.6563753 0.9999689 +0 168 6.0 0.76383984 0.2289421 0.25817809 0.3417796 0.36052564 +0 168 6.0 0.538406 0.7271057 0.5833072 0.908279 0.84391886 +0 169 5.0 0.51710033 0.7259288 0.5855812 0.9127811 0.8365841 +0 169 6.0 0.99950886 0.36985058 0.5262975 0.53292114 0.77301496 +0 169 6.0 0.9854946 0.4741549 0.80389106 0.6588704 1.001731 +0 169 6.0 0.889059 0.7308221 0.58206433 0.9111277 0.8427555 +0 169 6.0 0.7309721 0.23008999 0.26113147 0.34282652 0.35638875 +0 170 5.0 0.86124843 0.73672414 0.59116715 0.91593516 0.8479126 +0 170 6.0 0.999549 0.37064397 0.5251505 0.5403557 0.7759746 +0 170 6.0 0.9852572 0.47560966 0.79732853 0.6606828 1.0004625 +0 170 6.0 0.68408626 0.2301048 0.25910404 0.34194916 0.35864648 +0 170 6.0 0.5096142 0.7376314 0.5865252 0.9140541 0.84598625 +0 171 5.0 0.8466869 0.7370524 0.5946843 0.9203586 0.8512196 +0 171 6.0 0.9996723 0.37086898 0.5289036 0.5351519 0.77679694 +0 171 6.0 0.9947048 0.4756608 0.80434257 0.65685785 1.0014943 +0 171 6.0 0.69952613 0.7388849 0.58864987 0.91586244 0.85001075 +0 171 6.0 0.6617307 0.23122525 0.25899702 0.34161413 0.3620873 +0 172 6.0 0.9998204 0.37101582 0.529019 0.5383438 0.79166234 +0 172 6.0 0.99285865 0.47512704 0.81381166 0.65580744 1.0015541 +0 172 6.0 0.94340754 0.7379036 0.59180725 0.92386174 0.86062 +0 172 6.0 0.65029603 0.2327041 0.26041287 0.34386808 0.36127645 +0 173 6.0 0.99978095 0.37451762 0.5304927 0.540303 0.7884987 +0 173 6.0 0.9909567 0.4761555 0.8248879 0.6567268 1.0016207 +0 173 6.0 0.9449325 0.7425929 0.592667 0.9223663 0.86048484 +0 173 6.0 0.6180284 0.23402971 0.26100224 0.343266 0.36100125 +0 174 6.0 0.9998503 0.37913075 0.5325947 0.5395217 0.79379654 +0 174 6.0 0.9810667 0.476668 0.82874113 0.6601808 1.0005198 +0 174 6.0 0.9324225 0.7438888 0.598905 0.9242193 0.8572729 +0 174 6.0 0.58518374 0.2343966 0.2564991 0.3419917 0.3617435 +0 175 6.0 0.9998411 0.3806103 0.53739196 0.5396061 0.8040157 +0 175 6.0 0.9759856 0.7458014 0.6042558 0.9264992 0.86245096 +0 175 6.0 0.9748853 0.4756899 0.8350187 0.66168404 1.0023609 +0 175 6.0 0.5721521 0.23562908 0.2578807 0.34122366 0.36102843 +0 176 6.0 0.9997764 0.37855276 0.54284304 0.5398936 0.80547005 +0 176 6.0 0.98229235 0.46980613 0.84193957 0.6660047 1.0035949 +0 176 6.0 0.9685536 0.750141 0.61509603 0.92712784 0.86871034 +0 176 6.0 0.62286186 0.23310265 0.25542316 0.34485093 0.3617383 +0 177 6.0 0.99955374 0.38096488 0.54556274 0.54075325 0.8140718 +0 177 6.0 0.9797617 0.47047186 0.84681827 0.6710267 1.0044663 +0 177 6.0 0.707571 0.7525067 0.6173276 0.93861157 0.87730324 +0 177 6.0 0.5993993 0.23463187 0.2597527 0.34561017 0.36198705 +0 178 6.0 0.9989837 0.38228354 0.55047387 0.5397012 0.8198593 +0 178 6.0 0.95015395 0.48098463 0.8536236 0.6791503 1.0025337 +0 178 6.0 0.7469951 0.7558628 0.6226187 0.93383247 0.8832742 +0 178 6.0 0.5665811 0.23320627 0.25456563 0.34872687 0.36481383 +0 179 6.0 0.9975688 0.3808537 0.56102836 0.55171984 0.81822765 +0 179 6.0 0.9542355 0.48294842 0.85334015 0.6770296 1.002812 +0 179 6.0 0.83118564 0.7627122 0.6263583 0.9445258 0.88744366 +0 179 6.0 0.58883876 0.23362395 0.25302944 0.3473294 0.36359832 +0 180 6.0 0.9985286 0.38074848 0.56642824 0.5501991 0.8234895 +0 180 6.0 0.93716586 0.4824701 0.8596561 0.67776924 1.0014453 +0 180 6.0 0.8987125 0.7658318 0.63114953 0.95214105 0.89068663 +0 180 6.0 0.5717657 0.23635775 0.25655463 0.3441745 0.36366972 +0 181 6.0 0.9985886 0.38311094 0.5655735 0.55127424 0.82290334 +0 181 6.0 0.94906735 0.767892 0.63593525 0.9567944 0.8968701 +0 181 6.0 0.91126186 0.4764532 0.86219263 0.6834043 1.0033277 +0 181 6.0 0.5256727 0.23785423 0.2592988 0.34261617 0.36313826 +0 182 6.0 0.99741673 0.38248682 0.56695503 0.5586155 0.82873863 +0 182 6.0 0.98295456 0.7671375 0.6374186 0.96072567 0.89943004 +0 182 6.0 0.7480375 0.48527572 0.86220706 0.6849747 1.0015074 +0 182 6.0 0.5665443 0.23664573 0.25498265 0.34569392 0.3631857 +0 183 6.0 0.9984542 0.38206455 0.5680167 0.5589631 0.8315969 +0 183 6.0 0.941665 0.769819 0.64027464 0.96430624 0.8984542 +0 183 6.0 0.65604466 0.23658259 0.25076532 0.34897944 0.36192936 +0 184 6.0 0.9986362 0.38374904 0.571915 0.56031847 0.833417 +0 184 6.0 0.96220315 0.7724607 0.6420565 0.96490014 0.90789443 +0 184 6.0 0.5421149 0.23923135 0.24848326 0.3467571 0.3632238 +0 185 6.0 0.9991302 0.38798007 0.5712214 0.5588466 0.8401473 +0 185 6.0 0.9827387 0.7728617 0.64278 0.9697778 0.91019696 +0 186 6.0 0.99857557 0.38339186 0.5807905 0.55840605 0.8499912 +0 186 6.0 0.97097594 0.77608764 0.6471137 0.9710157 0.9114059 +0 187 6.0 0.99858785 0.38226447 0.58216935 0.559307 0.85758024 +0 187 6.0 0.9850912 0.7738423 0.64881974 0.97252554 0.9236812 +0 188 6.0 0.9994578 0.38758498 0.58574814 0.5632893 0.86427325 +0 188 6.0 0.9649907 0.77970135 0.65195674 0.9749124 0.93470925 +0 189 6.0 0.9992913 0.38503677 0.5895594 0.56254244 0.86802167 +0 189 6.0 0.96099204 0.7785339 0.6597726 0.97639793 0.94530827 +0 190 6.0 0.9992919 0.38761014 0.5914864 0.56557375 0.8711888 +0 190 6.0 0.92151207 0.7802243 0.6644318 0.9761505 0.945508 +0 191 6.0 0.9993567 0.38837296 0.5938157 0.57084817 0.88297033 +0 191 6.0 0.7935605 0.78318596 0.67666876 0.97931814 0.951489 +0 192 5.0 0.552793 0.78528017 0.6607392 0.9792771 0.9653919 +0 192 6.0 0.9982199 0.3884672 0.60226655 0.57217664 0.8750688 +0 192 6.0 0.7876784 0.78323364 0.68233615 0.98107946 0.9654086 +0 193 6.0 0.999027 0.38782397 0.60548055 0.5737263 0.88183165 +0 193 6.0 0.9876853 0.781463 0.67920476 0.99829495 0.96885663 +0 194 6.0 0.9996511 0.38647747 0.61135215 0.5741577 0.8880989 +0 194 6.0 0.90738654 0.7831077 0.69252264 0.99171656 0.96924114 +0 195 6.0 0.9998679 0.38754138 0.6123843 0.57452047 0.901281 +0 195 6.0 0.94590145 0.7915558 0.6929637 0.9905525 0.97114575 +0 196 6.0 0.99986315 0.38975468 0.61640656 0.5780049 0.9055439 +0 196 6.0 0.9121751 0.79254705 0.69171125 0.9936306 0.9801797 +0 197 6.0 0.9999317 0.39301354 0.621392 0.5761347 0.9004936 +0 197 6.0 0.957928 0.7899266 0.6953453 0.9989926 0.9869231 +0 198 6.0 0.99992144 0.3926828 0.62268627 0.58221895 0.9022325 +0 198 6.0 0.9566494 0.79789734 0.7000466 0.99853885 0.9873764 +0 199 6.0 0.99989355 0.3943388 0.6258211 0.5803925 0.904495 +0 199 6.0 0.9469837 0.8076184 0.7042209 0.99990845 0.9948367 +0 200 6.0 0.9998566 0.39989337 0.6290412 0.58053935 0.91849136 +0 200 6.0 0.97425824 0.80886596 0.7055025 1.0001514 0.9941344 +0 201 6.0 0.99979764 0.39828697 0.63351834 0.5843951 0.92433596 +0 201 6.0 0.96829903 0.8104365 0.7086338 0.99958754 0.99165714 +0 202 6.0 0.9997496 0.40005362 0.63848424 0.5851024 0.94009936 +0 202 6.0 0.9743887 0.8115214 0.7202828 0.9982109 0.9939208 +0 203 6.0 0.99932635 0.39031613 0.64482284 0.5861651 0.93561566 +0 203 6.0 0.9750012 0.81496346 0.72352374 0.99788666 0.99401116 +0 204 6.0 0.99954456 0.38966745 0.64901304 0.58607036 0.949358 +0 204 6.0 0.96477383 0.81767726 0.7304307 0.9978969 0.99588656 +0 205 6.0 0.9998864 0.39608258 0.6531734 0.5880263 0.9566712 +0 205 6.0 0.9620302 0.82015747 0.73777854 0.99627024 1.0014759 +0 206 6.0 0.99969864 0.398495 0.6659045 0.58839244 0.9567882 +0 206 6.0 0.97297716 0.82486886 0.739646 0.99622506 1.0009565 +0 207 6.0 0.9994369 0.39604497 0.6674221 0.59010094 0.9560893 +0 207 6.0 0.987212 0.82990193 0.7397623 0.9954848 1.0006233 +0 208 6.0 0.9994568 0.4028981 0.66786295 0.59164673 0.9603029 +0 208 6.0 0.9851031 0.83177584 0.74704146 0.9964915 0.99791324 +0 209 6.0 0.9994081 0.40605104 0.67456657 0.5996375 0.97015005 +0 209 6.0 0.97318214 0.8336811 0.74667317 0.996132 1.0015352 +0 210 6.0 0.99948275 0.40563434 0.6761842 0.5982223 0.9812665 +0 210 6.0 0.9857232 0.83821714 0.7552356 0.9953215 1.004149 +0 211 6.0 0.99914217 0.4085306 0.6795756 0.6007873 0.98355085 +0 211 6.0 0.968919 0.8431961 0.7580362 0.9947434 1.0018661 +0 212 6.0 0.99958664 0.41186163 0.6831652 0.6019349 0.99065864 +0 212 6.0 0.94151545 0.84329766 0.7634056 0.99582845 1.0084267 +0 213 6.0 0.99954706 0.41671318 0.7035317 0.6045874 0.98794276 +0 213 6.0 0.94774973 0.8413421 0.7689891 0.99697673 1.0062139 +0 214 6.0 0.99960095 0.4137196 0.7046612 0.60490507 0.99239236 +0 214 6.0 0.9387334 0.8428116 0.7787626 0.9962212 1.0046017 +0 215 6.0 0.9998481 0.41624674 0.7077023 0.6057509 0.9928216 +0 215 6.0 0.9504501 0.84384745 0.78176105 0.99671 1.0044683 +0 215 6.0 0.5341862 0.2839925 0.2627332 0.3965095 0.4015164 +0 216 6.0 0.9998485 0.41629478 0.7097527 0.6072292 0.99243975 +0 216 6.0 0.96278983 0.84978473 0.7927514 0.99645245 1.0031971 +0 216 6.0 0.5446922 0.284939 0.25997588 0.3982764 0.40575656 +0 217 6.0 0.9998047 0.4152259 0.71572363 0.60757166 0.9911927 +0 217 6.0 0.98964953 0.85073066 0.80041903 0.9971138 1.0028579 +0 217 6.0 0.5016239 0.28825605 0.2638209 0.39639127 0.40124875 +0 218 6.0 0.9996793 0.4201935 0.722759 0.61344784 0.98762655 +0 218 6.0 0.97833556 0.85576195 0.8064059 0.99634415 1.0094423 +0 218 6.0 0.699299 0.2866394 0.25778437 0.4023049 0.4077919 +0 219 6.0 0.9996618 0.41812 0.7278969 0.61306655 0.98965216 +0 219 6.0 0.94640774 0.8640926 0.8077656 0.9965571 1.0131245 +0 219 6.0 0.7493379 0.28501862 0.25657594 0.40452033 0.40992773 +0 220 6.0 0.999632 0.42013997 0.7284612 0.61161464 0.98488015 +0 220 6.0 0.95125985 0.86377215 0.8128306 0.9943718 1.014086 +0 220 6.0 0.6444034 0.28634846 0.25776485 0.40245998 0.4087735 +0 221 6.0 0.9986273 0.42027226 0.73023593 0.6133964 0.98385334 +0 221 6.0 0.9320565 0.86482334 0.8134883 0.993803 1.013573 +0 221 6.0 0.7462196 0.2862419 0.25496605 0.402336 0.41116783 +0 222 6.0 0.998602 0.41864192 0.73322797 0.62188077 0.98530066 +0 222 6.0 0.8908523 0.86133546 0.8168678 0.9947718 1.0112745 +0 222 6.0 0.636629 0.29057893 0.2604898 0.40337643 0.4080669 +0 223 6.0 0.9980147 0.4219065 0.7371978 0.6280284 0.9869035 +0 223 6.0 0.7076652 0.8666912 0.81773865 0.99482244 1.015342 +0 223 6.0 0.6773212 0.2906919 0.2607708 0.40350467 0.41007203 +0 224 6.0 0.9946095 0.42228502 0.7477187 0.62606484 0.9906777 +0 224 6.0 0.7078512 0.28992897 0.26257762 0.40291417 0.41432324 +0 224 6.0 0.58637166 0.87211865 0.8365884 0.99851876 0.99726033 +0 225 6.0 0.99619615 0.424724 0.7528577 0.62875354 0.9939991 +0 225 6.0 0.7008272 0.2902901 0.25904262 0.40355137 0.41473746 +0 225 6.0 0.62839293 0.8747452 0.843537 0.99945325 0.99442196 +0 226 6.0 0.9969062 0.42471084 0.7586063 0.63019276 0.9899787 +0 226 6.0 0.7954095 0.86695147 0.84705323 1.0013001 1.0025852 +0 226 6.0 0.56374407 0.2904609 0.26072466 0.40329567 0.4125417 +0 227 6.0 0.9980519 0.42409486 0.7660642 0.6327973 0.99139255 +0 227 6.0 0.79974335 0.8730492 0.8503384 1.0037817 1.0038525 +0 227 6.0 0.6183068 0.29064023 0.25567073 0.40515137 0.420267 +0 228 6.0 0.99762326 0.42661625 0.7723473 0.6347006 0.9920712 +0 228 6.0 0.7351918 0.87360644 0.85406387 1.004585 1.0036701 +0 228 6.0 0.536628 0.29219684 0.26210457 0.4045501 0.41947085 +0 229 6.0 0.9986866 0.43010402 0.7787254 0.6360198 0.9936913 +0 229 6.0 0.57202786 0.8824981 0.8598687 1.0021176 1.0011957 +0 229 6.0 0.5289231 0.29092544 0.2656474 0.4057436 0.41659576 +0 230 6.0 0.9971367 0.4274671 0.7873752 0.63995016 0.9976746 +0 230 6.0 0.5654169 0.28436333 0.26932994 0.4103995 0.43346325 +0 231 6.0 0.99371886 0.42528754 0.79335386 0.6440155 0.99493665 +0 232 6.0 0.9889416 0.4299677 0.7934088 0.6451642 0.99699754 +0 232 6.0 0.525657 0.2864093 0.2718544 0.41101655 0.43875468 +0 233 6.0 0.9935969 0.42729914 0.7951183 0.6436044 0.99778384 +0 233 6.0 0.5905793 0.2861516 0.27904075 0.41603708 0.43509734 +0 234 6.0 0.9947423 0.42960763 0.8021546 0.64657927 0.9948277 +0 235 6.0 0.99549025 0.42437688 0.810663 0.64865863 0.995837 +0 235 6.0 0.51108027 0.29451248 0.28240687 0.41577014 0.43726593 +0 236 6.0 0.99372053 0.42711473 0.8168422 0.6508424 0.9940634 +0 236 6.0 0.5556498 0.29495826 0.28249806 0.41867104 0.43969202 +0 237 6.0 0.9871832 0.43047366 0.8248195 0.6477606 0.9938546 +0 237 6.0 0.7213638 0.29805034 0.26734254 0.42144275 0.441367 +0 238 6.0 0.9864226 0.431434 0.8293322 0.6505593 0.994512 +0 239 6.0 0.95497465 0.43108284 0.83220094 0.6527077 0.9916342 +0 240 6.0 0.9696367 0.42172214 0.8384611 0.655549 0.99836284 +0 240 6.0 0.62681615 0.2969111 0.28202164 0.42445847 0.44393015 +0 241 6.0 0.9783572 0.43217242 0.84615463 0.66148424 0.9998018 +0 241 6.0 0.59587765 0.2996322 0.27844784 0.4253682 0.44138023 +0 242 6.0 0.9883559 0.43722787 0.849654 0.66003126 1.0022156 +0 242 6.0 0.70859087 0.29958728 0.2801458 0.42522278 0.44699553 +0 243 6.0 0.98351145 0.44082716 0.85691154 0.6564845 1.0019114 +0 244 6.0 0.95719945 0.4373669 0.8601488 0.66090137 1.0039104 +0 245 6.0 0.712111 0.43881315 0.8655631 0.65786546 1.0040127 +0 246 6.0 0.6443869 0.4409067 0.8673893 0.6622532 1.0046091 +0 247 6.0 0.51457924 0.4406519 0.8729986 0.6796644 1.0066046 +0 248 6.0 0.52780753 0.2981481 0.31344247 0.4261948 0.45521265 +0 249 6.0 0.52519274 0.29974508 0.3060717 0.42623842 0.45603102 +0 250 6.0 0.5039523 0.30671027 0.30766082 0.43073437 0.45703954 diff --git a/hardware-heterogeneity/Python/car_1.bmp b/hardware-heterogeneity/Python/car_1.bmp new file mode 100644 index 00000000..111cee4f Binary files /dev/null and b/hardware-heterogeneity/Python/car_1.bmp differ diff --git a/hardware-heterogeneity/Python/classification_sample.py b/hardware-heterogeneity/Python/classification_sample.py new file mode 100644 index 00000000..a549526b --- /dev/null +++ b/hardware-heterogeneity/Python/classification_sample.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python +""" + Copyright (c) 2019 Intel Corporation + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" +from __future__ import print_function +import sys +import os +from argparse import ArgumentParser +import cv2 +import numpy as np +import logging as log +from time import time +from openvino.inference_engine import IENetwork, IEPlugin + + +def build_argparser(): + parser = ArgumentParser() + parser.add_argument("-m", "--model", help="Path to an .xml file with a trained model.", required=True, type=str) + parser.add_argument("-i", "--input", help="Path to a folder with images or path to an image files", required=True, + type=str, nargs="+") + parser.add_argument("-l", "--cpu_extension", + help="MKLDNN (CPU)-targeted custom layers.Absolute path to a shared library with the kernels " + "impl.", type=str, default=None) + parser.add_argument("-pp", "--plugin_dir", help="Path to a plugin folder", type=str, default=None) + parser.add_argument("-d", "--device", + help="Specify the target device to infer on; CPU, GPU, FPGA or MYRIAD is acceptable. Sample " + "will look for a suitable plugin for device specified (CPU by default)", default="CPU", + type=str) + parser.add_argument("--labels", help="Labels mapping file", default=None, type=str) + parser.add_argument("-nt", "--number_top", help="Number of top results", default=10, type=int) + parser.add_argument("-ni", "--number_iter", help="Number of inference iterations", default=1, type=int) + parser.add_argument("-pc", "--perf_counts", help="Report performance counters", default=False, action="store_true") + + return parser + + +def main(): + log.basicConfig(format="[ %(levelname)s ] %(message)s", level=log.INFO, stream=sys.stdout) + args = build_argparser().parse_args() + model_xml = args.model + model_bin = os.path.splitext(model_xml)[0] + ".bin" + + + # Plugin initialization for specified device and load extensions library if specified + plugin = IEPlugin(device=args.device, plugin_dirs=args.plugin_dir) + #print(dir(IEPlugin)) + if args.cpu_extension and 'CPU' in args.device: + plugin.add_cpu_extension(args.cpu_extension) + else: + plugin.set_config({"PERF_COUNT":"YES"}) + # Read IR + log.info("Loading network files:\n\t{}\n\t{}".format(model_xml, model_bin)) + net = IENetwork(model=model_xml, weights=model_bin) + + if plugin.device == "CPU": + supported_layers = plugin.get_supported_layers(net) + not_supported_layers = [l for l in net.layers.keys() if l not in supported_layers] + if len(not_supported_layers) != 0: + log.error("Following layers are not supported by the plugin for specified device {}:\n {}". + format(plugin.device, ', '.join(not_supported_layers))) + log.error("Please try to specify cpu extensions library path in sample's command line parameters using -l " + "or --cpu_extension command line argument") + sys.exit(1) + + assert len(net.inputs.keys()) == 1, "Sample supports only single input topologies" + assert len(net.outputs) == 1, "Sample supports only single output topologies" + + log.info("Preparing input blobs") + input_blob = next(iter(net.inputs)) + out_blob = next(iter(net.outputs)) + + net.batch_size = len(args.input) + + # Read and pre-process input images + n, c, h, w = net.inputs[input_blob].shape + print("size is", n) + images = np.ndarray(shape=(n, c, h, w)) + for i in range(n): + image = cv2.imread(args.input[i]) + if image.shape[:-1] != (h, w): + log.warning("Image {} is resized from {} to {}".format(args.input[i], image.shape[:-1], (h, w))) + image = cv2.resize(image, (w, h)) + image = image.transpose((2, 0, 1)) # Change data layout from HWC to CHW + images[i] = image + log.info("Batch size is {}".format(n)) + + # Loading model to the plugin + log.info("Loading model to the plugin") + exec_net = plugin.load(network=net,num_requests=2) + + del net + # Start sync inference + log.info("Starting inference ({} iterations)".format(args.number_iter)) + infer_time = [] + for i in range(args.number_iter): + t0 = time() + res = exec_net.infer(inputs={input_blob: images}) + infer_time.append((time()-t0)*1000) + # Processing output blob + log.info("Processing output blob") + res = res[out_blob] + log.info("Top {} results: ".format(args.number_top)) + args.labels="/opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.labels" + if args.labels: + with open(args.labels, 'r') as f: + labels_map = [x.split(sep=' ', maxsplit=1)[-1].strip() for x in f] + else: + labels_map = None + for i, probs in enumerate(res): + probs = np.squeeze(probs) + top_ind = np.argsort(probs)[-args.number_top:][::-1] + print("Image {}\n".format(args.input[i])) + for id in top_ind: + det_label = labels_map[id] if labels_map else "#{}".format(id) + print("{:<5}{:.7f} label {}".format(id,probs[id], det_label)) + print("\n") + total_inference=np.sum(np.asarray(infer_time)) + log.info("Average running time of one iteration: {} ms".format(np.average(np.asarray(infer_time)))) + log.info("total running time of inference: {} ms" .format(total_inference)) + log.info("Throughput: {} FPS".format((1000*args.number_iter*n)/total_inference)) + print("\n") + + #printing performance counts + exec_net.requests[0].infer({input_blob: images[0]}) + if args.perf_counts: + + perf_counts=exec_net.requests[0].get_perf_counts() + print("performance counts:\n") + total=0 + for layer, stats in perf_counts.items(): + total+=stats['real_time'] + print ("{:<40} {:<15} {:<10} {:<15} {:<8} {:<5} {:<5} {:<5} {:<10} {:<15}".format(layer, stats['status'], 'layerType:', stats['layer_type'], 'realTime:', stats['real_time'], 'cpu:', stats['cpu_time'],'execType:', stats['exec_type'] )) + print ("{:<20} {:<7} {:<20}".format('TotalTime:',total ,'microseconds')) + log.info("Execution successful") + + + del exec_net + del plugin + + +if __name__ == '__main__': + sys.exit(main() or 0) diff --git a/hardware-heterogeneity/Python/cpu.png b/hardware-heterogeneity/Python/cpu.png new file mode 100644 index 00000000..2153c2d4 Binary files /dev/null and b/hardware-heterogeneity/Python/cpu.png differ diff --git a/hardware-heterogeneity/Python/gpu.png b/hardware-heterogeneity/Python/gpu.png new file mode 100644 index 00000000..ef20e54b Binary files /dev/null and b/hardware-heterogeneity/Python/gpu.png differ diff --git a/hardware-heterogeneity/Python/hardware-heterogeneity.ipynb b/hardware-heterogeneity/Python/hardware-heterogeneity.ipynb new file mode 100644 index 00000000..cc48bfc8 --- /dev/null +++ b/hardware-heterogeneity/Python/hardware-heterogeneity.ipynb @@ -0,0 +1,202 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Intel® Distribution of OpenVINO™ toolkit hetero plugin\n", + "\n", + "\n", + " \n", + "This example shows how to use hetero plugin to define preferences to run different network layers on different hardware types. Here, we will use the command line option to define hetero plugin usage where the layer distribution is already defined. However, hetero plugin also allows developers to customize distribution of layers execution on different hardware by specifying it in the application code.\n", + "\n", + "## Car detection tutorial example\n", + "\n", + "### 1. Setting the Environment variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!/opt/intel/openvino/bin/setupvars.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "### 2. Run the car detection tutorial with hetero plugin\n", + "\n", + "#### a) Prioritizing running on GPU first." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!python3 ../../object-detection/Python/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l $HOME/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -d HETERO:GPU,CPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "#### b) Prioritizing running on CPU first." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!python3 ../../object-detection/Python/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l $HOME/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -d HETERO:CPU,GPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Observe the performance time required to process each frame by Inference Engine. For this particular example, inferance ran faster when prioritized for CPU as oppose to when GPU was the first priority.\n", + "\n", + " \n", + "## Inference Engine classification sample\n", + "\n", + "\n", + "Intel® Distribution of OpenVINO™ toolkit install folder (/opt/intel/computer_vision_sdk/) includes various samples for developers to understand how Inference Engine APIs can be used. These samples have -pc flag implmented which shows per topology layer performance report. This will allow to see which layers are running on which hardware. We will run a very basic classification sample as an example in this section. We will provide car image as input to the classification sample. The output will be object labels with confidence numbers.\n", + "\n", + "### 1. First, get the classification model and convert that to IR using Model Optimizer\n", + "\n", + "For this example, we will use squeezenet model downloaded with the model downlaoder script while setting up the OS for the workshop." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! /opt/intel/openvino/deployment_tools/tools/model_downloader/downloader.py --name squeezenet1.1 " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! /opt/intel/openvino/deployment_tools/model_optimizer/mo_caffe.py --input_model /opt/intel/workshop/smart-video-workshop/hardware-heterogeneity/Python/classification/squeezenet/1.1/caffe/squeezenet1.1.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "To display labels after classifictaion, you will need a labels file for the SqueezeNet* model. Get the available labels file from demo directory to your working directory." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%cp /opt/intel/openvino/deployment_tools/demo/squeezenet1.1.labels /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### 2. Run classification sample with hetero plugin, prioritizing running on GPU first." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 classification_sample.py -i car_1.bmp -m /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.xml -d HETERO:GPU,CPU -pc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "perfromance counts:\n", + "\n", + "\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### 3. Now, run with CPU first" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 classification_sample.py -i car_1.bmp -m /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.xml -d HETERO:CPU,GPU -pc\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "performance counts:\n", + "\n", + "\n", + "" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/object-detection/Python/.ipynb_checkpoints/Tensor_Flow_example-checkpoint.ipynb b/object-detection/Python/.ipynb_checkpoints/Tensor_Flow_example-checkpoint.ipynb new file mode 100644 index 00000000..efb1f12e --- /dev/null +++ b/object-detection/Python/.ipynb_checkpoints/Tensor_Flow_example-checkpoint.ipynb @@ -0,0 +1,364 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "## Converting a TensorFlow* Model in Linux*\n", + "\n", + "### Pre-Requisites:\n", + "\n", + "#### Change ownership of the directory to the current user\n", + "\n", + " Note: replace the usernames below with your user account name\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"intel123\" | sudo -S chown intel:intel -R /opt/intel >/dev/null 2>&1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### Download Model(s) from TensorFlow* -slim library\n", + "\n", + "There are a number of pre-trained public models in the TensorFlow*-slim repository. The models are distributed as Python scripts and checkpoint files. First of all download repository with models. Note: This is done in home directory(~)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cloning into 'models'...\n", + "remote: Enumerating objects: 19, done.\u001b[K\n", + "remote: Counting objects: 100% (19/19), done.\u001b[K\n", + "remote: Compressing objects: 100% (17/17), done.\u001b[K\n", + "Receiving objects: 5% (1375/25352), 532.00 KiB | 20.00 KiB/s \r" + ] + } + ], + "source": [ + "! cd && git clone https://github.com/tensorflow/models/ && cd models/research/slim" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### Export Inference Graph and download checkpoint file\n", + "\n", + "Export inference graph for one of the available models using the following command (Inception V1 in this example):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!python3 /home/intel/models/research/slim/export_inference_graph.py --alsologtostderr --model_name=inception_v1 --output_file=/tmp/inception_v1_inf_graph.pb" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "The script creates inference graph file with name “inception_v1_inf_graph.pb” in the /tmp direcory.\n", + "\n", + "#### Download archive with checkpoint file (Inception V1 in this example):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "%%writefile run.sh\n", + "export CHECKPOINT_DIR=/tmp/checkpoints\n", + "\n", + "mkdir $CHECKPOINT_DIR\n", + "\n", + "wget http://download.tensorflow.org/models/inception_v1_2016_08_28.tar.gz\n", + "\n", + "tar -xvf inception_v1_2016_08_28.tar.gz\n", + "\n", + "mv inception_v1.ckpt $CHECKPOINT_DIR\n", + "\n", + "rm inception_v1_2016_08_28.tar.gz" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "sh run.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### Freeze the model\n", + "\n", + "The last step is to freeze the graph. To do this you need to know the output node of the model you are planning to freeze. This information is found by running the summarize_graph.\n", + "\n", + "#### Summarize Graph\n", + "\n", + "Go to ~/models/research/slim/ directory and run summarize_graph.py script." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 input(s) detected:\r\n", + "Name: input, type: float32, shape: (-1,224,224,3)\r\n", + "1 output(s) detected:\r\n", + "InceptionV1/Logits/Predictions/Reshape_1\r\n" + ] + } + ], + "source": [ + "! cd ~/models/research/slim/ && python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo/utils/summarize_graph.py --input_model=/tmp/inception_v1_inf_graph.pb\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "The output layer/node name should be in the last line of text on the console and should look like:\n", + "\n", + "1 input(s) detected: Name: input, type: float32, shape: (-1,224,224,3) 1 output(s) detected: InceptionV1/Logits/Predictions/Reshape_1Freeze Graph\n", + "\n", + "#### Freeze the graph for Intel® Distribution of OpenVINO™ toolkit\n", + "\n", + "The script generates inception_v1_frozen.pb file with the frozen model in the directory you are currently in." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!python3 /usr/local/lib/python3.5/dist-packages/tensorflow/python/tools/freeze_graph.py --input_graph /tmp/inception_v1_inf_graph.pb --input_binary --input_checkpoint /tmp/checkpoints/inception_v1.ckpt --output_node_names InceptionV1/Logits/Predictions/Reshape_1 --output_graph inception_v1_frozen.pb" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "You might get warning message \"Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA\" while executing above command, ignore that.\n", + "### Convert Frozen Tensorflow* model to IR using Model Optimizer\n", + "\n", + "Assuming you are in the ~/models/research/slim/ directory" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_tf.py --input_model inception_v1_frozen.pb --input_shape [1,224,224,3] --mean_values [1024,1024,1024] --scale_values [128,128,128]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "This should produce “inception_v1_frozen.xml” and “inception_v1_frozen.bin” file. The xml file contains the topology information of the model and the bin file contains the model’s weights and biases. These two files are expected when using the inference engine so make note of the path.\n", + "### Run Classification Sample\n", + "\n", + "The classification sample will showcase the Intel® Distribution of OpenVINO™ toolkit inference engine using TensorFlow model Inception_v1_frozen IR files (.xml & .bin) and an input image of a car to classify. The classification collateral is defined as the input image car_1.bmp, the Inception_v1_frozen IR files (.xml & .bin), and the labels file inception_v1_frozen.labels. Create a new directory that will hold the classification sample app and all needed components to run the classification sample Note: The following steps should be followed and are assuming you are following the preceding steps. You should be in the home directory." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!/opt/intel/openvino/bin/setupvars.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "Place Classification App collateral in current local directory:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"intel123\" | sudo -S cp /opt/intel/openvino/deployment_tools/demo/car_1.bmp . >/dev/null 2>&1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"intel123\" | sudo -S cp /opt/intel/openvino/deployment_tools/demo/squeezenet1.1.labels ./inception_v1_frozen.labels >/dev/null 2>&1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### Run Application\n", + "\n", + "Note: To see all the flags that the sample takes as input run ./classification_sample -h" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "! python3 classification_sample.py -i car_1.bmp -m inception_v1_frozen.xml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "Expected Output:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "[ INFO ] InferenceEngine:
\n", + "API version ............ 1.6
\n", + "Build .................. custom_releases/2019/R1_c9b66a26e4d65bb986bb740e73f58c6e9e84c7c2
\n", + "[ INFO ] Parsing input parameters
\n", + "[ INFO ] Files were added: 1
\n", + "[ INFO ] car_1.bmp
\n", + "[ INFO ] Loading plugin\n", + "
\n", + "\tAPI version ............ 1.6
\n", + "\tBuild .................. 22443
\n", + "\tDescription ....... MKLDNNPlugin
\n", + "[ INFO ] Loading network files:
\n", + "\tinception_v1_frozen.xml
\n", + "\tinception_v1_frozen.bin
\n", + "[ INFO ] Preparing input blobs
\n", + "[ WARNING ] Image is resized from (749, 637) to (224, 224)
\n", + "[ INFO ] Batch size is 1
\n", + "[ INFO ] Preparing output blobs
\n", + "[ INFO ] Loading model to the plugin
\n", + "[ INFO ] Starting inference (1 iterations)
\n", + "[ INFO ] Processing output blobs
\n", + "
\n", + "Top 10 results:\n", + "
\n", + "Image car_1.bmp\n", + "
\n", + "classid probability label
\n", + "------- ----------- -----
\n", + "829 0.6013383 streetcar, tram, tramcar, trolley, trolley car
\n", + "905 0.1193138 window shade
\n", + "557 0.0587131 flagpole, flagstaff
\n", + "600 0.0273736 hook, claw
\n", + "812 0.0096623 space shuttle
\n", + "633 0.0080025 loupe, jeweler's loupe
\n", + "795 0.0052693 ski
\n", + "791 0.0045856 shopping cart
\n", + "652 0.0042737 military uniform
\n", + "689 0.0042265 overskirt
\n", + "
\n", + "\n", + "total inference time: 22.1188385
\n", + "Average running time of one iteration: 22.1188385 ms
\n", + "
\n", + "Throughput: 45.2103305 FPS
\n", + "\n", + "[ INFO ] Execution successful
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/object-detection/Python/.ipynb_checkpoints/basic_end_to_end_object_detection-checkpoint.ipynb b/object-detection/Python/.ipynb_checkpoints/basic_end_to_end_object_detection-checkpoint.ipynb new file mode 100644 index 00000000..b045c715 --- /dev/null +++ b/object-detection/Python/.ipynb_checkpoints/basic_end_to_end_object_detection-checkpoint.ipynb @@ -0,0 +1,374 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "# Object detection with Intel® Distribution of OpenVINO™ toolkit\n", + "\n", + "This tutorial uses a Single Shot MultiBox Detector (SSD) on a trained mobilenet-ssd* model to walk you through the basic steps of using two key components of the Intel® Distribution of OpenVINO™ toolkit: Model Optimizer and Inference Engine.\n", + "\n", + "Model Optimizer is a cross-platform command-line tool that takes pre-trained deep learning models and optimizes them for performance/space using conservative topology transformations. It performs static model analysis and adjusts deep learning models for optimal execution on end-point target devices.\n", + "\n", + "Inference is the process of using a trained neural network to interpret data, such as images. This lab feeds a short video of cars, frame-by-frame, to the Inference Engine which subsequently utilizes an optimized trained neural network to detect cars.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "### Part 1: Optimize a deep-learning model using the Model Optimizer (MO)\n", + "\n", + "In this section, you will use the Model Optimizer to convert a trained model to two Intermediate Representation (IR) files (one .bin and one .xml). The Inference Engine requires this model conversion so that it can use the IR as input and achieve optimum performance on Intel hardware.\n", + "
\n", + "\n", + "#### 1. Create a directory to store IR files" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "! mkdir -p /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### 2. Run the Model Optimizer on the pretrained Caffe* model. This step generates one .xml file and one .bin file and place both files in the tutorial samples directory (located here: /object-detection/)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model Optimizer arguments:\n", + "Common parameters:\n", + "\t- Path to the Input Model: \t/opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/mobilenet-ssd/caffe/mobilenet-ssd.caffemodel\n", + "\t- Path for generated IR: \t/opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32\n", + "\t- IR output name: \tmobilenet-ssd\n", + "\t- Log level: \tERROR\n", + "\t- Batch: \tNot specified, inherited from the model\n", + "\t- Input layers: \tNot specified, inherited from the model\n", + "\t- Output layers: \tNot specified, inherited from the model\n", + "\t- Input shapes: \tNot specified, inherited from the model\n", + "\t- Mean values: \t[127,127,127]\n", + "\t- Scale values: \tNot specified\n", + "\t- Scale factor: \t256.0\n", + "\t- Precision of IR: \tFP32\n", + "\t- Enable fusing: \tTrue\n", + "\t- Enable grouped convolutions fusing: \tTrue\n", + "\t- Move mean values to preprocess section: \tFalse\n", + "\t- Reverse input channels: \tFalse\n", + "Caffe specific parameters:\n", + "\t- Enable resnet optimization: \tTrue\n", + "\t- Path to the Input prototxt: \t/opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/mobilenet-ssd/caffe/mobilenet-ssd.prototxt\n", + "\t- Path to CustomLayersMapping.xml: \tDefault\n", + "\t- Path to a mean file: \tNot specified\n", + "\t- Offsets for a mean file: \tNot specified\n", + "Model Optimizer version: \t2019.1.0-341-gc9b66a2\n", + "\n", + "[ SUCCESS ] Generated IR model.\n", + "[ SUCCESS ] XML file: /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml\n", + "[ SUCCESS ] BIN file: /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.bin\n", + "[ SUCCESS ] Total execution time: 4.94 seconds. \n" + ] + } + ], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_caffe.py --input_model /opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/mobilenet-ssd/caffe/mobilenet-ssd.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32 --scale 256 --mean_values [127,127,127]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + " Note: Although this tutorial uses Single Shot MultiBox Detector (SSD) on a trained mobilenet-ssd* model, the Inference Engine is compatible with other neural network architectures, such as AlexNet*, GoogleNet*, MxNet* etc.\n", + "\n", + "\n", + "The Model Optimizer converts a pretrained Caffe* model to make it compatible with the Intel Inference Engine and optimizes it for Intel® architecture. These are the files you would include with your C++ application to apply inference to visual data.\n", + "\n", + " Note: if you continue to train or make changes to the Caffe* model, you would then need to re-run the Model Optimizer on the updated model.\n", + "\n", + "#### 3. Navigate to the tutorial sample model directory and verify creation of the optimized model files (the IR files)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mobilenet-ssd.bin mobilenet-ssd.mapping mobilenet-ssd.xml\r\n" + ] + } + ], + "source": [ + "! cd /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32 && ls" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "You should see the following two files listed in this directory: mobilenet-ssd.xml and mobilenet-ssd.bin\n", + "
\n", + "\n", + "### Part 2: Use the mobilenet-ssd* model and Inference Engine in an object detection application\n", + "
\n", + "\n", + "#### 1. Open the sample app (main.cpp) in the editor of your choice to view the lines that call the Inference Engine." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "! gedit /opt/intel/workshop/smart-video-workshop/object-detection/main.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "- Line 72 — Plugin initialization for specified device and load extensions library if specified\n", + "- Line 77 — initializes the network object\n", + "- Line 98 — Loading IR to the plugin...\n", + "- Line 102 — Read and pre-process input image\n", + "- Line 177 — allocate output blobs\n", + "\n", + "\n", + "#### 2. Close the source file\n", + "\n", + "#### 3. Source your environmental variables" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[setupvars.sh] OpenVINO environment initialized\r\n" + ] + } + ], + "source": [ + "! /opt/intel/openvino/bin/setupvars.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### 4. Download the test video file to the object-detection folder.\n", + "\n", + "Download the input video file in the following link\n", + "[https://pixabay.com/en/videos/download/video-1900_source.mp4?attachment](https://pixabay.com/en/videos/download/video-1900_source.mp4?attachment)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "Cars - 1900.mp4 file will get downloaded.
\n", + "\n", + "Put that file in the /opt/intel/workshop/smart-video-workshop/object-detection folder." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mv: cannot stat '/home/intel/Downloads/Cars - 1900.mp4': No such file or directory\r\n" + ] + } + ], + "source": [ + "! mv ~/Downloads/Cars\\ -\\ 1900.mp4 ." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### 5. Run the sample application to use the Inference Engine on the test video\n", + "\n", + "The below command runs the application" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + " Note: If you get an error related to \"undefined reference to 'google::FlagRegisterer...\", try uninstalling libgflags-dev: sudo apt-get remove libgflags-dev\n", + "\n", + "#### 6. Display output\n", + "
\n", + "For simplicity of the code and in order to put more focus on the performance number, video rendering with rectangle boxes for detected objects has been separated from main.cpp." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " !python3 ROIviewer.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -l /opt/intel/workshop/smart-video-workshop/object-detection/pascal_voc_classes.txt " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "You should see a video play with cars running on the highway and red bounding boxes around them.\n", + "\n", + "Here are the parameters used in the above command to run the application:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -h" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "### Part 3: Run the example on different hardware\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### 1. CPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -d CPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "You will see the total time it took to run the inference.\n", + "\n", + "#### 2. GPU\n", + "\n", + "Since you installed the OpenCL™ drivers to use the GPU, you can run the inference on GPU and compare the difference.\n", + "\n", + "Set target hardware as GPU with -d GPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -d GPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "The total time between CPU and GPU will vary depending on your system." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/object-detection/Python/README.md b/object-detection/Python/README.md new file mode 100644 index 00000000..e69de29b diff --git a/object-detection/Python/ROIviewer.py b/object-detection/Python/ROIviewer.py new file mode 100644 index 00000000..bc03f553 --- /dev/null +++ b/object-detection/Python/ROIviewer.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python +""" + Copyright (c) 2019 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" + +import sys +import os +from argparse import ArgumentParser +import cv2 +import logging as log +import struct +import collections + + + +def build_argparser(): + parser = ArgumentParser() + parser.add_argument("-i", "--input", + help="Path to video file or image. 'cam' for capturing video stream from camera", required=True, + type=str) + parser.add_argument("-l", "--labels", help="Labels mapping file", required=True, type=str) + parser.add_argument("--ROIfile",help="Path to ROI file.",default="ROIs.txt",type=str) + parser.add_argument("-b", help="Batch size", default=0, type=int) + + return parser + +class ROI_data_type: + framenum="" + labelnum="" + confidence="" + xmin="" + ymin="" + xmax="" + ymax="" + +def main(): + log.basicConfig(format="[ %(levelname)s ] %(message)s", level=log.INFO, stream=sys.stdout) + args = build_argparser().parse_args() + batch=args.b + ROIs = collections.deque() + assert os.path.isfile(args.ROIfile), "Specified ROIs.txt file doesn't exist" + + fin=open("ROIs.txt",'r') + for l in fin: + R=ROI_data_type() + batchnum,R.framenum,R.labelnum,R.confidence,R.xmin,R.ymin,R.xmax,R.ymax=l.split() + if int(batchnum)==batch: + ROIs.append(R) + + if args.input == 'cam': + input_stream = 0 + else: + input_stream = args.input + assert os.path.isfile(args.input), "Specified input file doesn't exist" + + print("opening", args.input," batchnum ",args.b,"\n") + + cap = cv2.VideoCapture(input_stream) + if not cap.isOpened(): + print("could not open input video file") + framenum=0 + if len(ROIs)>1: + R=ROIs[0] + else: + print("empty ROI file"); + if args.labels: + with open(args.labels, 'r') as f: + labels_map = [x.strip() for x in f] + else: + labels_map = None + + while True: + ret, frame = cap.read() + if not ret: + break + ncols=cap.get(3) + nrows=cap.get(4) + while int(R.framenum)1: + ROIs.popleft() + R=ROIs[0]; + else: + break + while int(R.framenum)==framenum: + xmin = int(float(R.xmin) * float(ncols)) + ymin = int(float(R.ymin) * float(nrows)) + xmax = int(float(R.xmax) * float(ncols)) + ymax = int(float(R.ymax) * float(nrows)) + + class_id=int(float(R.labelnum)+1) + cv2.rectangle(frame, (xmin, ymin), (xmax, ymax), (0, 255, 0),4,16,0) + + if len(labels_map)==0: + templabel=int(float(R.labelnum))+":"+int(R.confidence*100.0) + print(templabel) + else: + templabel=str(labels_map[int(float(R.labelnum))])+":"+str(int(float(R.confidence)*100.0)) + + cv2.rectangle(frame, (xmin, ymin+32), (xmax, ymin), (155, 155, 155),-1,0) + cv2.putText(frame, templabel, (xmin, ymin+24), cv2.FONT_HERSHEY_COMPLEX, 1.1, (0, 0, 0),3) + + if len(ROIs)>1: + ROIs.popleft() + R=ROIs[0] + else: + break + + cv2.imshow("Detection Results", frame) + if cv2.waitKey(30)>=0: + break + if len(ROIs)<=1: + break + framenum+=1 + +main() diff --git a/object-detection/Python/Tensor_Flow_example.ipynb b/object-detection/Python/Tensor_Flow_example.ipynb new file mode 100644 index 00000000..c6c08d9f --- /dev/null +++ b/object-detection/Python/Tensor_Flow_example.ipynb @@ -0,0 +1,290 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "# Converting a TensorFlow* Model in Linux*\n", + "\n", + "## Pre-Requisites:\n", + "\n", + "### Change ownership of the directory to the current user\n", + "\n", + " - *Note: Replace \"xxxxx\" with your system-password*\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"xxxxx\" | sudo -S chown intel:intel -R /opt/intel >/dev/null 2>&1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### Download Model(s) from TensorFlow* -slim library\n", + "\n", + "There are a number of pre-trained public models in the TensorFlow*-slim repository. The models are distributed as Python scripts and checkpoint files. First of all download repository with models. Note: This is done in home directory(~)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! cd && git clone https://github.com/tensorflow/models/ && cd models/research/slim" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### Export Inference Graph and download checkpoint file\n", + "\n", + "Export inference graph for one of the available models using the following command (Inception V1 in this example):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!python3 /home/intel/models/research/slim/export_inference_graph.py --alsologtostderr --model_name=inception_v1 --output_file=/tmp/inception_v1_inf_graph.pb" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "The script creates inference graph file with name “inception_v1_inf_graph.pb” in the /tmp direcory.\n", + "\n", + "### Download archive with checkpoint file (Inception V1 in this example):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "%%writefile run.sh\n", + "export CHECKPOINT_DIR=/tmp/checkpoints\n", + "\n", + "mkdir $CHECKPOINT_DIR\n", + "\n", + "wget http://download.tensorflow.org/models/inception_v1_2016_08_28.tar.gz\n", + "\n", + "tar -xvf inception_v1_2016_08_28.tar.gz\n", + "\n", + "mv inception_v1.ckpt $CHECKPOINT_DIR\n", + "\n", + "rm inception_v1_2016_08_28.tar.gz" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "sh run.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### Freeze the model\n", + "\n", + "The last step is to freeze the graph. To do this you need to know the output node of the model you are planning to freeze. This information is found by running the summarize_graph.\n", + "\n", + "### Summarize Graph\n", + "\n", + "Go to ~/models/research/slim/ directory and run summarize_graph.py script." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! cd ~/models/research/slim/ && python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo/utils/summarize_graph.py --input_model=/tmp/inception_v1_inf_graph.pb\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "The output layer/node name should be in the last line of text on the console and should look like:\n", + "\n", + "1 input(s) detected: Name: input, type: float32, shape: (-1,224,224,3) 1 output(s) detected: InceptionV1/Logits/Predictions/Reshape_1Freeze Graph\n", + "\n", + "### Freeze the graph for Intel® Distribution of OpenVINO™ toolkit\n", + "\n", + "The script generates inception_v1_frozen.pb file with the frozen model in the directory you are currently in." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!python3 /usr/local/lib/python3.5/dist-packages/tensorflow/python/tools/freeze_graph.py --input_graph /tmp/inception_v1_inf_graph.pb --input_binary --input_checkpoint /tmp/checkpoints/inception_v1.ckpt --output_node_names InceptionV1/Logits/Predictions/Reshape_1 --output_graph inception_v1_frozen.pb" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "You might get warning message \"Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA\" while executing above command, ignore that.\n", + "## Convert Frozen Tensorflow* model to IR using Model Optimizer\n", + "\n", + "Assuming you are in the ~/models/research/slim/ directory" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_tf.py --input_model inception_v1_frozen.pb --input_shape [1,224,224,3] --mean_values [1024,1024,1024] --scale_values [128,128,128]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "This should produce “inception_v1_frozen.xml” and “inception_v1_frozen.bin” file. The xml file contains the topology information of the model and the bin file contains the model’s weights and biases. These two files are expected when using the inference engine so make note of the path.\n", + "## Run Classification Sample\n", + "\n", + "The classification sample will showcase the Intel® Distribution of OpenVINO™ toolkit inference engine using TensorFlow model Inception_v1_frozen IR files (.xml & .bin) and an input image of a car to classify. The classification collateral is defined as the input image car_1.bmp, the Inception_v1_frozen IR files (.xml & .bin), and the labels file inception_v1_frozen.labels. Create a new directory that will hold the classification sample app and all needed components to run the classification sample Note: The following steps should be followed and are assuming you are following the preceding steps. You should be in the home directory." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!/opt/intel/openvino/bin/setupvars.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "Place Classification App collateral in current local directory:" + " - *Note: Replace \"xxxxx\" with your system-password*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"xxxxx\" | sudo -S cp /opt/intel/openvino/deployment_tools/demo/car_1.bmp . >/dev/null 2>&1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo \"xxxxx\" | sudo -S cp /opt/intel/openvino/deployment_tools/demo/squeezenet1.1.labels ./inception_v1_frozen.labels >/dev/null 2>&1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "#### Run Application\n", + "\n", + "Note: To see all the flags that the sample takes as input run ./classification_sample -h" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "! python3 classification_sample.py -i car_1.bmp --labels inception_v1_frozen.labels -m inception_v1_frozen.xml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "Expected Output:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + " \n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/object-detection/Python/basic_end_to_end_object_detection.ipynb b/object-detection/Python/basic_end_to_end_object_detection.ipynb new file mode 100644 index 00000000..e5ad7cfc --- /dev/null +++ b/object-detection/Python/basic_end_to_end_object_detection.ipynb @@ -0,0 +1,315 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Object detection with Intel® Distribution of OpenVINO™ toolkit\n", + "\n", + "This tutorial uses a Single Shot MultiBox Detector (SSD) on a trained mobilenet-ssd* model to walk you through the basic steps of using two key components of the Intel® Distribution of OpenVINO™ toolkit: Model Optimizer and Inference Engine.\n", + "\n", + "Model Optimizer is a cross-platform command-line tool that takes pre-trained deep learning models and optimizes them for performance/space using conservative topology transformations. It performs static model analysis and adjusts deep learning models for optimal execution on end-point target devices.\n", + "\n", + "Inference is the process of using a trained neural network to interpret data, such as images. This lab feeds a short video of cars, frame-by-frame, to the Inference Engine which subsequently utilizes an optimized trained neural network to detect cars.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "## Part 1: Optimize a deep-learning model using the Model Optimizer (MO)\n", + "\n", + "In this section, you will use the Model Optimizer to convert a trained model to two Intermediate Representation (IR) files (one .bin and one .xml). The Inference Engine requires this model conversion so that it can use the IR as input and achieve optimum performance on Intel hardware.\n", + "\n", + "\n", + "### 1. Create a directory to store IR files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! mkdir -p /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### 2. Run the Model Optimizer on the pretrained Caffe* model. This step generates one .xml file and one .bin file and place both files in the tutorial samples directory (located here: /object-detection/)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_caffe.py --input_model /opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/mobilenet-ssd/caffe/mobilenet-ssd.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32 --scale 256 --mean_values [127,127,127]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + " Note: Although this tutorial uses Single Shot MultiBox Detector (SSD) on a trained mobilenet-ssd* model, the Inference Engine is compatible with other neural network architectures, such as AlexNet*, GoogleNet*, MxNet* etc.\n", + "\n", + "\n", + "The Model Optimizer converts a pretrained Caffe* model to make it compatible with the Intel Inference Engine and optimizes it for Intel® architecture. These are the files you would include with your C++ application to apply inference to visual data.\n", + "\n", + " Note: if you continue to train or make changes to the Caffe* model, you would then need to re-run the Model Optimizer on the updated model.\n", + "\n", + "### 3. Navigate to the tutorial sample model directory and verify creation of the optimized model files (the IR files)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! cd /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32 && ls" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "You should see the following two files listed in this directory: mobilenet-ssd.xml and mobilenet-ssd.bin\n", + "\n", + "\n", + "## Part 2: Use the mobilenet-ssd* model and Inference Engine in an object detection application\n", + "\n", + "\n", + "### 1. Open the sample app (tutorial1.py) in the editor of your choice to view the lines that call the Inference Engine." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! gedit tutorial1.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "- Line 72 — Plugin initialization for specified device and load extensions library if specified\n", + "- Line 77 — initializes the network object\n", + "- Line 98 — Loading IR to the plugin...\n", + "- Line 102 — Read and pre-process input image\n", + "- Line 177 — allocate output blobs\n", + "\n", + "\n", + "### 2. Close the source file\n", + "\n", + "### 3. Source your environmental variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "! /opt/intel/openvino/bin/setupvars.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "#### 4. Download the test video file to the object-detection folder.\n", + "\n", + "Download the input video file in the following link\n", + "[https://pixabay.com/en/videos/download/video-1900_source.mp4?attachment](https://pixabay.com/en/videos/download/video-1900_source.mp4?attachment)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "Cars - 1900.mp4 file will get downloaded. \n", + "\n", + "Put that file in the /opt/intel/workshop/smart-video-workshop/object-detection/Python folder." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! mv ~/Downloads/Cars\\ -\\ 1900.mp4 ." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### 5. Run the sample application to use the Inference Engine on the test video\n", + "\n", + "The below command runs the application" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l $HOME/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + " Note: If you get an error related to \"undefined reference to 'google::FlagRegisterer...\", try uninstalling libgflags-dev: sudo apt-get remove libgflags-dev\n", + "\n", + "### 6. Display output\n", + "\n", + "For simplicity of the code and in order to put more focus on the performance number, video rendering with rectangle boxes for detected objects has been separated from main.cpp." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " !python3 ROIviewer.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -l /opt/intel/workshop/smart-video-workshop/object-detection/pascal_voc_classes.txt " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "You should see a video play with cars running on the highway and red bounding boxes around them.\n", + "\n", + "Here are the parameters used in the above command to run the application:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -h" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "## Part 3: Run the example on different hardware\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### 1. CPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l $HOME/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -d CPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "You will see the total time it took to run the inference.\n", + "\n", + "#### 2. GPU\n", + "\n", + "Since you installed the OpenCL™ drivers to use the GPU, you can run the inference on GPU and compare the difference.\n", + "\n", + "Set target hardware as GPU with -d GPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -d GPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "The total time between CPU and GPU will vary depending on your system." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/object-detection/Python/car_1.bmp b/object-detection/Python/car_1.bmp new file mode 100644 index 00000000..111cee4f Binary files /dev/null and b/object-detection/Python/car_1.bmp differ diff --git a/object-detection/Python/classification_output.png b/object-detection/Python/classification_output.png new file mode 100644 index 00000000..18e6e835 Binary files /dev/null and b/object-detection/Python/classification_output.png differ diff --git a/object-detection/Python/classification_sample.py b/object-detection/Python/classification_sample.py new file mode 100644 index 00000000..17492971 --- /dev/null +++ b/object-detection/Python/classification_sample.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python +""" + Copyright (c) 2019 Intel Corporation + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" +from __future__ import print_function +import sys +import os +from argparse import ArgumentParser +import cv2 +import numpy as np +import logging as log +from time import time +from openvino.inference_engine import IENetwork, IEPlugin + + +def build_argparser(): + parser = ArgumentParser() + parser.add_argument("-m", "--model", help="Path to an .xml file with a trained model.", required=True, type=str) + parser.add_argument("-i", "--input", help="Path to a folder with images or path to an image files", required=True, + type=str, nargs="+") + parser.add_argument("-l", "--cpu_extension", + help="MKLDNN (CPU)-targeted custom layers.Absolute path to a shared library with the kernels " + "impl.", type=str, default=None) + parser.add_argument("-pp", "--plugin_dir", help="Path to a plugin folder", type=str, default=None) + parser.add_argument("-d", "--device", + help="Specify the target device to infer on; CPU, GPU, FPGA or MYRIAD is acceptable. Sample " + "will look for a suitable plugin for device specified (CPU by default)", default="CPU", + type=str) + parser.add_argument("--labels", help="Labels mapping file", default=None, type=str) + parser.add_argument("-nt", "--number_top", help="Number of top results", default=10, type=int) + parser.add_argument("-ni", "--number_iter", help="Number of inference iterations", default=1, type=int) + parser.add_argument("-pc", "--perf_counts", help="Report performance counters", default=False, action="store_true") + + return parser + + +def main(): + log.basicConfig(format="[ %(levelname)s ] %(message)s", level=log.INFO, stream=sys.stdout) + args = build_argparser().parse_args() + model_xml = args.model + model_bin = os.path.splitext(model_xml)[0] + ".bin" + + + # Plugin initialization for specified device and load extensions library if specified + plugin = IEPlugin(device=args.device, plugin_dirs=args.plugin_dir) + #print(dir(IEPlugin)) + if args.cpu_extension and 'CPU' in args.device: + plugin.add_cpu_extension(args.cpu_extension) + else: + plugin.set_config({"PERF_COUNT":"YES"}) + # Read IR + log.info("Loading network files:\n\t{}\n\t{}".format(model_xml, model_bin)) + net = IENetwork(model=model_xml, weights=model_bin) + + if plugin.device == "CPU": + supported_layers = plugin.get_supported_layers(net) + not_supported_layers = [l for l in net.layers.keys() if l not in supported_layers] + if len(not_supported_layers) != 0: + log.error("Following layers are not supported by the plugin for specified device {}:\n {}". + format(plugin.device, ', '.join(not_supported_layers))) + log.error("Please try to specify cpu extensions library path in sample's command line parameters using -l " + "or --cpu_extension command line argument") + sys.exit(1) + + assert len(net.inputs.keys()) == 1, "Sample supports only single input topologies" + assert len(net.outputs) == 1, "Sample supports only single output topologies" + + log.info("Preparing input blobs") + input_blob = next(iter(net.inputs)) + out_blob = next(iter(net.outputs)) + + net.batch_size = len(args.input) + + # Read and pre-process input images + n, c, h, w = net.inputs[input_blob].shape + print("size is", n) + images = np.ndarray(shape=(n, c, h, w)) + for i in range(n): + image = cv2.imread(args.input[i]) + if image.shape[:-1] != (h, w): + log.warning("Image {} is resized from {} to {}".format(args.input[i], image.shape[:-1], (h, w))) + image = cv2.resize(image, (w, h)) + image = image.transpose((2, 0, 1)) # Change data layout from HWC to CHW + images[i] = image + log.info("Batch size is {}".format(n)) + + # Loading model to the plugin + log.info("Loading model to the plugin") + exec_net = plugin.load(network=net,num_requests=2) + + del net + # Start sync inference + log.info("Starting inference ({} iterations)".format(args.number_iter)) + infer_time = [] + for i in range(args.number_iter): + t0 = time() + res = exec_net.infer(inputs={input_blob: images}) + infer_time.append((time()-t0)*1000) + # Processing output blob + log.info("Processing output blob") + res = res[out_blob] + log.info("Top {} results: ".format(args.number_top)) + args.labels="/opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.labels" + if args.labels: + with open(args.labels, 'r') as f: + labels_map = [x.split(sep=' ', maxsplit=1)[-1].strip() for x in f] + else: + labels_map = None + for i, probs in enumerate(res): + probs = np.squeeze(probs) + top_ind = np.argsort(probs)[-args.number_top:][::-1] + print("Image {}\n".format(args.input[i])) + for id in top_ind: + det_label = labels_map[id] if labels_map else "#{}".format(id) + print("{:<5}{:.7f} label {}".format(id,probs[id], det_label)) + print("\n") + total_inference=np.sum(np.asarray(infer_time)) + log.info("Average running time of one iteration: {} ms".format(np.average(np.asarray(infer_time)))) + log.info("total running time of inference: {} ms" .format(total_inference)) + log.info("Throughput: {} FPS".format((1000*args.number_iter*n)/total_inference)) + print("\n") + + #printing performance counts + exec_net.requests[0].infer({input_blob: images[0]}) + if args.perf_counts: + + perf_counts=exec_net.requests[0].get_perf_counts() + print("performance counts:\n") + total=0 + for layer, stats in perf_counts.items(): + total+=stats['real_time'] + print ("{:<40} {:<15} {:<10} {:<15} {:<8} {:<5} {:<5} {:<5} {:<10} {:<15}".format(layer, stats['status'], 'layerType:', stats['layer_type'], 'realTime:', stats['real_time'], 'cpu:', stats['cpu_time'],'execType:', stats['exec_type'] )) + print ("{:<20} {:<7} {:<20}".format('TotalTime:',total ,'microseconds')) + log.info("Execution successful") + + + del exec_net + del plugin + + +if __name__ == '__main__': + sys.exit(main() or 0) diff --git a/object-detection/Python/tutorial1.py b/object-detection/Python/tutorial1.py new file mode 100644 index 00000000..a2bb3fd3 --- /dev/null +++ b/object-detection/Python/tutorial1.py @@ -0,0 +1,236 @@ +#!/usr/bin/env python +""" + Copyright (c) 2019 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" + +from __future__ import print_function +import sys +import os +from argparse import ArgumentParser +import cv2 +import time +import logging as log +from openvino.inference_engine import IENetwork, IEPlugin +from enum import Enum +import collections + + + +class output_mode_type(Enum): + CLASSIFICATION_MODE=1 + SSD_MODE=2 + + +def build_argparser(): + parser = ArgumentParser() + parser.add_argument("-m", "--model", help="Path to an .xml file with a trained model.", required=True, type=str) + parser.add_argument("-i", "--input", + help="Path to video file or image. 'cam' for capturing video stream from camera", required=True, + type=str) + parser.add_argument("-l", "--cpu_extension", + help="MKLDNN (CPU)-targeted custom layers.Absolute path to a shared library with the kernels " + "impl.", type=str, default=None) + parser.add_argument("-pp", "--plugin_dir", help="Path to a plugin folder", type=str, default=None) + parser.add_argument("-d", "--device", + help="Specify the target device to infer on; CPU, GPU, FPGA or MYRIAD is acceptable. Demo " + "will look for a suitable plugin for device specified (CPU by default)", default="CPU", + type=str) + parser.add_argument("--labels", help="Labels mapping file", default=None, type=str) + parser.add_argument("-pt", "--prob_threshold", help="Probability threshold for detections filtering", + default=0.5, type=float) + parser.add_argument("-fr", help="maximum frames to process", default=256, type=int) + parser.add_argument("-b", help="Batch size", default=1, type=int) + + return parser + + +def main(): + log.basicConfig(format="[ %(levelname)s ] %(message)s", level=log.INFO, stream=sys.stdout) + args = build_argparser().parse_args() + model_xml = args.model + model_bin = os.path.splitext(model_xml)[0] + ".bin" + + preprocess_times = collections.deque() + infer_times = collections.deque() + postprocess_times = collections.deque() + + ROIfile=open("ROIs.txt","w"); # output stored here, view with ROIviewer + + # Plugin initialization for specified device and load extensions library if specified + log.info("Initializing plugin for {} device...".format(args.device)) + plugin = IEPlugin(device=args.device, plugin_dirs=args.plugin_dir) + if args.cpu_extension and 'CPU' in args.device: + plugin.add_cpu_extension(args.cpu_extension) + + + # Read IR + log.info("Reading IR...") + net = IENetwork(model=model_xml, weights=model_bin) + + if plugin.device == "CPU": + supported_layers = plugin.get_supported_layers(net) + not_supported_layers = [l for l in net.layers.keys() if l not in supported_layers] + if len(not_supported_layers) != 0: + log.error("Following layers are not supported by the plugin for specified device {}:\n {}". + format(plugin.device, ', '.join(not_supported_layers))) + log.error("Please try to specify cpu extensions library path in demo's command line parameters using -l " + "or --cpu_extension command line argument") + sys.exit(1) + + #Set Batch Size + net.batch_size = args.b + batchSize = net.batch_size + frameLimit = args.fr + assert len(net.inputs.keys()) == 1, "Demo supports only single input topologies" + assert len(net.outputs) == 1, "Demo supports only single output topologies" + input_blob = next(iter(net.inputs)) + out_blob = next(iter(net.outputs)) + log.info("Loading IR to the plugin...") + exec_net = plugin.load(network=net, num_requests=2) + + # Read and pre-process input image + n, c, h, w = net.inputs[input_blob].shape + output_dims=net.outputs[out_blob].shape + infer_width=w; + infer_height=h; + num_channels=c; + channel_size=infer_width*infer_height + full_image_size=channel_size*num_channels + + print("inputdims=",w,h,c,n) + print("outputdims=",output_dims[3],output_dims[2],output_dims[1],output_dims[0]) + if int(output_dims[3])>1 : + print("SSD Mode") + output_mode=output_mode_type.SSD_MODE + else: + print("Single Classification Mode") + output_mode=CLASSIFICATION_MODE + output_data_size=int(output_dims[2])*int(output_dims[1])*int(output_dims[0]) + del net + if args.input == 'cam': + input_stream = 0 + else: + input_stream = args.input + assert os.path.isfile(args.input), "Specified input file doesn't exist" + if args.labels: + with open(args.labels, 'r') as f: + labels_map = [x.strip() for x in f] + else: + labels_map = None + + cap = cv2.VideoCapture(input_stream) + + cur_request_id = 0 + next_request_id = 1 + + is_async_mode =True + if (is_async_mode == True): + log.info("Starting inference in async mode...") + else : + log.info("Starting inference in sync mode...") + + render_time = 0 + + framenum = 0 + process_more_frames=True + frames_in_output=batchSize + + while process_more_frames: + time1 = time.time() + for mb in range(0 , batchSize): + ret, frame = cap.read() + if not ret or (framenum >= frameLimit): + process_more_frames=False + frames_in_output=mb + + if (not process_more_frames): + break + + # convert image to blob + # Fill input tensor with planes. First b channel, then g and r channels + in_frame = cv2.resize(frame, (w, h)) + in_frame = in_frame.transpose((2, 0, 1)) # Change data layout from HWC to CHW + + + time2 = time.time() + diffPreProcess = time2 - time1 + if process_more_frames: + preprocess_times.append(diffPreProcess*1000) + + # Main sync point: + # in the truly Async mode we start the NEXT infer request, while waiting for the CURRENT to complete + # in the regular mode we start the CURRENT request and immediately wait for it's completion + inf_start = time.time() + if is_async_mode: + exec_net.start_async(request_id=next_request_id, inputs={input_blob: in_frame}) + else: + exec_net.start_async(request_id=cur_request_id, inputs={input_blob: in_frame}) + if exec_net.requests[cur_request_id].wait(-1) == 0: + inf_end = time.time() + det_time = inf_end - inf_start + infer_times.append(det_time*1000) + time1 = time.time() + + for mb in range(0 , batchSize): + if (framenum >= frameLimit): + process_more_frames=False; + break; + + # Parse detection results of the current request + res = exec_net.requests[cur_request_id].outputs[out_blob] + for obj in res[0][0]: + # Write into ROIs.txt only objects when probability more than specified threshold + if obj[2] > args.prob_threshold: + confidence=obj[2] + locallabel = obj[1] - 1 + print(str(0),str(framenum),str(locallabel),str(confidence),str(obj[3]),str(obj[4]),str(obj[5]),str(obj[6]), file=ROIfile) + + + sys.stdout.write("\rframenum:"+str(framenum + 1)) + sys.stdout.flush() + render_start = time.time() + framenum = framenum+1 + + time2 = time.time() + diffPostProcess = time2 - time1 + postprocess_times.append(diffPostProcess*1000) + + if is_async_mode: + cur_request_id, next_request_id = next_request_id, cur_request_id + + + print("\n") + preprocesstime=0 + inferencetime=0 + postprocesstime=0 + + for obj in preprocess_times: + preprocesstime+=obj + for obj in infer_times: + inferencetime+=obj + for obj in postprocess_times: + postprocesstime+=obj + + + print("Preprocess: {:.2f} ms/frame".format(preprocesstime/(len(preprocess_times)*batchSize))) + print("Inference: {:.2f} ms/frame ".format(inferencetime/(len(infer_times)*batchSize))) + print("Postprocess: {:.2f} ms/frame".format(postprocesstime/(len(postprocess_times)*batchSize))) + + del exec_net + del plugin + + +if __name__ == '__main__': + sys.exit(main() or 0) diff --git a/optimization-tools-and-techniques/Python/.ipynb_checkpoints/optimization_tools_and_techniques-checkpoint.ipynb b/optimization-tools-and-techniques/Python/.ipynb_checkpoints/optimization_tools_and_techniques-checkpoint.ipynb new file mode 100644 index 00000000..a03d7376 --- /dev/null +++ b/optimization-tools-and-techniques/Python/.ipynb_checkpoints/optimization_tools_and_techniques-checkpoint.ipynb @@ -0,0 +1,474 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "# Optimizing Computer Vision Applications\n", + "\n", + "This tutorial shows some techniques to get better performance for computer vision applications with the Intel® Distribution of OpenVINO™ toolkit.\n", + "### 1. Tune parameters - set batch size\n", + "\n", + "In this section, we will see how changes in the batch size affect the performance. We will use the SSD300 model for the experiments.\n", + "\n", + "The default batch size for the Model Optimizer is 1.\n", + "#### Let us first look at the performance numbers for the batch size 1." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[setupvars.sh] OpenVINO environment initialized\n", + "[ INFO ] Initializing plugin for CPU device...\n", + "[ INFO ] Reading IR...\n", + "[ INFO ] Loading IR to the plugin...\n", + "inputdims= 300 300 3 1\n", + "outputdims= 7 100 1 1\n", + "SSD Mode\n", + "[ INFO ] Starting inference in async mode...\n", + "framenum:256\n", + "\n", + "Preprocess: 10.277553461492062 \tms/frame\n", + "Inference: 13.56345321983099 \tms/frame\n", + "Postprocess: 0.8453469332090148 \tms/frame\n" + ] + } + ], + "source": [ + "!/opt/intel/openvino/bin/setupvars.sh\n", + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### Change the batch size to 2 and run the object-detection example for new batch size" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ INFO ] Initializing plugin for CPU device...\n", + "[ INFO ] Reading IR...\n", + "[ INFO ] Loading IR to the plugin...\n", + "inputdims= 300 300 3 1\n", + "outputdims= 7 100 1 1\n", + "SSD Mode\n", + "[ INFO ] Starting inference in async mode...\n", + "framenum:256\n", + "\n", + "Preprocess: 10.16246434301138 \tms/frame\n", + "Inference: 3.913639113306999 \tms/frame\n", + "Postprocess: 0.4350638111277777 \tms/frame\n" + ] + } + ], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -b 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### Run the example for different batch sizes\n", + "\n", + "Change the batch sizes to 8,16,32,64,128 and so on and see the performance diffrence in terms of the inference time.\n", + "### 2. Pick the right model based on application and hardware\n", + "\n", + "Use/train a model with the right performance/accuracy tradeoffs. Performance differences between models can be bigger than any optimization you can do at the inference app level. Run various SSD models from the model_downloader in the car detection example which we used in the initial tutorial and observe the performance. We will run these tests on different hardware accelerators to determine how application performance depends on models as well as hardware.\n", + "#### Run Model Optimizer on the models to get IR files" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "!mkdir -p /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/{FP16,FP32} \n", + "!mkdir -p /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/{FP16,FP32} \n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model Optimizer arguments:\n", + "Common parameters:\n", + "\t- Path to the Input Model: \t/opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/512/caffe/ssd512.caffemodel\n", + "\t- Path for generated IR: \t/opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP32\n", + "\t- IR output name: \tssd512\n", + "\t- Log level: \tERROR\n", + "\t- Batch: \tNot specified, inherited from the model\n", + "\t- Input layers: \tNot specified, inherited from the model\n", + "\t- Output layers: \tNot specified, inherited from the model\n", + "\t- Input shapes: \tNot specified, inherited from the model\n", + "\t- Mean values: \tNot specified\n", + "\t- Scale values: \tNot specified\n", + "\t- Scale factor: \tNot specified\n", + "\t- Precision of IR: \tFP32\n", + "\t- Enable fusing: \tTrue\n", + "\t- Enable grouped convolutions fusing: \tTrue\n", + "\t- Move mean values to preprocess section: \tFalse\n", + "\t- Reverse input channels: \tFalse\n", + "Caffe specific parameters:\n", + "\t- Enable resnet optimization: \tTrue\n", + "\t- Path to the Input prototxt: \t/opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/512/caffe/ssd512.prototxt\n", + "\t- Path to CustomLayersMapping.xml: \tDefault\n", + "\t- Path to a mean file: \tNot specified\n", + "\t- Offsets for a mean file: \tNot specified\n", + "Model Optimizer version: \t2019.1.0-341-gc9b66a2\n", + "\n", + "[ SUCCESS ] Generated IR model.\n", + "[ SUCCESS ] XML file: /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP32/ssd512.xml\n", + "[ SUCCESS ] BIN file: /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP32/ssd512.bin\n", + "[ SUCCESS ] Total execution time: 9.82 seconds. \n" + ] + } + ], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_caffe.py --input_model /opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/512/caffe/ssd512.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP32\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model Optimizer arguments:\n", + "Common parameters:\n", + "\t- Path to the Input Model: \t/opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/512/caffe/ssd512.caffemodel\n", + "\t- Path for generated IR: \t/opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP16\n", + "\t- IR output name: \tssd512\n", + "\t- Log level: \tERROR\n", + "\t- Batch: \tNot specified, inherited from the model\n", + "\t- Input layers: \tNot specified, inherited from the model\n", + "\t- Output layers: \tNot specified, inherited from the model\n", + "\t- Input shapes: \tNot specified, inherited from the model\n", + "\t- Mean values: \tNot specified\n", + "\t- Scale values: \tNot specified\n", + "\t- Scale factor: \tNot specified\n", + "\t- Precision of IR: \tFP16\n", + "\t- Enable fusing: \tTrue\n", + "\t- Enable grouped convolutions fusing: \tTrue\n", + "\t- Move mean values to preprocess section: \tFalse\n", + "\t- Reverse input channels: \tFalse\n", + "Caffe specific parameters:\n", + "\t- Enable resnet optimization: \tTrue\n", + "\t- Path to the Input prototxt: \t/opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/512/caffe/ssd512.prototxt\n", + "\t- Path to CustomLayersMapping.xml: \tDefault\n", + "\t- Path to a mean file: \tNot specified\n", + "\t- Offsets for a mean file: \tNot specified\n", + "Model Optimizer version: \t2019.1.0-341-gc9b66a2\n", + "\n", + "[ SUCCESS ] Generated IR model.\n", + "[ SUCCESS ] XML file: /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP16/ssd512.xml\n", + "[ SUCCESS ] BIN file: /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP16/ssd512.bin\n", + "[ SUCCESS ] Total execution time: 9.87 seconds. \n" + ] + } + ], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_caffe.py --input_model /opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/512/caffe/ssd512.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP16 --data_type FP16\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model Optimizer arguments:\r\n", + "Common parameters:\r\n", + "\t- Path to the Input Model: \t/opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/300/caffe/ssd300.caffemodel\r\n", + "\t- Path for generated IR: \t/opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP32\r\n", + "\t- IR output name: \tssd300\r\n", + "\t- Log level: \tERROR\r\n", + "\t- Batch: \tNot specified, inherited from the model\r\n", + "\t- Input layers: \tNot specified, inherited from the model\r\n", + "\t- Output layers: \tNot specified, inherited from the model\r\n", + "\t- Input shapes: \tNot specified, inherited from the model\r\n", + "\t- Mean values: \tNot specified\r\n", + "\t- Scale values: \tNot specified\r\n", + "\t- Scale factor: \tNot specified\r\n", + "\t- Precision of IR: \tFP32\r\n", + "\t- Enable fusing: \tTrue\r\n", + "\t- Enable grouped convolutions fusing: \tTrue\r\n", + "\t- Move mean values to preprocess section: \tFalse\r\n", + "\t- Reverse input channels: \tFalse\r\n", + "Caffe specific parameters:\r\n", + "\t- Enable resnet optimization: \tTrue\r\n", + "\t- Path to the Input prototxt: \t/opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/300/caffe/ssd300.prototxt\r\n", + "\t- Path to CustomLayersMapping.xml: \tDefault\r\n", + "\t- Path to a mean file: \tNot specified\r\n", + "\t- Offsets for a mean file: \tNot specified\r\n", + "Model Optimizer version: \t2019.1.0-341-gc9b66a2\r\n" + ] + } + ], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_caffe.py --input_model /opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/300/caffe/ssd300.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP32\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_caffe.py --input_model /opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/300/caffe/ssd300.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP16 --data_type FP16\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### Set environmental variables and navigate to object detection tutorial directory\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! /opt/intel/openvino/bin/setupvars.sh\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### a) CPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP32/ssd300.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP32/ssd512.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### b) GPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -d GPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP32/ssd300.xml -d GPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP32/ssd512.xml -d GPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### c) Intel® Movidius™ Neural Compute Stick" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP16/mobilenet-ssd.xml -d MYRIAD" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP16/ssd300.xml -d MYRIAD" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP16/ssd512.xml -d MYRIAD" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "Note: There is often USB write error for Intel® Movidius™ Neural Compute Stick, please try re-running the command. Sometimes it takes 3 trials.\n", + "\n", + "#### 3. Use the right data type for your target harware and accuracy needs\n", + "\n", + "In this section, we will consider an example running on a GPU. FP16 operations are better optimized than FP32 on GPUs. We will run the object detection example with SSD models with data types FP16 and FP32 and observe the performance difference." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP32/ssd300.xml -d GPU " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP16/ssd300.xml -d GPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "It is clear that we got better performance with FP16 models.\n", + "#### 4. Use async\n", + "\n", + "The async API can improve the overall frame rate of the application. While the accelerator is busy with running inference operations, the application can continue encoding, decoding or post inference data processing on the host. For this section, we will use the object_detection_demo_ssd_async sample. This sample makes asynchronous requests to the inference engine. This reduces the inference request latency, so that the overall framerate is determined by the MAXIMUM(detection time, input capturing time) and not the SUM(detection time, input capturing time).\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "#### a) Run the async example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/inference_engine/samples/python_samples/object_detection_demo_ssd_async/object_detection_demo_ssd_async.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l /home/intel/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "- Press tab to switch to sync mode. Observe the number of fps (frames per second) for both sync and async mode. The number frames processed per second are more in async than the sync mode.\n", + "\n", + "There are important performance caveats though. Tasks that run in parallel should try to avoid oversubscribing to shared computing resources. For example, if the inference tasks are running on the FPGA and the CPU is essentially idle, then it makes sense to run tasks on the CPU in parallel." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/optimization-tools-and-techniques/Python/ROIs.txt b/optimization-tools-and-techniques/Python/ROIs.txt new file mode 100644 index 00000000..8bc8ef26 --- /dev/null +++ b/optimization-tools-and-techniques/Python/ROIs.txt @@ -0,0 +1,1602 @@ +0 1 6.0 1.0 0.63183594 0.4260254 0.7753906 0.6064453 +0 1 6.0 1.0 0.40234375 0.51464844 0.55615234 0.7167969 +0 1 6.0 1.0 0.43823242 0.78466797 0.6425781 0.99658203 +0 1 6.0 0.99902344 0.47070312 0.2763672 0.57910156 0.4243164 +0 1 6.0 0.9980469 0.3190918 0.3647461 0.44750977 0.5361328 +0 1 6.0 0.9873047 0.14526367 0.27124023 0.2097168 0.34399414 +0 1 6.0 0.8769531 0.26000977 0.2553711 0.3479004 0.40429688 +0 1 6.0 0.7558594 0.30981445 0.3173828 0.40649414 0.44677734 +0 2 6.0 1.0 0.63378906 0.42822266 0.7783203 0.60791016 +0 2 6.0 1.0 0.4038086 0.51904297 0.5566406 0.72216797 +0 2 6.0 1.0 0.43139648 0.79003906 0.6376953 1.0019531 +0 2 6.0 0.99902344 0.47216797 0.2758789 0.5786133 0.42773438 +0 2 6.0 0.9980469 0.31933594 0.36621094 0.4482422 0.5371094 +0 2 6.0 0.9902344 0.14587402 0.27148438 0.21057129 0.34375 +0 2 6.0 0.89746094 0.2607422 0.2553711 0.3486328 0.40820312 +0 2 6.0 0.75634766 0.31469727 0.31591797 0.41137695 0.4350586 +0 3 6.0 1.0 0.6352539 0.43164062 0.77978516 0.6152344 +0 3 6.0 1.0 0.40576172 0.51904297 0.55810547 0.7260742 +0 3 6.0 1.0 0.4326172 0.7939453 0.64160156 1.0009766 +0 3 6.0 0.99902344 0.47338867 0.27539062 0.5800781 0.42822266 +0 3 6.0 0.9980469 0.32080078 0.36572266 0.44873047 0.53808594 +0 3 6.0 0.99316406 0.14624023 0.27075195 0.2121582 0.3425293 +0 3 6.0 0.8964844 0.2614746 0.25634766 0.35083008 0.4091797 +0 3 6.0 0.6928711 0.30639648 0.31347656 0.4104004 0.46923828 +0 4 6.0 1.0 0.4753418 0.27563477 0.58251953 0.4309082 +0 4 6.0 1.0 0.63671875 0.43310547 0.7832031 0.6176758 +0 4 6.0 1.0 0.40722656 0.5209961 0.55908203 0.73095703 +0 4 6.0 1.0 0.43359375 0.7973633 0.640625 1.0029297 +0 4 6.0 0.9980469 0.32299805 0.36889648 0.45043945 0.5385742 +0 4 6.0 0.99316406 0.14648438 0.2692871 0.2121582 0.34106445 +0 4 6.0 0.9223633 0.26342773 0.2578125 0.35229492 0.41455078 +0 4 6.0 0.7753906 0.31518555 0.31884766 0.41333008 0.43847656 +0 5 6.0 1.0 0.43554688 0.80371094 0.6425781 0.9980469 +0 5 6.0 1.0 0.4104004 0.52685547 0.5625 0.74072266 +0 5 6.0 1.0 0.6376953 0.43408203 0.7861328 0.62060547 +0 5 6.0 1.0 0.47436523 0.27539062 0.58447266 0.43310547 +0 5 6.0 0.9921875 0.14660645 0.26782227 0.21203613 0.34155273 +0 5 6.0 0.9902344 0.32495117 0.36132812 0.44848633 0.5410156 +0 5 6.0 0.8833008 0.26293945 0.2578125 0.35083008 0.40966797 +0 5 6.0 0.8491211 0.31176758 0.328125 0.42749023 0.47314453 +0 5 6.0 0.50878906 0.2626953 0.30981445 0.31835938 0.4104004 +0 6 6.0 1.0 0.4765625 0.2763672 0.5859375 0.43554688 +0 6 6.0 1.0 0.640625 0.43579102 0.7890625 0.62353516 +0 6 6.0 1.0 0.40966797 0.53027344 0.5644531 0.7451172 +0 6 6.0 1.0 0.43920898 0.81152344 0.6435547 0.99902344 +0 6 6.0 0.99316406 0.14697266 0.2680664 0.21289062 0.34277344 +0 6 6.0 0.9863281 0.32641602 0.3671875 0.4489746 0.5395508 +0 6 6.0 0.8984375 0.2631836 0.25952148 0.35205078 0.41381836 +0 6 6.0 0.83984375 0.3154297 0.32128906 0.41796875 0.4423828 +0 7 6.0 1.0 0.64160156 0.4375 0.7890625 0.6269531 +0 7 6.0 1.0 0.40966797 0.5332031 0.56347656 0.7470703 +0 7 6.0 0.99902344 0.4790039 0.27734375 0.58740234 0.43701172 +0 7 6.0 0.99902344 0.44091797 0.8173828 0.64404297 0.99902344 +0 7 6.0 0.9951172 0.14794922 0.26757812 0.2133789 0.34277344 +0 7 6.0 0.98828125 0.328125 0.39282227 0.4609375 0.5551758 +0 7 6.0 0.87353516 0.26464844 0.2705078 0.35351562 0.4189453 +0 7 6.0 0.76660156 0.3166504 0.3239746 0.4206543 0.44555664 +0 8 6.0 1.0 0.6459961 0.43945312 0.79052734 0.62890625 +0 8 6.0 1.0 0.40966797 0.53466797 0.5644531 0.7504883 +0 8 6.0 0.99902344 0.47851562 0.27734375 0.58984375 0.43847656 +0 8 6.0 0.9970703 0.4423828 0.8227539 0.6455078 1.0 +0 8 6.0 0.99609375 0.14916992 0.26708984 0.21411133 0.34179688 +0 8 6.0 0.9873047 0.32885742 0.3930664 0.46411133 0.55566406 +0 8 6.0 0.90234375 0.31713867 0.35302734 0.43969727 0.50390625 +0 8 6.0 0.8588867 0.26586914 0.26953125 0.35473633 0.41845703 +0 8 6.0 0.56396484 0.3022461 0.32104492 0.40820312 0.46850586 +0 9 6.0 1.0 0.6479492 0.4399414 0.79345703 0.63134766 +0 9 6.0 1.0 0.4111328 0.5361328 0.56396484 0.7558594 +0 9 6.0 0.9980469 0.48266602 0.2770996 0.5917969 0.4387207 +0 9 6.0 0.99609375 0.44384766 0.8276367 0.64697266 0.9995117 +0 9 6.0 0.9921875 0.14855957 0.2668457 0.21447754 0.34204102 +0 9 6.0 0.9892578 0.33081055 0.39135742 0.46850586 0.55859375 +0 9 6.0 0.90234375 0.3173828 0.35375977 0.44189453 0.5053711 +0 9 6.0 0.88134766 0.26611328 0.26904297 0.35742188 0.4194336 +0 9 6.0 0.53125 0.30126953 0.31958008 0.40966797 0.4675293 +0 10 6.0 1.0 0.64746094 0.44311523 0.7919922 0.6298828 +0 10 6.0 1.0 0.41210938 0.54248047 0.56689453 0.76220703 +0 10 6.0 0.9980469 0.48217773 0.27685547 0.5942383 0.43945312 +0 10 6.0 0.9941406 0.3334961 0.39501953 0.46972656 0.56103516 +0 10 6.0 0.9902344 0.14892578 0.26660156 0.21533203 0.34179688 +0 10 6.0 0.98291016 0.4477539 0.83203125 0.64697266 0.99609375 +0 10 6.0 0.89990234 0.26171875 0.26123047 0.36376953 0.41259766 +0 10 6.0 0.7607422 0.31933594 0.3552246 0.43896484 0.50439453 +0 11 6.0 1.0 0.64990234 0.44433594 0.79345703 0.63378906 +0 11 6.0 1.0 0.41430664 0.5444336 0.56933594 0.7661133 +0 11 6.0 0.99902344 0.48291016 0.2783203 0.59716797 0.4423828 +0 11 6.0 0.99609375 0.33398438 0.3942871 0.4711914 0.5625 +0 11 6.0 0.9941406 0.14929199 0.26660156 0.21520996 0.3408203 +0 11 6.0 0.94628906 0.44458008 0.8442383 0.66064453 0.99365234 +0 11 6.0 0.9194336 0.25952148 0.2626953 0.36450195 0.41064453 +0 11 6.0 0.75097656 0.31835938 0.35424805 0.4350586 0.50634766 +0 12 6.0 1.0 0.6513672 0.44726562 0.79589844 0.6357422 +0 12 6.0 1.0 0.4152832 0.5463867 0.57666016 0.77001953 +0 12 6.0 0.99902344 0.47802734 0.27954102 0.58935547 0.44262695 +0 12 6.0 0.9980469 0.3330078 0.3955078 0.46679688 0.5644531 +0 12 6.0 0.9941406 0.14978027 0.26660156 0.21594238 0.34033203 +0 12 6.0 0.9453125 0.25683594 0.26367188 0.3642578 0.4140625 +0 12 6.0 0.94140625 0.45263672 0.84375 0.6538086 0.99316406 +0 12 6.0 0.78125 0.32128906 0.32958984 0.42382812 0.4555664 +0 13 6.0 1.0 0.41601562 0.54785156 0.5800781 0.7734375 +0 13 6.0 1.0 0.65185547 0.44995117 0.80029297 0.6381836 +0 13 6.0 0.99902344 0.47827148 0.28027344 0.59033203 0.4428711 +0 13 6.0 0.9980469 0.3317871 0.3959961 0.47045898 0.56640625 +0 13 6.0 0.98828125 0.15136719 0.26782227 0.21679688 0.34106445 +0 13 6.0 0.9667969 0.4477539 0.84765625 0.65283203 0.9951172 +0 13 6.0 0.96240234 0.25756836 0.2626953 0.36499023 0.41455078 +0 13 6.0 0.7158203 0.3203125 0.33129883 0.42578125 0.4650879 +0 14 6.0 1.0 0.48339844 0.28320312 0.59277344 0.44189453 +0 14 6.0 1.0 0.65234375 0.45166016 0.8017578 0.64208984 +0 14 6.0 1.0 0.4177246 0.5566406 0.57666016 0.7832031 +0 14 6.0 0.99902344 0.33666992 0.39770508 0.4699707 0.56689453 +0 14 6.0 0.984375 0.1517334 0.26733398 0.21813965 0.34057617 +0 14 6.0 0.9667969 0.25683594 0.26171875 0.3647461 0.41357422 +0 14 6.0 0.94189453 0.44555664 0.8515625 0.64941406 0.99316406 +0 14 6.0 0.68408203 0.3203125 0.3322754 0.4243164 0.4650879 +0 15 6.0 1.0 0.41918945 0.5620117 0.578125 0.7836914 +0 15 6.0 1.0 0.65478516 0.45288086 0.8022461 0.6503906 +0 15 6.0 1.0 0.48583984 0.2836914 0.5942383 0.44091797 +0 15 6.0 0.99902344 0.33911133 0.3959961 0.4724121 0.56884766 +0 15 6.0 0.98828125 0.1508789 0.26538086 0.2175293 0.34057617 +0 15 6.0 0.9790039 0.26171875 0.26904297 0.36865234 0.42529297 +0 15 6.0 0.9194336 0.4465332 0.85546875 0.6542969 0.9970703 +0 15 6.0 0.5727539 0.32202148 0.33251953 0.42407227 0.46484375 +0 16 6.0 1.0 0.4885254 0.2841797 0.5961914 0.43945312 +0 16 6.0 1.0 0.65722656 0.4560547 0.80566406 0.6533203 +0 16 6.0 1.0 0.41967773 0.5644531 0.57910156 0.7871094 +0 16 6.0 0.99902344 0.3408203 0.3955078 0.4736328 0.5727539 +0 16 6.0 0.9892578 0.15124512 0.26538086 0.21716309 0.34057617 +0 16 6.0 0.984375 0.26660156 0.27172852 0.3696289 0.4260254 +0 16 6.0 0.9472656 0.4465332 0.8642578 0.65625 0.9951172 +0 17 6.0 1.0 0.48706055 0.28393555 0.59765625 0.44213867 +0 17 6.0 1.0 0.6567383 0.45703125 0.80810547 0.65527344 +0 17 6.0 1.0 0.42138672 0.5678711 0.58154297 0.7915039 +0 17 6.0 0.9980469 0.34277344 0.39916992 0.47314453 0.57128906 +0 17 6.0 0.9892578 0.15185547 0.26513672 0.21801758 0.3408203 +0 17 6.0 0.984375 0.26904297 0.27124023 0.36914062 0.42651367 +0 17 6.0 0.92089844 0.44873047 0.875 0.65478516 0.99316406 +0 17 6.0 0.53222656 0.3227539 0.33740234 0.43017578 0.47558594 +0 18 6.0 1.0 0.4868164 0.2836914 0.5991211 0.44189453 +0 18 6.0 1.0 0.6567383 0.45825195 0.8120117 0.6591797 +0 18 6.0 1.0 0.42089844 0.57421875 0.5810547 0.79589844 +0 18 6.0 0.9980469 0.34106445 0.3984375 0.47485352 0.5727539 +0 18 6.0 0.9902344 0.26757812 0.27148438 0.3696289 0.42626953 +0 18 6.0 0.9892578 0.15222168 0.26416016 0.21789551 0.34033203 +0 18 6.0 0.7949219 0.44433594 0.8769531 0.6621094 0.99609375 +0 18 6.0 0.5620117 0.32592773 0.35180664 0.42993164 0.50634766 +0 19 6.0 1.0 0.48828125 0.28466797 0.5996094 0.4423828 +0 19 6.0 1.0 0.65966797 0.46435547 0.8149414 0.6645508 +0 19 6.0 1.0 0.42163086 0.57714844 0.5834961 0.7998047 +0 19 6.0 0.9980469 0.34423828 0.40063477 0.47753906 0.5761719 +0 19 6.0 0.98828125 0.15319824 0.2631836 0.21740723 0.3408203 +0 19 6.0 0.9863281 0.27197266 0.27392578 0.3701172 0.4272461 +0 19 6.0 0.63183594 0.4477539 0.8823242 0.66064453 0.9926758 +0 19 6.0 0.6225586 0.3256836 0.34960938 0.42822266 0.49902344 +0 20 6.0 1.0 0.49023438 0.28710938 0.6035156 0.44140625 +0 20 6.0 1.0 0.6621094 0.4663086 0.81640625 0.66552734 +0 20 6.0 1.0 0.42285156 0.5786133 0.58496094 0.8041992 +0 20 6.0 0.9970703 0.34399414 0.40429688 0.47583008 0.57373047 +0 20 6.0 0.98828125 0.2644043 0.27490234 0.36645508 0.42871094 +0 20 6.0 0.9863281 0.15368652 0.26171875 0.21765137 0.34033203 +0 20 6.0 0.87353516 0.3347168 0.35986328 0.4465332 0.5258789 +0 20 6.0 0.5805664 0.22131348 0.29345703 0.2758789 0.34033203 +0 20 6.0 0.5185547 0.45483398 0.8876953 0.65478516 0.9902344 +0 21 6.0 1.0 0.48950195 0.2866211 0.60253906 0.44335938 +0 21 6.0 1.0 0.66503906 0.4699707 0.81933594 0.6699219 +0 21 6.0 1.0 0.42504883 0.5800781 0.58691406 0.80859375 +0 21 6.0 0.9970703 0.26464844 0.27441406 0.36816406 0.42871094 +0 21 6.0 0.9951172 0.34375 0.40600586 0.47607422 0.5761719 +0 21 6.0 0.984375 0.15356445 0.2614746 0.21826172 0.34106445 +0 21 6.0 0.87890625 0.33251953 0.359375 0.44433594 0.52490234 +0 21 6.0 0.6796875 0.22290039 0.29248047 0.2770996 0.34277344 +0 22 6.0 1.0 0.49365234 0.28808594 0.60498047 0.44580078 +0 22 6.0 1.0 0.6689453 0.4716797 0.8203125 0.6738281 +0 22 6.0 1.0 0.42626953 0.58691406 0.58935547 0.81347656 +0 22 6.0 0.99902344 0.3466797 0.41552734 0.48046875 0.59033203 +0 22 6.0 0.9970703 0.26660156 0.27392578 0.3671875 0.4272461 +0 22 6.0 0.9790039 0.15356445 0.26123047 0.21875 0.3408203 +0 22 6.0 0.8154297 0.33398438 0.35961914 0.44189453 0.52734375 +0 22 6.0 0.703125 0.22241211 0.2927246 0.2770996 0.34301758 +0 23 6.0 1.0 0.6699219 0.4716797 0.82128906 0.67871094 +0 23 6.0 1.0 0.42919922 0.59033203 0.59228516 0.8178711 +0 23 6.0 1.0 0.5004883 0.28979492 0.61083984 0.44311523 +0 23 6.0 0.99902344 0.3466797 0.4177246 0.48095703 0.5913086 +0 23 6.0 0.99902344 0.26757812 0.27514648 0.37109375 0.43969727 +0 23 6.0 0.9770508 0.15454102 0.25976562 0.21923828 0.3413086 +0 23 6.0 0.94384766 0.33325195 0.36035156 0.4416504 0.5234375 +0 23 6.0 0.6933594 0.22216797 0.2919922 0.2788086 0.34277344 +0 24 6.0 1.0 0.5 0.28979492 0.6113281 0.44848633 +0 24 6.0 1.0 0.34716797 0.4206543 0.48339844 0.59375 +0 24 6.0 1.0 0.6713867 0.47607422 0.82373047 0.6821289 +0 24 6.0 1.0 0.4260254 0.5932617 0.59716797 0.82177734 +0 24 6.0 0.99902344 0.2697754 0.27294922 0.36938477 0.42919922 +0 24 6.0 0.97265625 0.15429688 0.25830078 0.22021484 0.3408203 +0 24 6.0 0.9614258 0.3322754 0.359375 0.44360352 0.5205078 +0 24 6.0 0.7314453 0.22338867 0.29174805 0.27905273 0.34301758 +0 25 6.0 1.0 0.27319336 0.27441406 0.37036133 0.42919922 +0 25 6.0 1.0 0.5019531 0.29101562 0.6113281 0.4482422 +0 25 6.0 1.0 0.34814453 0.42163086 0.48632812 0.59472656 +0 25 6.0 1.0 0.6743164 0.4794922 0.82470703 0.6845703 +0 25 6.0 1.0 0.4272461 0.5966797 0.6020508 0.8251953 +0 25 6.0 0.97509766 0.3322754 0.3605957 0.44702148 0.5185547 +0 25 6.0 0.96777344 0.15527344 0.25732422 0.2199707 0.3408203 +0 25 6.0 0.7705078 0.22521973 0.2902832 0.28027344 0.34350586 +0 26 6.0 1.0 0.27294922 0.27392578 0.37402344 0.43017578 +0 26 6.0 1.0 0.50390625 0.29101562 0.6152344 0.4506836 +0 26 6.0 1.0 0.3515625 0.42333984 0.4892578 0.5961914 +0 26 6.0 1.0 0.6743164 0.47802734 0.8256836 0.6821289 +0 26 6.0 1.0 0.4321289 0.59765625 0.60498047 0.83203125 +0 26 6.0 0.9790039 0.3310547 0.36108398 0.44482422 0.51904297 +0 26 6.0 0.96972656 0.15161133 0.25708008 0.2175293 0.34057617 +0 26 6.0 0.7402344 0.21948242 0.28979492 0.27661133 0.34545898 +0 27 6.0 1.0 0.43237305 0.60498047 0.6069336 0.8354492 +0 27 6.0 1.0 0.67529297 0.48291016 0.8276367 0.6879883 +0 27 6.0 1.0 0.35302734 0.4260254 0.4921875 0.5996094 +0 27 6.0 1.0 0.50390625 0.29101562 0.61621094 0.45263672 +0 27 6.0 1.0 0.27294922 0.2746582 0.37304688 0.43041992 +0 27 6.0 0.97998047 0.15283203 0.25634766 0.2199707 0.34033203 +0 27 6.0 0.96240234 0.33251953 0.36083984 0.44335938 0.51708984 +0 27 6.0 0.7788086 0.22058105 0.29003906 0.27612305 0.34570312 +0 28 6.0 1.0 0.2734375 0.27563477 0.37597656 0.4309082 +0 28 6.0 1.0 0.5058594 0.29125977 0.61816406 0.4543457 +0 28 6.0 1.0 0.35498047 0.42773438 0.4951172 0.60058594 +0 28 6.0 1.0 0.67626953 0.48413086 0.83154297 0.69384766 +0 28 6.0 1.0 0.4350586 0.6074219 0.6069336 0.83984375 +0 28 6.0 0.98095703 0.15356445 0.25610352 0.22045898 0.34057617 +0 28 6.0 0.96240234 0.33032227 0.36328125 0.44311523 0.51708984 +0 28 6.0 0.83203125 0.21984863 0.29052734 0.27734375 0.3461914 +0 29 6.0 1.0 0.27294922 0.27661133 0.375 0.43139648 +0 29 6.0 1.0 0.5083008 0.29052734 0.62060547 0.4560547 +0 29 6.0 1.0 0.6748047 0.48632812 0.8339844 0.6972656 +0 29 6.0 1.0 0.43847656 0.609375 0.60839844 0.84375 +0 29 6.0 0.99902344 0.35839844 0.42797852 0.49804688 0.5996094 +0 29 6.0 0.9819336 0.33032227 0.36450195 0.44262695 0.51904297 +0 29 6.0 0.97509766 0.15441895 0.25463867 0.22009277 0.33862305 +0 29 6.0 0.8378906 0.21948242 0.29003906 0.27856445 0.34521484 +0 30 6.0 1.0 0.27490234 0.27685547 0.37548828 0.43164062 +0 30 6.0 1.0 0.51220703 0.28930664 0.62353516 0.45336914 +0 30 6.0 1.0 0.67871094 0.49414062 0.8378906 0.7001953 +0 30 6.0 1.0 0.43652344 0.61621094 0.60546875 0.85546875 +0 30 6.0 0.9980469 0.36035156 0.42797852 0.5 0.60058594 +0 30 6.0 0.9790039 0.33251953 0.3647461 0.4428711 0.5180664 +0 30 6.0 0.97509766 0.15454102 0.25439453 0.22045898 0.3383789 +0 30 6.0 0.87841797 0.21960449 0.29052734 0.27929688 0.34716797 +0 31 6.0 1.0 0.43676758 0.6225586 0.6064453 0.8588867 +0 31 6.0 1.0 0.6801758 0.49853516 0.8413086 0.7084961 +0 31 6.0 1.0 0.27563477 0.27734375 0.37475586 0.43164062 +0 31 6.0 0.99902344 0.3605957 0.43066406 0.50097656 0.60546875 +0 31 6.0 0.99902344 0.5083008 0.29174805 0.6225586 0.46069336 +0 31 6.0 0.98291016 0.33129883 0.36450195 0.4387207 0.5185547 +0 31 6.0 0.97998047 0.1550293 0.2548828 0.22192383 0.3383789 +0 31 6.0 0.8984375 0.22058105 0.29052734 0.27978516 0.34814453 +0 32 6.0 1.0 0.2770996 0.27783203 0.3762207 0.43066406 +0 32 6.0 1.0 0.6821289 0.5019531 0.8442383 0.7158203 +0 32 6.0 1.0 0.4375 0.6254883 0.609375 0.86279297 +0 32 6.0 0.99902344 0.50634766 0.2927246 0.61865234 0.4621582 +0 32 6.0 0.9980469 0.36132812 0.43115234 0.50146484 0.60791016 +0 32 6.0 0.9892578 0.33154297 0.3659668 0.43652344 0.51660156 +0 32 6.0 0.9790039 0.15515137 0.25439453 0.22302246 0.3383789 +0 32 6.0 0.9086914 0.22180176 0.29052734 0.28027344 0.34814453 +0 33 6.0 1.0 0.43823242 0.62841797 0.6118164 0.8676758 +0 33 6.0 1.0 0.27734375 0.2788086 0.3779297 0.4296875 +0 33 6.0 1.0 0.50341797 0.29541016 0.62158203 0.46191406 +0 33 6.0 1.0 0.68359375 0.5029297 0.8466797 0.71972656 +0 33 6.0 0.9970703 0.3305664 0.36767578 0.43652344 0.5214844 +0 33 6.0 0.9921875 0.35961914 0.42944336 0.5029297 0.60839844 +0 33 6.0 0.97314453 0.1550293 0.2541504 0.22216797 0.3371582 +0 33 6.0 0.91845703 0.22131348 0.28930664 0.28051758 0.34936523 +0 34 6.0 1.0 0.4387207 0.63183594 0.6142578 0.87109375 +0 34 6.0 1.0 0.6875 0.50878906 0.85058594 0.7216797 +0 34 6.0 1.0 0.50878906 0.29345703 0.6230469 0.4658203 +0 34 6.0 1.0 0.27783203 0.27905273 0.37890625 0.42895508 +0 34 6.0 0.9980469 0.33081055 0.36816406 0.4362793 0.51953125 +0 34 6.0 0.9921875 0.3618164 0.4362793 0.50878906 0.62646484 +0 34 6.0 0.9760742 0.15454102 0.25463867 0.22167969 0.3400879 +0 34 6.0 0.91259766 0.22155762 0.28857422 0.28100586 0.35009766 +0 35 6.0 1.0 0.44189453 0.6352539 0.61376953 0.87646484 +0 35 6.0 1.0 0.6870117 0.5097656 0.8461914 0.71777344 +0 35 6.0 1.0 0.5126953 0.2932129 0.62402344 0.4699707 +0 35 6.0 1.0 0.2775879 0.28222656 0.3815918 0.43164062 +0 35 6.0 0.9980469 0.33154297 0.36914062 0.44091797 0.51416016 +0 35 6.0 0.99609375 0.3630371 0.4423828 0.51416016 0.63183594 +0 35 6.0 0.97998047 0.15588379 0.25195312 0.2220459 0.33740234 +0 35 6.0 0.89990234 0.22253418 0.28588867 0.28173828 0.34838867 +0 35 6.0 0.7006836 0.34179688 0.40771484 0.47265625 0.5786133 +0 36 6.0 1.0 0.4440918 0.63720703 0.61621094 0.8833008 +0 36 6.0 1.0 0.6875 0.5131836 0.84765625 0.7241211 +0 36 6.0 1.0 0.5131836 0.2939453 0.62646484 0.47216797 +0 36 6.0 1.0 0.27954102 0.28295898 0.37963867 0.43188477 +0 36 6.0 0.99902344 0.33251953 0.3708496 0.44482422 0.5214844 +0 36 6.0 0.9970703 0.3623047 0.44580078 0.51464844 0.6333008 +0 36 6.0 0.9760742 0.15673828 0.25146484 0.22216797 0.33691406 +0 36 6.0 0.9223633 0.22229004 0.2849121 0.28320312 0.34887695 +0 37 6.0 1.0 0.27954102 0.28515625 0.38061523 0.43554688 +0 37 6.0 1.0 0.50878906 0.29663086 0.6279297 0.47045898 +0 37 6.0 1.0 0.6904297 0.51464844 0.8535156 0.73828125 +0 37 6.0 1.0 0.4453125 0.640625 0.6171875 0.8876953 +0 37 6.0 0.99902344 0.36401367 0.44873047 0.51416016 0.63623047 +0 37 6.0 0.9980469 0.33276367 0.3720703 0.44360352 0.5234375 +0 37 6.0 0.97314453 0.15795898 0.25317383 0.22192383 0.33911133 +0 37 6.0 0.9194336 0.22253418 0.2836914 0.28393555 0.34960938 +0 37 6.0 0.6152344 0.38549805 0.2993164 0.61083984 0.4794922 +0 38 6.0 1.0 0.27978516 0.28564453 0.38085938 0.43701172 +0 38 6.0 1.0 0.515625 0.29516602 0.63183594 0.47338867 +0 38 6.0 1.0 0.6928711 0.5161133 0.85498047 0.7416992 +0 38 6.0 1.0 0.44506836 0.6479492 0.61572266 0.8989258 +0 38 6.0 0.99902344 0.3334961 0.37353516 0.44921875 0.53222656 +0 38 6.0 0.99902344 0.36572266 0.4506836 0.5136719 0.6381836 +0 38 6.0 0.9790039 0.1583252 0.2524414 0.22253418 0.33984375 +0 38 6.0 0.9111328 0.22387695 0.28320312 0.28344727 0.34960938 +0 39 6.0 1.0 0.44628906 0.65234375 0.6201172 0.90234375 +0 39 6.0 1.0 0.69873047 0.515625 0.8569336 0.7373047 +0 39 6.0 1.0 0.51416016 0.296875 0.63427734 0.47314453 +0 39 6.0 1.0 0.28027344 0.2878418 0.38134766 0.43823242 +0 39 6.0 0.99902344 0.36816406 0.45483398 0.5136719 0.63916016 +0 39 6.0 0.99902344 0.33398438 0.37573242 0.4482422 0.53515625 +0 39 6.0 0.97998047 0.15881348 0.25195312 0.22277832 0.3388672 +0 39 6.0 0.87060547 0.22460938 0.28271484 0.28320312 0.3491211 +0 40 6.0 1.0 0.44604492 0.6557617 0.6230469 0.9057617 +0 40 6.0 1.0 0.69970703 0.5205078 0.8588867 0.74121094 +0 40 6.0 1.0 0.37182617 0.45703125 0.5161133 0.6386719 +0 40 6.0 1.0 0.515625 0.2980957 0.6357422 0.4753418 +0 40 6.0 1.0 0.28076172 0.28808594 0.38378906 0.44384766 +0 40 6.0 0.99902344 0.33496094 0.37597656 0.44726562 0.5292969 +0 40 6.0 0.97802734 0.15991211 0.25170898 0.22314453 0.33813477 +0 40 6.0 0.8803711 0.22424316 0.2824707 0.28344727 0.34936523 +0 40 6.0 0.54296875 0.30859375 0.33740234 0.41992188 0.49902344 +0 41 6.0 1.0 0.28100586 0.28955078 0.38842773 0.4399414 +0 41 6.0 1.0 0.5175781 0.30151367 0.6386719 0.47583008 +0 41 6.0 1.0 0.7026367 0.52490234 0.8647461 0.74853516 +0 41 6.0 1.0 0.4489746 0.66015625 0.62597656 0.91308594 +0 41 6.0 0.99902344 0.33398438 0.37963867 0.4482422 0.5361328 +0 41 6.0 0.99902344 0.37353516 0.45996094 0.51660156 0.6386719 +0 41 6.0 0.9658203 0.1616211 0.25195312 0.2241211 0.3359375 +0 41 6.0 0.8569336 0.22521973 0.28271484 0.2841797 0.34765625 +0 41 6.0 0.6152344 0.30737305 0.3359375 0.41967773 0.4970703 +0 42 6.0 1.0 0.28173828 0.28955078 0.390625 0.44091797 +0 42 6.0 1.0 0.5205078 0.3046875 0.640625 0.4765625 +0 42 6.0 1.0 0.33642578 0.37841797 0.4506836 0.53759766 +0 42 6.0 1.0 0.7011719 0.5292969 0.86035156 0.7441406 +0 42 6.0 1.0 0.44995117 0.6635742 0.62939453 0.91845703 +0 42 6.0 0.99902344 0.3762207 0.4609375 0.5180664 0.6435547 +0 42 6.0 0.9589844 0.1628418 0.25195312 0.22436523 0.33642578 +0 42 6.0 0.8305664 0.22729492 0.2824707 0.2849121 0.34643555 +0 43 6.0 1.0 0.45117188 0.66796875 0.63378906 0.91796875 +0 43 6.0 1.0 0.703125 0.5317383 0.86328125 0.7475586 +0 43 6.0 1.0 0.5131836 0.30615234 0.63720703 0.48046875 +0 43 6.0 1.0 0.2824707 0.2915039 0.39282227 0.44384766 +0 43 6.0 0.99902344 0.37695312 0.46069336 0.52001953 0.6435547 +0 43 6.0 0.99902344 0.33862305 0.3798828 0.45141602 0.5390625 +0 43 6.0 0.96875 0.16345215 0.2512207 0.22717285 0.33666992 +0 43 6.0 0.8071289 0.22839355 0.28149414 0.2854004 0.34643555 +0 43 6.0 0.5019531 0.30493164 0.3305664 0.4177246 0.49023438 +0 44 6.0 1.0 0.28344727 0.29101562 0.39526367 0.44433594 +0 44 6.0 1.0 0.515625 0.30688477 0.640625 0.48364258 +0 44 6.0 1.0 0.703125 0.5341797 0.8652344 0.7529297 +0 44 6.0 1.0 0.45288086 0.671875 0.6333008 0.9248047 +0 44 6.0 0.99902344 0.3395996 0.3798828 0.45336914 0.5410156 +0 44 6.0 0.99902344 0.37817383 0.4584961 0.52685547 0.65478516 +0 44 6.0 0.9716797 0.16357422 0.25048828 0.2277832 0.3359375 +0 44 6.0 0.78466797 0.22875977 0.28076172 0.28637695 0.34521484 +0 45 6.0 1.0 0.2849121 0.29125977 0.39672852 0.44702148 +0 45 6.0 1.0 0.52001953 0.3076172 0.64404297 0.48535156 +0 45 6.0 1.0 0.7060547 0.53759766 0.8701172 0.76123047 +0 45 6.0 1.0 0.45214844 0.67578125 0.6357422 0.9296875 +0 45 6.0 0.99902344 0.34106445 0.38232422 0.45532227 0.5385742 +0 45 6.0 0.99902344 0.3774414 0.46435547 0.5253906 0.6508789 +0 45 6.0 0.9604492 0.16430664 0.24926758 0.22802734 0.33666992 +0 45 6.0 0.7636719 0.23095703 0.28076172 0.28759766 0.34326172 +0 46 6.0 1.0 0.2866211 0.29248047 0.3984375 0.44970703 +0 46 6.0 1.0 0.52001953 0.3083496 0.64404297 0.4855957 +0 46 6.0 1.0 0.7089844 0.54296875 0.8730469 0.765625 +0 46 6.0 1.0 0.45092773 0.6816406 0.63623047 0.93847656 +0 46 6.0 0.99902344 0.34057617 0.38378906 0.45532227 0.5439453 +0 46 6.0 0.99902344 0.38012695 0.46240234 0.53125 0.65966797 +0 46 6.0 0.9614258 0.16491699 0.25024414 0.22961426 0.33569336 +0 46 6.0 0.81152344 0.23339844 0.28173828 0.2890625 0.34375 +0 47 6.0 1.0 0.45117188 0.6875 0.6386719 0.94433594 +0 47 6.0 1.0 0.7109375 0.54785156 0.8769531 0.7705078 +0 47 6.0 1.0 0.34399414 0.38671875 0.45629883 0.54589844 +0 47 6.0 1.0 0.5239258 0.31054688 0.6459961 0.48779297 +0 47 6.0 0.99902344 0.38183594 0.46533203 0.53271484 0.66259766 +0 47 6.0 0.99902344 0.2878418 0.29345703 0.39819336 0.44970703 +0 47 6.0 0.9526367 0.16357422 0.24914551 0.23071289 0.33642578 +0 47 6.0 0.78808594 0.23461914 0.27978516 0.28979492 0.34472656 +0 48 6.0 1.0 0.52783203 0.31201172 0.6489258 0.48828125 +0 48 6.0 1.0 0.7109375 0.5488281 0.8808594 0.77441406 +0 48 6.0 1.0 0.45825195 0.6933594 0.63671875 0.9423828 +0 48 6.0 0.99902344 0.28881836 0.29467773 0.39916992 0.45336914 +0 48 6.0 0.99902344 0.34399414 0.3864746 0.4567871 0.54833984 +0 48 6.0 0.99902344 0.38452148 0.46923828 0.53466797 0.6635742 +0 48 6.0 0.95947266 0.16357422 0.24914551 0.23217773 0.33618164 +0 48 6.0 0.7973633 0.234375 0.27978516 0.29101562 0.34375 +0 49 6.0 1.0 0.5292969 0.31298828 0.65234375 0.49072266 +0 49 6.0 1.0 0.7128906 0.54833984 0.88183594 0.78271484 +0 49 6.0 1.0 0.46044922 0.6982422 0.6381836 0.95410156 +0 49 6.0 0.99902344 0.34326172 0.3857422 0.45996094 0.5493164 +0 49 6.0 0.99902344 0.3857422 0.47070312 0.5366211 0.6669922 +0 49 6.0 0.9980469 0.29052734 0.29492188 0.39990234 0.45214844 +0 49 6.0 0.93359375 0.16455078 0.24865723 0.23095703 0.3359375 +0 49 6.0 0.8457031 0.23547363 0.2788086 0.2919922 0.34423828 +0 50 6.0 1.0 0.53271484 0.31445312 0.6557617 0.49414062 +0 50 6.0 1.0 0.7167969 0.5546875 0.88183594 0.7841797 +0 50 6.0 1.0 0.46142578 0.69921875 0.6411133 0.96191406 +0 50 6.0 0.99902344 0.3876953 0.47583008 0.53759766 0.671875 +0 50 6.0 0.9980469 0.2915039 0.29614258 0.40039062 0.45581055 +0 50 6.0 0.9980469 0.34521484 0.3869629 0.4580078 0.5522461 +0 50 6.0 0.91748047 0.16577148 0.24975586 0.23071289 0.33569336 +0 50 6.0 0.81152344 0.2368164 0.27807617 0.29296875 0.34399414 +0 51 6.0 1.0 0.53564453 0.31445312 0.6586914 0.4946289 +0 51 6.0 1.0 0.7104492 0.5600586 0.8803711 0.78564453 +0 51 6.0 1.0 0.46191406 0.70166016 0.6435547 0.96240234 +0 51 6.0 0.99902344 0.38354492 0.48095703 0.5385742 0.68408203 +0 51 6.0 0.9980469 0.29467773 0.29907227 0.40112305 0.45581055 +0 51 6.0 0.99609375 0.34985352 0.3876953 0.46655273 0.55566406 +0 51 6.0 0.9526367 0.16503906 0.2487793 0.23120117 0.33618164 +0 51 6.0 0.87060547 0.23474121 0.27563477 0.2915039 0.35131836 +0 52 6.0 1.0 0.53808594 0.3161621 0.6621094 0.49780273 +0 52 6.0 1.0 0.70996094 0.5625 0.88378906 0.79296875 +0 52 6.0 1.0 0.46264648 0.7109375 0.64404297 0.9716797 +0 52 6.0 0.99902344 0.28393555 0.30371094 0.39624023 0.46240234 +0 52 6.0 0.99902344 0.34545898 0.3947754 0.46411133 0.55566406 +0 52 6.0 0.9951172 0.3935547 0.48364258 0.5395508 0.6767578 +0 52 6.0 0.9614258 0.16516113 0.24914551 0.23156738 0.33642578 +0 52 6.0 0.88427734 0.234375 0.27539062 0.29248047 0.35058594 +0 53 6.0 1.0 0.54003906 0.3173828 0.6640625 0.49853516 +0 53 6.0 1.0 0.7104492 0.56591797 0.88720703 0.7973633 +0 53 6.0 1.0 0.46484375 0.71728516 0.6464844 0.9770508 +0 53 6.0 0.99902344 0.2854004 0.30517578 0.39672852 0.46484375 +0 53 6.0 0.9980469 0.34570312 0.39819336 0.46435547 0.5605469 +0 53 6.0 0.9970703 0.39648438 0.4794922 0.53515625 0.6777344 +0 53 6.0 0.9453125 0.16638184 0.24865723 0.23254395 0.33642578 +0 53 6.0 0.8588867 0.23620605 0.27392578 0.29296875 0.35107422 +0 54 6.0 1.0 0.54003906 0.3178711 0.66503906 0.5004883 +0 54 6.0 1.0 0.71972656 0.56933594 0.8886719 0.80371094 +0 54 6.0 1.0 0.46606445 0.72021484 0.64746094 0.98095703 +0 54 6.0 0.99902344 0.28564453 0.30541992 0.39697266 0.46606445 +0 54 6.0 0.99902344 0.34692383 0.40014648 0.4650879 0.56152344 +0 54 6.0 0.9951172 0.39648438 0.48046875 0.53466797 0.68066406 +0 54 6.0 0.95947266 0.16674805 0.24951172 0.23388672 0.3359375 +0 54 6.0 0.88671875 0.2364502 0.2734375 0.29418945 0.35058594 +0 55 6.0 1.0 0.2854004 0.3059082 0.3972168 0.46948242 +0 55 6.0 1.0 0.5371094 0.31762695 0.65625 0.50390625 +0 55 6.0 1.0 0.72314453 0.5722656 0.8901367 0.8076172 +0 55 6.0 1.0 0.46704102 0.7265625 0.6513672 0.98535156 +0 55 6.0 0.9980469 0.34765625 0.40063477 0.4658203 0.56396484 +0 55 6.0 0.99609375 0.39013672 0.48779297 0.54345703 0.6948242 +0 55 6.0 0.9741211 0.16699219 0.24841309 0.23339844 0.33666992 +0 55 6.0 0.91259766 0.2364502 0.27294922 0.2944336 0.3491211 +0 56 6.0 1.0 0.28637695 0.3076172 0.39916992 0.47265625 +0 56 6.0 1.0 0.5395508 0.31713867 0.65771484 0.5053711 +0 56 6.0 1.0 0.7260742 0.57421875 0.89404297 0.8105469 +0 56 6.0 1.0 0.46826172 0.73046875 0.65478516 0.98828125 +0 56 6.0 0.99902344 0.34838867 0.40234375 0.4650879 0.56640625 +0 56 6.0 0.99609375 0.3930664 0.49316406 0.55371094 0.703125 +0 56 6.0 0.9760742 0.1673584 0.24816895 0.23449707 0.33740234 +0 56 6.0 0.91748047 0.2368164 0.27270508 0.29541016 0.34887695 +0 57 6.0 1.0 0.46777344 0.73291016 0.65722656 0.98779297 +0 57 6.0 1.0 0.72802734 0.57666016 0.8959961 0.81591797 +0 57 6.0 1.0 0.5419922 0.32006836 0.66015625 0.50683594 +0 57 6.0 1.0 0.28710938 0.30810547 0.39990234 0.47216797 +0 57 6.0 0.9980469 0.34838867 0.40112305 0.46557617 0.5698242 +0 57 6.0 0.9970703 0.39648438 0.4946289 0.5566406 0.7055664 +0 57 6.0 0.96777344 0.16882324 0.2479248 0.23498535 0.33789062 +0 57 6.0 0.87597656 0.23840332 0.27148438 0.296875 0.3486328 +0 58 6.0 1.0 0.46850586 0.7421875 0.6635742 0.98828125 +0 58 6.0 1.0 0.73095703 0.5830078 0.8979492 0.8203125 +0 58 6.0 1.0 0.54248047 0.32128906 0.66259766 0.5078125 +0 58 6.0 1.0 0.28857422 0.30810547 0.40283203 0.4741211 +0 58 6.0 0.99902344 0.34692383 0.40039062 0.47338867 0.5786133 +0 58 6.0 0.9970703 0.39770508 0.49487305 0.5576172 0.7089844 +0 58 6.0 0.9604492 0.16967773 0.24853516 0.23535156 0.33740234 +0 58 6.0 0.8911133 0.23132324 0.2697754 0.29541016 0.35229492 +0 59 6.0 1.0 0.29052734 0.3088379 0.4038086 0.47436523 +0 59 6.0 1.0 0.5439453 0.3227539 0.6640625 0.5083008 +0 59 6.0 1.0 0.34887695 0.40234375 0.4729004 0.57714844 +0 59 6.0 1.0 0.7319336 0.5883789 0.9038086 0.8227539 +0 59 6.0 1.0 0.46728516 0.7495117 0.65966797 0.99658203 +0 59 6.0 0.99902344 0.3972168 0.49804688 0.55810547 0.7138672 +0 59 6.0 0.97509766 0.1685791 0.24804688 0.23693848 0.33740234 +0 59 6.0 0.91748047 0.23242188 0.2697754 0.296875 0.35083008 +0 60 6.0 1.0 0.29077148 0.31054688 0.4050293 0.47753906 +0 60 6.0 1.0 0.5449219 0.32421875 0.66503906 0.5078125 +0 60 6.0 1.0 0.34838867 0.40527344 0.47192383 0.5810547 +0 60 6.0 1.0 0.73095703 0.59228516 0.90283203 0.82958984 +0 60 6.0 1.0 0.4675293 0.7529297 0.66308594 0.99902344 +0 60 6.0 0.99902344 0.39990234 0.49902344 0.55908203 0.71777344 +0 60 6.0 0.97265625 0.16870117 0.24682617 0.23779297 0.33764648 +0 60 6.0 0.9350586 0.23266602 0.2697754 0.29858398 0.35083008 +0 61 6.0 1.0 0.47314453 0.7583008 0.66845703 1.0 +0 61 6.0 1.0 0.7324219 0.59716797 0.90625 0.83447266 +0 61 6.0 1.0 0.34814453 0.40844727 0.46875 0.5839844 +0 61 6.0 1.0 0.5439453 0.33129883 0.6689453 0.5073242 +0 61 6.0 1.0 0.2915039 0.3125 0.40478516 0.47998047 +0 61 6.0 0.9980469 0.39868164 0.50341797 0.55908203 0.7211914 +0 61 6.0 0.9633789 0.16918945 0.24707031 0.23876953 0.33740234 +0 61 6.0 0.9536133 0.23352051 0.27001953 0.30029297 0.35058594 +0 62 6.0 1.0 0.29248047 0.31323242 0.40527344 0.4831543 +0 62 6.0 1.0 0.5439453 0.3317871 0.67089844 0.50878906 +0 62 6.0 1.0 0.34838867 0.41015625 0.46801758 0.5878906 +0 62 6.0 1.0 0.7338867 0.60058594 0.9086914 0.8388672 +0 62 6.0 1.0 0.47192383 0.76171875 0.6689453 1.0039062 +0 62 6.0 0.99902344 0.39868164 0.5073242 0.56152344 0.72509766 +0 62 6.0 0.96777344 0.23486328 0.27026367 0.30126953 0.34936523 +0 62 6.0 0.9604492 0.16760254 0.24609375 0.23815918 0.33544922 +0 63 6.0 1.0 0.47631836 0.7636719 0.6699219 1.0009766 +0 63 6.0 1.0 0.7348633 0.6035156 0.91259766 0.84375 +0 63 6.0 1.0 0.3491211 0.41259766 0.4711914 0.59228516 +0 63 6.0 1.0 0.5439453 0.33154297 0.6689453 0.5180664 +0 63 6.0 1.0 0.29345703 0.31420898 0.40625 0.48364258 +0 63 6.0 0.9980469 0.39916992 0.5073242 0.5625 0.72998047 +0 63 6.0 0.9790039 0.23571777 0.27026367 0.30200195 0.34887695 +0 63 6.0 0.96875 0.16796875 0.24536133 0.23901367 0.33520508 +0 64 6.0 1.0 0.2939453 0.3161621 0.40478516 0.4855957 +0 64 6.0 1.0 0.5449219 0.33422852 0.67089844 0.5205078 +0 64 6.0 1.0 0.35351562 0.41064453 0.47607422 0.59716797 +0 64 6.0 1.0 0.7348633 0.6040039 0.91748047 0.8461914 +0 64 6.0 1.0 0.48120117 0.7729492 0.67285156 0.99853516 +0 64 6.0 0.99609375 0.40185547 0.5083008 0.56347656 0.73095703 +0 64 6.0 0.9838867 0.23632812 0.26879883 0.30273438 0.34838867 +0 64 6.0 0.9770508 0.16748047 0.24645996 0.23876953 0.33496094 +0 65 6.0 1.0 0.4807129 0.77783203 0.6767578 1.0019531 +0 65 6.0 1.0 0.74365234 0.60546875 0.9194336 0.85058594 +0 65 6.0 1.0 0.35302734 0.41137695 0.47753906 0.59814453 +0 65 6.0 1.0 0.54785156 0.33569336 0.6738281 0.5205078 +0 65 6.0 1.0 0.2927246 0.31225586 0.4025879 0.49047852 +0 65 6.0 0.9970703 0.4013672 0.50878906 0.56640625 0.734375 +0 65 6.0 0.9863281 0.23730469 0.26782227 0.30371094 0.34838867 +0 65 6.0 0.9760742 0.16723633 0.2442627 0.2397461 0.33422852 +0 66 6.0 1.0 0.48535156 0.78222656 0.67578125 0.9980469 +0 66 6.0 1.0 0.7475586 0.6098633 0.92333984 0.8569336 +0 66 6.0 1.0 0.35424805 0.41503906 0.47875977 0.60058594 +0 66 6.0 1.0 0.5488281 0.3347168 0.6748047 0.52246094 +0 66 6.0 1.0 0.2944336 0.31274414 0.40429688 0.49389648 +0 66 6.0 0.99902344 0.4033203 0.5214844 0.5708008 0.7441406 +0 66 6.0 0.9863281 0.23803711 0.26757812 0.30444336 0.3486328 +0 66 6.0 0.96777344 0.16796875 0.24365234 0.24023438 0.33398438 +0 67 6.0 1.0 0.4873047 0.7890625 0.6796875 0.99902344 +0 67 6.0 1.0 0.7495117 0.61572266 0.92529297 0.8618164 +0 67 6.0 1.0 0.35498047 0.4169922 0.47998047 0.6035156 +0 67 6.0 1.0 0.55126953 0.33520508 0.67626953 0.5234375 +0 67 6.0 1.0 0.2939453 0.3137207 0.40722656 0.4934082 +0 67 6.0 0.99902344 0.40454102 0.5239258 0.57128906 0.74853516 +0 67 6.0 0.9863281 0.23901367 0.26660156 0.30444336 0.3491211 +0 67 6.0 0.97265625 0.16894531 0.24414062 0.24023438 0.33398438 +0 68 6.0 1.0 0.40625 0.52734375 0.57128906 0.75390625 +0 68 6.0 1.0 0.4873047 0.7915039 0.68066406 0.9995117 +0 68 6.0 1.0 0.29516602 0.31640625 0.40893555 0.49365234 +0 68 6.0 1.0 0.5546875 0.3383789 0.67871094 0.52441406 +0 68 6.0 1.0 0.35058594 0.4230957 0.48242188 0.60839844 +0 68 6.0 1.0 0.7470703 0.62402344 0.9238281 0.87109375 +0 68 6.0 0.984375 0.2401123 0.265625 0.30444336 0.35058594 +0 68 6.0 0.9760742 0.16955566 0.24316406 0.2401123 0.33496094 +0 69 6.0 1.0 0.29785156 0.31835938 0.4116211 0.49023438 +0 69 6.0 1.0 0.55810547 0.33984375 0.6821289 0.52490234 +0 69 6.0 1.0 0.35131836 0.42651367 0.48364258 0.6113281 +0 69 6.0 1.0 0.40673828 0.5288086 0.5732422 0.75634766 +0 69 6.0 1.0 0.75 0.6269531 0.9248047 0.87402344 +0 69 6.0 1.0 0.4868164 0.79785156 0.68115234 1.0048828 +0 69 6.0 0.9873047 0.2401123 0.26611328 0.30493164 0.35107422 +0 69 6.0 0.97314453 0.17028809 0.24169922 0.24035645 0.33447266 +0 70 6.0 1.0 0.4873047 0.8022461 0.67871094 1.0039062 +0 70 6.0 1.0 0.75390625 0.6298828 0.92578125 0.8779297 +0 70 6.0 1.0 0.40771484 0.53125 0.57470703 0.75878906 +0 70 6.0 1.0 0.35229492 0.42919922 0.48217773 0.6147461 +0 70 6.0 1.0 0.5605469 0.34155273 0.68359375 0.52783203 +0 70 6.0 1.0 0.29833984 0.31982422 0.4111328 0.49316406 +0 70 6.0 0.98291016 0.23986816 0.26586914 0.3046875 0.35131836 +0 70 6.0 0.9667969 0.17089844 0.24194336 0.24121094 0.33520508 +0 71 6.0 1.0 0.4934082 0.8071289 0.6826172 1.0009766 +0 71 6.0 1.0 0.7573242 0.6303711 0.9321289 0.8803711 +0 71 6.0 1.0 0.35766602 0.42749023 0.48510742 0.62353516 +0 71 6.0 1.0 0.5625 0.34179688 0.6855469 0.5292969 +0 71 6.0 1.0 0.30371094 0.32495117 0.4189453 0.48754883 +0 71 6.0 0.99902344 0.40722656 0.5390625 0.57714844 0.76171875 +0 71 6.0 0.97998047 0.2409668 0.26513672 0.30493164 0.35058594 +0 71 6.0 0.9614258 0.171875 0.24194336 0.24121094 0.33569336 +0 72 6.0 1.0 0.35839844 0.4309082 0.4873047 0.62060547 +0 72 6.0 1.0 0.49609375 0.8144531 0.68652344 0.99902344 +0 72 6.0 1.0 0.7573242 0.63183594 0.9370117 0.8847656 +0 72 6.0 1.0 0.5654297 0.34204102 0.68847656 0.53125 +0 72 6.0 1.0 0.30639648 0.32739258 0.42114258 0.49389648 +0 72 6.0 0.99902344 0.40649414 0.54248047 0.5751953 0.76904297 +0 72 6.0 0.984375 0.24169922 0.26586914 0.30615234 0.3503418 +0 72 6.0 0.96240234 0.17260742 0.24230957 0.2421875 0.3359375 +0 73 6.0 1.0 0.30786133 0.32788086 0.42358398 0.4934082 +0 73 6.0 1.0 0.5678711 0.34277344 0.69189453 0.5332031 +0 73 6.0 1.0 0.35961914 0.43481445 0.4880371 0.6220703 +0 73 6.0 1.0 0.41357422 0.55371094 0.58740234 0.77441406 +0 73 6.0 1.0 0.7597656 0.63671875 0.9433594 0.8935547 +0 73 6.0 1.0 0.4970703 0.8178711 0.6875 0.9975586 +0 73 6.0 0.97802734 0.24328613 0.265625 0.30615234 0.35058594 +0 73 6.0 0.9526367 0.17407227 0.24157715 0.24267578 0.3359375 +0 74 6.0 1.0 0.30908203 0.32861328 0.42382812 0.49414062 +0 74 6.0 1.0 0.5683594 0.3466797 0.6923828 0.5341797 +0 74 6.0 1.0 0.36132812 0.43359375 0.48779297 0.6191406 +0 74 6.0 1.0 0.40722656 0.55078125 0.57910156 0.7792969 +0 74 6.0 1.0 0.76123047 0.64208984 0.9477539 0.8979492 +0 74 6.0 0.9970703 0.4921875 0.8300781 0.69433594 0.99902344 +0 74 6.0 0.96972656 0.24475098 0.26586914 0.30615234 0.3503418 +0 74 6.0 0.9536133 0.17541504 0.2409668 0.24353027 0.33569336 +0 75 6.0 1.0 0.31030273 0.32910156 0.42797852 0.4951172 +0 75 6.0 1.0 0.56884766 0.34765625 0.6948242 0.5366211 +0 75 6.0 1.0 0.36157227 0.4399414 0.4880371 0.62060547 +0 75 6.0 1.0 0.4074707 0.55371094 0.57910156 0.7832031 +0 75 6.0 1.0 0.7631836 0.64941406 0.95166016 0.90234375 +0 75 6.0 0.9970703 0.4909668 0.8388672 0.6977539 1.0 +0 75 6.0 0.9819336 0.2454834 0.26611328 0.3071289 0.34814453 +0 75 6.0 0.9526367 0.17602539 0.24072266 0.24511719 0.33691406 +0 76 6.0 1.0 0.3100586 0.33007812 0.4267578 0.4946289 +0 76 6.0 1.0 0.56640625 0.34716797 0.69140625 0.5395508 +0 76 6.0 1.0 0.36132812 0.44335938 0.48779297 0.6220703 +0 76 6.0 1.0 0.40771484 0.5551758 0.5786133 0.78759766 +0 76 6.0 1.0 0.76171875 0.6542969 0.9472656 0.90625 +0 76 6.0 0.9980469 0.50439453 0.83740234 0.6948242 0.9926758 +0 76 6.0 0.97802734 0.2467041 0.26635742 0.30810547 0.3479004 +0 76 6.0 0.93847656 0.17651367 0.24121094 0.24560547 0.33691406 +0 77 6.0 1.0 0.31152344 0.33032227 0.4296875 0.49536133 +0 77 6.0 1.0 0.5683594 0.3486328 0.6933594 0.5410156 +0 77 6.0 1.0 0.36376953 0.4411621 0.4921875 0.63671875 +0 77 6.0 1.0 0.41015625 0.5566406 0.578125 0.7890625 +0 77 6.0 1.0 0.76220703 0.6557617 0.9526367 0.9116211 +0 77 6.0 0.99609375 0.5058594 0.8417969 0.69628906 0.9921875 +0 77 6.0 0.96875 0.24816895 0.26635742 0.30859375 0.3479004 +0 77 6.0 0.95166016 0.17700195 0.23999023 0.24658203 0.33618164 +0 78 6.0 1.0 0.31347656 0.33422852 0.4321289 0.4958496 +0 78 6.0 1.0 0.56884766 0.34960938 0.6948242 0.5449219 +0 78 6.0 1.0 0.3647461 0.44335938 0.4946289 0.6386719 +0 78 6.0 1.0 0.41503906 0.56103516 0.5888672 0.79541016 +0 78 6.0 1.0 0.77001953 0.6611328 0.9604492 0.9160156 +0 78 6.0 0.9951172 0.5048828 0.8457031 0.6923828 0.99121094 +0 78 6.0 0.9790039 0.24902344 0.26635742 0.3095703 0.34692383 +0 78 6.0 0.9589844 0.17834473 0.24023438 0.24719238 0.3359375 +0 79 6.0 1.0 0.31323242 0.3347168 0.43579102 0.5029297 +0 79 6.0 1.0 0.5698242 0.35083008 0.6977539 0.5488281 +0 79 6.0 1.0 0.36816406 0.44628906 0.49658203 0.6386719 +0 79 6.0 1.0 0.4128418 0.5649414 0.5908203 0.80126953 +0 79 6.0 1.0 0.77001953 0.6645508 0.9584961 0.9223633 +0 79 6.0 0.99121094 0.50439453 0.85253906 0.6977539 0.9970703 +0 79 6.0 0.97314453 0.25024414 0.26586914 0.30981445 0.34692383 +0 79 6.0 0.94384766 0.17871094 0.23950195 0.2475586 0.33618164 +0 80 6.0 1.0 0.3154297 0.3334961 0.43896484 0.5048828 +0 80 6.0 1.0 0.5708008 0.35375977 0.7006836 0.5522461 +0 80 6.0 1.0 0.36816406 0.45141602 0.49804688 0.64160156 +0 80 6.0 1.0 0.41259766 0.5703125 0.5913086 0.8046875 +0 80 6.0 1.0 0.7709961 0.6669922 0.95947266 0.92871094 +0 80 6.0 0.9970703 0.5053711 0.8598633 0.69970703 0.99658203 +0 80 6.0 0.9589844 0.25146484 0.26611328 0.3100586 0.34716797 +0 80 6.0 0.9453125 0.17834473 0.23864746 0.24768066 0.33569336 +0 81 6.0 1.0 0.31445312 0.33374023 0.4404297 0.5107422 +0 81 6.0 1.0 0.5708008 0.3557129 0.69970703 0.55371094 +0 81 6.0 1.0 0.3720703 0.45214844 0.50097656 0.6435547 +0 81 6.0 1.0 0.41308594 0.57177734 0.59472656 0.80810547 +0 81 6.0 1.0 0.77001953 0.67089844 0.9682617 0.94140625 +0 81 6.0 0.99609375 0.50683594 0.8666992 0.6982422 0.9946289 +0 81 6.0 0.9550781 0.2524414 0.26464844 0.3095703 0.3461914 +0 81 6.0 0.9536133 0.1784668 0.23840332 0.24804688 0.3359375 +0 82 6.0 1.0 0.5727539 0.35742188 0.7006836 0.5546875 +0 82 6.0 1.0 0.37231445 0.45263672 0.50146484 0.64697266 +0 82 6.0 1.0 0.41601562 0.57373047 0.5957031 0.8120117 +0 82 6.0 1.0 0.7729492 0.67578125 0.9692383 0.94433594 +0 82 6.0 0.99902344 0.3161621 0.33813477 0.44067383 0.51171875 +0 82 6.0 0.99609375 0.5097656 0.8730469 0.7001953 0.9941406 +0 82 6.0 0.9550781 0.1796875 0.23791504 0.24926758 0.33642578 +0 82 6.0 0.9453125 0.25341797 0.26367188 0.31054688 0.3461914 +0 83 6.0 1.0 0.5756836 0.36083984 0.70458984 0.55615234 +0 83 6.0 1.0 0.4177246 0.57714844 0.59472656 0.81640625 +0 83 6.0 1.0 0.77685547 0.68603516 0.96728516 0.94091797 +0 83 6.0 0.99902344 0.3154297 0.33764648 0.44580078 0.5161133 +0 83 6.0 0.99902344 0.37304688 0.45458984 0.5029297 0.6508789 +0 83 6.0 0.9941406 0.515625 0.8823242 0.7011719 0.99560547 +0 83 6.0 0.96240234 0.17956543 0.23864746 0.25 0.33544922 +0 83 6.0 0.91748047 0.25341797 0.26367188 0.31054688 0.3461914 +0 84 6.0 1.0 0.7792969 0.6875 0.97265625 0.9482422 +0 84 6.0 1.0 0.42016602 0.58154297 0.59472656 0.8178711 +0 84 6.0 1.0 0.5761719 0.36328125 0.70703125 0.5571289 +0 84 6.0 0.99902344 0.31591797 0.33984375 0.4477539 0.52001953 +0 84 6.0 0.9980469 0.37329102 0.4543457 0.5019531 0.6513672 +0 84 6.0 0.9892578 0.5209961 0.88623047 0.6977539 0.99560547 +0 84 6.0 0.9716797 0.17993164 0.23925781 0.25146484 0.33496094 +0 84 6.0 0.9160156 0.2536621 0.26391602 0.3112793 0.34643555 +0 85 6.0 1.0 0.57714844 0.36401367 0.70996094 0.5595703 +0 85 6.0 1.0 0.41796875 0.5830078 0.5908203 0.8222656 +0 85 6.0 1.0 0.78125 0.6904297 0.9736328 0.9560547 +0 85 6.0 0.9970703 0.31713867 0.3408203 0.44799805 0.52001953 +0 85 6.0 0.9970703 0.37451172 0.46289062 0.49853516 0.6640625 +0 85 6.0 0.96875 0.1809082 0.2397461 0.2512207 0.33496094 +0 85 6.0 0.95703125 0.52197266 0.88964844 0.6928711 0.9951172 +0 85 6.0 0.9291992 0.25439453 0.26342773 0.3125 0.34594727 +0 86 6.0 1.0 0.7817383 0.6953125 0.97509766 0.9658203 +0 86 6.0 1.0 0.42016602 0.5854492 0.60253906 0.83251953 +0 86 6.0 1.0 0.5800781 0.36450195 0.7128906 0.5625 +0 86 6.0 0.99902344 0.37841797 0.4621582 0.50097656 0.66796875 +0 86 6.0 0.9970703 0.3178711 0.34179688 0.4482422 0.52001953 +0 86 6.0 0.9526367 0.18139648 0.23986816 0.25219727 0.33496094 +0 86 6.0 0.9375 0.5234375 0.8964844 0.69628906 0.9951172 +0 86 6.0 0.93115234 0.24902344 0.26123047 0.31298828 0.34960938 +0 87 6.0 1.0 0.7890625 0.6972656 0.98339844 0.96972656 +0 87 6.0 1.0 0.41992188 0.58935547 0.60546875 0.83740234 +0 87 6.0 1.0 0.58203125 0.36572266 0.71484375 0.5649414 +0 87 6.0 0.99902344 0.38085938 0.4650879 0.50341797 0.66796875 +0 87 6.0 0.99609375 0.30859375 0.34936523 0.43554688 0.52685547 +0 87 6.0 0.9633789 0.53027344 0.9038086 0.69921875 0.9946289 +0 87 6.0 0.9536133 0.24902344 0.26000977 0.31396484 0.34936523 +0 87 6.0 0.94970703 0.1817627 0.23925781 0.2541504 0.33496094 +0 88 6.0 1.0 0.79003906 0.70214844 0.984375 0.9785156 +0 88 6.0 1.0 0.421875 0.59228516 0.60546875 0.8432617 +0 88 6.0 1.0 0.58496094 0.36621094 0.71777344 0.5678711 +0 88 6.0 0.99902344 0.38085938 0.46533203 0.50439453 0.67041016 +0 88 6.0 0.9980469 0.3076172 0.35375977 0.4399414 0.52734375 +0 88 6.0 0.9580078 0.18725586 0.23828125 0.25390625 0.33398438 +0 88 6.0 0.9550781 0.24951172 0.25976562 0.31445312 0.3486328 +0 88 6.0 0.9111328 0.53125 0.9135742 0.6953125 0.99560547 +0 89 6.0 1.0 0.30859375 0.35180664 0.43847656 0.5292969 +0 89 6.0 1.0 0.5864258 0.36669922 0.7192383 0.5683594 +0 89 6.0 1.0 0.38012695 0.46533203 0.5073242 0.6791992 +0 89 6.0 1.0 0.4243164 0.59472656 0.6069336 0.84472656 +0 89 6.0 1.0 0.7915039 0.70947266 0.98779297 0.98291016 +0 89 6.0 0.9667969 0.24987793 0.26049805 0.3154297 0.3474121 +0 89 6.0 0.9301758 0.18811035 0.23657227 0.25463867 0.3347168 +0 89 6.0 0.5600586 0.5317383 0.9213867 0.69189453 0.99560547 +0 90 6.0 1.0 0.3100586 0.3527832 0.44140625 0.53125 +0 90 6.0 1.0 0.58935547 0.3701172 0.7211914 0.57128906 +0 90 6.0 1.0 0.37939453 0.46777344 0.50927734 0.68847656 +0 90 6.0 1.0 0.42871094 0.59765625 0.609375 0.84765625 +0 90 6.0 1.0 0.7949219 0.71728516 0.99121094 0.9838867 +0 90 6.0 0.97998047 0.24975586 0.2602539 0.3166504 0.34765625 +0 90 6.0 0.94189453 0.18896484 0.23608398 0.25561523 0.3347168 +0 91 6.0 1.0 0.31225586 0.35009766 0.44213867 0.5366211 +0 91 6.0 1.0 0.5908203 0.37402344 0.7216797 0.5732422 +0 91 6.0 1.0 0.42871094 0.60546875 0.61035156 0.85546875 +0 91 6.0 1.0 0.796875 0.7163086 0.9941406 0.97998047 +0 91 6.0 0.99902344 0.38085938 0.4729004 0.51171875 0.69189453 +0 91 6.0 0.9790039 0.25048828 0.26000977 0.31689453 0.34936523 +0 91 6.0 0.9248047 0.18908691 0.23510742 0.25585938 0.33569336 +0 92 6.0 1.0 0.3137207 0.35351562 0.4416504 0.5385742 +0 92 6.0 1.0 0.5913086 0.37158203 0.72509766 0.57470703 +0 92 6.0 1.0 0.38134766 0.47705078 0.51220703 0.69189453 +0 92 6.0 1.0 0.43115234 0.6088867 0.61083984 0.8598633 +0 92 6.0 1.0 0.7993164 0.7216797 0.9946289 0.9824219 +0 92 6.0 0.9790039 0.25195312 0.2607422 0.3178711 0.3491211 +0 92 6.0 0.94140625 0.18286133 0.23754883 0.2475586 0.33520508 +0 93 6.0 1.0 0.31201172 0.35302734 0.44140625 0.54003906 +0 93 6.0 1.0 0.59472656 0.3720703 0.72753906 0.5776367 +0 93 6.0 1.0 0.43286133 0.6088867 0.6123047 0.8647461 +0 93 6.0 1.0 0.80322266 0.72509766 0.9975586 0.9868164 +0 93 6.0 0.9980469 0.3828125 0.47851562 0.5151367 0.69628906 +0 93 6.0 0.97802734 0.25195312 0.25878906 0.31835938 0.34960938 +0 93 6.0 0.9243164 0.18969727 0.23486328 0.25732422 0.33642578 +0 94 6.0 1.0 0.31396484 0.3515625 0.4423828 0.5410156 +0 94 6.0 1.0 0.59472656 0.3725586 0.73046875 0.5805664 +0 94 6.0 1.0 0.43237305 0.61279297 0.61328125 0.87158203 +0 94 6.0 1.0 0.8017578 0.7294922 1.0009766 0.99316406 +0 94 6.0 0.99902344 0.38354492 0.48876953 0.5209961 0.7036133 +0 94 6.0 0.97802734 0.25341797 0.25952148 0.31884766 0.34887695 +0 94 6.0 0.90722656 0.18432617 0.23583984 0.24951172 0.3359375 +0 95 6.0 1.0 0.31396484 0.3540039 0.44091797 0.54052734 +0 95 6.0 1.0 0.5942383 0.37304688 0.73291016 0.58251953 +0 95 6.0 1.0 0.4350586 0.6171875 0.6176758 0.875 +0 95 6.0 1.0 0.8041992 0.73291016 1.0019531 0.9995117 +0 95 6.0 0.99902344 0.38354492 0.4880371 0.5263672 0.7089844 +0 95 6.0 0.97802734 0.25268555 0.25927734 0.32006836 0.34814453 +0 95 6.0 0.91845703 0.18518066 0.23510742 0.24987793 0.33666992 +0 96 6.0 1.0 0.31396484 0.35498047 0.4404297 0.5444336 +0 96 6.0 1.0 0.59277344 0.37597656 0.72753906 0.58935547 +0 96 6.0 1.0 0.4375 0.62109375 0.6171875 0.8779297 +0 96 6.0 1.0 0.8076172 0.7416992 1.0019531 0.9995117 +0 96 6.0 0.9980469 0.38476562 0.4897461 0.52734375 0.7114258 +0 96 6.0 0.98095703 0.25341797 0.25878906 0.32128906 0.34814453 +0 96 6.0 0.9506836 0.18530273 0.23571777 0.2512207 0.33666992 +0 97 6.0 1.0 0.3149414 0.3552246 0.44482422 0.55078125 +0 97 6.0 1.0 0.59521484 0.38134766 0.72998047 0.5908203 +0 97 6.0 1.0 0.43310547 0.6269531 0.6196289 0.8876953 +0 97 6.0 1.0 0.80908203 0.7446289 1.0 0.99853516 +0 97 6.0 0.99902344 0.38720703 0.4909668 0.52685547 0.71777344 +0 97 6.0 0.98095703 0.25512695 0.26000977 0.32202148 0.3474121 +0 97 6.0 0.9658203 0.1862793 0.23571777 0.25390625 0.33813477 +0 98 6.0 1.0 0.31591797 0.35717773 0.44873047 0.5527344 +0 98 6.0 1.0 0.59716797 0.3840332 0.73291016 0.59277344 +0 98 6.0 1.0 0.44091797 0.63378906 0.6196289 0.88964844 +0 98 6.0 1.0 0.8071289 0.75097656 1.0 0.99316406 +0 98 6.0 0.99902344 0.3876953 0.49365234 0.52734375 0.7192383 +0 98 6.0 0.98095703 0.2565918 0.25952148 0.32299805 0.34692383 +0 98 6.0 0.9550781 0.18725586 0.23571777 0.25439453 0.33813477 +0 99 6.0 1.0 0.31567383 0.35717773 0.45336914 0.55615234 +0 99 6.0 1.0 0.59814453 0.38745117 0.7368164 0.5917969 +0 99 6.0 1.0 0.44018555 0.63378906 0.61816406 0.89453125 +0 99 6.0 1.0 0.8095703 0.7558594 1.0 0.9941406 +0 99 6.0 0.99902344 0.3894043 0.49560547 0.53027344 0.72314453 +0 99 6.0 0.9819336 0.25927734 0.25854492 0.32373047 0.34594727 +0 99 6.0 0.9790039 0.18737793 0.23706055 0.25683594 0.33911133 +0 100 6.0 1.0 0.5991211 0.3881836 0.7397461 0.59521484 +0 100 6.0 1.0 0.4399414 0.63720703 0.62060547 0.90283203 +0 100 6.0 1.0 0.8129883 0.7602539 0.99853516 0.99560547 +0 100 6.0 0.99902344 0.3173828 0.36206055 0.44970703 0.5551758 +0 100 6.0 0.9970703 0.39208984 0.49951172 0.5332031 0.7241211 +0 100 6.0 0.9819336 0.25976562 0.2590332 0.32421875 0.34448242 +0 100 6.0 0.9741211 0.18920898 0.23583984 0.25952148 0.3388672 +0 101 6.0 1.0 0.5986328 0.3881836 0.7421875 0.5986328 +0 101 6.0 1.0 0.4404297 0.6401367 0.6220703 0.9086914 +0 101 6.0 1.0 0.8178711 0.7636719 0.9975586 0.99609375 +0 101 6.0 0.99902344 0.31884766 0.3642578 0.44970703 0.5566406 +0 101 6.0 0.9970703 0.39501953 0.5024414 0.5341797 0.7241211 +0 101 6.0 0.98535156 0.2607422 0.25854492 0.3251953 0.3449707 +0 101 6.0 0.9472656 0.1895752 0.23425293 0.25878906 0.33813477 +0 102 6.0 1.0 0.8198242 0.7714844 0.9975586 0.99902344 +0 102 6.0 1.0 0.44189453 0.6425781 0.62353516 0.9140625 +0 102 6.0 1.0 0.5991211 0.3869629 0.74365234 0.6040039 +0 102 6.0 0.99902344 0.32177734 0.36938477 0.44921875 0.5576172 +0 102 6.0 0.9951172 0.39746094 0.5078125 0.53466797 0.73046875 +0 102 6.0 0.9838867 0.26293945 0.25878906 0.32592773 0.34521484 +0 102 6.0 0.95947266 0.19018555 0.23498535 0.2602539 0.33740234 +0 103 6.0 1.0 0.6015625 0.38842773 0.74609375 0.60546875 +0 103 6.0 1.0 0.44213867 0.6484375 0.6333008 0.921875 +0 103 6.0 1.0 0.81933594 0.7763672 0.9980469 0.9970703 +0 103 6.0 0.9980469 0.3215332 0.3684082 0.4494629 0.5625 +0 103 6.0 0.99316406 0.39794922 0.51708984 0.5395508 0.7446289 +0 103 6.0 0.98291016 0.2644043 0.2590332 0.32592773 0.34448242 +0 103 6.0 0.96972656 0.1899414 0.23461914 0.2619629 0.33911133 +0 104 6.0 1.0 0.6035156 0.39257812 0.7480469 0.6074219 +0 104 6.0 1.0 0.44360352 0.6513672 0.6347656 0.92871094 +0 104 6.0 1.0 0.8198242 0.7807617 0.9975586 0.9975586 +0 104 6.0 0.99902344 0.3227539 0.36743164 0.45214844 0.56689453 +0 104 6.0 0.99316406 0.39208984 0.51708984 0.5385742 0.7397461 +0 104 6.0 0.9790039 0.26538086 0.25854492 0.3269043 0.34448242 +0 104 6.0 0.9707031 0.19152832 0.23474121 0.26245117 0.33764648 +0 105 6.0 1.0 0.60595703 0.39672852 0.7524414 0.6098633 +0 105 6.0 1.0 0.44482422 0.6538086 0.6333008 0.93310547 +0 105 6.0 1.0 0.82373047 0.7871094 1.0 0.9921875 +0 105 6.0 0.99902344 0.3232422 0.3720703 0.4560547 0.5654297 +0 105 6.0 0.99609375 0.3935547 0.5209961 0.5395508 0.7475586 +0 105 6.0 0.9770508 0.26635742 0.25854492 0.32739258 0.34399414 +0 105 6.0 0.96972656 0.19189453 0.234375 0.2626953 0.33740234 +0 106 6.0 1.0 0.6118164 0.39892578 0.75439453 0.6166992 +0 106 6.0 1.0 0.44628906 0.6699219 0.6347656 0.9355469 +0 106 6.0 1.0 0.8256836 0.7919922 0.9995117 0.9941406 +0 106 6.0 0.99902344 0.32299805 0.37475586 0.45581055 0.5678711 +0 106 6.0 0.9970703 0.39233398 0.52734375 0.5449219 0.7558594 +0 106 6.0 0.96875 0.19165039 0.23278809 0.26293945 0.33862305 +0 106 6.0 0.96777344 0.26757812 0.25878906 0.32861328 0.34423828 +0 107 6.0 1.0 0.6147461 0.40161133 0.7553711 0.61865234 +0 107 6.0 1.0 0.44628906 0.6713867 0.63671875 0.94091797 +0 107 6.0 1.0 0.8276367 0.7988281 0.99853516 0.99609375 +0 107 6.0 0.99902344 0.3227539 0.37524414 0.4555664 0.56933594 +0 107 6.0 0.99902344 0.39941406 0.52978516 0.5444336 0.7583008 +0 107 6.0 0.96777344 0.26831055 0.25854492 0.32983398 0.34448242 +0 107 6.0 0.9589844 0.19360352 0.23327637 0.2631836 0.33911133 +0 108 6.0 1.0 0.6152344 0.4020996 0.7578125 0.6201172 +0 108 6.0 1.0 0.4465332 0.6738281 0.63720703 0.94628906 +0 108 6.0 1.0 0.82714844 0.8027344 0.9980469 1.0029297 +0 108 6.0 0.99902344 0.32373047 0.37670898 0.4560547 0.5683594 +0 108 6.0 0.9970703 0.40014648 0.53564453 0.546875 0.7602539 +0 108 6.0 0.97314453 0.1940918 0.23303223 0.26464844 0.33984375 +0 108 6.0 0.96777344 0.2607422 0.2553711 0.33007812 0.34570312 +0 109 6.0 1.0 0.83251953 0.8095703 0.9975586 1.0039062 +0 109 6.0 1.0 0.44628906 0.67578125 0.6376953 0.9511719 +0 109 6.0 1.0 0.6166992 0.40405273 0.7583008 0.62109375 +0 109 6.0 0.99902344 0.32373047 0.3774414 0.45214844 0.56884766 +0 109 6.0 0.99609375 0.40161133 0.54003906 0.5488281 0.7626953 +0 109 6.0 0.9760742 0.26123047 0.25463867 0.33154297 0.34545898 +0 109 6.0 0.96777344 0.19421387 0.23291016 0.26513672 0.34033203 +0 110 6.0 1.0 0.32421875 0.38085938 0.4580078 0.57373047 +0 110 6.0 1.0 0.6166992 0.40576172 0.7583008 0.62353516 +0 110 6.0 1.0 0.4489746 0.67822266 0.6401367 0.95751953 +0 110 6.0 0.99902344 0.83935547 0.81347656 1.0 0.99902344 +0 110 6.0 0.9951172 0.40893555 0.53515625 0.5449219 0.76953125 +0 110 6.0 0.9741211 0.2631836 0.2541504 0.33203125 0.34545898 +0 110 6.0 0.96875 0.19519043 0.2331543 0.26538086 0.33911133 +0 111 6.0 1.0 0.3251953 0.38183594 0.45751953 0.57666016 +0 111 6.0 1.0 0.6176758 0.4086914 0.75927734 0.6225586 +0 111 6.0 1.0 0.44921875 0.6826172 0.640625 0.96191406 +0 111 6.0 0.9980469 0.8432617 0.81933594 0.99853516 0.9970703 +0 111 6.0 0.9902344 0.3996582 0.54296875 0.5517578 0.76660156 +0 111 6.0 0.98095703 0.19641113 0.23352051 0.26733398 0.33984375 +0 111 6.0 0.9658203 0.26416016 0.2529297 0.3330078 0.3461914 +0 112 6.0 1.0 0.61816406 0.41186523 0.7626953 0.625 +0 112 6.0 1.0 0.45214844 0.6870117 0.64160156 0.9633789 +0 112 6.0 0.99902344 0.3256836 0.38476562 0.4663086 0.5810547 +0 112 6.0 0.9980469 0.84375 0.82421875 0.99902344 0.9970703 +0 112 6.0 0.9951172 0.4020996 0.54541016 0.55322266 0.7709961 +0 112 6.0 0.9819336 0.19677734 0.23486328 0.26831055 0.33935547 +0 112 6.0 0.96972656 0.26513672 0.2524414 0.33398438 0.3461914 +0 113 6.0 1.0 0.45581055 0.69091797 0.6430664 0.96728516 +0 113 6.0 1.0 0.6191406 0.41625977 0.7636719 0.62890625 +0 113 6.0 0.99902344 0.3269043 0.3857422 0.46801758 0.5839844 +0 113 6.0 0.99316406 0.4033203 0.5463867 0.5571289 0.77783203 +0 113 6.0 0.9902344 0.84472656 0.8286133 0.99902344 0.99560547 +0 113 6.0 0.98095703 0.19726562 0.23449707 0.26904297 0.34204102 +0 113 6.0 0.96972656 0.26660156 0.25146484 0.33496094 0.3461914 +0 114 6.0 1.0 0.45336914 0.7080078 0.64404297 0.9746094 +0 114 6.0 1.0 0.6191406 0.41918945 0.7675781 0.6323242 +0 114 6.0 0.99902344 0.32739258 0.3869629 0.46899414 0.58691406 +0 114 6.0 0.99316406 0.84765625 0.8330078 0.9970703 0.9951172 +0 114 6.0 0.9892578 0.40454102 0.5522461 0.56103516 0.78466797 +0 114 6.0 0.9741211 0.26757812 0.2512207 0.3359375 0.34594727 +0 114 6.0 0.97314453 0.19824219 0.23413086 0.2697754 0.3425293 +0 115 6.0 1.0 0.6196289 0.42163086 0.76904297 0.63623047 +0 115 6.0 1.0 0.4555664 0.7109375 0.6459961 0.97753906 +0 115 6.0 0.9980469 0.32714844 0.38842773 0.46875 0.5917969 +0 115 6.0 0.99316406 0.8496094 0.83691406 0.9980469 0.99316406 +0 115 6.0 0.9921875 0.40527344 0.55371094 0.5683594 0.7832031 +0 115 6.0 0.98095703 0.19519043 0.23583984 0.2614746 0.33984375 +0 115 6.0 0.96777344 0.26757812 0.25146484 0.33642578 0.34521484 +0 116 6.0 1.0 0.62353516 0.42358398 0.77197266 0.6401367 +0 116 6.0 1.0 0.4580078 0.7114258 0.64746094 0.9838867 +0 116 6.0 0.9980469 0.40576172 0.5600586 0.5722656 0.7866211 +0 116 6.0 0.9921875 0.32861328 0.38964844 0.4736328 0.5942383 +0 116 6.0 0.9838867 0.85009766 0.8417969 0.99658203 0.9921875 +0 116 6.0 0.9819336 0.19519043 0.23632812 0.26171875 0.3408203 +0 116 6.0 0.9716797 0.2705078 0.2524414 0.33789062 0.3486328 +0 117 6.0 1.0 0.45947266 0.71484375 0.6479492 0.98828125 +0 117 6.0 1.0 0.625 0.4248047 0.7753906 0.6435547 +0 117 6.0 0.99902344 0.40722656 0.5644531 0.5751953 0.79589844 +0 117 6.0 0.9921875 0.32958984 0.39331055 0.46826172 0.5961914 +0 117 6.0 0.9770508 0.8520508 0.84765625 0.99658203 0.9921875 +0 117 6.0 0.9741211 0.19543457 0.23449707 0.26293945 0.34179688 +0 117 6.0 0.9667969 0.2722168 0.25268555 0.33911133 0.34985352 +0 118 6.0 1.0 0.46142578 0.71484375 0.64990234 0.9902344 +0 118 6.0 1.0 0.62841797 0.42333984 0.77783203 0.64697266 +0 118 6.0 0.9980469 0.4086914 0.5673828 0.57470703 0.7998047 +0 118 6.0 0.9921875 0.3293457 0.39648438 0.46948242 0.59765625 +0 118 6.0 0.97998047 0.8544922 0.85498047 0.9980469 0.99365234 +0 118 6.0 0.9760742 0.19641113 0.23461914 0.26538086 0.34301758 +0 118 6.0 0.97265625 0.27392578 0.2529297 0.33935547 0.3486328 +0 119 6.0 1.0 0.6279297 0.42773438 0.78027344 0.64941406 +0 119 6.0 1.0 0.4638672 0.7182617 0.64941406 0.9916992 +0 119 6.0 0.9970703 0.32958984 0.39819336 0.46923828 0.5996094 +0 119 6.0 0.9970703 0.41015625 0.5708008 0.5761719 0.80126953 +0 119 6.0 0.98535156 0.19689941 0.23583984 0.26660156 0.34228516 +0 119 6.0 0.97509766 0.27441406 0.25195312 0.34033203 0.34814453 +0 119 6.0 0.93603516 0.8569336 0.85839844 0.9975586 0.9951172 +0 120 6.0 1.0 0.62890625 0.43139648 0.7832031 0.6538086 +0 120 6.0 1.0 0.46557617 0.72265625 0.6508789 0.9902344 +0 120 6.0 0.9980469 0.3293457 0.4013672 0.46948242 0.60058594 +0 120 6.0 0.9980469 0.41210938 0.57910156 0.5708008 0.8095703 +0 120 6.0 0.9838867 0.1977539 0.23364258 0.2692871 0.34399414 +0 120 6.0 0.9760742 0.27612305 0.25195312 0.34057617 0.34765625 +0 120 6.0 0.64746094 0.8569336 0.86328125 0.9975586 0.99316406 +0 121 6.0 1.0 0.46704102 0.7265625 0.6533203 0.9902344 +0 121 6.0 1.0 0.6323242 0.43310547 0.78271484 0.65966797 +0 121 6.0 0.99902344 0.41552734 0.5786133 0.57714844 0.8120117 +0 121 6.0 0.9980469 0.32958984 0.40234375 0.47265625 0.6074219 +0 121 6.0 0.96875 0.27661133 0.25195312 0.34155273 0.34960938 +0 121 6.0 0.8989258 0.19824219 0.23205566 0.26904297 0.34326172 +0 122 6.0 1.0 0.6357422 0.43554688 0.7832031 0.66308594 +0 122 6.0 1.0 0.46264648 0.7363281 0.6557617 0.9970703 +0 122 6.0 0.99902344 0.33251953 0.40527344 0.4711914 0.6074219 +0 122 6.0 0.99902344 0.41845703 0.5839844 0.57910156 0.81347656 +0 122 6.0 0.96240234 0.2788086 0.2524414 0.34228516 0.3491211 +0 122 6.0 0.89990234 0.19836426 0.23242188 0.2705078 0.34375 +0 123 6.0 1.0 0.6357422 0.43847656 0.7861328 0.66503906 +0 123 6.0 1.0 0.46289062 0.7416992 0.65625 0.99658203 +0 123 6.0 0.99902344 0.33276367 0.4038086 0.47583008 0.61376953 +0 123 6.0 0.99902344 0.41992188 0.5859375 0.5810547 0.81640625 +0 123 6.0 0.9614258 0.19873047 0.23278809 0.27416992 0.34423828 +0 123 6.0 0.9560547 0.28125 0.25219727 0.34179688 0.3479004 +0 124 6.0 1.0 0.6357422 0.43945312 0.78808594 0.66796875 +0 124 6.0 1.0 0.46728516 0.74560547 0.65966797 0.99853516 +0 124 6.0 0.99902344 0.33496094 0.40600586 0.4716797 0.6152344 +0 124 6.0 0.99902344 0.41601562 0.5908203 0.5761719 0.8203125 +0 124 6.0 0.9614258 0.19921875 0.23254395 0.27368164 0.34277344 +0 124 6.0 0.95410156 0.2824707 0.25219727 0.3425293 0.3474121 +0 125 6.0 1.0 0.6386719 0.44091797 0.79003906 0.6713867 +0 125 6.0 1.0 0.46875 0.7475586 0.66308594 0.99853516 +0 125 6.0 0.99902344 0.33666992 0.40576172 0.47338867 0.6196289 +0 125 6.0 0.99902344 0.41845703 0.59472656 0.5776367 0.82910156 +0 125 6.0 0.97802734 0.20056152 0.23364258 0.27563477 0.34350586 +0 125 6.0 0.9472656 0.28271484 0.25170898 0.34326172 0.3479004 +0 126 6.0 1.0 0.6401367 0.4428711 0.79345703 0.6723633 +0 126 6.0 1.0 0.47192383 0.7524414 0.66503906 1.0 +0 126 6.0 0.99902344 0.42138672 0.59716797 0.58740234 0.8334961 +0 126 6.0 0.9980469 0.33862305 0.4140625 0.47485352 0.62109375 +0 126 6.0 0.97509766 0.20239258 0.23474121 0.27734375 0.34179688 +0 126 6.0 0.9316406 0.28393555 0.25146484 0.34448242 0.34765625 +0 127 6.0 1.0 0.6411133 0.44628906 0.79541016 0.6748047 +0 127 6.0 1.0 0.47216797 0.75927734 0.6645508 0.9975586 +0 127 6.0 0.99902344 0.33984375 0.41601562 0.4765625 0.6269531 +0 127 6.0 0.99902344 0.42578125 0.6015625 0.5966797 0.8359375 +0 127 6.0 0.9741211 0.20410156 0.23364258 0.27783203 0.34204102 +0 127 6.0 0.93115234 0.28466797 0.25097656 0.34521484 0.3466797 +0 128 6.0 1.0 0.6435547 0.4501953 0.79785156 0.67871094 +0 128 6.0 1.0 0.47509766 0.7714844 0.66552734 0.9970703 +0 128 6.0 0.99902344 0.4321289 0.60546875 0.58935547 0.83984375 +0 128 6.0 0.9980469 0.3413086 0.41992188 0.47802734 0.62890625 +0 128 6.0 0.98095703 0.20483398 0.23425293 0.27954102 0.34326172 +0 128 6.0 0.90527344 0.28515625 0.25073242 0.3461914 0.34692383 +0 129 6.0 1.0 0.47607422 0.7783203 0.6694336 0.99902344 +0 129 6.0 1.0 0.43286133 0.6088867 0.59375 0.8442383 +0 129 6.0 1.0 0.64501953 0.45336914 0.80126953 0.68359375 +0 129 6.0 0.99902344 0.34179688 0.4194336 0.4794922 0.6333008 +0 129 6.0 0.9707031 0.20471191 0.23242188 0.27978516 0.34326172 +0 129 6.0 0.9248047 0.27978516 0.2475586 0.34765625 0.34814453 +0 130 6.0 1.0 0.6464844 0.45507812 0.80566406 0.68652344 +0 130 6.0 1.0 0.47827148 0.7866211 0.66796875 0.99658203 +0 130 6.0 0.99902344 0.3413086 0.42041016 0.4819336 0.6352539 +0 130 6.0 0.9980469 0.43359375 0.61376953 0.5996094 0.8491211 +0 130 6.0 0.9838867 0.20581055 0.23327637 0.28198242 0.34521484 +0 130 6.0 0.9350586 0.28076172 0.24682617 0.3486328 0.3479004 +0 131 6.0 1.0 0.6503906 0.45703125 0.80566406 0.6894531 +0 131 6.0 1.0 0.47827148 0.7910156 0.67041016 0.9951172 +0 131 6.0 0.99902344 0.34228516 0.42456055 0.48095703 0.63378906 +0 131 6.0 0.9980469 0.4333496 0.61816406 0.60058594 0.85546875 +0 131 6.0 0.97314453 0.2055664 0.23242188 0.28125 0.34570312 +0 131 6.0 0.9448242 0.28149414 0.2467041 0.34936523 0.3466797 +0 132 6.0 1.0 0.4777832 0.79296875 0.66748047 0.9941406 +0 132 6.0 1.0 0.65185547 0.45922852 0.81103516 0.6928711 +0 132 6.0 1.0 0.3408203 0.42407227 0.48486328 0.6376953 +0 132 6.0 0.9980469 0.4243164 0.62109375 0.59521484 0.85839844 +0 132 6.0 0.9819336 0.20703125 0.23217773 0.28320312 0.3474121 +0 132 6.0 0.94970703 0.28344727 0.24609375 0.34985352 0.34716797 +0 133 6.0 1.0 0.65185547 0.4638672 0.8149414 0.6982422 +0 133 6.0 1.0 0.47875977 0.7910156 0.67285156 1.0029297 +0 133 6.0 0.99902344 0.3413086 0.42773438 0.48486328 0.6455078 +0 133 6.0 0.9980469 0.42919922 0.62597656 0.5913086 0.86816406 +0 133 6.0 0.97802734 0.20788574 0.23181152 0.28344727 0.34716797 +0 133 6.0 0.9580078 0.28393555 0.24682617 0.3503418 0.3474121 +0 134 6.0 1.0 0.34228516 0.43115234 0.4868164 0.64404297 +0 134 6.0 1.0 0.65234375 0.47045898 0.8173828 0.7026367 +0 134 6.0 1.0 0.4794922 0.79833984 0.67285156 1.0009766 +0 134 6.0 0.9980469 0.43725586 0.62939453 0.6010742 0.87353516 +0 134 6.0 0.9707031 0.20751953 0.23303223 0.28466797 0.3491211 +0 134 6.0 0.95410156 0.28393555 0.24719238 0.35131836 0.3474121 +0 135 6.0 1.0 0.34375 0.4321289 0.48876953 0.6479492 +0 135 6.0 1.0 0.6533203 0.47265625 0.82128906 0.7060547 +0 135 6.0 1.0 0.48291016 0.8071289 0.6723633 0.9995117 +0 135 6.0 0.9970703 0.43774414 0.6303711 0.6044922 0.8745117 +0 135 6.0 0.9863281 0.2084961 0.23291016 0.28686523 0.3491211 +0 135 6.0 0.96972656 0.2861328 0.24633789 0.35107422 0.34643555 +0 136 6.0 1.0 0.484375 0.8100586 0.6738281 0.99658203 +0 136 6.0 1.0 0.65478516 0.47045898 0.81884766 0.71435547 +0 136 6.0 1.0 0.34399414 0.43237305 0.48657227 0.6513672 +0 136 6.0 0.9892578 0.4428711 0.63623047 0.60791016 0.88134766 +0 136 6.0 0.96972656 0.20800781 0.23364258 0.28710938 0.34985352 +0 136 6.0 0.9633789 0.28637695 0.24682617 0.35229492 0.34643555 +0 137 6.0 1.0 0.33544922 0.43945312 0.48779297 0.6542969 +0 137 6.0 1.0 0.65625 0.47314453 0.8222656 0.7182617 +0 137 6.0 0.99902344 0.48608398 0.8129883 0.6738281 0.9916992 +0 137 6.0 0.9970703 0.4428711 0.6425781 0.6098633 0.88964844 +0 137 6.0 0.9790039 0.20898438 0.23535156 0.27978516 0.3491211 +0 137 6.0 0.9760742 0.28808594 0.2479248 0.35302734 0.34521484 +0 138 6.0 1.0 0.33666992 0.4404297 0.4880371 0.65625 +0 138 6.0 1.0 0.65625 0.47583008 0.8251953 0.72216797 +0 138 6.0 0.99902344 0.48535156 0.81689453 0.6748047 0.9916992 +0 138 6.0 0.9970703 0.44555664 0.6464844 0.6113281 0.8935547 +0 138 6.0 0.98095703 0.21008301 0.23498535 0.28173828 0.34838867 +0 138 6.0 0.97265625 0.28979492 0.2479248 0.35375977 0.34521484 +0 139 6.0 1.0 0.33642578 0.44335938 0.4921875 0.6582031 +0 139 6.0 1.0 0.6586914 0.47802734 0.82958984 0.7260742 +0 139 6.0 0.9970703 0.44628906 0.6533203 0.61621094 0.9013672 +0 139 6.0 0.99609375 0.48632812 0.8203125 0.68066406 0.98828125 +0 139 6.0 0.9892578 0.21203613 0.23583984 0.2841797 0.34716797 +0 139 6.0 0.9819336 0.29125977 0.24865723 0.35473633 0.34423828 +0 140 6.0 1.0 0.66015625 0.47998047 0.8330078 0.73095703 +0 140 6.0 0.99902344 0.33447266 0.44458008 0.49267578 0.6611328 +0 140 6.0 0.9980469 0.44311523 0.65527344 0.6098633 0.9033203 +0 140 6.0 0.9902344 0.21289062 0.2364502 0.2861328 0.3515625 +0 140 6.0 0.9819336 0.2927246 0.24902344 0.35473633 0.34326172 +0 140 6.0 0.98095703 0.484375 0.828125 0.6738281 0.9902344 +0 141 6.0 1.0 0.66552734 0.4814453 0.8354492 0.734375 +0 141 6.0 0.99902344 0.4482422 0.66259766 0.6152344 0.9057617 +0 141 6.0 0.9980469 0.33569336 0.44580078 0.49682617 0.66552734 +0 141 6.0 0.9863281 0.21386719 0.23620605 0.2861328 0.35058594 +0 141 6.0 0.984375 0.4831543 0.83935547 0.6796875 0.9897461 +0 141 6.0 0.9838867 0.2939453 0.24865723 0.35595703 0.34326172 +0 142 6.0 1.0 0.6694336 0.48632812 0.8383789 0.73828125 +0 142 6.0 0.99902344 0.34228516 0.44482422 0.5024414 0.66748047 +0 142 6.0 0.9980469 0.44702148 0.6645508 0.6171875 0.90966797 +0 142 6.0 0.9902344 0.21411133 0.23596191 0.28735352 0.35205078 +0 142 6.0 0.98535156 0.2944336 0.24829102 0.3564453 0.34301758 +0 142 6.0 0.97265625 0.48168945 0.8408203 0.6767578 0.98828125 +0 143 6.0 1.0 0.67285156 0.49145508 0.8388672 0.7392578 +0 143 6.0 0.99902344 0.34814453 0.44921875 0.5 0.6738281 +0 143 6.0 0.9980469 0.4482422 0.6748047 0.61816406 0.9238281 +0 143 6.0 0.9902344 0.21459961 0.23632812 0.28833008 0.3515625 +0 143 6.0 0.9863281 0.29516602 0.24853516 0.35717773 0.34228516 +0 143 6.0 0.9589844 0.4831543 0.8432617 0.671875 0.9897461 +0 144 6.0 1.0 0.6738281 0.4963379 0.84277344 0.7421875 +0 144 6.0 0.99902344 0.34814453 0.45458984 0.50146484 0.6772461 +0 144 6.0 0.9980469 0.44873047 0.671875 0.6118164 0.92285156 +0 144 6.0 0.9951172 0.21508789 0.23596191 0.28979492 0.35205078 +0 144 6.0 0.98291016 0.296875 0.24707031 0.35742188 0.34277344 +0 144 6.0 0.9506836 0.48901367 0.8461914 0.66748047 0.98779297 +0 145 6.0 1.0 0.67333984 0.5 0.84716797 0.7480469 +0 145 6.0 1.0 0.34814453 0.45532227 0.50439453 0.6772461 +0 145 6.0 0.99902344 0.45043945 0.67871094 0.6196289 0.9326172 +0 145 6.0 0.9941406 0.21228027 0.23571777 0.29589844 0.35620117 +0 145 6.0 0.9819336 0.29663086 0.24743652 0.35864258 0.34228516 +0 145 6.0 0.9199219 0.4892578 0.8574219 0.6738281 0.99121094 +0 146 6.0 1.0 0.6743164 0.50390625 0.8520508 0.75097656 +0 146 6.0 1.0 0.34692383 0.45874023 0.50634766 0.68115234 +0 146 6.0 0.99902344 0.4506836 0.6850586 0.62646484 0.9379883 +0 146 6.0 0.9941406 0.21606445 0.23608398 0.29223633 0.35375977 +0 146 6.0 0.9790039 0.29833984 0.2475586 0.35888672 0.34179688 +0 146 6.0 0.9667969 0.48486328 0.8666992 0.6743164 0.9946289 +0 147 6.0 1.0 0.34887695 0.46020508 0.50439453 0.68652344 +0 147 6.0 1.0 0.67285156 0.5073242 0.85546875 0.75439453 +0 147 6.0 0.99902344 0.45336914 0.68652344 0.62890625 0.9375 +0 147 6.0 0.9951172 0.21411133 0.23632812 0.29760742 0.35742188 +0 147 6.0 0.97509766 0.29907227 0.2479248 0.35913086 0.3408203 +0 147 6.0 0.9453125 0.48388672 0.86865234 0.6723633 0.99658203 +0 148 6.0 1.0 0.34814453 0.4650879 0.50341797 0.6899414 +0 148 6.0 1.0 0.6821289 0.50634766 0.8540039 0.76123047 +0 148 6.0 1.0 0.45092773 0.6879883 0.63671875 0.9399414 +0 148 6.0 0.9951172 0.21557617 0.2397461 0.29858398 0.3564453 +0 148 6.0 0.9633789 0.3010254 0.24682617 0.35961914 0.34057617 +0 148 6.0 0.62158203 0.48754883 0.8701172 0.671875 0.99316406 +0 149 6.0 1.0 0.3491211 0.46826172 0.5029297 0.6928711 +0 149 6.0 1.0 0.68603516 0.51123047 0.8569336 0.76708984 +0 149 6.0 1.0 0.4506836 0.7001953 0.63134766 0.9589844 +0 149 6.0 0.9921875 0.21606445 0.23596191 0.30004883 0.35546875 +0 149 6.0 0.96435547 0.3017578 0.2475586 0.36083984 0.33984375 +0 150 6.0 1.0 0.34985352 0.47143555 0.5029297 0.69384766 +0 150 6.0 1.0 0.68847656 0.5126953 0.86035156 0.77441406 +0 150 6.0 1.0 0.45410156 0.70166016 0.62890625 0.9614258 +0 150 6.0 0.9873047 0.21704102 0.2376709 0.3005371 0.35620117 +0 150 6.0 0.95166016 0.29638672 0.24438477 0.36083984 0.34301758 +0 151 6.0 1.0 0.3503418 0.47485352 0.5048828 0.6982422 +0 151 6.0 1.0 0.6894531 0.51464844 0.8623047 0.7783203 +0 151 6.0 1.0 0.45458984 0.70410156 0.6333008 0.96777344 +0 151 6.0 0.9921875 0.21838379 0.23950195 0.3022461 0.3581543 +0 151 6.0 0.96240234 0.29003906 0.24536133 0.36083984 0.3400879 +0 152 6.0 1.0 0.6904297 0.5161133 0.86621094 0.78466797 +0 152 6.0 1.0 0.45507812 0.70703125 0.63671875 0.96972656 +0 152 6.0 0.99902344 0.35083008 0.47631836 0.51171875 0.70214844 +0 152 6.0 0.9902344 0.2199707 0.23986816 0.30249023 0.3569336 +0 152 6.0 0.9667969 0.29101562 0.24511719 0.3618164 0.33984375 +0 152 6.0 0.6958008 0.5083008 0.9082031 0.6801758 0.9980469 +0 153 6.0 1.0 0.4560547 0.7114258 0.640625 0.97021484 +0 153 6.0 1.0 0.69140625 0.52441406 0.8623047 0.78808594 +0 153 6.0 0.99902344 0.35107422 0.47851562 0.5136719 0.7060547 +0 153 6.0 0.9902344 0.22009277 0.23925781 0.30517578 0.35791016 +0 153 6.0 0.9707031 0.29833984 0.24401855 0.3623047 0.34399414 +0 153 6.0 0.5649414 0.5131836 0.91015625 0.68408203 0.99609375 +0 154 6.0 1.0 0.6933594 0.52685547 0.8671875 0.79345703 +0 154 6.0 1.0 0.4580078 0.71728516 0.6484375 0.97509766 +0 154 6.0 0.9980469 0.3515625 0.47827148 0.515625 0.7089844 +0 154 6.0 0.97509766 0.22033691 0.23754883 0.3059082 0.35864258 +0 154 6.0 0.9741211 0.29956055 0.2446289 0.3635254 0.34326172 +0 155 6.0 1.0 0.35058594 0.48657227 0.51416016 0.71435547 +0 155 6.0 1.0 0.6958008 0.5307617 0.8725586 0.7944336 +0 155 6.0 1.0 0.46069336 0.7246094 0.65185547 0.9941406 +0 155 6.0 0.9838867 0.30078125 0.24511719 0.36376953 0.34179688 +0 155 6.0 0.97998047 0.22277832 0.23779297 0.3076172 0.35888672 +0 156 6.0 1.0 0.35083008 0.4892578 0.5107422 0.71972656 +0 156 6.0 1.0 0.6982422 0.5341797 0.875 0.79785156 +0 156 6.0 1.0 0.45898438 0.72509766 0.6533203 0.99365234 +0 156 6.0 0.9873047 0.22387695 0.23986816 0.3088379 0.35888672 +0 156 6.0 0.98095703 0.3022461 0.24572754 0.3647461 0.34228516 +0 157 6.0 1.0 0.35205078 0.4921875 0.51171875 0.7236328 +0 157 6.0 1.0 0.7011719 0.5390625 0.87890625 0.80566406 +0 157 6.0 1.0 0.45751953 0.7270508 0.65771484 0.9975586 +0 157 6.0 0.97998047 0.22363281 0.23901367 0.30322266 0.35913086 +0 157 6.0 0.97802734 0.30395508 0.2454834 0.36547852 0.3425293 +0 158 6.0 1.0 0.34985352 0.49389648 0.51464844 0.72753906 +0 158 6.0 1.0 0.7001953 0.5419922 0.8847656 0.80859375 +0 158 6.0 1.0 0.46020508 0.73046875 0.6557617 0.99609375 +0 158 6.0 0.9819336 0.22387695 0.23779297 0.3034668 0.35839844 +0 158 6.0 0.97802734 0.30078125 0.24731445 0.3671875 0.3395996 +0 159 6.0 1.0 0.35327148 0.49780273 0.51464844 0.7294922 +0 159 6.0 1.0 0.7080078 0.54345703 0.88671875 0.8051758 +0 159 6.0 1.0 0.45922852 0.73779297 0.6591797 0.99853516 +0 159 6.0 0.9863281 0.22558594 0.2401123 0.30615234 0.3623047 +0 159 6.0 0.97998047 0.30273438 0.24682617 0.36767578 0.33862305 +0 160 6.0 1.0 0.35498047 0.5019531 0.51660156 0.73339844 +0 160 6.0 1.0 0.7080078 0.5439453 0.8876953 0.8095703 +0 160 6.0 1.0 0.46020508 0.7470703 0.6616211 1.0009766 +0 160 6.0 0.9838867 0.30322266 0.24633789 0.36914062 0.33813477 +0 160 6.0 0.9819336 0.22607422 0.23840332 0.3071289 0.36157227 +0 161 6.0 1.0 0.45996094 0.75 0.6640625 1.0039062 +0 161 6.0 1.0 0.70996094 0.546875 0.88964844 0.8144531 +0 161 6.0 1.0 0.35913086 0.5083008 0.5175781 0.7368164 +0 161 6.0 0.9902344 0.22705078 0.24267578 0.30859375 0.36132812 +0 161 6.0 0.97998047 0.30444336 0.24597168 0.37036133 0.3383789 +0 162 6.0 1.0 0.7138672 0.5527344 0.8876953 0.82714844 +0 162 6.0 1.0 0.4609375 0.7553711 0.6660156 1.0019531 +0 162 6.0 0.99902344 0.35986328 0.51171875 0.5214844 0.7421875 +0 162 6.0 0.9892578 0.22705078 0.24047852 0.3095703 0.3630371 +0 162 6.0 0.98095703 0.30615234 0.24621582 0.37158203 0.33789062 +0 163 6.0 1.0 0.36035156 0.5161133 0.5205078 0.74658203 +0 163 6.0 1.0 0.71533203 0.5576172 0.8930664 0.828125 +0 163 6.0 1.0 0.4638672 0.7597656 0.6640625 1.0009766 +0 163 6.0 0.9951172 0.22766113 0.24450684 0.3125 0.36376953 +0 163 6.0 0.98291016 0.30639648 0.24584961 0.37231445 0.33764648 +0 164 6.0 1.0 0.46264648 0.7636719 0.6694336 1.0009766 +0 164 6.0 1.0 0.71533203 0.56152344 0.8959961 0.83203125 +0 164 6.0 1.0 0.35888672 0.5180664 0.5239258 0.75146484 +0 164 6.0 0.9892578 0.2277832 0.24328613 0.31274414 0.3647461 +0 164 6.0 0.9790039 0.30786133 0.24584961 0.37280273 0.33666992 +0 165 6.0 1.0 0.35986328 0.5253906 0.52441406 0.75390625 +0 165 6.0 1.0 0.7163086 0.5644531 0.8989258 0.83691406 +0 165 6.0 1.0 0.46191406 0.77001953 0.6621094 1.0048828 +0 165 6.0 0.99316406 0.22937012 0.24414062 0.31396484 0.3647461 +0 165 6.0 0.9790039 0.30908203 0.2454834 0.37402344 0.33691406 +0 166 6.0 1.0 0.4658203 0.77783203 0.66503906 1.0048828 +0 166 6.0 1.0 0.71972656 0.56640625 0.9013672 0.8417969 +0 166 6.0 1.0 0.35888672 0.5288086 0.5263672 0.7583008 +0 166 6.0 0.9892578 0.22949219 0.24389648 0.31396484 0.36694336 +0 166 6.0 0.97998047 0.30932617 0.24584961 0.37426758 0.3347168 +0 167 6.0 1.0 0.46972656 0.78271484 0.66308594 1.0029297 +0 167 6.0 1.0 0.72021484 0.56933594 0.9057617 0.8466797 +0 167 6.0 1.0 0.359375 0.5307617 0.5283203 0.7651367 +0 167 6.0 0.99609375 0.23120117 0.2454834 0.3166504 0.36645508 +0 167 6.0 0.97314453 0.30908203 0.2446289 0.375 0.33642578 +0 168 6.0 1.0 0.72509766 0.5732422 0.91064453 0.8466797 +0 168 6.0 1.0 0.35961914 0.5332031 0.53222656 0.7685547 +0 168 6.0 1.0 0.47070312 0.7871094 0.6640625 1.0039062 +0 168 6.0 0.9921875 0.23120117 0.24475098 0.3166504 0.36791992 +0 168 6.0 0.9604492 0.3100586 0.2442627 0.37646484 0.33520508 +0 169 6.0 1.0 0.7265625 0.57666016 0.9121094 0.84814453 +0 169 6.0 1.0 0.36938477 0.53027344 0.53271484 0.7685547 +0 169 6.0 1.0 0.4741211 0.7910156 0.66552734 1.0058594 +0 169 6.0 0.9951172 0.23181152 0.24523926 0.31835938 0.36669922 +0 169 6.0 0.96435547 0.31079102 0.24328613 0.37768555 0.33569336 +0 170 6.0 1.0 0.36865234 0.5336914 0.53466797 0.7739258 +0 170 6.0 1.0 0.7319336 0.58203125 0.91552734 0.8496094 +0 170 6.0 1.0 0.4736328 0.79541016 0.6669922 1.0068359 +0 170 6.0 0.9941406 0.23168945 0.24633789 0.31958008 0.36889648 +0 170 6.0 0.9580078 0.31103516 0.24291992 0.3779297 0.33422852 +0 171 6.0 1.0 0.47509766 0.8046875 0.6743164 1.0058594 +0 171 6.0 1.0 0.7294922 0.58447266 0.9199219 0.86572266 +0 171 6.0 1.0 0.36889648 0.5385742 0.53808594 0.77685547 +0 171 6.0 0.99609375 0.23425293 0.24645996 0.32128906 0.36767578 +0 171 6.0 0.95410156 0.31201172 0.24145508 0.3803711 0.33520508 +0 172 6.0 1.0 0.4765625 0.8100586 0.67871094 1.0039062 +0 172 6.0 1.0 0.73583984 0.5913086 0.9213867 0.86279297 +0 172 6.0 1.0 0.3696289 0.54052734 0.53808594 0.7807617 +0 172 6.0 0.99609375 0.23388672 0.2475586 0.3227539 0.36865234 +0 172 6.0 0.95166016 0.31298828 0.24060059 0.38183594 0.33447266 +0 172 14.0 0.51171875 0.44726562 0.5698242 0.5073242 0.63720703 +0 173 6.0 1.0 0.47705078 0.81640625 0.6791992 1.0048828 +0 173 6.0 1.0 0.73828125 0.59521484 0.92285156 0.8676758 +0 173 6.0 1.0 0.36816406 0.5463867 0.53466797 0.7915039 +0 173 6.0 0.99609375 0.23620605 0.24694824 0.32421875 0.36865234 +0 173 6.0 0.95703125 0.3034668 0.24121094 0.37573242 0.33935547 +0 174 6.0 1.0 0.74072266 0.5991211 0.92626953 0.87158203 +0 174 6.0 1.0 0.3701172 0.546875 0.54003906 0.79003906 +0 174 6.0 0.9980469 0.47631836 0.82128906 0.6767578 1.0048828 +0 174 6.0 0.9892578 0.23718262 0.24780273 0.32617188 0.36889648 +0 174 6.0 0.9550781 0.30517578 0.2409668 0.37597656 0.33911133 +0 175 6.0 1.0 0.36767578 0.5517578 0.54052734 0.8017578 +0 175 6.0 1.0 0.7416992 0.6010742 0.9291992 0.87353516 +0 175 6.0 0.9838867 0.47436523 0.8305664 0.6748047 1.0029297 +0 175 6.0 0.9819336 0.23803711 0.24682617 0.32299805 0.3659668 +0 175 6.0 0.9716797 0.30541992 0.24194336 0.37817383 0.3371582 +0 176 6.0 1.0 0.7421875 0.6064453 0.93359375 0.8779297 +0 176 6.0 1.0 0.36914062 0.55615234 0.5390625 0.80126953 +0 176 6.0 0.9716797 0.48876953 0.83251953 0.67333984 0.9946289 +0 176 6.0 0.96875 0.23730469 0.24682617 0.3232422 0.3684082 +0 176 6.0 0.9667969 0.3125 0.24291992 0.37646484 0.33422852 +0 177 6.0 1.0 0.37036133 0.55859375 0.5395508 0.8046875 +0 177 6.0 1.0 0.7480469 0.6123047 0.9355469 0.890625 +0 177 6.0 0.97998047 0.23852539 0.24731445 0.3239746 0.36645508 +0 177 6.0 0.97509766 0.49023438 0.8408203 0.6767578 0.99316406 +0 177 6.0 0.97265625 0.31274414 0.24377441 0.37768555 0.33618164 +0 178 6.0 1.0 0.37060547 0.5625 0.5439453 0.8095703 +0 178 6.0 1.0 0.7495117 0.6142578 0.94189453 0.8955078 +0 178 6.0 0.98535156 0.23779297 0.24707031 0.32421875 0.36914062 +0 178 6.0 0.9790039 0.31420898 0.24365234 0.37817383 0.33496094 +0 178 6.0 0.9658203 0.49047852 0.8457031 0.67626953 0.9921875 +0 179 6.0 1.0 0.37451172 0.5673828 0.546875 0.81347656 +0 179 6.0 1.0 0.7504883 0.6201172 0.9458008 0.8984375 +0 179 6.0 0.9770508 0.24060059 0.24987793 0.32421875 0.3642578 +0 179 6.0 0.9741211 0.31225586 0.24377441 0.3815918 0.33691406 +0 179 6.0 0.92578125 0.48779297 0.8491211 0.67529297 0.9897461 +0 180 6.0 1.0 0.37597656 0.5703125 0.54785156 0.8173828 +0 180 6.0 1.0 0.7548828 0.6230469 0.94921875 0.89941406 +0 180 6.0 0.984375 0.23876953 0.24951172 0.33398438 0.3774414 +0 180 6.0 0.98095703 0.31298828 0.2434082 0.3828125 0.33569336 +0 180 6.0 0.9536133 0.49023438 0.85253906 0.67285156 0.9892578 +0 181 6.0 1.0 0.37548828 0.5732422 0.55078125 0.82128906 +0 181 6.0 1.0 0.75683594 0.6269531 0.9501953 0.90234375 +0 181 6.0 0.9892578 0.24243164 0.24951172 0.3269043 0.37060547 +0 181 6.0 0.98095703 0.31445312 0.24291992 0.38378906 0.33520508 +0 181 6.0 0.9790039 0.49023438 0.8564453 0.6796875 0.99316406 +0 182 6.0 1.0 0.37548828 0.5761719 0.5522461 0.82910156 +0 182 6.0 1.0 0.75878906 0.63183594 0.9511719 0.9033203 +0 182 6.0 0.9921875 0.24206543 0.25048828 0.33129883 0.37353516 +0 182 6.0 0.9770508 0.31713867 0.24291992 0.38598633 0.33666992 +0 182 6.0 0.9716797 0.49365234 0.8652344 0.6821289 0.9941406 +0 183 6.0 1.0 0.7607422 0.6357422 0.95410156 0.9082031 +0 183 6.0 1.0 0.3779297 0.5810547 0.55566406 0.8330078 +0 183 6.0 0.9863281 0.24157715 0.24926758 0.3359375 0.3786621 +0 183 6.0 0.9770508 0.31762695 0.24316406 0.3869629 0.33642578 +0 183 6.0 0.9560547 0.4970703 0.87402344 0.6845703 0.9970703 +0 184 6.0 1.0 0.7602539 0.63964844 0.9584961 0.9140625 +0 184 6.0 1.0 0.37646484 0.58251953 0.5527344 0.83935547 +0 184 6.0 0.984375 0.24572754 0.25146484 0.33422852 0.37304688 +0 184 6.0 0.9790039 0.31933594 0.24304199 0.3876953 0.33642578 +0 184 6.0 0.89990234 0.5 0.87402344 0.6796875 0.99902344 +0 184 14.0 0.52001953 0.42236328 0.5957031 0.5229492 0.7001953 +0 185 6.0 1.0 0.7636719 0.64160156 0.9609375 0.92871094 +0 185 6.0 1.0 0.3774414 0.58740234 0.5546875 0.8442383 +0 185 6.0 0.9902344 0.24401855 0.25146484 0.33789062 0.37890625 +0 185 6.0 0.9741211 0.3203125 0.24316406 0.3881836 0.33789062 +0 185 6.0 0.8413086 0.5024414 0.87841797 0.6791992 0.99560547 +0 186 6.0 1.0 0.76660156 0.6479492 0.9638672 0.9350586 +0 186 6.0 1.0 0.37670898 0.5883789 0.55810547 0.8491211 +0 186 6.0 0.99121094 0.24511719 0.25341797 0.34033203 0.38085938 +0 186 6.0 0.97314453 0.32177734 0.2421875 0.39013672 0.33740234 +0 186 6.0 0.80810547 0.50146484 0.8833008 0.6772461 0.99560547 +0 187 6.0 1.0 0.3791504 0.59277344 0.5625 0.85546875 +0 187 6.0 1.0 0.7685547 0.65478516 0.96777344 0.9399414 +0 187 6.0 0.99316406 0.24621582 0.25341797 0.3400879 0.38183594 +0 187 6.0 0.9707031 0.32299805 0.24206543 0.39038086 0.33642578 +0 187 6.0 0.86035156 0.5029297 0.8935547 0.671875 0.9951172 +0 188 6.0 1.0 0.7709961 0.6591797 0.9741211 0.9423828 +0 188 6.0 0.9980469 0.38085938 0.5986328 0.5620117 0.85839844 +0 188 6.0 0.9892578 0.2434082 0.25024414 0.34301758 0.38208008 +0 188 6.0 0.9667969 0.32373047 0.24328613 0.39208984 0.33691406 +0 188 6.0 0.86035156 0.50341797 0.90722656 0.6723633 0.9951172 +0 189 6.0 1.0 0.77197266 0.6616211 0.97998047 0.94677734 +0 189 6.0 1.0 0.3828125 0.60839844 0.56396484 0.86328125 +0 189 6.0 0.9921875 0.24487305 0.25195312 0.34155273 0.3876953 +0 189 6.0 0.9589844 0.32470703 0.24084473 0.3935547 0.3388672 +0 189 6.0 0.8076172 0.5078125 0.91503906 0.6738281 0.9970703 +0 190 6.0 1.0 0.7753906 0.6640625 0.98339844 0.9560547 +0 190 6.0 1.0 0.38378906 0.6044922 0.5678711 0.8642578 +0 190 6.0 0.9892578 0.24597168 0.25097656 0.34204102 0.3876953 +0 190 6.0 0.9453125 0.32666016 0.24060059 0.39453125 0.3388672 +0 190 6.0 0.5761719 0.5107422 0.92285156 0.67578125 0.9970703 +0 191 6.0 1.0 0.38671875 0.61035156 0.5678711 0.8671875 +0 191 6.0 1.0 0.7783203 0.6640625 0.9902344 0.96777344 +0 191 6.0 0.98535156 0.2512207 0.25439453 0.34545898 0.3857422 +0 191 6.0 0.94628906 0.32617188 0.23925781 0.3955078 0.33935547 +0 192 6.0 1.0 0.3828125 0.6123047 0.56884766 0.88183594 +0 192 6.0 1.0 0.7841797 0.6669922 0.99316406 0.9707031 +0 192 6.0 0.97998047 0.25195312 0.25610352 0.3486328 0.38598633 +0 192 6.0 0.94970703 0.32250977 0.24182129 0.38598633 0.3383789 +0 193 6.0 1.0 0.38671875 0.6171875 0.5673828 0.8828125 +0 193 6.0 1.0 0.7836914 0.67529297 0.9946289 0.97314453 +0 193 6.0 0.98828125 0.2524414 0.2565918 0.34960938 0.38745117 +0 193 6.0 0.9472656 0.3232422 0.24133301 0.38720703 0.3388672 +0 194 6.0 1.0 0.3894043 0.6191406 0.5727539 0.8886719 +0 194 6.0 1.0 0.7895508 0.6826172 0.99853516 0.9765625 +0 194 6.0 0.9951172 0.2536621 0.25927734 0.35229492 0.38916016 +0 194 6.0 0.9658203 0.3227539 0.24060059 0.3881836 0.3383789 +0 195 6.0 1.0 0.7910156 0.6904297 1.0009766 0.9794922 +0 195 6.0 0.99902344 0.39086914 0.62646484 0.5722656 0.89501953 +0 195 6.0 0.9980469 0.25390625 0.25976562 0.3515625 0.390625 +0 195 6.0 0.9658203 0.3239746 0.24108887 0.38891602 0.33935547 +0 195 6.0 0.56933594 0.28393555 0.24707031 0.37329102 0.34570312 +0 195 14.0 0.6113281 0.4802246 0.65478516 0.5410156 0.73095703 +0 196 6.0 1.0 0.79296875 0.69628906 1.0039062 0.98339844 +0 196 6.0 0.99902344 0.39379883 0.6328125 0.57714844 0.89941406 +0 196 6.0 0.99609375 0.25512695 0.26049805 0.35327148 0.39233398 +0 196 6.0 0.9667969 0.32421875 0.24121094 0.38964844 0.3383789 +0 196 6.0 0.52978516 0.28100586 0.2487793 0.37280273 0.34692383 +0 196 14.0 0.6308594 0.4411621 0.6425781 0.5415039 0.7470703 +0 196 14.0 0.54833984 0.48046875 0.66015625 0.5419922 0.734375 +0 197 6.0 1.0 0.796875 0.7001953 1.0039062 0.9824219 +0 197 6.0 1.0 0.39501953 0.63378906 0.5786133 0.9003906 +0 197 6.0 0.9970703 0.25561523 0.2614746 0.35473633 0.39086914 +0 197 6.0 0.97265625 0.3256836 0.24145508 0.39111328 0.33764648 +0 197 6.0 0.6118164 0.27783203 0.25073242 0.3725586 0.34887695 +0 198 6.0 1.0 0.7998047 0.703125 1.0009766 0.98339844 +0 198 6.0 1.0 0.39672852 0.6411133 0.5800781 0.9057617 +0 198 6.0 0.99609375 0.25561523 0.26220703 0.35620117 0.3959961 +0 198 6.0 0.9760742 0.32543945 0.24206543 0.3918457 0.33789062 +0 198 6.0 0.62890625 0.27734375 0.25097656 0.37304688 0.35205078 +0 198 14.0 0.5229492 0.44091797 0.6533203 0.54589844 0.7597656 +0 199 6.0 1.0 0.39404297 0.64501953 0.57958984 0.91552734 +0 199 6.0 1.0 0.80029297 0.6977539 1.0009766 0.9897461 +0 199 6.0 0.99121094 0.2548828 0.2607422 0.35839844 0.3955078 +0 199 6.0 0.9838867 0.32714844 0.24279785 0.3935547 0.33496094 +0 200 6.0 1.0 0.3955078 0.6484375 0.58203125 0.921875 +0 200 6.0 1.0 0.80126953 0.7089844 1.0 0.9873047 +0 200 6.0 0.99121094 0.25512695 0.26367188 0.36010742 0.39648438 +0 200 6.0 0.9790039 0.32836914 0.24243164 0.3942871 0.33569336 +0 201 6.0 1.0 0.39868164 0.6489258 0.58496094 0.92822266 +0 201 6.0 1.0 0.8071289 0.71435547 1.0009766 0.9897461 +0 201 6.0 0.9873047 0.25634766 0.2614746 0.36083984 0.39672852 +0 201 6.0 0.9770508 0.3305664 0.24121094 0.39501953 0.33544922 +0 202 6.0 1.0 0.80859375 0.71875 1.0009766 0.9892578 +0 202 6.0 0.99902344 0.39697266 0.6557617 0.5854492 0.9350586 +0 202 6.0 0.98828125 0.2614746 0.2626953 0.3605957 0.40234375 +0 202 6.0 0.9760742 0.3322754 0.24121094 0.3972168 0.33447266 +0 202 14.0 0.5361328 0.4399414 0.6699219 0.5493164 0.7763672 +0 203 6.0 1.0 0.8120117 0.72265625 1.0009766 0.98828125 +0 203 6.0 0.99902344 0.39672852 0.66064453 0.5883789 0.9379883 +0 203 6.0 0.9902344 0.26220703 0.2626953 0.36035156 0.4033203 +0 203 6.0 0.97314453 0.3322754 0.24169922 0.39819336 0.33691406 +0 204 6.0 1.0 0.81396484 0.72558594 1.0 0.9902344 +0 204 6.0 1.0 0.39697266 0.66503906 0.5864258 0.9433594 +0 204 6.0 0.98828125 0.2631836 0.2631836 0.3618164 0.4038086 +0 204 6.0 0.9741211 0.33276367 0.24169922 0.40014648 0.33691406 +0 205 6.0 1.0 0.8149414 0.72753906 0.9995117 0.9970703 +0 205 6.0 0.99902344 0.39697266 0.6694336 0.5878906 0.95166016 +0 205 6.0 0.9921875 0.26416016 0.265625 0.36523438 0.40185547 +0 205 6.0 0.9580078 0.3310547 0.24072266 0.39990234 0.3359375 +0 205 14.0 0.5385742 0.46044922 0.6894531 0.55810547 0.7890625 +0 206 6.0 1.0 0.8178711 0.7314453 0.99853516 0.9980469 +0 206 6.0 0.99902344 0.39746094 0.6738281 0.5913086 0.9560547 +0 206 6.0 0.9951172 0.26489258 0.26489258 0.36547852 0.40551758 +0 206 6.0 0.9589844 0.3305664 0.23962402 0.40039062 0.33666992 +0 206 14.0 0.55810547 0.49487305 0.70458984 0.5546875 0.7788086 +0 207 6.0 1.0 0.8198242 0.73779297 0.9995117 0.9975586 +0 207 6.0 0.99902344 0.39941406 0.67529297 0.5957031 0.9633789 +0 207 6.0 0.99609375 0.26635742 0.2631836 0.36743164 0.40429688 +0 207 6.0 0.9667969 0.33276367 0.24023438 0.4025879 0.3359375 +0 207 14.0 0.57177734 0.4975586 0.70947266 0.55615234 0.7836914 +0 207 14.0 0.5029297 0.45361328 0.69140625 0.55810547 0.79589844 +0 208 6.0 0.99902344 0.3984375 0.6801758 0.5986328 0.96728516 +0 208 6.0 0.99902344 0.8183594 0.74316406 1.0 0.99316406 +0 208 6.0 0.9951172 0.26733398 0.2626953 0.3684082 0.40576172 +0 208 6.0 0.96777344 0.3334961 0.24023438 0.4033203 0.33544922 +0 208 14.0 0.5883789 0.45703125 0.7006836 0.56152344 0.8071289 +0 209 6.0 0.99902344 0.39794922 0.6875 0.59765625 0.9746094 +0 209 6.0 0.99902344 0.82373047 0.75 0.9995117 0.9951172 +0 209 6.0 0.9970703 0.2680664 0.26513672 0.36816406 0.40673828 +0 209 6.0 0.96972656 0.3347168 0.24023438 0.4050293 0.33447266 +0 210 6.0 0.99902344 0.8251953 0.75341797 1.0 1.0019531 +0 210 6.0 0.99902344 0.3959961 0.6855469 0.6015625 0.9785156 +0 210 6.0 0.9970703 0.26953125 0.26635742 0.3671875 0.40551758 +0 210 6.0 0.9741211 0.3334961 0.24047852 0.40527344 0.33520508 +0 210 14.0 0.51904297 0.45361328 0.70410156 0.5600586 0.81347656 +0 211 6.0 0.99902344 0.39672852 0.6899414 0.60498047 0.98291016 +0 211 6.0 0.9980469 0.82666016 0.7558594 1.0009766 1.0029297 +0 211 6.0 0.99316406 0.27001953 0.26733398 0.36767578 0.4099121 +0 211 6.0 0.97998047 0.32983398 0.24145508 0.40551758 0.33618164 +0 211 14.0 0.56152344 0.45654297 0.7138672 0.5678711 0.8232422 +0 212 6.0 0.99902344 0.82958984 0.76416016 1.0009766 1.0019531 +0 212 6.0 0.99902344 0.40234375 0.6972656 0.60058594 0.9824219 +0 212 6.0 0.99121094 0.2709961 0.26879883 0.36816406 0.40942383 +0 212 6.0 0.9863281 0.33032227 0.24206543 0.40649414 0.33276367 +0 213 6.0 0.99902344 0.4033203 0.7011719 0.60253906 0.98339844 +0 213 6.0 0.99902344 0.83203125 0.7729492 1.0009766 1.0009766 +0 213 6.0 0.9892578 0.32714844 0.24121094 0.40722656 0.33496094 +0 213 6.0 0.9892578 0.27197266 0.2680664 0.36914062 0.4140625 +0 214 6.0 0.99902344 0.83496094 0.77978516 1.0009766 0.9995117 +0 214 6.0 0.99902344 0.40722656 0.70458984 0.61035156 0.98876953 +0 214 6.0 0.99316406 0.3239746 0.24121094 0.40844727 0.33496094 +0 214 6.0 0.9892578 0.27148438 0.2685547 0.37939453 0.40771484 +0 214 14.0 0.56933594 0.45629883 0.7265625 0.5683594 0.8330078 +0 215 6.0 0.9980469 0.40820312 0.70996094 0.609375 0.9902344 +0 215 6.0 0.9980469 0.84472656 0.78271484 1.0009766 1.0019531 +0 215 6.0 0.9941406 0.27246094 0.26953125 0.3803711 0.4086914 +0 215 6.0 0.99316406 0.32348633 0.2421875 0.40942383 0.3388672 +0 215 14.0 0.57666016 0.47631836 0.73779297 0.5732422 0.8383789 +0 216 6.0 0.99609375 0.40966797 0.72314453 0.60791016 0.99072266 +0 216 6.0 0.9951172 0.3215332 0.24291992 0.4099121 0.33618164 +0 216 6.0 0.99316406 0.2722168 0.27246094 0.38061523 0.41015625 +0 216 6.0 0.9921875 0.84521484 0.7890625 0.99853516 1.0009766 +0 216 14.0 0.6225586 0.51220703 0.75341797 0.5698242 0.8286133 +0 217 6.0 0.9980469 0.4074707 0.72509766 0.6113281 0.9926758 +0 217 6.0 0.9951172 0.27246094 0.27368164 0.3828125 0.4104004 +0 217 6.0 0.9941406 0.3215332 0.24365234 0.4104004 0.3388672 +0 217 6.0 0.9902344 0.84716797 0.7915039 0.99658203 0.9946289 +0 217 14.0 0.5917969 0.47851562 0.74902344 0.5751953 0.84765625 +0 218 6.0 0.99902344 0.40844727 0.7290039 0.6118164 0.9946289 +0 218 6.0 0.9951172 0.32373047 0.2442627 0.41210938 0.3395996 +0 218 6.0 0.99316406 0.27416992 0.27514648 0.38354492 0.41088867 +0 218 6.0 0.9863281 0.85498047 0.8017578 1.0 0.9951172 +0 218 14.0 0.609375 0.5107422 0.75927734 0.5751953 0.8413086 +0 219 6.0 0.99902344 0.40966797 0.72998047 0.6147461 0.9975586 +0 219 6.0 0.9951172 0.32373047 0.24487305 0.41259766 0.33911133 +0 219 6.0 0.9941406 0.27392578 0.2763672 0.3852539 0.4111328 +0 219 6.0 0.9819336 0.85791016 0.8027344 0.9995117 0.99609375 +0 219 14.0 0.59228516 0.5229492 0.765625 0.5786133 0.84277344 +0 220 6.0 0.9980469 0.41137695 0.74121094 0.6171875 0.9951172 +0 220 6.0 0.99609375 0.32080078 0.24475098 0.41357422 0.34179688 +0 220 6.0 0.99316406 0.859375 0.80859375 0.9980469 0.9970703 +0 220 6.0 0.9873047 0.28125 0.27807617 0.38378906 0.41577148 +0 221 6.0 0.9970703 0.41210938 0.74609375 0.61816406 1.0 +0 221 6.0 0.9951172 0.32373047 0.24511719 0.4140625 0.3413086 +0 221 6.0 0.9921875 0.86279297 0.8125 0.99853516 0.99609375 +0 221 6.0 0.98828125 0.28100586 0.27954102 0.38500977 0.41674805 +0 221 14.0 0.53466797 0.4921875 0.76953125 0.5830078 0.8652344 +0 222 6.0 0.9980469 0.41259766 0.75 0.62158203 1.0019531 +0 222 6.0 0.9941406 0.28222656 0.27783203 0.3852539 0.41552734 +0 222 6.0 0.99316406 0.3244629 0.24487305 0.41430664 0.34399414 +0 222 6.0 0.9707031 0.86083984 0.81640625 0.99658203 0.9970703 +0 222 14.0 0.5810547 0.52441406 0.7807617 0.5810547 0.86083984 +0 223 6.0 0.9980469 0.41259766 0.7519531 0.62353516 1.0029297 +0 223 6.0 0.99316406 0.33203125 0.24267578 0.4165039 0.34277344 +0 223 6.0 0.99121094 0.28295898 0.27612305 0.38598633 0.41918945 +0 223 6.0 0.9448242 0.86035156 0.8232422 0.9951172 0.99609375 +0 223 14.0 0.5751953 0.4699707 0.77490234 0.5854492 0.8833008 +0 223 14.0 0.5151367 0.5258789 0.78759766 0.58251953 0.8647461 +0 224 6.0 1.0 0.41625977 0.7548828 0.62402344 1.0048828 +0 224 6.0 0.9921875 0.3330078 0.24230957 0.4169922 0.34277344 +0 224 6.0 0.9892578 0.28051758 0.28027344 0.3894043 0.42138672 +0 224 6.0 0.9199219 0.86376953 0.8300781 0.9946289 0.9951172 +0 224 14.0 0.55615234 0.47265625 0.7783203 0.5810547 0.8857422 +0 224 14.0 0.52685547 0.5234375 0.79003906 0.5830078 0.87109375 +0 225 6.0 0.99902344 0.4194336 0.7607422 0.6274414 1.0087891 +0 225 6.0 0.9921875 0.33007812 0.24206543 0.41796875 0.34326172 +0 225 6.0 0.9790039 0.28149414 0.28125 0.39038086 0.42138672 +0 225 6.0 0.9277344 0.8652344 0.8388672 0.9941406 0.99609375 +0 225 14.0 0.6425781 0.5263672 0.79785156 0.5830078 0.8769531 +0 225 14.0 0.54003906 0.4699707 0.7807617 0.5786133 0.89208984 +0 226 6.0 0.99316406 0.28173828 0.28173828 0.39111328 0.42529297 +0 226 6.0 0.99121094 0.3310547 0.24279785 0.41796875 0.34277344 +0 226 6.0 0.9589844 0.8691406 0.84472656 0.9941406 0.9980469 +0 226 6.0 0.9526367 0.42285156 0.7705078 0.62890625 1.0078125 +0 226 14.0 0.60498047 0.4951172 0.79785156 0.58984375 0.89746094 +0 227 6.0 0.9941406 0.28173828 0.2854004 0.39160156 0.42700195 +0 227 6.0 0.99121094 0.3305664 0.2434082 0.4189453 0.3449707 +0 227 6.0 0.92333984 0.87109375 0.85058594 0.9951172 0.99902344 +0 227 6.0 0.7783203 0.4248047 0.77685547 0.6298828 1.0048828 +0 227 14.0 0.6298828 0.5258789 0.80859375 0.58740234 0.8886719 +0 227 14.0 0.50341797 0.46948242 0.79296875 0.58251953 0.9033203 +0 228 6.0 0.99316406 0.32836914 0.24328613 0.41918945 0.34423828 +0 228 6.0 0.9838867 0.421875 0.7788086 0.63183594 1.0039062 +0 228 6.0 0.9770508 0.28271484 0.28857422 0.390625 0.4267578 +0 228 6.0 0.8935547 0.87402344 0.85546875 0.9951172 0.9980469 +0 228 14.0 0.6459961 0.5288086 0.8149414 0.58740234 0.8959961 +0 228 14.0 0.51708984 0.47045898 0.80078125 0.58496094 0.9111328 +0 229 6.0 0.99609375 0.42138672 0.78515625 0.63134766 1.0029297 +0 229 6.0 0.99316406 0.32666016 0.24255371 0.41992188 0.34472656 +0 229 6.0 0.98095703 0.28320312 0.28808594 0.39160156 0.42773438 +0 229 6.0 0.86035156 0.8745117 0.86279297 0.9946289 0.99658203 +0 229 14.0 0.57910156 0.5263672 0.8198242 0.5908203 0.9038086 +0 230 6.0 0.9941406 0.3251953 0.24279785 0.42089844 0.34643555 +0 230 6.0 0.9941406 0.42138672 0.7915039 0.63623047 1.0019531 +0 230 6.0 0.9614258 0.2836914 0.29101562 0.39208984 0.42871094 +0 230 14.0 0.6508789 0.5366211 0.8256836 0.5942383 0.90771484 +0 231 6.0 0.99316406 0.3269043 0.24353027 0.4206543 0.34716797 +0 231 6.0 0.9770508 0.2849121 0.2919922 0.39379883 0.43115234 +0 231 6.0 0.9614258 0.43408203 0.8022461 0.6401367 1.0029297 +0 231 14.0 0.53271484 0.5385742 0.8305664 0.5942383 0.9145508 +0 232 6.0 0.9951172 0.32763672 0.24389648 0.421875 0.34887695 +0 232 6.0 0.97314453 0.28564453 0.29296875 0.39404297 0.4321289 +0 232 6.0 0.9506836 0.42578125 0.80371094 0.64160156 1.0019531 +0 232 14.0 0.59765625 0.5390625 0.83691406 0.5957031 0.9169922 +0 233 6.0 0.9941406 0.32788086 0.24389648 0.42358398 0.34936523 +0 233 6.0 0.9580078 0.28955078 0.29003906 0.3959961 0.4326172 +0 233 6.0 0.88720703 0.4272461 0.80566406 0.6411133 1.0 +0 233 14.0 0.5810547 0.5395508 0.84472656 0.59716797 0.9238281 +0 234 6.0 0.99609375 0.32714844 0.2421875 0.4248047 0.3486328 +0 234 6.0 0.9472656 0.29003906 0.29077148 0.3959961 0.43237305 +0 234 6.0 0.71484375 0.42407227 0.81152344 0.63964844 0.9970703 +0 235 6.0 0.9951172 0.32861328 0.2421875 0.42529297 0.34960938 +0 235 6.0 0.9580078 0.29467773 0.29711914 0.40112305 0.4284668 +0 235 6.0 0.50878906 0.4333496 0.81640625 0.6401367 0.9970703 +0 235 14.0 0.6328125 0.54248047 0.8544922 0.5991211 0.9345703 +0 236 6.0 0.9941406 0.328125 0.24230957 0.4272461 0.3527832 +0 236 6.0 0.96240234 0.2939453 0.296875 0.4013672 0.42919922 +0 236 14.0 0.609375 0.54345703 0.8618164 0.5991211 0.9428711 +0 237 6.0 0.9941406 0.3334961 0.24353027 0.42773438 0.35351562 +0 237 6.0 0.97998047 0.3010254 0.29370117 0.40698242 0.4338379 +0 237 14.0 0.67529297 0.46679688 0.83984375 0.62402344 0.99316406 +0 237 14.0 0.57714844 0.5419922 0.86816406 0.6015625 0.94921875 +0 237 14.0 0.50683594 0.4736328 0.8876953 0.5292969 0.95703125 +0 238 6.0 0.99316406 0.33569336 0.24389648 0.42944336 0.35375977 +0 238 6.0 0.9921875 0.29736328 0.29296875 0.40576172 0.43798828 +0 238 14.0 0.68896484 0.54296875 0.8745117 0.6035156 0.95654297 +0 238 14.0 0.67626953 0.46557617 0.8432617 0.6254883 0.99072266 +0 238 14.0 0.60498047 0.4741211 0.88964844 0.53271484 0.9628906 +0 239 6.0 0.99609375 0.29760742 0.29345703 0.4074707 0.43896484 +0 239 6.0 0.99121094 0.33813477 0.24365234 0.42944336 0.35546875 +0 239 14.0 0.6503906 0.4638672 0.8466797 0.6269531 0.9902344 +0 239 14.0 0.60498047 0.47729492 0.89501953 0.53515625 0.9682617 +0 239 14.0 0.60009766 0.5444336 0.8798828 0.6040039 0.9628906 +0 240 6.0 0.9951172 0.2980957 0.2944336 0.40844727 0.4399414 +0 240 6.0 0.9902344 0.3388672 0.24316406 0.43066406 0.3564453 +0 240 14.0 0.6274414 0.5439453 0.8847656 0.6064453 0.9667969 +0 240 14.0 0.57177734 0.47827148 0.90478516 0.5317383 0.9711914 +0 240 14.0 0.50146484 0.48754883 0.87158203 0.5961914 0.97509766 +0 241 6.0 0.9980469 0.30151367 0.30151367 0.41088867 0.44067383 +0 241 6.0 0.9902344 0.34033203 0.2401123 0.43066406 0.35498047 +0 241 14.0 0.69384766 0.5498047 0.890625 0.609375 0.9765625 +0 241 14.0 0.63964844 0.4794922 0.91015625 0.5361328 0.9785156 +0 241 14.0 0.6220703 0.46191406 0.8569336 0.6308594 0.9916992 +0 242 6.0 0.9951172 0.30371094 0.30273438 0.4116211 0.4404297 +0 242 6.0 0.99316406 0.33911133 0.24072266 0.43237305 0.35546875 +0 242 14.0 0.63427734 0.55126953 0.89697266 0.6098633 0.98291016 +0 242 14.0 0.5209961 0.45874023 0.86035156 0.6328125 0.9921875 +0 243 6.0 0.9970703 0.30395508 0.30566406 0.41235352 0.44384766 +0 243 6.0 0.99316406 0.34057617 0.24145508 0.4333496 0.35717773 +0 243 14.0 0.72265625 0.5522461 0.90283203 0.61279297 0.98779297 +0 243 14.0 0.5048828 0.47827148 0.9238281 0.54248047 0.98828125 +0 244 6.0 0.9951172 0.34179688 0.24145508 0.4350586 0.35620117 +0 244 6.0 0.9921875 0.30566406 0.30615234 0.41357422 0.4428711 +0 244 14.0 0.74560547 0.5527344 0.90722656 0.6152344 0.99316406 +0 244 14.0 0.5834961 0.4814453 0.9277344 0.5410156 0.9921875 +0 245 6.0 0.9970703 0.34375 0.2421875 0.4350586 0.3540039 +0 245 6.0 0.9970703 0.30444336 0.30737305 0.41333008 0.44604492 +0 245 14.0 0.6870117 0.5551758 0.9121094 0.61865234 0.9951172 +0 246 6.0 0.9970703 0.34472656 0.24291992 0.43701172 0.35473633 +0 246 6.0 0.99316406 0.30249023 0.30737305 0.41430664 0.45092773 +0 246 14.0 0.6274414 0.5541992 0.9189453 0.62060547 1.0019531 +0 247 6.0 0.9980469 0.30395508 0.30810547 0.41625977 0.45507812 +0 247 6.0 0.9980469 0.34716797 0.24316406 0.43847656 0.35595703 +0 248 6.0 0.99902344 0.30322266 0.30810547 0.41748047 0.4560547 +0 248 6.0 0.9980469 0.3474121 0.24243164 0.44018555 0.35766602 +0 249 6.0 1.0 0.30322266 0.3088379 0.41845703 0.4572754 +0 249 6.0 0.9980469 0.35083008 0.24279785 0.44067383 0.35620117 +0 250 6.0 1.0 0.3034668 0.30859375 0.42016602 0.45751953 +0 250 6.0 0.9980469 0.35107422 0.24194336 0.4423828 0.35668945 +0 251 6.0 1.0 0.30517578 0.31030273 0.41845703 0.45922852 +0 251 6.0 0.9980469 0.35327148 0.2421875 0.44311523 0.35791016 +0 252 6.0 1.0 0.30615234 0.3125 0.42089844 0.46142578 +0 252 6.0 0.9970703 0.35668945 0.24328613 0.44458008 0.3605957 +0 253 6.0 1.0 0.30664062 0.31347656 0.42089844 0.46289062 +0 253 6.0 0.9970703 0.35742188 0.24316406 0.4453125 0.3623047 +0 254 6.0 1.0 0.30786133 0.3149414 0.42163086 0.4638672 +0 254 6.0 0.9970703 0.35839844 0.24304199 0.44628906 0.3635254 +0 255 6.0 1.0 0.3076172 0.3154297 0.42236328 0.46484375 +0 255 6.0 0.99609375 0.36108398 0.24438477 0.44702148 0.36108398 +0 255 6.0 0.56152344 0.24353027 0.29858398 0.29785156 0.34301758 +0 256 6.0 1.0 0.3100586 0.31591797 0.42236328 0.46533203 +0 256 6.0 0.99609375 0.36328125 0.2409668 0.4453125 0.35668945 +0 256 6.0 0.5839844 0.24389648 0.29833984 0.29858398 0.34228516 diff --git a/optimization-tools-and-techniques/Python/optimization_tools_and_techniques.ipynb b/optimization-tools-and-techniques/Python/optimization_tools_and_techniques.ipynb new file mode 100644 index 00000000..bc74bb09 --- /dev/null +++ b/optimization-tools-and-techniques/Python/optimization_tools_and_techniques.ipynb @@ -0,0 +1,474 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Optimizing Computer Vision Applications\n", + "\n", + "This tutorial shows some techniques to get better performance for computer vision applications with the Intel® Distribution of OpenVINO™ toolkit.\n", + "\n", + "## 1. Tune parameters - set batch size\n", + "\n", + "In this section, we will see how changes in the batch size affect the performance. We will use the SSD300 model for the experiments.\n", + "\n", + "The default batch size for the Model Optimizer is 1.\n", + "### Let us first look at the performance numbers for the batch size 1." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!/opt/intel/openvino/bin/setupvars.sh\n", + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l $HOME/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### Change the batch size to 2 and run the object-detection example for new batch size" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l $HOME/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so -b 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### Run the example for different batch sizes\n", + "\n", + "Change the batch sizes to 8,16,32,64,128 and so on and see the performance diffrence in terms of the inference time.\n", + "\n", + "## 2. Pick the right model based on application and hardware\n", + "\n", + "Use/train a model with the right performance/accuracy tradeoffs. Performance differences between models can be bigger than any optimization you can do at the inference app level. Run various SSD models from the model_downloader in the car detection example which we used in the initial tutorial and observe the performance. We will run these tests on different hardware accelerators to determine how application performance depends on models as well as hardware.\n", + "### Run Model Optimizer on the models to get IR files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!mkdir -p /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/{FP16,FP32} \n", + "!mkdir -p /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/{FP16,FP32} \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_caffe.py --input_model /opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/512/caffe/ssd512.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP32\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_caffe.py --input_model /opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/512/caffe/ssd512.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP16 --data_type FP16\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_caffe.py --input_model /opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/300/caffe/ssd300.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP32\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_caffe.py --input_model /opt/intel/openvino/deployment_tools/tools/model_downloader/object_detection/common/ssd/300/caffe/ssd300.caffemodel -o /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP16 --data_type FP16\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### Set environmental variables and navigate to object detection tutorial directory\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! /opt/intel/openvino/bin/setupvars.sh\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " \n", + "### Run the object detection example with different models on different devices.\n", + "\n", + "For simplicity of the code and in order to put more focus on the performance number, video rendering with rectangle boxes for detected objects has been separated from object detection example(tutorial1.py).\n", + "\n", + "The video rendering with rectangle boxes for detected objects can be viewed by running the ROIviewer.py after inferencing.\n", + "\n", + "\n", + "\n", + "### a) CPU\n", + "\n", + "- Inferencing using **mobilenet-ssd** model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -l $HOME/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/Python/ROIviewer.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -l /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.labels" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Inferencing using **ssd300** model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP32/ssd300.xml -l $HOME/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/Python/ROIviewer.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -l /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.labels" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Inferencing using **ssd512** model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP32/ssd512.xml -l $HOME/inference_engine_samples_build/intel64/Release/lib/libcpu_extension.so \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/Python/ROIviewer.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -l /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.labels" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### b) GPU\n", + "\n", + "- Inferencing using **mobilenet-ssd** model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml -d GPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/Python/ROIviewer.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -l /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.labels" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Inferencing using model: ssd300" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP32/ssd300.xml -d GPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/Python/ROIviewer.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -l /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.labels" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Inferencing using model: ssd512" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP32/ssd512.xml -d GPU" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/Python/ROIviewer.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -l /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.labels" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### c) Intel® Movidius™ Neural Compute Stick\n", + "\n", + "- Inferencing using **mobilenet-ssd** model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP16/mobilenet-ssd.xml -d MYRIAD" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/Python/ROIviewer.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -l /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.labels" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Inferencing using model: ssd300" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP16/ssd300.xml -d MYRIAD" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/Python/ROIviewer.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -l /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.labels" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Inferencing using model: ssd512" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD512/FP16/ssd512.xml -d MYRIAD" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 /opt/intel/workshop/smart-video-workshop/object-detection/Python/ROIviewer.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -l /opt/intel/workshop/smart-video-workshop/object-detection/squeezenet/FP32/squeezenet1.1.labels" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "Note: There is often USB write error for Intel® Movidius™ Neural Compute Stick, please try re-running the command. Sometimes it takes 3 trials.\n", + "\n", + "### 3. Use the right data type for your target harware and accuracy needs\n", + "\n", + "In this section, we will consider an example running on a GPU. FP16 operations are better optimized than FP32 on GPUs. We will run the object detection example with SSD models with data types FP16 and FP32 and observe the performance difference." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP32/ssd300.xml -d GPU " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! python3 tutorial1.py -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/SSD300/FP16/ssd300.xml -d GPU" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "It is clear that we got better performance with FP16 models.\n", + "### 4. Use async\n", + "\n", + "The async API can improve the overall frame rate of the application. While the accelerator is busy with running inference operations, the application can continue encoding, decoding or post inference data processing on the host. For this section, we will use the object_detection_demo_ssd_async sample. This sample makes asynchronous requests to the inference engine. This reduces the inference request latency, so that the overall framerate is determined by the MAXIMUM(detection time, input capturing time) and not the SUM(detection time, input capturing time).\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " \n", + "### a) Run the async example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!cd /opt/intel/openvino/deployment_tools/inference_engine/samples/build/intel64/Release && ./object_detection_demo_ssd_async -i /opt/intel/workshop/smart-video-workshop/object-detection/Python/Cars\\ -\\ 1900.mp4 -m /opt/intel/workshop/smart-video-workshop/object-detection/mobilenet-ssd/FP32/mobilenet-ssd.xml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "- Press tab to switch to sync mode. Observe the number of fps (frames per second) for both sync and async mode. The number frames processed per second are more in async than the sync mode.\n", + "\n", + "There are important performance caveats though. Tasks that run in parallel should try to avoid oversubscribing to shared computing resources. For example, if the inference tasks are running on the FPGA and the CPU is essentially idle, then it makes sense to run tasks on the CPU in parallel." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/optimization-tools-and-techniques/Python/tutorial1.py b/optimization-tools-and-techniques/Python/tutorial1.py new file mode 100644 index 00000000..a2bb3fd3 --- /dev/null +++ b/optimization-tools-and-techniques/Python/tutorial1.py @@ -0,0 +1,236 @@ +#!/usr/bin/env python +""" + Copyright (c) 2019 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" + +from __future__ import print_function +import sys +import os +from argparse import ArgumentParser +import cv2 +import time +import logging as log +from openvino.inference_engine import IENetwork, IEPlugin +from enum import Enum +import collections + + + +class output_mode_type(Enum): + CLASSIFICATION_MODE=1 + SSD_MODE=2 + + +def build_argparser(): + parser = ArgumentParser() + parser.add_argument("-m", "--model", help="Path to an .xml file with a trained model.", required=True, type=str) + parser.add_argument("-i", "--input", + help="Path to video file or image. 'cam' for capturing video stream from camera", required=True, + type=str) + parser.add_argument("-l", "--cpu_extension", + help="MKLDNN (CPU)-targeted custom layers.Absolute path to a shared library with the kernels " + "impl.", type=str, default=None) + parser.add_argument("-pp", "--plugin_dir", help="Path to a plugin folder", type=str, default=None) + parser.add_argument("-d", "--device", + help="Specify the target device to infer on; CPU, GPU, FPGA or MYRIAD is acceptable. Demo " + "will look for a suitable plugin for device specified (CPU by default)", default="CPU", + type=str) + parser.add_argument("--labels", help="Labels mapping file", default=None, type=str) + parser.add_argument("-pt", "--prob_threshold", help="Probability threshold for detections filtering", + default=0.5, type=float) + parser.add_argument("-fr", help="maximum frames to process", default=256, type=int) + parser.add_argument("-b", help="Batch size", default=1, type=int) + + return parser + + +def main(): + log.basicConfig(format="[ %(levelname)s ] %(message)s", level=log.INFO, stream=sys.stdout) + args = build_argparser().parse_args() + model_xml = args.model + model_bin = os.path.splitext(model_xml)[0] + ".bin" + + preprocess_times = collections.deque() + infer_times = collections.deque() + postprocess_times = collections.deque() + + ROIfile=open("ROIs.txt","w"); # output stored here, view with ROIviewer + + # Plugin initialization for specified device and load extensions library if specified + log.info("Initializing plugin for {} device...".format(args.device)) + plugin = IEPlugin(device=args.device, plugin_dirs=args.plugin_dir) + if args.cpu_extension and 'CPU' in args.device: + plugin.add_cpu_extension(args.cpu_extension) + + + # Read IR + log.info("Reading IR...") + net = IENetwork(model=model_xml, weights=model_bin) + + if plugin.device == "CPU": + supported_layers = plugin.get_supported_layers(net) + not_supported_layers = [l for l in net.layers.keys() if l not in supported_layers] + if len(not_supported_layers) != 0: + log.error("Following layers are not supported by the plugin for specified device {}:\n {}". + format(plugin.device, ', '.join(not_supported_layers))) + log.error("Please try to specify cpu extensions library path in demo's command line parameters using -l " + "or --cpu_extension command line argument") + sys.exit(1) + + #Set Batch Size + net.batch_size = args.b + batchSize = net.batch_size + frameLimit = args.fr + assert len(net.inputs.keys()) == 1, "Demo supports only single input topologies" + assert len(net.outputs) == 1, "Demo supports only single output topologies" + input_blob = next(iter(net.inputs)) + out_blob = next(iter(net.outputs)) + log.info("Loading IR to the plugin...") + exec_net = plugin.load(network=net, num_requests=2) + + # Read and pre-process input image + n, c, h, w = net.inputs[input_blob].shape + output_dims=net.outputs[out_blob].shape + infer_width=w; + infer_height=h; + num_channels=c; + channel_size=infer_width*infer_height + full_image_size=channel_size*num_channels + + print("inputdims=",w,h,c,n) + print("outputdims=",output_dims[3],output_dims[2],output_dims[1],output_dims[0]) + if int(output_dims[3])>1 : + print("SSD Mode") + output_mode=output_mode_type.SSD_MODE + else: + print("Single Classification Mode") + output_mode=CLASSIFICATION_MODE + output_data_size=int(output_dims[2])*int(output_dims[1])*int(output_dims[0]) + del net + if args.input == 'cam': + input_stream = 0 + else: + input_stream = args.input + assert os.path.isfile(args.input), "Specified input file doesn't exist" + if args.labels: + with open(args.labels, 'r') as f: + labels_map = [x.strip() for x in f] + else: + labels_map = None + + cap = cv2.VideoCapture(input_stream) + + cur_request_id = 0 + next_request_id = 1 + + is_async_mode =True + if (is_async_mode == True): + log.info("Starting inference in async mode...") + else : + log.info("Starting inference in sync mode...") + + render_time = 0 + + framenum = 0 + process_more_frames=True + frames_in_output=batchSize + + while process_more_frames: + time1 = time.time() + for mb in range(0 , batchSize): + ret, frame = cap.read() + if not ret or (framenum >= frameLimit): + process_more_frames=False + frames_in_output=mb + + if (not process_more_frames): + break + + # convert image to blob + # Fill input tensor with planes. First b channel, then g and r channels + in_frame = cv2.resize(frame, (w, h)) + in_frame = in_frame.transpose((2, 0, 1)) # Change data layout from HWC to CHW + + + time2 = time.time() + diffPreProcess = time2 - time1 + if process_more_frames: + preprocess_times.append(diffPreProcess*1000) + + # Main sync point: + # in the truly Async mode we start the NEXT infer request, while waiting for the CURRENT to complete + # in the regular mode we start the CURRENT request and immediately wait for it's completion + inf_start = time.time() + if is_async_mode: + exec_net.start_async(request_id=next_request_id, inputs={input_blob: in_frame}) + else: + exec_net.start_async(request_id=cur_request_id, inputs={input_blob: in_frame}) + if exec_net.requests[cur_request_id].wait(-1) == 0: + inf_end = time.time() + det_time = inf_end - inf_start + infer_times.append(det_time*1000) + time1 = time.time() + + for mb in range(0 , batchSize): + if (framenum >= frameLimit): + process_more_frames=False; + break; + + # Parse detection results of the current request + res = exec_net.requests[cur_request_id].outputs[out_blob] + for obj in res[0][0]: + # Write into ROIs.txt only objects when probability more than specified threshold + if obj[2] > args.prob_threshold: + confidence=obj[2] + locallabel = obj[1] - 1 + print(str(0),str(framenum),str(locallabel),str(confidence),str(obj[3]),str(obj[4]),str(obj[5]),str(obj[6]), file=ROIfile) + + + sys.stdout.write("\rframenum:"+str(framenum + 1)) + sys.stdout.flush() + render_start = time.time() + framenum = framenum+1 + + time2 = time.time() + diffPostProcess = time2 - time1 + postprocess_times.append(diffPostProcess*1000) + + if is_async_mode: + cur_request_id, next_request_id = next_request_id, cur_request_id + + + print("\n") + preprocesstime=0 + inferencetime=0 + postprocesstime=0 + + for obj in preprocess_times: + preprocesstime+=obj + for obj in infer_times: + inferencetime+=obj + for obj in postprocess_times: + postprocesstime+=obj + + + print("Preprocess: {:.2f} ms/frame".format(preprocesstime/(len(preprocess_times)*batchSize))) + print("Inference: {:.2f} ms/frame ".format(inferencetime/(len(infer_times)*batchSize))) + print("Postprocess: {:.2f} ms/frame".format(postprocesstime/(len(postprocess_times)*batchSize))) + + del exec_net + del plugin + + +if __name__ == '__main__': + sys.exit(main() or 0)