본문 바로가기

일상/LINUX

[LINUX] YOLOv5 설치

반응형

☞ 운영 체제 : Linux Ubuntu 20.04.5 LTS - focal
☞ CPU : AMD Ryzen 7 5800H with Radeon Graphics (16 CPUs), ~3.2GHz
☞ 그래픽카드 : NVIDIA GeForce RTX3070 Laptop GPU
 

 
 
 
 


목차

1. YOLOv5 설치 이전에..
2. YOLOv5 설치
3. 실행

 
 
 
 


 
 
 

 
 
Jetson / Ubuntu 18.04 환경에서 개발하는 사람은 YOLOv5 설치에 필요한 것들이 많다.  ROS Melodic은 Python 2.x 버전으로 ROS2는 Python 3.x 버전으로 돌아간다고 한다. YOLOv5는 Python 3.7.0 이상과 PyTorch 1.7 버전 이상을 요구한다. 그래서 ROS2 환경에서 개발하거나 Ubuntu 20.04의 ROS Noetic 환경에서 개발하는 것이 바람직하다. (YOLOv5의 ROS 패키지를 Noetic 환경에서 개발했기 때문이다.)
 
꾸준히 Jetson에서 개발을 했지만 이번에는 노트북 안에 있는 하드에 Ubuntu를 설치하여 진행하려고 한다. 위의 문제들 때문이다. 물론 ROS Noetic 설치도 함께한다.
 
 

 
 
윈도우 환경에서 YOLOv5 설치하는 방법은 아래의 포스트를 참고하면 되겠다.
 

 

[디딤돌] 연구 기록 3주차 - YOLO 설치

☞ 운영 체제 : Windows 10 Education 64비트 (10.0, 빌드 19043) ☞ CPU : AMD Ryzen 7 5800H with Radeon Graphics (16 CPUs), ~3.2GHz ☞ 그래픽카드 : NVIDIA GeForce RTX3070 Laptop GPU ☞ 설치 목록 PyTorc..

95mkr.tistory.com

 

 

혹시나 Jetson 환경에서 작업하는 사람이 있다면 아래의 영상을 참고하면 좋을 듯하다.
https://www.youtube.com/watch?v=mbCVIZGIGMg 
 
 
 
 

YOLOv5 설치 이전에..

설치할 것들이 상당히 많다. 아래에서 설치할 소프트웨어 패키지는 각각 서로 호환되는 버전이 다르다. 그래서 본인이 좋아하는 숫자를 골라서 아무거나 설치하면 지우고 처음부터 다시 설치해야 하는 창조 삽질을 해야 할 수도 있다.
 
지워야 하는 과정도 시간을 똑같이 잡아먹고 상당히 귀찮기 때문에 각각 호환되는 버전이 있다는 것을 명심하고 설치를 진행하기 바란다.
 
 
 

※ Python

 

sudo apt install python3.8 python3.8-venv python3.8-dev

 
 
필자의 경우 Ubuntu를 설치했을 때 이미 3.8.10 버전이 설치되어 있었다.
 
 
 
 

※ CUDA

 

ubuntu-drivers devices

 
 
위 명령어를 터미널에 입력하여 드라이버로 설치할 수 있는 목록을 출력한다.
 
 

 
 
오른쪽에 recommended라 되어있는 드라이버를 설치하자.
 
 

sudo apt install nvidia-driver-515

 
 
재부팅하면 Enroll MOK 선택 - continue - yes - 아까 설정한 비밀번호 입력후 다시 재부팅해준다. 이 작업을 마치지 않으면 그래픽 드라이버가 완전히 설치되지 않으니 무시하지 않길 바란다.
 
 

nvidia-smi

 
 
위 명령어를 터미널에 입력했을 때 아래와 같은 내용이 출력되면 제대로 설치됐다는 것이다.
 
 

 
 
그래픽 드라이버 설치가 완료되면 Nvidia 공식 홈페이지에서 CUDA를 다운로드 하자.
 
 
https://developer.nvidia.com/cuda-11-7-1-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=20.04&target_type=deb_local 
 
 

 
 
설치를 완료하면 재부팅하자. 만약 그래픽 드라이버를 설치하지 않은 상태에서 위 설치를 진행했을 경우 의존성 문제로 설치되지 않을 수 있으니 그래픽 드라이버를 먼저 설치하고 진행하자.
 
 

