오랜만에 포스팅을 합니다.
작년 초에 YOLO를 포스팅하고 한동안 다른 일을 하느라 포스팅할 거리가 없어
1년 넘게 티스토리를 방치했더니 질문글이 많이 달렸었네요....
최근에 다시 YOLO를 설치했습니다...
작년에 겪었던 오류도 다 수정을 했고, 제대로 빌드도 되고 모두 동작합니다.
저처럼 처음 YOLO를 접하시거나 실행해보고 싶으신 분들을 위해
개인적으로 작업하며 생겼던 오류 해결 방법과 팁을 정리해보았습니다.
[Darknet - windows 10 동작 시 생기는 문제]
1. darknet.sln 이나 no_gpu_darknet.sln 을 빌드하고싶은데 열리지가 않습니다.
+ 비주얼 스튜디오 2015를 설치하셔야 합니다.
→ 참고 링크 : https://reyrei.tistory.com/19
2. GPU로 동작하는 darknet.sln을 빌드하고싶은데 비주얼 스튜디오 2015인데도 오류가 나면서 열리지가 않습니다.
+ CUDA 버젼이 8.0이 아니면 열리지 않습니다.
꼭 CUDA를 8.0으로 설치하고 Cudnn 버전도 맞춰줍시다.
→ 참고 링크 : https://reyrei.tistory.com/19
3. darknet.exe 파일이 제대로 실행되지 않습니다.
+ CUDA 버젼과 Cudnn 버젼을 꼭 맞춰줍시다.
[Darkflow - windows 10 / 저사양 그래픽카드로 동작 시 생기는 문제]
(제가 쓰고 있는 DELL inspiron 7577 노트북 gtx1060 max-q 기준입니다.)
1. darkflow는 제가 원하는 데이터셋을 이용해서 학습이 불가능한가요?
+ darknet은 YOLO-MARK를 이용하여 레이블링 후 txt 파일로 해주면 되지만,
darkflow는 레이블링 xml 파일이 필요합니다.
labelImg github[클릭]에서 다운받아 python으로 실행한 다음,
이미지를 불러와서 레이블링하면 xml파일로 저장할수 있습니다.
2. darkflow로 GPU 실행을 시키면 오류가 뜹니다.
+ 노트북에서 darkflow를 GPU로 실행시키면 CUDA_ERROR_OUT_OF_MEMORY, CUDNN_STATUS_ALLOC_FAILED
오류를 볼 수도 있습니다.
(저는 GTX 1060 max-Q 그래픽카드로 동작시킬 때 발생하는 것을 확인하였습니다.
컴퓨터 사양이 좋으면.. 2080ti로 돌렸을 때는 오류가 안나더라구요..)
명령어 뒤에 이렇게 넣어주시면 됩니다.
<폴더 안에 있는 testset 이미지 전체에 대한 결과를 얻고 싶을 때>
python flow --imgdir ./testset/ --model ./cfg/yolo.cfg --threshold 0.01 --load -1 --batch 1 --gpu 0.3
--imgdir ./testset/ → testset 이라는 폴더에 있는 이미지들 전체에 대한 결과를 얻는다.
<동영상 실행시>
python flow --demo Test.mp4 --model ./cfg/yolo.cfg --saveVideo --threshold 0.01 --load -1 --gpu 0.3
--load -1 → 가장 최근 생성된 학습 가중치 파일(weights)을 학습모델로 사용한다.
<custom train 시>
python flow --model cfg/yolo.cfg --load bin/yolo.weights --train --annotation train/Annotations --dataset train/Images --load -1 --gpu 0.3 --batch 5
--anoation train/Annoations → 어노테이션(레이블링) 한 xml 파일이 있는 폴더
--dataset train/Images → 어노테이션(레이블링) 한 이미지 파일이 있는 폴더
--load -1 → 가장 최근 weights 파일에 이어서 train을 진행한다.
--gpu 0.3 → gpu를 30%만 사용하겠다. gpu 1.0 = 100%
제 노트북은 0.4에서 다시 cuda 메모리 오류가 납니다. ㅠㅅㅠ 0.3까지가 안전빵!
--batch 5 → train 시에 배치사이즈를 줄여줍니다.
→ 참고 링크 1 : https://reyrei.tistory.com/31?category=824469
→ 참고 링크 2 : https://reyrei.tistory.com/16
3. darkflow에서 AssertionError: expect 202335260 bytes, found 203934260 형식의 오류가 나는 경우
darkflow \ utils \ 폴더의 loader.py에서
self.offset = 16을 찾아서 self.offset = 16 + found_value - expected_value 형식으로 변경
self.offset = 16 + 203934260 - 202335260
더 생각나는게 있으면 추가하겠습니다 :)