https://periar.tistory.com/236
https://periar.tistory.com/237
이제 본론으로 Windows10 기반에서 Darknet 을 이용하여 YoloV3 를 학습하는 방법에 대해서 글을 써보겠다.
=======================================
일단 VisualStudio 설치할 생각도 없고 Darknet 소스를 Build 할 생각도 없다면...
나랑 똑같이 환경을 셋팅하고 첨부해놓은 파일들을 세팅해놓고 바로 명령어 써서 학습하면 된다..
=======================================
제일 필요한 NVidia 글픽카드.. 나는 RTX3070 기준.. 80을 샀어야 하는데...
AMD 는 몰것다.. 난 NVIDIA 글픽카드를 사용하니..
일단 첫번째로 필요한것들
1. Visual Studio 2019
2. CUDA 11.4.2 Windows x64
3. cuDNN 11.4 Windows x64
4. Darknet 소스 다운받거나 걍 내가 올린 첨부파일
5. Opencv-4.5.3-vc14_vc15
6. LabelImg 1.8 Windows => 이건 이미지 라벨링 하기위한 프로그램으로.. 맨 위에 Colab 에서 학습하기편 참조
총 6개의 프로그램이 필요하다...
여기서 가장 중요한것은 CUDA 와 cuDNN 의 버전을 맞춰 주어야 제대로 동작한다..
일단 내가 설치한것보다 더 최신의 버전을 사용해도 상관없지만 서로 호환되는 버전을 맞춰주는것이 중요하다.
Visual Sudio 2019 다운받는곳이야 걍 Google 검색해서 마소 들어가서 다운받으면되고..
CUDA 다운로드
https://developer.nvidia.com/cuda-toolkit-archive
cuDNN 다운로드
https://developer.nvidia.com/rdp/cudnn-archive
OpenCV 다운로드
LabelImg 다운로드
https://tzutalin.github.io/labelImg/
Darknet 다운로드
https://github.com/AlexeyAB/darknet
일단 내가준으로 셋팅한것을 설명하것다.
Visual Studio 는 걍 아무대나 설치하면 되고...
CUDA 도 걍 설치하면 끝..
===============================================
cuDNN 압축풀기 => D:\cudnn-11.4-windows-x64-v8.2.2.26
------------------------------------------------------------------------------
OpenCV 압축풀기 => D:\opencv-4.5.3
------------------------------------------------------------------------------
Darknet 압축풀기 => D:\darknet-master
Darknet 압축을 풀어준뒤에
https://pjreddie.com/media/files/darknet53.conv.74
학습에 필요한 요 파일을 Darknet 폴더에 넣어주자..
---------------------------------------------------------------------------
이제 Darknet 을 Build 해야한다...
아까 위에서 Build 하기도 싫고 걍 바로 학습하려면...
아래 내가 Build 해놓고 쓸데없는 파일 싹다 지워버린 Binary 를 다운받아서 걍 D:\darknet-master 폴더에 압축해제 하면됨..
https://drive.google.com/file/d/1UWEknQfEKlj2IpPVJnZaebZx_g6OQK1H/view?usp=sharing
---------------------------------------------------------------------------
이제 D:\darknet-master\build\darknet\darknet.sln 파일을 Visual Studio 2019 에서 열어준다
요런 창이 뜬다면 걍 확인~~
이제 바로 빌드하면 않되고 x64 로 빌드해야한다. CUDA나 OPENCV 등등 다 x64 기반으로 동작하기떄문에..
솔루션 탐색기에서 darknet 솔루션을 마우스 오른쪽 버튼 누르고 구성관리자 에 들어가자
Debug 따위는 필요없다.. 걍 Release 에 x64 로 셋팅해주고 닫자
그런다음 빌드를 해보면 아래와 같이 에러가 발생할수있다..
심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태
오류 MSB4019 가져온 프로젝트 "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 11.1.props"을(를) 찾을 수 없습니다. Import 선언 "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\\BuildCustomizations\CUDA 11.1.props"의 식이 올바르고 디스크에 파일이 있는지 확인하세요. darknet D:\darknet-master\build\darknet\darknet.vcxproj 55
요런 에러가 발생하는 이유는 설치해준 Darknet 프로젝트에 설정된 CUDA 경로와. 설치해준 CUDA 버전이 틀려서 그렇다.. 나는 11.4 를 설치했음.
D:\darknet-master\build\darknet\darknet.vcxproj 파일을 메모장으로 열어주자
그런다음 Darknet 에 설정되어있는 CUDA 11.1 경로를 바꿔줘야한다.. 걍 11.1 검색
11.1 => 11.4 로 변경해주고~
맨 밑에 11.1 을 또 11.4 로 변경~~ (11.4를 설치했으니 11.4로 변경해주는것임.. 만약 다른 버전을 설치했다면.. 설치한 버전으로 수정해야함.
수정하고 돌아오면 위와같이 뜨면 모두 다시 로드 버튼 클릭
그런다음 다시 빌드를 해보면 엄청긴~~~ 에러가 뜰거다.
이 에러들은 OpenCV 경로와 cuDNN 경로를 설정해주지 않아서 뜨는 에러다...
솔루션탐색기에서 darknet 프로젝트에서 마우스 오른쪽 버튼을 클릭하여 속성에 들어가자
Release 에 x64 가 맞는지 확인하고~~~~
구성속성 -> C/C++ -> 일반 탭으로 이동
추가 포함 디렉터리를 수정해줘야한다.
편집으로 들어가면 아래와 같이 셋팅되어있을것이다.
걍 지멋대로 설정되어있음...
아까 다운받아 압축풀었던 OpenCV 와 cuDNN 경로를 위와 같이 맞춰주자..
그런다음 링커 -> 일반 들어가서 추가 라이브러리 디렉터리 를 설정해줘야한다.
들어가보면 아래와 같이 되어있을텐데
경로를 다시 잡아주자..
이제 설정끝.. 빌드를 해주기전에~~~
Release 에 x64 가 맞는지 다시한번 확인하구~~ 빌드해보자..
빌드성공~~~~!
-----------------------------------------------------------------
이제 Visual Studio 를 끄고 Darknet 폴더에 들어가보자...
이렇게 보면... 도대체... 윈도우 스타일이 아니라 리눅스 스타일이다.. 먼놈에 파일들이 이렇게많은지.....
어짜피 빌드는 되었고 필요없는 파일들은 싹다 지워버리자... (Sample 파일들도 있고 소스 파일들도 있고 shell 파일도 있으나) 나에게는 모두 필요없는것들... (빌드 되었으니까~!)
build 폴더, 아까 다운받은 darknet53.conv.74 파일을 제외하고 걍 다 지워버리자..
아주 ~~ 깔끔해졌다.. 좋다...
이제 윈도우 환경변수를 셋팅해줘야한다.
내PC 에서 속성을 들어가자
고급 시스템 설정으로~
환경변수 로 또 들어가자
시스템변수에 Path 항목 편집 버튼 클릭
위와같이 아래 3줄 추가~~~
이제 명령프롬프트 실행~
아무대서나~~~ darknet -version 이라고 쳐보자....
위와 같이 나오면~~ 정상적으로 설정된 것을 확인할수 있다.
===========================================
이제 학습을위해 LabelImg 프로그램을 사용하여 라벨링한 이미지들을 Darknet 폴더에 넣어주자...
Project 별로 이제 관리하기위해 체계적으로 폴더 관리를 할 필요가 있다..
아래와 같이 darknet-master 폴더에 data 폴더를 하나 생성해주자.
그러고 data 폴더 안에 사용할 Project Name 으로 하나 폴더를 더 만들어주자. => 폴더명 뭐 맘대로 해두됨.
이제 만들어준 ProjectName 폴더에 아래와 같이 파일 3개를 넣어주자..
학습에 필요한 요파일들을 생성하기 위한 설명은
https://periar.tistory.com/236
여기에 내용이 있으니. 확인하고 가져오면됨..
이제 아래와 같이 obj 폴더 하나 또 만들어주고
Labeling 한 Image 파일과 txt 파일을 obj 폴더에 넣어주자
그런다음 다시 이전 폴더 ProjectName 폴더로 돌아와서 혹시 모르니 obj.data 파일에서 경로를 확인해주자
클래스 개수와~ train.txt 파일 위치 obj.names 경로가 맞는지 다시한번 확인해주고~~~
backup 경로 => 학습 weight 파일이 출력될 폴더명을 result 로 해주었으니 result 폴더 하나 맹글어주자
이제 train.txt 파일을 하나 맹글어주자~
이 파일은 뭐냐면 학습시킬 image 파일 List 이다.
나는 테스트를 위해 꼴랑 파일 3개가 전부다... 실제로 성능을 내기 위해서는 1000개~ 10000개의 이미지가 필요할것이다. 그럴때는 1000줄 10000줄이 되겠지..... => 뭔가 프로그램으로 만들어야 할듯...
자 이제~~ 학습을 위한 모든 준비는 끝났다...
명령프롬프트를 실행하고 Darknet 폴더로 이동한뒤 아래와 같이 명령어를 써주자..
darknet detector train data/ProjectName/obj.data data/ProjectName/yolov3_training.cfg darknet53.conv.74
라고 명령어를 써주면 되는데 이때 중요한것이 학습시킬 obj.data 파일 경로와 config 파일 경로다.
이제 돌려보면 RAM 용량이 큰 GPU 의 경우 에러가 없겟지만...
나처럼 GPU RAM 용량이 후달리면 아래와 같이 CUDA Error: out of memory 가 뜰꺼다.
한번에 처리할 메모리가 부족하므로.. Batch 개수를 줄여야 것다...
학습할 config 파일을 메모장으로 열어주자
3번째 줄의 batch 수를 줄여주자.. 요게 멀티쓰레드 마냥 한방에 몇개의 병렬처리를 할건지??
하는거라고 보면됨...
값을 4로 줄여주자
이제 다시 학습을 시켜보자~~~~~
darknet detector train data/ProjectName/obj.data data/ProjectName/yolov3_training.cfg darknet53.conv.74
오~~ 이제 뭔가 제대로 학습을 진행하기 시작한다...
커맨드창에 학습중인 정보도 나오고 평균 loss 율 표시하는 그래프도 나와주고
학습이 얼마나 남았는지도 잘 나오고있다..
이제 기다리자.... 학습 그래프의 값이 계속~~ 0에 가까워 질려고 그래프가 내려갈려고 노력을 할텐데
그러면 학습이 잘되고 있는것이다..
학습이 완료되면
요로케 될것이다.. 그래프가 아주 한방에 쭉~~ 떨어지면서 학습이 잘된것을 볼수있다.
이제 result 폴더를 확인해보면
학습 결과 파일이 잘 생성된걸 볼수있다~~~~
이제 아래 페이지에서 학습된 파일을 가지고 C# 에서 테스트를 해보면된다..
물론 출력된 학습파일 (weights) 를 C++ 이든.. 파이썬이든.. 어디서든 가져다 쓸수 있다..
난 걍 C# 으로 편하게 진행하니 C# 코드만~~~
https://periar.tistory.com/237?category=477687
마지막으로..... 첨부터 PC 에 직접 Darknet 을 빌드하고 학습하지 말고...
Google Colab 을 이용해서 쉽고 편하게 Step 을 이해 해가면서 선행 해보는걸 추천한다..
그래야 필요한 파일들이 뭔지... Config 파일에 대한 살짝 맛보기 정도... 는 해봐야 하니.. 복잡하게
PC에 빌드하고~ 학습해보지말고 Colab 에서 빠르게~~~ 학습을 한번 경험해본 뒤에 직접 PC에서 환경을 구축해서 학습해보는것을 추천한다...
https://periar.tistory.com/236?category=477687
'SoftWare > OpenCV' 카테고리의 다른 글
Windows10 에서 Darknet YoloV3 학습하기 - 서론 (1) | 2021.09.13 |
---|---|
yolov3 학습된 파일을 C# 에서 사용하기 (1) | 2021.09.11 |
Google Colab 에서 Yolov3 학습하기 (0) | 2021.09.10 |
opencv image 접근 방법 및 성능 그리고 병렬처리 (0) | 2015.03.16 |
Android JNI OpenCV 성능 (0) | 2015.02.11 |
댓글