|
|
명령어를 치고 나면 mmdec_ws라는 이름을 가진 디렉터리가 생성됨
이 가상환경을 활성화 시키고 라이브러리들을 깔아야 독립적인 환경 구성 가능함
| $ source mmdet_ws/bin/activate |
이런식으로 가상환경 활성화 시키고 아래 명령어 작성하여 파이썬 모듈 rcply 인식하는지 확인
| $ source /opt/ros/jazzy/setup.bash |
| $ python3 -c "import rclpy; print(rclpy.__file__)" |
에러 없이 뜨면 이후에 MMDetection3D에 필요한 라이브러리들을 설치하면 됨
PC의 CUDA version을 확인하고 받으면 됨, 4070 ti 기준 cuda 12.1로 설치함 (spconv 고려)
| $ nvidia-smi # 지원하는 CUDA version 확인 $ nvcc --version # CUDA toolkit version 확인 |
Pytorch 설치
| $ pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 |
GPU를 제대로 인식했는지 확인하는 명령어
| $ python3 -c "import torch; print('PyTorch Version:', torch.__version__); print('CUDA Available:', torch.cuda.is_available()); print('CUDA Version Match:', torch.version.cuda)" |
OpenMIM 설치
| $ pip install -U openmim |
MMEngine, MMCV, MMDetection 설치
| $ mim install mmengine $ mim install "mmcv>=2.0.0" $ mim install "mmdet>=3.0.0" |
spconv 설치
| $ pip install spconv-cu121 |
MMDetection3D git clone & build
| $ git clone https://github.com/open-mmlab/mmdetection3d.git $ cd mmdetection3d $ pip install -v -e |
| # ros2_foxy ver 기준 bashrc 수정 사항 source /opt/ros/jazzy/setup.bash source ~/ros2_ws/install/local_setup.bash source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash source /usr/share/colcon_cd/function/colcon_cd.sh export _colcon_cd_root=~/ros2_ws # export ROS_DOMAIN_ID=1 # export ROS_NAMESPACE=jetson13 export RMW_IMPLEMENTATION=rmw_fastrtps_cpp # export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp export RCUTILS_COLORIZED_OUTPUT=1 export RCUTILS_LOGGING_USE_STDOUT=0 # mmdet_ws 가상환경 라이브러리 경로 추가 export PYTHONPATH=/home/linux/mmdet_ws/lib/python3.12/site-packages:$PYTHONPATH # ROS2 Python 경로 설정 (mmdet_ws 가상환경 연동) export PYTHONPATH=$PYTHONPATH:/home/linux/mmdet_ws/lib/python3.12/site-packages:/home/linux/mmdet_ws/mmdetection3d |
▶ carla data
MMDetection3D에서 제공하는 pretrained centerpoint-pillar model pth가 nuscene으로 학습되어 있음
https://www.nuscenes.org/nuscenes#data-collection
사양 맞춰서 bag에 담아 진행함
▶ inference.py
https://github.com/mxnseo/MMDetection3D/tree/main/test_centerpoint_rviz
▶ vision_msgs
vision_msgs?
: ROS에서 Computer Vision 데이터를 주고받기 위해 정의된 표준 메세지 패키지
vs Marker (visualization_msgs)
| visualization_msgs | vision_msgs | |
| 목적 | 시각화를 위함 | 로봇(알고리즘)이 이해하기 위함 |
| 정보 | 선, 점, 색상, 두께 등의 그래픽 정보 | 클래스, 점수, 위치, 크기 등의 정보 |
| 활용 | Rviz에 단순 시각화 용도 | 다른 노드(경로 계획, 추적)가 받아서 판단을 내릴 수 있음 |
| 편리성 | 박스 코너 8개를 계산해서 하나하나 그림 | 중심점과 크기만 주면 알아서 처리함 |
vision_msgs install (+rviz2 plugins)
| $ sudo apt update $ sudo apt install ros-jazzy-vision-msgs ros-jazzy-vision-msgs-rviz-plugins |
| $ source /opt/ros/jazzy/setup.bash |
https://index.ros.org/p/vision_msgs/#jazzy
rviz2 plugins
https://index.ros.org/p/vision_msgs_rviz_plugins/
▶ ROS2 package
https://github.com/mxnseo/ROS2_WSL_jazzy/tree/main/centerpoint_ros2
▶ Topic detected_objects (bounding box)
detected_objects echo
▶ rviz2
vision-msgs-rviz-plugins을 설치했으면 위와 같이 목록이 뜸
여기에서 Detection3DArray를 사용함
여기에서 ConfigPath를 지정해주면 설정 파일의 클래스 색깔을 입혀줌
== 이러면 굳이 MarkerArray로 class id를 띄워줄 필요가 없음
.yaml
| car: {r: 0, g: 255, b: 0, a: 255} # 초록 truck: {r: 0, g: 128, b: 255, a: 255} # 파랑 construction_vehicle: {r: 255, g: 255, b: 0, a: 255} # 노랑 bus: {r: 255, g: 0, b: 0, a: 255} #빨강 trailer: {r: 128, g: 0, b: 128, a: 255} # 보라 barrier: {r: 192, g: 192, b: 192, a: 128} # 회색 motorcycle: {r: 255, g: 128, b: 0, a: 255} # 주황 bicycle: {r: 0, g: 255, b: 255, a: 255} # 하늘 pedestrian: {r: 255, g: 192, b: 203, a: 255} # 분홍 traffic_cone: {r: 255, g: 255, b: 255, a: 255} # 흰색 |
ConfigPath에 color map 지정한 yaml file을 넣어주면 됨
위와 같은 형식으로 번호와 색을 지정해주면 아래 결과와 같이 바운딩 박스를 쳐줌
첫댓글 윤지말로는 mmdetection3d안에 spconv-cu121 라이브러리가 자체개발해서 포함되어 있다는데 왜 별도로 설치하는지?
carla사용시 네트워크 환경에서 실시간 통신 및 처리방안 연구해볼것
라이다만 퍼블리시하면 트래픽이 감소하여 실시간이 되는지 확인필요
ros2 dds에서 사용하는 멀티캐스트방식 말고 유니캐스트로 하면 빨라질지 확인필요 -> https://share.google/aimode/JYrkY802tMndfg1oX
우선 mmdetection3d 안에 spconv를 자체개발한 건 아니고 그냥 불러와서 사용합니다
https://github.com/open-mmlab/mmdetection3d/blob/main/mmdet3d/models/middle_encoders/sparse_unet.py
https://github.com/open-mmlab/mmdetection3d/blob/main/projects/BEVFusion/bevfusion/sparse_encoder.py
spconv를 사용하는 코드 내에서 spconv 라이브러리를 우선적으로 처리하고 만약 그게 없으면 mmcv의 spconv를 가져오는 형식으로 작성되어 있습니다
그래서 왜 저렇게 처리했는지 찾아보니까 mmcv의 spconv는 지금 따로 있는 spconv(2.x)보다 낮은 버전(1.x)의 알고리즘을 써서 mmcv에 있는 spconv 쓰면 학습 및 추론 속도도 늦어지고 메모리 효율성도 안 좋아진다고 합니다
https://github.com/open-mmlab/mmcv/issues/3285
https://github.com/traveller59/spconv?tab=readme-ov-file#spconv-21-vs-sp
https://mmdetection3d.readthedocs.io/en/latest/get_started.html#customize-installation
@신민서 spconv 라이브러리가 rtx50 시리즈에서도 사용가능한지 확인할것
@Sungryul Lee https://github.com/traveller59/spconv/issues/746
https://github.com/MrForExample/Comfy3D_Pre_Builds/blob/main/_Build_Wheels/_Wheels_linux_py312_torch2.7.0_cu128/spconv_cu126-2.3.8-cp312-cp312-manylinux_2_28_x86_64.whl
아직 issues가 open이긴 한데 사람들이 코멘트 남겨놓은 거 보면 spconv 말고 개인이 작성한게 있긴 합니다