Giter Club home page Giter Club logo

ros2_torch_trt's Introduction

ROS2 Real Time Classification and Detection

This repository contains ROS2 packages for carrying out real time classification and detection for images using PyTorch.

It also contains packages which use TensorRT to perform faster inference via torch2trt.

For Object Classification users can select from a variety of pretrained models.

For Object Detection, the MobileNetV1 SSD model is used.

These models are converted to their TRT formats for faster inference using torch2trt

The packages have been tested on NVIDIA Jetson Xavier AGX with Ubuntu 18.04, ROS Eloquent and PyTorch version 1.6.0

Package Dependencies:

Build these packages into your workspace. Make sure ROS2 versions are present.

Other Dependencies:

Pytorch and torchvision (if using Jetson, refer: https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-6-0-now-available/72048)

OpenCV (Should already exist if Jetson has been flashed with JetPack)

torch2trt (refer: https://github.com/NVIDIA-AI-IOT/torch2trt)

alt text

The FPS can be seen on the left side of the image along with the detection window on the right.

Steps before using the packages

  • Make sure all the package dependencies are fulfilled and the packages are built in your workspace

  • Clone this repository into your workspace

  • Execute the following to create a new folder ros2_models in home for storing all the models and labels needed:

cd
mkdir ros2_models 

Build and run live_classifier

  • Copy the imagenet_classes.txt from the live_classifier folder to your home/ros2_models directory. This has the labels for the classification model.

  • Navigate into your worksapce. Run: colcon build --packages-select live_classifier

  • Next, open 2 terminals and navigate to your workspace. Run both these commands sequentially: source /opt/ros/eloquent/setup.bash and . install/setup.bash This will source the terminals.

  • Now, first begin streaming images from your webcam. In one of the terminals: If using image_tools package: ros2 run image_tools cam2image If using usb_camera package: ros2 run usb_camera_driver usb_camera_driver_node

  • In the second terminal (should be sourced) : ros2 run live_classifier live_classifier --ros-args -p model:=resnet50

Other model options include resnet18, squeezenet, alexnet which can be passed with the model:=resnet18 for example.

  • The classification node will subscribe to the image topic and will perform classification. It will display the label and confidence for the image being classified. Also, a window will appear which will display the webcam image stream.

  • The results of the classfication are published as Classification2D messages. Open a new terminal and source it. Run: ros2 topic echo classification

Build and run live_detection

Download the model weights and labels from the following links:

Place these files in home/ros2_models directory.

  • Navigate into your worksapce. Run: colcon build --packages-select live_detection

  • Next, open 2 terminals and navigate to your workspace. Run both these commands sequentially: source /opt/ros/eloquent/setup.bash and . install/setup.bash This will source the terminals.

  • Now, first begin streaming images from your webcam. In one of the terminals: If using image_tools package: ros2 run image_tools cam2image If using usb_camera package: ros2 run usb_camera_driver usb_camera_driver_node

  • In the second terminal (should be sourced) : ros2 run live_detection live_detector

  • The detection node will subscribe to the image topic and will perform detection. It will display the labels and probabilities for the objects detected in the image. Also, a window will appear which will display the object detection results in real time.

  • The results of the detection are published as Detection2DArray messages. Open a new terminal and source it. Run: ros2 topic echo detection

  • For visualizing the results in RViZ2 set the Fixed Frame as camera_frame. Select the topic detection_image to visualize the detections.

RQT Graph when both Detection and Classifier Nodes are running

alt text

  • The results are published to vision_msgs

Build and run trt_live_classifier

  • The package can now be built and run. Navigate into your workspace run colcon build --packages-select trt_live_classifier

  • Next, open 2 terminals and navigate to your workspace. Run both these commands sequentially: source /opt/ros/eloquent/setup.bash and . install/setup.bash This will source the terminals.

  • Now, first begin streaming images from your webcam. In one of the terminals: If using image_tools package: ros2 run image_tools cam2image If using usb_camera package: ros2 run usb_camera_driver usb_camera_driver_node

  • In the second terminal (should be sourced): ros2 run trt_live_classifier trt_classifier --ros-args -p trt_model:=resnet50

Other model options include resnet18, squeezenet, alexnet which can be passed with the model:=resnet18 for example. Running it the first time will be slow as the corresponding TRT module will be generated for your hardware configuration.

  • This will now create a node which carries out faster inference which is clear from the inference time which is displayed on the terminal as well.

  • The results of the classfication are published as Classification2D messages. Open a new terminal and source it. Run: ros2 topic echo trt_classification

Build and run trt_live_detector:

  • Make sure the weights and labels from live_detection section are placed in the ros2/models directory. They will be needed for generating the TRT Module.

  • The package can now be built and run. Navigate into your workspace run colcon build --packages-select trt_live_detector

  • Next, open 2 terminals and navigate to your workspace. Run both these commands sequentially: source /opt/ros/eloquent/setup.bash and . install/setup.bash This will source the terminals.

  • Now, first begin streaming images from your webcam. In one of the terminals: If using image_tools package: ros2 run image_tools cam2image If using usb_camera package: ros2 run usb_camera_driver usb_camera_driver_node

  • In the second terminal (should be sourced): ros2 run trt_live_detector trt_detector

When this is run the first time it will generate the TRT module depending on your hardware configuration which will take time.

  • The results of the detection are published as Detection2DArray messages. Open a new terminal and source it. Run: ros2 topic echo trt_detection

  • This will now create a node which carries out faster object detection which is clear from the inference time and is displayed on the terminal as well.

  • For visualizing the results in RViZ2 set the Fixed Frame as camera_frame. Select the topic trt_detection_image to visualize the detections.

References

  • PyTorch implementation of the MobileNetV1 SSD model from https://github.com/qfgaohao/pytorch-ssd is used. The download links for the weights and the labels for live_detection use the pre-trained ones provided in the repository.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.