Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 2 additions & 99 deletions yolox_ros_cpp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
- TensorRT 8.x *
- ONNXRuntime *
- Tensorflow Lite *
- **CUDA 11**

※ Either one of OpenVINO or TensorRT or ONNXRuntime or Tensorflow Lite is required.

Expand All @@ -18,106 +19,8 @@

※ Model convert script is not supported OpenVINO 2022.*

YOLOX is not required.
Don't use CUDA 12

※ Jetson + TensorRT docker support (Jetpack 4.6 r32.6.1). Tested with Jetson Nano 4GB.




<!-- <details>
<summary>Execute with docker</summary>


#### OpenVINO
```bash
# base image is "openvino/ubuntu20_dev:2021.4.1_20210416"
docker pull fateshelled/openvino_yolox_ros:latest

xhost +
docker run --rm -it \
--network host \
--privileged \
--user openvino \
-v $HOME/ros2_ws:/home/openvino/ros2_ws \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-w /home/openvino/ros2_ws \
-e DISPLAY=$DISPLAY \
--device /dev/video0:/dev/video0 \
fateshelled/openvino_yolox_ros:latest /bin/bash

# If use NCS2, mount "/dev/bus/usb".
xhost +
docker run --rm -it \
--network host \
--privileged \
--user openvino \
-v $HOME/ros2_ws:/home/openvino/ros2_ws \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-w /home/openvino/ros2_ws \
-v /dev/bus/usb:/dev/bus/usb
-e DISPLAY=$DISPLAY \
--device /dev/video0:/dev/video0 \
fateshelled/openvino_yolox_ros:latest \
/bin/bash

```

#### TensorRT
```bash
# base image is "nvcr.io/nvidia/pytorch:21.09-py3"
docker pull swiftfile/tensorrt_yolox_ros:latest

xhost +
docker run --rm -it \
--network host \
--gpus all \
--privileged \
-v $HOME/ros2_ws:/root/ros2_ws \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-w /root/ros2_ws \
-e DISPLAY=$DISPLAY \
--device /dev/video0:/dev/video0 \
swiftfile/tensorrt_yolox_ros:latest \
/bin/bash
```

#### Jetson + TensorRT
```bash
# base image is "dustynv/ros:foxy-ros-base-l4t-r32.6.1"
docker pull fateshelled/jetson_yolox_ros:foxy-ros-base-l4t-r32.6.1

# This image cannot display GUI.
docker run --rm -it \
--network host \
--runtime nvidia \
-v $HOME/ros2_ws:/root/ros2_ws \
-w /root/ros2_ws \
--device /dev/video0:/dev/video0 \
fateshelled/jetson_yolox_ros:foxy-ros-base-l4t-r32.6.1 \
/bin/bash
```

#### ONNXRuntime
```bash
# base image is "nvcr.io/nvidia/cuda:11.4.2-cudnn8-devel-ubuntu20.04"
docker pull fateshelled/onnxruntime_yolox_ros:latest

xhost +
docker run --rm -it \
--network host \
--gpus all \
--privileged \
-v $HOME/ros2_ws:/root/ros2_ws \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-w /root/ros2_ws \
-e DISPLAY=$DISPLAY \
--device /dev/video0:/dev/video0 \
fateshelled/onnxruntime_yolox_ros:latest \
/bin/bash
```

</details> -->