sudo gedit .bashrc

 
 
재부팅하고 bashrc에 CUDA 경로를 추가하자.
 
 

# CUDA PATH
export PATH=/usr/local/cuda-11.7/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64:$LD_LIBRARY_PATH

 
 
11.7 버전이 아니라면 경로 정보를 바꿔서 입력해야 한다. 파일 내용은 /usr/local 디렉터리에서 확인할 수 있다.
 
 

 
 

source .bashrc

 
 
경로 정보를 입력하고 나서 bashrc를 업데이트 해주자. 그러고 나서 nvcc -V 명령어를 입력하면 아래와 같이 설치한 CUDA 정보를 확인할 수 있다.
 
 

 
 
 
 

※ cuDNN

 
cuDNN은 아래의 주소에서 다운로드할 수 있다. 회원가입을 해야 다운로드할 수 있으니 참고 바란다.
https://developer.nvidia.com/rdp/cudnn-download
 
 

 
 
사진 아래의 Archived cuDNN Releases를 클릭하면 이전 버전들도 함께 볼 수 있다. 본인의 운영체제 맞게 다운로드해야 하며 필자는 이 중에 8.5.0 버전의 Ubuntu 20.04 x84_64 데비안 패키지로 다운로드했다.
 
 

// 다운로드 받은 파일을 먼저 홈에 이동해놓고 하자.
sudo dpkg -i cudnn-local-repo-ubuntu2004-8.5.0.96_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2004-8.5.0.96/cudnn-local-0579404E-keyring.gpg /usr/share/keyrings/
sudo apt update

sudo apt install libcudnn8=8.5.0.96-1+cuda11.7
sudo apt install libcudnn8-dev=8.5.0.96-1+cuda11.7
sudo apt install libcudnn8-samples=8.5.0.96-1+cuda11.7

 
 
위 다운로드를 완료하면 cuDNN에서 제공하는 샘플을 실행할 수 있다. 이를 통해 제대로 설치가 됐는지 확인이 가능하다. 몇 가지 더 해줘야 한다.
 
 

sudo apt install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev libfreeimage3 libfreeimage-dev

cp -r /usr/src/cudnn_samples_v8/ $HOME
cd  $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN

 
 
첫 줄에 있는 라이브러리를 설치하지 않고 진행하면 make 단계에서 FreeImage.h가 없다는 오류가 발생한다. 그러니 먼저 다운로드해줘야 한다.
 
 

 
 
./mnistCUDNN을 실행하면 아래와 같이 data 디렉터리 내의 숫자를 맞추는 테스트를 결과가 나온다. Test passed 가 출력되면 cuDNN 설치가 제대로 되었음을 알 수 있다.
 
 
 
만약 설치에 문제가 생긴다면 아래의 글을 참고하기 바란다.
https://docs.nvidia.com/deeplearning/cudnn/install-guide/
 
 
 
 

※ OpenCV

 
OpenCV 공식 홈페이지
https://opencv.org/releases/page/2/
 
 
git clone 다운로드를 위해 git을 설치하자. 그리고 빌드를 위해 cmake도 함께 설치한다.
 

sudo apt install git cmake cmake-qt-gui build-essential pkg-config

 
 
OpenCV 깃허브 주소
https://github.com/opencv/opencv/tree/4.6.0
 
 

wget -O opencv 'https://github.com/opencv/opencv/archive/4.6.0.zip'

 
 

 
 
 
 
 
 

※ OpenCV_contrib

OpenCV contrib 깃허브 주소
https://github.com/opencv/opencv_contrib
 
 

wget -O opencv_contrib 'https://github.com/opencv/opencv_contrib/archive/4.6.0.zip'

 
 

 

 
 

