[2023년]

Pytorch 환경에서 학습 가능한 YOLO v8이 출시 되었습니다 !

사용 방법을 간단히 정리하였으니, 같이 봐주시면 감사하겠습니다 :)


환경

 

Ubuntu의 환경은 다음과 같습니다.

( Ubuntu 18.04.6 )

그래픽 카드와, 그래픽 카드의 드라이버, CUDA의 버전, CUDNN의 버전은 다음과 같습니다.

( GPU : GeForce 3090 * 2 , Driver : 470.82.01, CUDA : 11.4, CUDNN : 8.2.2 )

 


 

1. OpenCV 설치

 

먼저 설치된 opencv의 버전을 확인합니다.

$ pkg-config --modeversion opencvCopy Icon

원하는 버전과 맞지 않다면 OpenCV를 삭제합니다.

 

실행 중인 OpenCV 사용중지

$ sudo apt-get purge libopencv* python-opencvCopy Icon

 

OpenCV 삭제

$ sudo find /usr/local/-name "*opencv*" -exec rm {} \;Copy Icon
$ sudo rm /usr/local/{bin,lib}/opencvCopy Icon
$ sudo find /-name "*opencv*" -exec rm -i {} \;Copy Icon
$ sudo make uninstallCopy Icon
$ sudo apt autoremove -yCopy Icon

 

확인

$ sudo apt-get purge libopencv* python-opencvCopy Icon

(중요) 자신이 사용하고 있는 환경에 맞는 버전 설치합니다.

저는 OpenCV 4.4.0 버전을 사용하였습니다.

 

Ubuntu 패키지들을 최신 버전으로 업데이트

$ sudo apt -y update
$ sudo apt -y upgradeCopy Icon

이하 필요한 부가적인 패키지들을 설치합니다.