## Clone YOLOX-ROS
```bash
Expand Down
33 changes: 33 additions & 0 deletions yolox_ros_cpp/docker/jetson/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Jetson

## Environment

- Jetson AGX Orin
- Jetpack 5.1 (R35.1.0 @Ubuntu 20.04)
- Docker
- [TIER IV C1 Camera environment](https://github.com/tier4/tier4_automotive_hdr_camera) (When using C1 camera)

## Build & attach shell


```bash
cd ./YOLOX-ROS/yolox_ros_cpp/docker/jetson
bash setup.bash
```

## Build (in docker container)

```bash
source /dependencies/install/setup.bash
colcon build --cmake-args -DJETSON=ON
bash src/YOLOX-ROS/weights/onnx/download.bash yolox_tiny
bash src/YOLOX-ROS/weights/tensorrt/convert.bash yolox_tiny
```


## Run (in docker container)

```bash
source ./install/setup.bash
ros2 launch yolox_ros_cpp yolox_tensorrt.launch.py
```
18 changes: 0 additions & 18 deletions yolox_ros_cpp/docker/jetson/docker-compose.yaml

This file was deleted.

80 changes: 21 additions & 59 deletions yolox_ros_cpp/docker/jetson/dockerfile
Original file line number Diff line number Diff line change
@@ -1,65 +1,27 @@
FROM dustynv/ros:foxy-ros-base-l4t-r32.6.1
FROM dustynv/ros:humble-ros-base-deepstream-l4t-r35.1.0

ENV DEBIAN_FRONTEND=noninteractive

RUN apt update && \
apt install -y libeigen3-dev python3-pip && \
apt -y clean && \
rm -rf /var/lib/apt/lists/*

RUN python3 -m pip install -U pip && \
python3 -m pip install cmake

# add PATH
ENV PATH=$PATH:/usr/src/tensorrt/bin

# torch 1.9.0
WORKDIR /workspace
RUN apt update && \
apt install -y libopenblas-base libopenmpi-dev && \
apt -y clean && \
rm -rf /var/lib/apt/lists/*
RUN wget https://nvidia.box.com/shared/static/h1z9sw4bb1ybi0rm3tu8qdj8hs05ljbm.whl -O torch-1.9.0-cp36-cp36m-linux_aarch64.whl && \
python3 -m pip install Cython && \
python3 -m pip install numpy torch-1.9.0-cp36-cp36m-linux_aarch64.whl &&\
rm torch-1.9.0-cp36-cp36m-linux_aarch64.whl

# torch2trt
WORKDIR /workspace
RUN git clone https://github.com/NVIDIA-AI-IOT/torch2trt && \
cd torch2trt && \
python3 setup.py install

# torchvision
ENV TORCHVISION_VERSION=0.10.0
WORKDIR /workspace
RUN apt update && \
apt install -y libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev && \
apt -y clean && \
rm -rf /var/lib/apt/lists/*
RUN git clone --branch v${TORCHVISION_VERSION} https://github.com/pytorch/vision torchvision && \
cd torchvision && \
BUILD_VERSION=$TORCHVISION_VERSION && \
python3 setup.py install

# YOLOX
WORKDIR /workspace
ENV YOLOX_VERSION=0.2.0
# matplotlib, onnx-optimizer cannot install by pip
RUN apt update && \
apt install -y python3-matplotlib && \
apt -y clean && \
rm -rf /var/lib/apt/lists/*
RUN python3 -m pip install onnx==1.8.1 onnxruntime==1.8.0
RUN git clone --recursive https://github.com/onnx/optimizer onnxoptimizer && \
cd onnxoptimizer && \
python3 -m pip install -e .

# bugfix for numpy==1.19.5
# set OPENBLAS_CORETYPE environment variable to ARMV8
ENV OPENBLAS_CORETYPE=ARMV8

RUN git clone -b $YOLOX_VERSION https://github.com/Megvii-BaseDetection/YOLOX YOLOX && \
cd YOLOX && \
python3 -m pip install -e .

RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 42D5A192B819C5DA && \
apt-get update && \
apt-get install -y \
doxygen \
libfmt-dev \
librange-v3-dev \
python3-pip \
python3-jinja2 \
python3-typeguard
RUN mkdir -p /dependencies/src && \
cd /dependencies/src && \
git clone https://github.com/PickNikRobotics/RSL.git && \
git clone https://github.com/PickNikRobotics/cpp_polyfills.git && \
git clone https://github.com/ros-perception/vision_opencv.git -b humble && \
git clone https://github.com/PickNikRobotics/generate_parameter_library.git && \
cd /dependencies/ && \
. /opt/ros/humble/install/setup.sh && \
colcon build

COPY /usr/include/aarch64-linux-gnu/ /usr/include/aarch64-linux-gnu/
13 changes: 13 additions & 0 deletions yolox_ros_cpp/docker/jetson/setup.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
SCRIPT_DIR=$(cd $(dirname $0); pwd)
cd ${SCRIPT_DIR}
mkdir ./tensorrt_dir
cp -r /usr/include/aarch64-linux-gnu/* ./tensorrt_dir/

docker build -t yolox_ros_jetson:latest -f ./dockerfile .
docker run -it --rm --network host --volume $HOME/ros2_ws:/root/ros2_ws --device /dev/video0:/dev/video0 --workdir /root/ros2_ws --runtime nvidia yolox_ros_jetson /bin/bash


# source /dependencies/install/setup.bash
# colcon build --cmake-args -DJETSON=ON
# bash src/YOLOX-ROS/weights/onnx/download.bash yolox_tiny
# bash src/YOLOX-ROS/weights/tensorrt/convert.bash yolox_tiny
10 changes: 5 additions & 5 deletions yolox_ros_cpp/docker/onnxruntime/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
version: '3.4'
services:
yolox_ros:
yolox_ros_onnxruntime:
container_name: yolox_onnxruntime
# build:
# context: .
# args:
# - BASE_TAB=11.4.2-cudnn8-devel-ubuntu20.04
build:
context: .
args:
- BASE_TAB=12.1.0-cudnn8-devel-ubuntu22.04
image: fateshelled/onnxruntime_yolox_ros:latest
network_mode: host
runtime: nvidia
Expand Down
42 changes: 12 additions & 30 deletions yolox_ros_cpp/docker/onnxruntime/dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ARG BASE_TAG=11.4.2-cudnn8-devel-ubuntu20.04
ARG BASE_TAG=11.7.1-cudnn8-devel-ubuntu22.04
FROM nvcr.io/nvidia/cuda:${BASE_TAG}
ENV DEBIAN_FRONTEND=noninteractive

Expand All @@ -22,12 +22,9 @@ RUN git clone --depth 1 --recursive https://github.com/microsoft/onnxruntime -b
--use_cuda \
--config RelWithDebInfo \
--build_shared_lib \
--parallel \
--build_wheel \
--skip_tests && \
cd build/Linux/RelWithDebInfo && \
make install && \
python3 -m pip install dist/*.whl && \
rm -r /workdir/onnxruntime

# Install ROS2
Expand All @@ -39,41 +36,26 @@ RUN apt update && apt install locales && \
ENV LANG=en_US.UTF-8

RUN apt update && \
apt install -y curl gnupg2 lsb-release && \
curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg && \
apt install -y git wget curl gnupg2 lsb-release && \
curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg && \
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null && \
sed -i -e 's/ubuntu .* main/ubuntu focal main/g' /etc/apt/sources.list.d/ros2.list && \
sed -i -e 's/ubuntu .* main/ubuntu jammy main/g' /etc/apt/sources.list.d/ros2.list && \
apt update && \
apt install -y ros-foxy-ros-base \
python3-colcon-common-extensions \
ros-foxy-v4l2-camera \
ros-foxy-cv-bridge \
ros-foxy-rqt-graph \
ros-foxy-rqt-image-view && \
rm -rf /var/lib/apt/lists/* &&\
apt install -y ros-dev-tools \
ros-humble-cv-bridge \
ros-humble-generate-parameter-library \
ros-humble-parameter-traits \
ros-humble-ros-base \
ros-humble-rqt-image-view \
ros-humble-v4l2-camera && \
apt -y clean && \
rm -rf /var/lib/apt/lists/* && \
pip install -U pip && \
pip install catkin_pkg && \
pip install empy && \
pip install lark && \
python3 -m pip cache purge

WORKDIR /workdir
ENV YOLOX_VERSION=0.3.0
RUN git clone --depth 1 https://github.com/Megvii-BaseDetection/YOLOX -b $YOLOX_VERSION && \
cd YOLOX && \
# python3 -m pip install -r requirements.txt && \
python3 -m pip install -U numpy \
torch>=1.7 \
opencv_python \
loguru \
tqdm \
torchvision \
thop \
ninja \
tabulate && \
python3 -m pip install --no-deps . && \
python3 -m pip cache purge

COPY ./ros_entrypoint.sh /ros_entrypoint.sh
RUN echo "source /ros_entrypoint.sh" >> /root/.bashrc
Expand Down
2 changes: 1 addition & 1 deletion yolox_ros_cpp/docker/onnxruntime/ros_entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/bin/bash
source /opt/ros/foxy/setup.bash
source /opt/ros/humble/setup.bash
source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash
9 changes: 4 additions & 5 deletions yolox_ros_cpp/docker/openvino/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
version: '3.4'
services:
yolox_ros:
yolox_ros_openvino:
container_name: yolox_openvino
# build:
# context: .
image: fateshelled/openvino_yolox_ros:latest
build:
context: .
network_mode: host
environment:
- DISPLAY=$DISPLAY
volumes:
- $HOME/ros2_ws:/root/ros2_ws
- ../../../:/root/ros2_ws/src
- /tmp/.X11-unix:/tmp/.X11-unix
devices:
- "/dev/video0:/dev/video0"
Expand Down
Loading