-
[Anaconda/Win10] TF기반 YoloV4 학습/테스트과학&기술 2022. 8. 27. 10:48
[Anaconda/Win10] TF기반 YoloV4 학습/테스트
[Anaconda/Win10] Running YoloV4 code with TF
1. 개발환경
- Win10/Pycharm/CUDA 11.1/cuDNN 8.0.x/
- Windows 10에서 Anaconda를 기반으로 Python 코드를 실행하고자 함
- Torch 버전은 좀 더 번거로워서 TF 기반 YoloV4를 우선적으로 테스트
- 가상환경 설정 (deepflowest.tistory.com/181 를 참고함)
- CUDA와 cuDNN 라이브러리 이용은 해당 PC의 환경변수를 참고하니.. 알아서 세팅
$ conda create -n yolo pip python=3.7 $ conda activate yolo
$ pip install tensorflow-gpu==2.4.0 $ pip install opencv-python $ pip install easydict $ pip install pillow
2. 준비
- Source Code: github.com/hunglc007/tensorflow-yolov4-tflite
- Yolov4 weight 파일: github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights
- Anaconda에서 git clone 명령어로 코드 받으려면 아래 코드 실행. 필자는 github에서 zip 파일 받아서 압출을 풀었음.
프로젝트 명(압축해제 폴더) = tensorflow-yolov4-tflite 일 것임.
$ conda install git
Weight 파일은 해당 링크를 그냥 다운로드 받아서 직접 \{YoloV4 home}\data\ 위치에 옮김. data가 아니어도 됨.
3. 기본 Test (Detect.py 실행)
- 여러 블로그에서 이미 설명하고 있고, 직접 tensorflow-yolov4-tflite\README.md 을 참고해도 됨.. 어렵지 않음.
- 앞서 다운로드한 weight 파일을 이용하여 직접 inference 하거나, tflite 또는 tensorRT 형식의 최적화 후에 inference를 수행하는 코드들임.
- python detect.py 명령어를 사용할 때 뒤에 flag를 추가하여 설정하는 방법도 있지만 코드에 미리 기본 값을 세팅해놓으면 그냥 python detect.py 만 실행해도 된다.
- detect.py 를 열어보면 상단에 설정된 값들이 나온다... 아래와 같이 설정값들을 본인 path에 맞게 수정..
flags.DEFINE_string('framework', 'tf', '(tf, tflite, trt') flags.DEFINE_string('weights', './checkpoints/yolov4-416', 'path to weights file') flags.DEFINE_integer('size', 416, 'resize images to') flags.DEFINE_boolean('tiny', False, 'yolo or yolo-tiny') flags.DEFINE_string('model', 'yolov4', 'yolov3 or yolov4') flags.DEFINE_string('image', './data/kite.jpg', 'path to input image') flags.DEFINE_string('output', 'result.png', 'path to output image') flags.DEFINE_float('iou', 0.45, 'iou threshold') flags.DEFINE_float('score', 0.25, 'score threshold')
4. Train or Evaluation
Detect(=Test=Inference)를 수행할 때는 1개의 이미지만 사용해도 된다. 하지만, Train은 각각 수많은 데이터 그리고 가능하면 공인된 데이터셋이 필요하다. 이미 YoloV4 코드에서도 사용되듯.. COCO dataset을 사용한다.
데이터셋 용량이 어마어마하다...다운로드 방식은 이미 tensorflow-yolov4-tflite\scripts\get_coco_dataset_2017.sh 위치에 파일이 잇다.. 하지만... 이것은 shell script(.sh 파일) 파일로 Windows에서 실행할 수 없다... anaconda에서도...
Windows에서 실행하려다가 쉬운 방법을 찾지 못해 그냥 수동으로 다운로드한다... 해당 스크립트를 내용을 참고하여 진행해보자면..
(1) 두 개의 폴더 생성
script\coco\images
script\coco\annotations
(2) 아래 파일을 다운로드. (cocodataset.org/#home)
http://images.cocodataset.org/zips/val2017.zip (1GB)
http://images.cocodataset.org/annotations/annotations_trainval2017.zip (241MB)
(3) 압축해제
coco/images에 val2017.zip 압축 해제
coco/annotations 에 annotations_trainval2017.zip 압축 해제
(4) coco관련 dataset 설정
- 다음 명령어 실행. 자신의 cocodataset\annotations\instances_val_2017.json 위치를 --input에 넣어준다.
- (Pycharm의 UI 하단 Terminal을 이용하여 주로 명령어를 실행함)
$ python coco_convert.py --input ./coco/annotations/instances_val2017.json --output val2017.pkl
또는, coco_convert.py의 상단의 경로를 알아서 수정. 그리고 python coco_convert.py 만 실행해도 됨.
다음으로 coco_annotation.py 내용 수정. 상단 flags.DEFINE_string 들의 내용을 보고 수정.
- coco_data는 이미 앞서 coco_convert에서 생성된 파일이니 상대 위치 확인하여 수정하거나 그대로 둠.
- classes 역시 원래 있는 파일이라 그대로 둠.
- coco_path는 따로 coco dataset을 압축 푼 위치로 수정함.
- image_path 이미지 위치를 현 프로젝트를 중심으로 수정.
- anno_path_val 생성될 위치. 필자는 원래대로 '../data/dataset/val2017.txt'으로 설정.
- 아래 코드를 실행하고 나서 0이 출력된다면 실패.
- tensorflow-yolov4-tflite\data\dataset\val2017.txt 를 열어서 레이블링 된 것을 확인
$ python coco_annotation.py
(5) train.py 실행
- 학습과 관련된 내용은 별개. 현재는 실행에 목적을 두고 있음.
- core\config.py 파일을 수정. #train options에 해당하는 내용들을 수정하자.
- 앞서 생성된 파일의 위치를 지정. 이미 설정된 path 문제없음.
- train.py 상단에서 주의할 건 한 가지: weights 파일 위치. 자신의 path 확인해서 맞추자. => 전이 학습용
- 아래 코드 실행. 끝.
$ python train.py
5. 결과
6. GPU 사용과 관련된 문제
만약.. 코드를 run 하고 나서 학습이 시작되기 전 이런 에러가 뜬다면,, GPU 사용 없이 CPU로 코드가 실행될 것이다..
2020-12-28 09:21:21.597917: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found 2020-12-28 09:21:21.618150: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cublas64_10.dll'; dlerror: cublas64_10.dll not found 2020-12-28 09:21:21.685288: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cufft64_10.dll 2020-12-28 09:21:21.728368: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library curand64_10.dll 2020-12-28 09:21:21.827181: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cusolver64_10.dll 2020-12-28 09:21:21.853031: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cusparse64_10.dll'; dlerror: cusparse64_10.dll not found 2020-12-28 09:21:21.878954: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cudnn64_7.dll'; dlerror: cudnn64_7.dll not found
- 아래와 같은 과정을 추가로 수행함.
(1) 원래 이 포스트의 설명과 다르게 하위 버전의 tensorflow를 사용하다가 pip install tensorflow-gpu==2.3.0 을 사용해서 최신 버전 설치함.
(2) train.py 코드에서 에러 발생해서 해당 부분 삭제. 원인 확인 못함. 버전이 바뀌면서 사용법이 바뀐 듯 하나..
(귀찮으므로 그냥 삭제만. 향후 어떤 문제가 발생할지 모르니... 에러를 따라 본인이 알아서 해결할 것..)
아래 코드를 삭제. (train.py 19~20 line) if len(physical_devices) > 0: tf.config.experimental.set_memory_growth(physical_devices[0], True)
'과학&기술' 카테고리의 다른 글
Visual Studio 2017 프로젝트 2019에서 사용하기 (0) 2022.09.12 인공날씨란? 기상조절? 인공강우? 날씨 조작? (0) 2022.08.28 [Powershell] 하위 특정 폴더 삭제 & 각 상위 폴더로 일괄 이동시키기 (0) 2022.08.27 CUDA 10.2 + Visual Studio 2019 연동 (0) 2022.08.27 임베디드 시스템, 펌웨어 란 무엇일까? (0) 2022.08.27