[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 opencv
원하는 버전과 맞지 않다면 OpenCV를 삭제합니다.
실행 중인 OpenCV 사용중지
$ sudo apt-get purge libopencv* python-opencv
OpenCV 삭제
$ sudo find /usr/local/-name "*opencv*" -exec rm {} \;
$ sudo rm /usr/local/{bin,lib}/opencv
$ sudo find /-name "*opencv*" -exec rm -i {} \;
$ sudo make uninstall
$ sudo apt autoremove -y
확인
$ sudo apt-get purge libopencv* python-opencv
(중요) 자신이 사용하고 있는 환경에 맞는 버전 설치합니다.
저는 OpenCV 4.4.0 버전을 사용하였습니다.
Ubuntu 패키지들을 최신 버전으로 업데이트
$ sudo apt -y update
$ sudo apt -y upgrade
이하 필요한 부가적인 패키지들을 설치합니다.
( 자세한 설명은 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-numpy
OpenCV를 설치하기 전에 opencv를 사용자 계정 홈 디렉토리 아래에 생성합니다.
(원하시는곳에 하셔도 상관없지만 홈 디렉토리를 추천드립니다.
$ cd ~
$ mkdir opencv
$ cd opencv
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.zip
압축을 해제합니다.
$ unzip opencv-4.4.0.zip
$ unzip opencv_contrib-4.4.0.zip
OpenCV의 Build는 opencv-4.4.0 디렉토리 안에 build를 만들고 build 디렉토리에서 진행합니다.
$ cd opencv-4.4.0
$ mkdir build
$ cd build
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 ../
(보이지 않는다면 다음을 복사해주세요)
$ 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/build
빌드 작업을 CPU의 코어 개수에 맞게 병렬 작업을 수행하도록 합니다.
다음 명령으로 CPU의 코드 개수를 확인합니다.
$ nproc # 출력되는 숫자를 기억합니다.
위에서 출력되는 숫자를 4 대신에 적어줍니다.
$ make -j4
위 과정을 수행하면 OpenCV 소스 코드를 빌드하여 *.so 라이브러리 파일을 생성합니다.
작업이 완료되면 다음 명령어를 입력하여 빌드된 *.so 파일을을 설치합니다.
$ sudo make install
$ sudo ldconfig
다음 명령어를 통해 설치된 OpenCV의 버전을 확인 가능합니다.
$ pkg-config --list-all | grep opencv
> opencv4 OpenCV - Open Source Computer Vision Library
2. Yolo 를 학습 시키기 위한 DarkNet설치
Darknet 에는 pjreddie 버전과 AlexeyAB 버전이 있는데 저는 AlexeyAB 버전을 설치하겠습니다.
먼저 터미널 경로를 아까 설치했던 /opencv/opencv-4.4.0/build 로 설정합니다.
$ cd ~
$ cd ~/opencv/opencv-4.4.0/build
Darknet AlexeyAB 버전을 설치합니다.
$ git clone https://github.com/AlexeyAB/darknet.git
darknet 디렉토리 이동 후 Makefile을 생성합니다.
$ cd darknet
$ make
Makefile이 생성되었을 것입니다.
vim 편집기를 사용하여 GPU, CUDNN, OPENCV를 사용하기위해 값을 1로 변경해줍니다.
$ vim Makefile
GPU=0 > GPU=1
CUDNN=0 > CUDNN=1
OPENCV=0 > OPENCV=1
... ...
다시 make 해줍니다.
$ make
Pre-trained weights 파일을 다운로드합니다.
여러 버전이 있습니다. 자신이 학습시키고 싶은 모델에 맞는 weights 파일을 다운하시면 됩니다.
$ wget https://pjreddie.com/media/files/yolov3.weights
간단하게 테스트가 가능합니다.
$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
다음으로 중요한 폴더의 구조화가 있습니다.
이것은 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 1
저는 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 1
TEST
./darknet detector test custom/obj.data custom/yolov3-custom.cfg backup/yolov3_best.weights custom/obj/000001.jpg
mAP Check
./darknet detector map custom/obj.data custom/yolov3.cfg custom/yolov3.weights
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.txt
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.mp4
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 1
위 코드 처럼 뒤에 -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) 을 줄여주거나 배치 사이즈를 줄여서 해보시면 될 것 같습니다.
'ML & DL > Practice' 카테고리의 다른 글
YOLO v8 사용하기 (ultralytics) (0) | 2023.05.20 |
---|---|
[MMDetection 2.0] 정리 (0) | 2023.05.16 |
[MMDetection 3.0] 정리 (0) | 2023.05.12 |
[Ubuntu] Pytorch 에서 YOLO v3 사용하기 (ultralytics) (0) | 2022.03.19 |
mrcnn(Mask-RCNN) 무작정 따라하기 (0) | 2021.11.07 |