ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ROS] n. darknet_ros를 활용한 Yolo-v3 사용법
    IT/ROS 2020. 2. 5. 05:46

    darknet_ros

    이번 포스팅은 ROS에서 darknet을 간단하게 사용 가능하도록 지원하는 오픈소스 darknet_ros를 통하여 Yolo를 사용하는 방법을 설명합니다.

    darknet_ros의 Github 주소는 다음과 같습니다.

    https://github.com/leggedrobotics/darknet_ros

     

    leggedrobotics/darknet_ros

    YOLO ROS: Real-Time Object Detection for ROS. Contribute to leggedrobotics/darknet_ros development by creating an account on GitHub.

    github.com

    설치 방법

    작업이 이루어지고 있는 Working Space로 이동합니다.

    $ cd {your_ws}/src
    $ git clone --recursive https://github.com/leggedrobotics/darknet_ros.git
    $ cd ..
    $ catkin_make -DCMAKE_BUILD_TYPE=Release
    # 빌드가 완료되었다면
    $ rospack profile

    출처 : https://github.com/leggedrobotics/darknet_ros 의 ReadMe.md

    사전에 CUDA를 설치하지 않고 위 패키지를 Build할 경우, CMakeLists.txt 파일에 의해 CPU를 사용하여 연산하는 방식으로 빌드됩니다.  만약 GPU를 사용하여 연산하려면 CUDA, Cudnn을 설치한 후 다시 빌드해야 합니다.

    CUDA, Cudnn 설치는 여기를 참고하세요.

    GPU를 사용할 경우, 성능이 500배 이상 증가합니다.

    자신의 GPU와 호환되는 CUDA 버전은 아래 링크의 표에서 확인할 수 있습니다.
    https://en.wikipedia.org/wiki/CUDA#Supported_GPUs

     

    CUDA - Wikipedia

    CUDA (Compute Unified Device Architecture) is a parallel computing platform and application programming interface (API) model created by Nvidia.[1] It allows software developers and software engineers to use a CUDA-enabled graphics processing unit (GPU) fo

    en.wikipedia.org

    참고로, 필자의 사용 환경은 다음과 같습니다.

    • CPU : Ryzen 1800x
    • GPU : Nvidia Geforce 1070 Ti
    • RAM : GeiL 16GB
    • OS : Ubuntu 16.04
    • ROS Version : Kinetic Kame

    CMakeLists.txt 살펴보기

    -gencode arch=compute_62,code=sm_62
    

    CMakeLists.txt에서는 위 라인으로 빌드시  Compute capability를 확인합니다.

    만약 GPU를 사용하여 Darknet을 구동하기를 원한다면 CUDA Wiki내의 표를 확인하여 자신의 Compute capability에 맞게 위와 비슷한 라인을 기입해야 합니다.

    예를 들어, CUDA Wiki 내 표의 Compute capability (version) 항목이 만약 6.2라면 -gencode arch=compute_62,code=sm_62를 기입하여 다시 빌드합니다. 

    실행 방법

    카메라를 사용하는 ROS 프로그램이 실행되는 상태에서 다음의 명령어를 입력하면 됩니다.

    # 카메라를 사용하는 프로그램 예시
    $ roslaunch openni2_launch openni2.launch
    
    # darknet 실행 명령어
    $ roslaunch darknet_ros darknet_ros.launch 
    

    n만약 darknet의 소스로 사용하고자 하는 카메라 토픽의 이름을 수정하고자 할 경우, darknet_ros.launch 파일의 image argument를 원하는 형식으로 수정하면 됩니다.

    기본적으로 사용하는 weight 버전은 Yolo-v2 tiny입니다.

    실행 화면

    darknet_ros.launch 파일 실행 화면입니다.
    GPU를 사용하지 않을 경우, 프레임이 0.7 ~ 0.9 선에서 머물지만, GPU를 사용할 경우 성능에 따라 130~170 사이의 프레임을 유지합니다.

    신뢰도와 라벨링 박스 좌표 등의 정보를 출력

    GPU 사용시 FPS

    참고. CPU와 GPU 성능 비교

    아래의 표는 ROS Kinetic 환경에서 실측하여 비교한 데이터 테이블입니다. 단위는 FPS입니다.

      yolo-tiny-v2 yolo-v3
    CPU 0.9   0.1  
    GPU 130 ~ 170   22 ~ 26  

     

    발행 토픽

     

    /darknet_ros/bounding_boxes Topic

    위 사진처럼 darknet_ros.launch 파일은 동작 중에  /darknet_ros의 Namespace로 Bounding Box의 X, Y좌표, 정확도 등에 대한 정보를 담고 있는 메시지를 발행하므로, 깊이 카메라와 함께 사용한다면 여러 방향으로 활용이 가능합니다.


    맺으며

    개발자가 필요에 따라 학습시킨 가중치 파일을 기반으로 Yolo를 실행하는 것도 가능하는 것도 가능하므로, 사실상 기존에 Yolo 동작 환경을 구축하기 위해 복잡한 환경 설정을 할 필요가 없어졌다는 점에서 darknet_ros는 큰 시사점이 있습니다.

    모쪼록 즐거운 개발 하시기 바랍니다.

    'IT > ROS' 카테고리의 다른 글

    [ROS] n-1. How to use Depth Camera on ROS?  (0) 2020.05.19
    [ROS] 1-2. ROS 시작하기  (0) 2020.01.18
    [ROS] 1-1. ROS(Robot Operating System) 소개  (0) 2020.01.18

    댓글

Designed by Tistory.