☞ OpenCV 4.6.0 버전인 이유는?

 
원래는 자주 사용한 4.2.0 버전을 사용하려 했으나, cuDNN 8 이상의 버전을 사용하기 위해서는 OpenCV 4.4.0 버전이 필요하다. CUDA를 비롯해 cuDNN도 거의 최신 버전을 설치하게 되면서 각 소프트웨어의 호환성을 위해 가장 최근 버전인 4.6.0을 설치했다.
 
 만약에 cuda 버전이 12.x 버전이라면 4.6.0 버전이 아닌 4.7.0 버전으로 설치해야한다. 4.6.0 버전은 opencv_contrib 의 cudev - texture.hpp 부분에서 필히 에라가 발생하기 때문이다.
 
 
 빌드에 추가할 패키지들을 먼저 설치하자.
 
 

sudo apt install libjpeg-dev libtiff5-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev x264 libxine2-dev libv4l-dev v4l-utils libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev mesa-utils libgl1-mesa-dri qt5-default libatlas-base-dev gfortran libeigen3-dev libtbb2 libtbb-dev python2.7-dev python3-dev python-numpy python3-numpy python3-setuptools libavresample-dev liblapacke-dev

 
 
 

unzip opencv
unzip opencv_contrib
mkdir -p ~/opencv-4.6.0/build

 
 
빌드를 위해 홈에서 opencv 디렉터리 내에 build 디렉터리를 만들어놓자. 그리고 아래의 포스트를 참고하여 cmake ui를 통해 빌드를 진행하도록 한다. 필요한 옵션을 선택하여 수정해주기 바란다.
 
 

 

[OPENCV] 1. Jetson Nano 보드 ubuntu 18.04에서 OpenCV 설치 및 CUDA 빌드

☞ 메인보드 : Jetson Nano Developer Kit ☞ 운영 체제 : Ubuntu 18.04 - JetPack 4.3 목차 ○ OpenCV 설치 준비 ○ OpenCV 설치 ○ Make + Make install ① OpenCV 설치 준비 이 설치는 Jetson Nano 보드로 진..

95mkr.tistory.com

 

 

[디딤돌] 연구 기록 1~2주차 - 개발 환경 구축

☞ 운영 체제 : Windows 10 Education 64비트 (10.0, 빌드 19043) ☞ CPU : AMD Ryzen 7 5800H with Radeon Graphics (16 CPUs), ~3.2GHz ☞ 그래픽카드 : NVIDIA GeForce RTX3070 Laptop GPU ☞ 설치 목록 MinGW-..

95mkr.tistory.com

 
 
 
 
 

