본문 바로가기
컴퓨터공학/YOLO

YOLO Darknet, darkflow 개인적으로 생각하는 팁

by Upupa epops 2020. 8. 13.

오랜만에 포스팅을 합니다.

작년 초에 YOLO를 포스팅하고 한동안 다른 일을 하느라 포스팅할 거리가 없어 

1년 넘게 티스토리를 방치했더니 질문글이 많이 달렸었네요....

 

최근에 다시 YOLO를 설치했습니다...

 

작년에 겪었던 오류도 다 수정을 했고, 제대로 빌드도 되고 모두 동작합니다.

 

저처럼 처음 YOLO를 접하시거나 실행해보고 싶으신 분들을 위해

개인적으로 작업하며 생겼던 오류 해결 방법과 팁을 정리해보았습니다.

 

 


 

[Darknet - windows 10 동작 시 생기는 문제]

 

1. darknet.sln 이나 no_gpu_darknet.sln 을 빌드하고싶은데 열리지가 않습니다.

 

 + 비주얼 스튜디오 2015를 설치하셔야 합니다. 

 

→ 참고 링크 : https://reyrei.tistory.com/19

 

 

[YOLO - darknet] Window 10에서 YOLO 빌드 및 실행하기 (visual studio 2015) +20.8.13 수정

(+ 2020.08.13) YOLO를 사용할때는 CUDA8.0과 cuDNN 6.0을 쓰도록 합시다. VS 2015에서 darknet.sln 파일을 열 때, CUDA8.0 이 필요하기때문에 버젼이 안맞으면 솔루션(sln)파일이 열리지 않습니다. ※ Windows..

reyrei.tistory.com

 

 

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

 

[YOLO - darkflow] CUDA_ERROR_OUT_OF_MEMORY, CUDNN_STATUS_ALLOC_FAILED 오류 해결 방법

※ CUDA_ERROR_OUT_OF_MEMORY, CUDNN_STATUS_ALLOC_FAILED 오류 해결 방법  →그래픽 카드 사양이...좋지 않기때문에...............생기는 오류같습니다...  gpu 와 batch를 이렇게 수정하면 됩니다. ㅠㅅㅠ (d..

reyrei.tistory.com

→ 참고 링크 2 : https://reyrei.tistory.com/16

 

 

[YOLO / darkflow] YOLO와 Python을 이용한 object detection (1) - 설치 및 테스트 (+20.08.13. GPU 오류 해결 완료

(+2020.8.13) CUDA_ERROR_OUT_OF_MEMORY, CUDNN_STATUS_ALLOC_FAILED 오류 해결했습니다. GPU를 30%정도만 사용하고 배치를 작게 잡으면 됩니다. - 맨 하단 기술함. ※ 본 포스팅은 darkflow 유투브(https://www...

reyrei.tistory.com

 

 

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 

 

 

 

참고 : https://stackoverflow.com/questions/55224586/assertionerror-expect-202335260-bytes-found-203934260-soccer-ball-detection-us/58269646#58269646

 

AssertionError: expect 202335260 bytes, found 203934260 Soccer Ball Detection using YOLOv2 (Darkflow)

https://github.com/deep-diver/Soccer-Ball-Detection-YOLOv2 I get loading yolo.weights .... and then AssertionError: expect 202335260 bytes, found 203934260 However, when I run the same comman...

stackoverflow.com

 

더 생각나는게 있으면 추가하겠습니다 :)

 

 

SMALL