( 자세한 설명은 https://sunkyoo.github.io/opencv4cvml/OpenCV4Linux.html 를 참고하시면 됩니다.)

$ sudo apt-get install build-essential cmake
$ sudo apt-get install pkg-config
$ sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev
$ sudo apt-get install ffmpeg libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev
$ sudo apt-get install libv4l-dev v4l-utils
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev 
$ sudo apt-get install libgtk-3-dev
$ sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev  
$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev
$ sudo apt-get install python3-dev python3-numpyCopy Icon

OpenCV를 설치하기 전에 opencv를 사용자 계정 홈 디렉토리 아래에 생성합니다.

(원하시는곳에 하셔도 상관없지만 홈 디렉토리를 추천드립니다.

$ cd ~
$ mkdir opencv
$ cd opencvCopy Icon

 

wget을 사용하여 OpenCV 4.4.0 기본 모듈 소스 코드와 추가 모듈 소스 코드를 다운합니다.

$ wget -O opencv-4.0.0.zip https://github.com/opencv/opencv/archive/4.4.0.zip
$ wget -O opencv_contrib-4.0.0.zip https://github.com/opencv/opencv_contrib/archive/4.4.0.zipCopy Icon

 

압축을 해제합니다.

$ unzip opencv-4.4.0.zip
$ unzip opencv_contrib-4.4.0.zipCopy Icon

 

OpenCV의 Build는 opencv-4.4.0 디렉토리 안에 build를 만들고 build 디렉토리에서 진행합니다.

$ cd opencv-4.4.0
$ mkdir build
$ cd buildCopy Icon

 

CMake를 사용하여 빌드에 필요한 Makefile을 생성합니다.

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=OFF -D WITH_IPP=OFF -D WITH_1394=OFF -D BUILD_WITH_DEBUG_INFO=OFF -D BUILD_DOCS=OFF -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=OFF -D BUILD_PACKAGE=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D WITH_QT=OFF -D WITH_GTK=ON -D WITH_OPENGL=ON -D BUILD_opencv_python3=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.4.0/modules -D WITH_V4L=ON  -D WITH_FFMPEG=ON -D WITH_XINE=ON -D OPENCV_ENABLE_NONFREE=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D OPENCV_SKIP_PYTHON_LOADER=ON -D OPENCV_GENERATE_PKGCONFIG=ON ../Copy Icon

(보이지 않는다면 다음을 복사해주세요)

더보기

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=OFF -D WITH_IPP=OFF -D WITH_1394=OFF -D BUILD_WITH_DEBUG_INFO=OFF -D BUILD_DOCS=OFF -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=OFF -D BUILD_PACKAGE=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D WITH_QT=OFF -D WITH_GTK=ON -D WITH_OPENGL=ON -D BUILD_opencv_python3=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.4.0/modules -D WITH_V4L=ON -D WITH_FFMPEG=ON -D WITH_XINE=ON -D OPENCV_ENABLE_NONFREE=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D OPENCV_SKIP_PYTHON_LOADER=ON -D OPENCV_GENERATE_PKGCONFIG=ON ../

 

마지막 부분에 다음이 출력된다면 설정이 완료 되었습니다.

-- Configuring done
-- Generating done
-- Build files have been written to: /home/webnautes/opencv/opencv-4.4.0/buildCopy Icon

 

빌드 작업을 CPU의 코어 개수에 맞게 병렬 작업을 수행하도록 합니다.

다음 명령으로 CPU의 코드 개수를 확인합니다.

$ nproc			# 출력되는 숫자를 기억합니다.Copy Icon

위에서 출력되는 숫자를 4 대신에 적어줍니다.

$ make -j4Copy Icon

 

위 과정을 수행하면 OpenCV 소스 코드를 빌드하여 *.so 라이브러리 파일을 생성합니다.

작업이 완료되면 다음 명령어를 입력하여 빌드된 *.so 파일을을 설치합니다.

$ sudo make install
$ sudo ldconfigCopy Icon

 

다음 명령어를 통해 설치된 OpenCV의 버전을 확인 가능합니다.

$ pkg-config --list-all | grep opencv
> opencv4                        OpenCV - Open Source Computer Vision LibraryCopy Icon

 


 

2. Yolo 를 학습 시키기 위한 DarkNet설치

 

Darknet 에는 pjreddie 버전과 AlexeyAB 버전이 있는데 저는 AlexeyAB 버전을 설치하겠습니다.

 

먼저 터미널 경로를 아까 설치했던 /opencv/opencv-4.4.0/build 로 설정합니다.

$ cd ~
$ cd ~/opencv/opencv-4.4.0/buildCopy Icon

 

Darknet AlexeyAB 버전을 설치합니다.

$ git clone https://github.com/AlexeyAB/darknet.gitCopy Icon

 

darknet 디렉토리 이동 후 Makefile을 생성합니다.

$ cd darknet
$ makeCopy Icon

 

Makefile이 생성되었을 것입니다.

vim 편집기를 사용하여 GPU, CUDNN, OPENCV를 사용하기위해 값을 1로 변경해줍니다.

$ vim Makefile

GPU=0			>	GPU=1
CUDNN=0			>	CUDNN=1
OPENCV=0		>	OPENCV=1
...				...Copy Icon

 

다시 make 해줍니다.

$ makeCopy Icon

 

Pre-trained weights 파일을 다운로드합니다.

여러 버전이 있습니다. 자신이 학습시키고 싶은 모델에 맞는 weights 파일을 다운하시면 됩니다.

$ wget https://pjreddie.com/media/files/yolov3.weightsCopy Icon

 

간단하게 테스트가 가능합니다.

$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpgCopy Icon

 

다음으로 중요한 폴더의 구조화가 있습니다. 

이것은 https://settembre.tistory.com/475 를 참고하시면 됩니다. ( 3번 ~ 8번)

 

더 자세한 정보를 얻고 싶으면 다음 깃허브에서 자세하게 설명해줍니다.

https://github.com/AlexeyAB/darknet/

 

GitHub - AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Da

YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet ) - GitHub - AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object ...

github.com

 

 


 

3. 학습

 

자신이 설정한 디렉토리의 구조에 맞게 .data 파일과 .cfg 파일과 .weights 파일 위치를 지정해줍니다.

$ ./darknet detector train custom/obj.data custom/yolov3-custom.cfg yolov3.weights -gpus 0,1 -map -clear 1Copy Icon

 

저는 gpu를 2개다 사용하고 싶어서 -gpus 0,1 을 붙였습니다. 하나로 학습을 하신다면 -gpu 0 을 하시면 됩니다.

중간 중간 mAP 를 확인하기 위해 -map를 붙였습니다.

또한 "If you want to train from the beginning, then use flag in the end of training command: -clear"

오류가 떠서 찾아보니 -clear 1을 붙여줘 이전에 학습했던 map 정보를 정리하도록 하였습니다.

 


TRAIN

./darknet detector train custom/obj.data custom/yolov3-custom.cfg custom/yolov3.weights backup/ -gpus 0,1 -map -clear 1Copy Icon

TEST

./darknet detector test custom/obj.data custom/yolov3-custom.cfg backup/yolov3_best.weights custom/obj/000001.jpgCopy Icon

mAP Check

./darknet detector map custom/obj.data custom/yolov3.cfg custom/yolov3.weightsCopy Icon

Bounding Box to .txt

./darknet detector test custom/obj.data custom/yolov3-custom.cfg backup/yolov3-fireV1V2/yolov3-custom_best.weights -dont_show -ext_output <custom/fireV1V2/train.txt> custom/fireV1V2/result.txtCopy Icon

Video TEST

./darknet detector demo custom/obj.data custom/yolov3-custom.cfg backup/yolov3-custom_best.weights -ext_output video.mp4 -out-filename video_results.mp4Copy Icon

 


 

4. 오류 모음

 

1. -clear 오류

 

"If you want to train from the beginning, then use flag in the end of training command: -clear"

 

$ ./darknet detector train custom/obj.data custom/yolov3-custom.cfg yolov3.weights -gpus 0,1 -map -clear 1Copy Icon

위 코드 처럼 뒤에 -clear 1 을 붙여줍니다. 이전에 학습했던 정보를 정리하는 것입니다.

 

2. core dumped 오류

 

"darknet segmentation fault (core dumped) ~"

 

이 경우 첫 번째로 확인할 것은 학습데이터 파일입니다.

저같은 경우 학습 데이터 이미지 중 하나의 파일이 깨져서 그 파일을 제거 후 해결 하였습니다.

 

https://github.com/pjreddie/darknet/issues/288

이 사이트에서는 학습 데이터의 양이 많아 컴퓨터의 램이 부족하여 일어날 수도 있다고 합니다.

 

Segmentation fault (core dumped) in training own data yolo2 darknet · Issue #288 · pjreddie/darknet

i have prepare my data according to the instruction given in this link https://pjreddie.com/darknet/yolo/ i have downloaded weights also. i have 12GB titanX gpu when i run the darknet for training ...

github.com

이미지의 사이즈 (.cfg 파일의 width, height) 을 줄여주거나 배치 사이즈를 줄여서 해보시면 될 것 같습니다.

욱근욱