From 85d93c0091d246e1ed10be4effaff896c7c3ffa3 Mon Sep 17 00:00:00 2001 From: Erol444 Date: Fri, 17 Feb 2023 18:15:40 +0100 Subject: [PATCH 1/7] ImagegConfig docs update --- docs/source/components/messages/image_manip_config.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/source/components/messages/image_manip_config.rst b/docs/source/components/messages/image_manip_config.rst index 85ac597f9..5535536f5 100644 --- a/docs/source/components/messages/image_manip_config.rst +++ b/docs/source/components/messages/image_manip_config.rst @@ -2,10 +2,9 @@ ImageManipConfig ================ This message can is used for cropping, warping, rotating, resizing, etc. an image in runtime. -It is sent either from the host to :ref:`ColorCamera` or :ref:`ImageManip`. +It can be sent from host/:ref:`Script` node to either :ref:`ColorCamera` or :ref:`ImageManip`. -.. - It is sent either from the host or from the :ref:`Script` node to :ref:`ColorCamera` or :ref:`ImageManip`. +.. note:: This message will reconfigure the whole config of the node, meaning you need to set all settings, not just the setting you want to change. Examples of functionality ######################### From 613107a83d54fd42f672cbb3ca684b6866df5c76 Mon Sep 17 00:00:00 2001 From: Erol444 Date: Fri, 17 Feb 2023 18:15:55 +0100 Subject: [PATCH 2/7] Low latency docs update (bandwidth) --- docs/source/tutorials/low-latency.rst | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/docs/source/tutorials/low-latency.rst b/docs/source/tutorials/low-latency.rst index 376b7cd1f..c7ab2f092 100644 --- a/docs/source/tutorials/low-latency.rst +++ b/docs/source/tutorials/low-latency.rst @@ -128,6 +128,27 @@ On PoE, the latency can vary quite a bit due to a number of factors: * 100% OAK Leon CSS (CPU) usage. The Leon CSS core handles the POE communication (`see docs here `__), and if the CPU is 100% used, it will not be able to handle the communication as fast as it should. * Another potential way to improve PoE latency would be to fine-tune network settings, like MTU, TCP window size, etc. (see `here `__ for more info) +Bandwidth +######### + +With large, unencoded frames, one can quickly saturate the bandwidth even at 30FPS, especially on PoE devices (1gbps link): + +.. code-block::bash + + 720P NV12/YUV420 frames: 1280 * 720 * 1.5 * 30fps * 8bits = 331 mbps + 1080P NV12/YUV420 frames: 1920 * 1080 * 1.5 * 30fps * 8bits = 747 mbps + 1080P RGB frames: 1920 * 1080 * 3 * 30fps * 8bits = 1.5 gbps + 4K NV12/YUV420 frames: 3840 * 2160 * 1.5 * 30fps * 8bits = 3 gbps + 800P depth frames: 1280 * 800 * 2 * 30fps * 8bits = 492 mbps + 400P depth frames: 640 * 400 * 2 * 30fps * 8bits = 123 mbps + +The third value in the formula is byte/pixel, which is 1.5 for NV12/YUV420, 3 for RGB, and 2 for depth frames. + +A few options to reduce bandwidth: + +- Encode frames (H.264, H.265, MJPEG) on-device using :ref:`VideoEncoder node ` +- Reduce FPS/resolution/number of streams + Reducing latency when running NN ################################ @@ -153,11 +174,11 @@ This time includes the following: - And finally, eventual extra latency until it reaches the app Note: if the FPS is increased slightly more, towards 19..21 FPS, an extra latency of about 10ms appears, that we believe -is related to firmware. We are activaly looking for improvements for lower latencies. +is related to firmware. We are actively looking for improvements for lower latencies. -NN input queue size and blocking behaviour ------------------------------------------- +NN input queue size and blocking behavior +----------------------------------------- If the app has ``detNetwork.input.setBlocking(False)``, but the queue size doesn't change, the following adjustment may help improve latency performance: From ff45e07b3fa38049959e4ae31e7ffc7bee6d985d Mon Sep 17 00:00:00 2001 From: Erol444 Date: Fri, 17 Feb 2023 18:16:12 +0100 Subject: [PATCH 3/7] RGB depth alignment add docs on high-res color stream --- docs/source/samples/StereoDepth/rgb_depth_aligned.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/source/samples/StereoDepth/rgb_depth_aligned.rst b/docs/source/samples/StereoDepth/rgb_depth_aligned.rst index fbdd16264..4c854cbe6 100644 --- a/docs/source/samples/StereoDepth/rgb_depth_aligned.rst +++ b/docs/source/samples/StereoDepth/rgb_depth_aligned.rst @@ -12,6 +12,9 @@ By default, the depth map will get scaled to match the resolution of the camera depth is aligned to the 1080P color sensor, StereoDepth will upscale depth to 1080P as well. Depth scaling can be avoided by configuring :ref:`StereoDepth`'s ``stereo.setOutputSize(width, height)``. +To align depth with **higher resolution color stream** (eg. 12MP), you need to limit the resolution of the depth map. You can +do that with ``stereo.setOutputSize(w,h)``. Code `example here `__. + Demo #### From cd37a3947d950fdeeea03acb64aa74111005ca37 Mon Sep 17 00:00:00 2001 From: Erol444 Date: Fri, 17 Feb 2023 18:16:33 +0100 Subject: [PATCH 4/7] VideoENcoder docs elaboration on lossy codecs --- docs/source/components/nodes/video_encoder.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/components/nodes/video_encoder.rst b/docs/source/components/nodes/video_encoder.rst index 060d36c1c..4f899de7a 100644 --- a/docs/source/components/nodes/video_encoder.rst +++ b/docs/source/components/nodes/video_encoder.rst @@ -2,7 +2,7 @@ VideoEncoder ============ VideoEncoder node is used to encode :ref:`ImgFrame` into either H264, H265, or MJPEG streams. Only NV12 or GRAY8 (which gets converted to NV12) format is -supported as an input. +supported as an input. All codecs are lossy (except lossless MJPEG), for more information please see `encoding quality docs `__. .. include:: /includes/container-encoding.rst From 91d769708ea4b27a1ae3a562673ed5c6fdb93e33 Mon Sep 17 00:00:00 2001 From: Erol444 Date: Mon, 20 Feb 2023 15:11:08 +0100 Subject: [PATCH 5/7] Updated low latency to include docs about allocating resources for max fps vs lowest latency --- docs/source/tutorials/low-latency.rst | 77 ++++++++++++++++++++++++--- 1 file changed, 70 insertions(+), 7 deletions(-) diff --git a/docs/source/tutorials/low-latency.rst b/docs/source/tutorials/low-latency.rst index c7ab2f092..72358b398 100644 --- a/docs/source/tutorials/low-latency.rst +++ b/docs/source/tutorials/low-latency.rst @@ -135,14 +135,20 @@ With large, unencoded frames, one can quickly saturate the bandwidth even at 30F .. code-block::bash - 720P NV12/YUV420 frames: 1280 * 720 * 1.5 * 30fps * 8bits = 331 mbps + 4K NV12/YUV420 frames: 3840 * 2160 * 1.5 * 30fps * 8bits = 3 gbps 1080P NV12/YUV420 frames: 1920 * 1080 * 1.5 * 30fps * 8bits = 747 mbps + 720P NV12/YUV420 frames: 1280 * 720 * 1.5 * 30fps * 8bits = 331 mbps + 1080P RGB frames: 1920 * 1080 * 3 * 30fps * 8bits = 1.5 gbps - 4K NV12/YUV420 frames: 3840 * 2160 * 1.5 * 30fps * 8bits = 3 gbps + 800P depth frames: 1280 * 800 * 2 * 30fps * 8bits = 492 mbps 400P depth frames: 640 * 400 * 2 * 30fps * 8bits = 123 mbps -The third value in the formula is byte/pixel, which is 1.5 for NV12/YUV420, 3 for RGB, and 2 for depth frames. + 800P mono frames: 1280 * 800 * 1 * 30fps * 8bits = 246 mbps + 400P mono frames: 640 * 400 * 1 * 30fps * 8bits = 62 mbps + +The third value in the formula is byte/pixel, which is 1.5 for NV12/YUV420, 3 for RGB, and 2 for depth frames, and 1 +for mono (grayscale) frames. It's either 1 (normal) or 2 (subpixel mode) for disparity frames. A few options to reduce bandwidth: @@ -155,8 +161,65 @@ Reducing latency when running NN In the examples above we were only streaming frames, without doing anything else on the OAK camera. This section will focus on how to reduce latency when also running NN model on the OAK. -Lowering camera FPS to match NN FPS ------------------------------------ +1. Increasing NN resources +-------------------------- + +One option to reduce latency is to increase the NN resources. This can be done by changing the number of allocated NCEs and SHAVES (see HW accelerator `docs here `__). +`Compile Tool `__ can compile a model for more SHAVE cores. To allocate more NCEs, you can use API below: + +.. code-block:: python + + import depthai as dai + + pipeline = dai.Pipeline() + # nn = pipeline.createNeuralNetwork() + # nn = pipeline.create(dai.node.MobileNetDetectionNetwork) + nn = pipeline.create(dai.node.YoloDetectionNetwork) + nn.setNumInferenceThreads(1) # By default 2 threads are used + nn.setNumNCEPerInferenceThread(2) # By default, 1 NCE is used per thread + +Models usually run at **max FPS** when using 2 threads (1 NCE/Thread), and compiling model for ``AVAILABLE_SHAVES / 2``. + +Example of FPS & latency comparison for YoloV7-tiny: + +.. list-table:: + :header-rows: 1 + + * - NN resources + - Camera FPS + - Latency + - NN FPS + * - **6 SHAVEs, 2x Threads (1NCE/Thread)** + - 15 + - 155 ms + - 15 + * - 6 SHAVEs, 2x Threads (1NCE/Thread) + - 14 + - 149 ms + - 14 + * - 6 SHAVEs, 2x Threads (1NCE/Thread) + - 13 + - 146 ms + - 13 + * - 6 SHAVEs, 2x Threads (1NCE/Thread) + - 10 + - 141 ms + - 10 + * - **13 SHAVEs, 1x Thread (2NCE/Thread)** + - 30 + - 145 ms + - 11.6 + * - 13 SHAVEs, 1x Thread (2NCE/Thread) + - 12 + - 128 ms + - 12 + * - 13 SHAVEs, 1x Thread (2NCE/Thread) + - 10 + - 118 ms + - 10 + +2. Lowering camera FPS to match NN FPS +-------------------------------------- Lowering FPS to not exceed NN capabilities typically provides the best latency performance, since the NN is able to start the inference as soon as a new frame is available. @@ -177,8 +240,8 @@ Note: if the FPS is increased slightly more, towards 19..21 FPS, an extra latenc is related to firmware. We are actively looking for improvements for lower latencies. -NN input queue size and blocking behavior ------------------------------------------ +3. NN input queue size and blocking behavior +-------------------------------------------- If the app has ``detNetwork.input.setBlocking(False)``, but the queue size doesn't change, the following adjustment may help improve latency performance: From c104d623a5588b7328ef10ea103f1d8326c41b95 Mon Sep 17 00:00:00 2001 From: Erol444 Date: Mon, 20 Feb 2023 16:27:01 +0100 Subject: [PATCH 6/7] Updated linux instal docs --- docs/source/install.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/install.rst b/docs/source/install.rst index 020b76b61..c72fbee2b 100644 --- a/docs/source/install.rst +++ b/docs/source/install.rst @@ -31,7 +31,7 @@ Follow the steps below to just install depthai api library dependencies for your .. code-block:: bash - sudo wget -qO- https://docs.luxonis.com/install_depthai.sh | bash + sudo wget -qO- https://docs.luxonis.com/install_dependencies.sh | bash Please refer to :ref:`Supported Platforms` if any issues occur. From 766c7283c055c2749cf606e1a5d6315b6f0cfa82 Mon Sep 17 00:00:00 2001 From: Erol444 Date: Mon, 20 Feb 2023 18:13:46 +0100 Subject: [PATCH 7/7] Updated favicon --- docs/source/_static/images/favicon.png | Bin 6290 -> 2256 bytes docs/source/_static/images/logo.png | Bin 35472 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/source/_static/images/logo.png diff --git a/docs/source/_static/images/favicon.png b/docs/source/_static/images/favicon.png index 2bbaad0ecd427e58e7479766688bdd03caa4a1da..decd05d31ed4363e55ec6c568b568af9b69e6db6 100644 GIT binary patch literal 2256 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 diff --git a/docs/source/_static/images/logo.png b/docs/source/_static/images/logo.png deleted file mode 100644 index 5f294fb91ef67eac6b98859f99bf1ccbc538dc63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35472 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