diff --git a/README.md b/README.md index 530d27b..de17606 100644 --- a/README.md +++ b/README.md @@ -30,9 +30,10 @@ This package is powered by [NVIDIA Isaac Transport for ROS (NITROS)](https://dev The performance results of benchmarking the prepared pipelines in this package on supported platforms are below: -| Pipeline | AGX Orin | Orin Nano | x86_64 w/ RTX 3060 Ti | -| -------------------------- | ------------------ | ---------------- | --------------------- | -| Isaac ROS Detectnet (544p) | 225 fps
7.7ms | 72 fps
18ms | 450 fps
3.2ms | +| Sample Graph | Input Size | AGX Orin | Orin NX | Orin Nano 8GB | x86_64 w/ RTX 4060 Ti | +| --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | +| [DetectNet Object Detection Graph](https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_benchmark/blob/main/scripts//isaac_ros_detectnet_graph.py) | 544p | [252 fps](https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_benchmark/blob/main/results/isaac_ros_detectnet_graph-agx_orin.json)
8.7 ms | [110 fps](https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_benchmark/blob/main/results/isaac_ros_detectnet_graph-orin_nx.json)
13 ms | [77.9 fps](https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_benchmark/blob/main/results/isaac_ros_detectnet_graph-orin_nano_emul.json)
18 ms | -- | + > **Note**: These numbers are reported with defaults parameter values found in [params.yaml](./isaac_ros_detectnet/config/params.yaml). @@ -81,7 +82,7 @@ To run the DetectNet object detection inference, the following ROS 2 nodes shoul ## Latest Update -Update 2023-04-05: Source available GXF extensions +Update 2023-05-25: Performance improvements. ## Supported Platforms @@ -249,6 +250,7 @@ For solutions to problems with using DNN models, please check [here](https://git | Date | Changes | | ---------- | ------------------------------------------------------------------------------------- | +| 2023-05-25 | Performance improvements | | 2023-04-05 | Source available GXF extensions | | 2022-10-19 | Updated OSS licensing | | 2022-08-31 | Update to use NITROS for improved performance and to be compatible with JetPack 5.0.2 | diff --git a/isaac_ros_detectnet/config/detectnet_node.yaml b/isaac_ros_detectnet/config/detectnet_node.yaml index b25eec7..8a47472 100644 --- a/isaac_ros_detectnet/config/detectnet_node.yaml +++ b/isaac_ros_detectnet/config/detectnet_node.yaml @@ -1,6 +1,6 @@ %YAML 1.2 # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2022-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -58,35 +58,38 @@ components: transmitter: detections_out min_size: 1 --- -name: vault +name: sink components: - name: signal type: nvidia::gxf::DoubleBufferReceiver parameters: - capacity: 1 + capacity: 2 policy: 0 - type: nvidia::gxf::MessageAvailableSchedulingTerm parameters: receiver: signal min_size: 1 -- name: vault - type: nvidia::gxf::Vault +- name: sink + type: nvidia::isaac_ros::MessageRelay parameters: source: signal - max_waiting_count: 1 - drop_waiting: false --- components: - name: edge0 type: nvidia::gxf::Connection parameters: source: detectnet_decoder/detections_out - target: vault/signal + target: sink/signal --- components: -- type: nvidia::gxf::GreedyScheduler +- name: clock + type: nvidia::gxf::RealtimeClock +- type: nvidia::gxf::MultiThreadScheduler parameters: clock: clock stop_on_deadlock: false -- name: clock - type: nvidia::gxf::RealtimeClock + check_recession_period_ms: 1 + worker_thread_number: 2 +- type: nvidia::gxf::JobStatistics + parameters: + clock: clock diff --git a/isaac_ros_detectnet/gxf/detectnet/detectnet_decoder.cpp b/isaac_ros_detectnet/gxf/detectnet/detectnet_decoder.cpp index 3f812c8..08645e8 100644 --- a/isaac_ros_detectnet/gxf/detectnet/detectnet_decoder.cpp +++ b/isaac_ros_detectnet/gxf/detectnet/detectnet_decoder.cpp @@ -261,6 +261,7 @@ gxf_result_t DetectnetDecoder::tick() noexcept return GXF_FAILURE; } + // TODO(ashwinvk): Do not copy data to host and perform decoding using cuda // copy memory to host float cov_tensor_arr[cov_tensor->size() / sizeof(float)]; // since data in tensor is kFloat32 const cudaError_t cuda_error_cov_tensor = cudaMemcpy( diff --git a/isaac_ros_detectnet/package.xml b/isaac_ros_detectnet/package.xml index f85e51f..d6ae923 100644 --- a/isaac_ros_detectnet/package.xml +++ b/isaac_ros_detectnet/package.xml @@ -21,7 +21,7 @@ SPDX-License-Identifier: Apache-2.0 isaac_ros_detectnet - 0.30.0 + 0.31.0 DetectNet model processing Ashwin Varghese Kuruttukulam diff --git a/isaac_ros_detectnet/src/detectnet_decoder_node.cpp b/isaac_ros_detectnet/src/detectnet_decoder_node.cpp index 1020b2a..68aed2b 100644 --- a/isaac_ros_detectnet/src/detectnet_decoder_node.cpp +++ b/isaac_ros_detectnet/src/detectnet_decoder_node.cpp @@ -1,5 +1,5 @@ // SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -// Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -50,7 +50,7 @@ using nvidia::gxf::optimizer::GraphIOGroupSupportedDataTypesInfoList; #define INPUT_DEFAULT_TENSOR_FORMAT_TENSORLIST "nitros_tensor_list_nchw_rgb_f32" #define INPUT_TOPIC_NAME_TENSORLIST "tensor_sub" -#define OUTPUT_COMPONENT_KEY_DETECTIONS "vault/vault" +#define OUTPUT_COMPONENT_KEY_DETECTIONS "sink/sink" #define OUTPUT_DEFAULT_TENSOR_FORMAT_DETECTIONS "nitros_detection2_d_array" #define OUTPUT_TOPIC_NAME_TAG_DETECTIONS "detectnet/detections"