☞ Configure 후 항목 수정(Configure 2번)

 
CPU_BASELINE=AVX
CPU_DISPATCH='공백'
WITH_GTK=ON
WITH_LAPACK=OFF
WITH_OPENCLAMDBLAS=OFF
WITH_OPENCLAMDFFT=OFF
EIGEN_INCLUDE_PATH=D:/library/eigen-3.3.7 (본인 eigen 디렉터리)
OPENCV_PYTHON3_VERSION=ON
OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules (본인 opencv_contrib/modules 디렉터리)
BUILD_opencv_world=ON
OPENCV_ENABLE_NONFREE=ON
OPENCV_GENERATE_PKGCONFIG=ON
OPENCV_DNN_CUDA=ON
WITH_CUDA=ON
CUDA_FAST_MATH=ON
ENABLE_FAST_MATH=ON
CUDA_ARCH_BIN=8.6 (그래픽카드에 따라 다름 참고 - https://en.wikipedia.org/wiki/CUDA)
TEST 관련=OFF
 
BUILD_opencv_cvv=OFF
이거 안 하면 에러 나니 꼭 OFF 해야 한다.
 

 

왼쪽(before) - 오른쪽(after)

 
 
왼쪽 리스트를 보면 제대로 적히지 않은 부분이 있다. 경로를 확인하여 그에 맞게 고쳐주자. python과 python3 경로가 실제로 맞는지 확인해보기도 하자.
 
 

 
 
make , make install 과정을 마치고 나서 OpenCV 설치를 확인할 수 있다. 터미널에서 바로 입력하여 위와 같이 출력되면 정상적으로 설치된 것이다.
 
 
 
 

※ Pytorch

Jetson 환경에서 설치 중인 사람은 아래의 글을 참고하면 좋을 것 같다.
https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048
 
PyTorch 공식 홈페이지
https://pytorch.org/get-started/locally/
 
 




PyTorch 공식 홈페이지에 들어가면 위와 같이 사용자의 환경에 맞게 설치할 수 있는 명령어를 제시해준다. PyTorch, CUDA, OPENCV 등 YOLOv5를 실행하기 위한 의존성 패키지들은 패키지 간 호환되는 버전이 있기 때문에 그에 맞춰 설치해야 나중에 여러 번 설치할 필요가 없다.
 
패키지 설치 매니저로 conda와 pip가 있는데 conda는 설치하기 쉽지만 윈도우 환경에서 설치할 때 환경 변수 문제로 골머리를 앓은 적이 있어서 pip로 진행하려 한다.
 
 

sudo apt install python3-pip pip python-wheel-common python-setuptools
pip3 install -U pip wheel setuptools

 
 

 
 
ERROR는 테스트 실패이므로 무시하고, 설치했을 때 WARNING 문구가 출력될 수 있다. 이는 bashrc에 wheel의 경로를 입력해주면 해결할 수 있다. ~/.local/bin 디렉터리가 PATH에 없다는 내용이니 이를 그대로 해결해주면 된다.
 
 

// 터미널에서 홈(~)에 있다는 가정하에
sudo gedit .bashrc

// bashrc에 아래의 내용을 추가
export PATH=$HOME/bin:/usr/local/bin:$HOME/.local/bin:$PATH

// 저장한 후(Ctrl + s) 창을 닫고서 아래의 명령을 실행
source .bashrc

 
 
PyTorch와 그에 필요한 패키지를 함께 다운로드하려면 아래의 명령으로 할 수 있다.
 
 

pip install torch==1.12.0+cu116 torchvision==0.13.0+cu116 torchaudio==0.12.0 --extra-index-url https://download.pytorch.org/whl/cu116

 
 
현재 PyTorch는 CUDA 11.6 버전을 지원하는 1.12.0 버전이 가장 최근 릴리즈이다.
 
아래의 링크에서 운영체제 별 다운로드 명령어를 확인할 수 있다.
https://pytorch.org/get-started/previous-versions/
 
 

 
 
다른 버전이 필요하면 아래에 링크에서 찾으면 된다.
https://download.pytorch.org/whl/torch_stable.html
 
 

 
 
 
 

※ ROS

Ubuntu 20.04를 지원하는 ROS 버전은 Noetic이다. Noetic은 의존성으로 설치에 OpenCV 4.2.0 버전을 필요로 한다. 이미 OpenCV 4.6.0 버전을 설치하여 나중에 충돌이 날 수 있지만 충돌 문제는 WARNING 정도로 끝나기에 실행에 문제가 생기지는 않는다.
 
ROS 설치는 ROS 위키에서 시키는 것을 그대로 따라 하면 에러 없이 잘 설치된다.
http://wiki.ros.org/noetic/Installation/Ubuntu
 
 

// 현재 경로 홈(~)
mkdir -p ~/catkin_ws/src
cd caktin_ws
catkin_init_workspace
catkin_make

 
 
먼저 작업 공간을 생성해주고 빌드를 진행하자.
 
 

// 데스크톱 홈(~)에 있다는 가정하에
sudo gedit .bashrc

 
 
ROS 위키에서 제공한 내용들을 모두 따라 하고 나서 아래와 같이 bashrc에 내용을 추가하자.
 
 

# SET ROS NOETIC
source /opt/ros/noetic/setup.bash
source ~/catkin_ws/devel/setup.bash

# SET ROS NETWORK
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://${ROS_HOSTNAME}:11311

# SET ROS ALIAIS COMMAND
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm-'cd ~/catkin_ws && catkin_make'

 
 
입력을 완료했으면 Ctrl+s로 저장하고 나와서 bashrc를 업데이트 하자.
 
 

source .bashrc

 
 

 
 
사용법은 Melodic 버전과 크게 다르지 않다. 위 과정까지 끝냈으면 설치가 제대로 됐는지 roscore를 통해 확인할 수 있다.
 
 
 


② YOLOv5_ros 설치

 

※ YOLOv5_ros

먼저 YOLOv5의 ROS 인터페이스를 다운로드 하자.
https://github.com/mats-robotics/yolov5_ros
 
 

// 현재 경로 : ~
cd ~/catkin_ws/src
git clone https://github.com/mats-robotics/detection_msgs.git
git clone --recurse-submodules https://github.com/mats-robotics/yolov5_ros.git 

cd ..
catkin_make

 
 
 
 

 YOLOv5 설치

 
설치 주소
https://github.com/ultralytics/yolov5
 
 
YOLOv5 Documentation
https://docs.ultralytics.com/
 
 
위에서 다운로드했던 YOLOv5_ros 패키지 소스 디렉터리 안에 YOLOv5를 다운로드해야 경로 오류가 발생하지 않는다.
 
 

cd ~/catkin_ws/src/yolov5_ros/src
git clone https://github.com/ultralytics/yolov5.git

 
 
git clone으로부터 다운로드 한 YOLOv5 디렉터리에 들어가면 requirement.txt 텍스트 파일이 있다. 이 텍스트 파일 안에는 YOLOv5를 실행하기 위해 필요한 패키지와 그 버전 정보를 확인할 수 있다.
 
 

 
 

# 현재 경로 - ~/catkin_ws/src/yolov5_ros/src
cd yolov5
pip3 install -r requirements.txt

 
 
하나씩 터미널에 입력할 필요 없이 간단하게 명령어 한 줄로 이것들을 설치할 수 있다. 주석으로 처리된 패키지는 필수가 아니므로 설치하지 않아도 오류가 발생하지 않는다.
 
 

// 현재 경로 : ~/yolov5
python3 detect.py

 
 
설치를 마치고 나서 터미널 ~/yolo5 디렉터리 경로에서 detect.py를 실행하고 나면 runs/detect/exp에 결과가 저장됐다는 문구가 출력한다. 해당 디렉터리의 경로를 따라가 보면 아래와 같이 YOLOv5를 적용 기본 샘플 사진이 나온다.
 
 
 

 
 
혹시나 오류가 발생했다면 아래 내용을 참고하기 바란다.
 
 
 

☞ Module Not Found Error : No module named 'iPython'

pip3 install ipython

 
 
 

☞ Module Not Found Error : No module named 'skbuild'

pip3 insatll scikit-build

 
 
 

☞ Module Not Found Error : No module named 'ninja' & Failed building wheel for ninja

pip3 install pip setuptools wheel
pip3 install ninja
sudo apt install ninja-build

 

 


③ 실행

 
설치를 마무리 했으니 먼저 catkin_make를 하자.
 

# ROS
catkin_make
roslaunch yolov5_ros yolov5.launch

 
 
실행은 roslaunch로 할 수 있다.
 
실행을 하면 오류가 발생한다. 내용에 잘못된 곳이 있어 수정을 해야 한다.
 
이것이 개발자가 원하는 것인지는 모르겠으나 일단 그대로 실행하면 뭐가 없다는 에러가 발생한다. 에러 내용은 다음과 같다.
 
 
 
 

☞ cannot import name 'scale_coords' from 'utils.general'

 

/../utils/general.py

 
 
문제의 utils.general 내용을 찾아보면 coords(이미지 좌표)에 대한 내용은 scale_segments로 정의되어있다. 이를 detect.py에서는 scale_coords라는 함수로 정의되어있어 발생한 오류로 보인다.
 
 

 
YOLOv5의 개발자 이슈를 살펴보면 scale_coords 함수가 scale_segments 함수로 변경되었다고 한다. YOLOv5_ros의 개발자는 이를 아직 반영하지 않은 것 같다. 무튼 오류가 발생하면 아래와 같이 해결해주자.
 
 
파일 위치 -> yolov5_ros/src/detect.py - 31행

왼쪽(before) 오른쪽(after)

 
scale_coords를 scale_segments로 수정한다.
 
 
 
 

☞ TypeError: warmup() got an unexpected keyword argument 'half'

 
warmup()이 half라는 인자를 받을 수 없는 것 같다.
 
 

 
 
해당 패키지의 깃허브 이슈에 가면 위와 같은 내용이 있다. warmup()에 관련된 것들을 지우면 된 단다. 그렇다면 지우지는 말고 주석 처리를 해놓는 것이 바람직하다.
 
 

위(before) 아래(after)

 
 
self.model.warmup 줄을 주석 처리하자.
 
이 정도로 처리를 해두면 에러가 발생하지는 않았다.
 
 
 

반응형