Darknet Install 비망록

5709 단어 CUDADarknetYOLOv3

개요



YOLO 모델 를 평가하고 싶었기 때문에 Darknet을 설치했다.
  • 실시시기 : 2019년 12월
  • OS: Ubuntu18.04LTS
  • cmake: 3.10.2
  • CUDA: 10.2   ←cuDNN 모두 전에 설치됨
  • cuDNN: 7.6.5
  • CC (Compute capability GTX1070): 6.1
  • OPENCV: 3.4.8 ←전에 설치됨

  • 설치



    시행 착오의 결과, 최종적으로 아래의 Darknet에 도착하여 이것을 설치한다.
    htps : // 기주 b. 코 m / 아, B / 다 rk t
    Darknet은 상기 이외에 다음의 2개도 시도했지만, 이 AlexeyAB의 해설이 매우 정중하고 좋았다. Q&A도 풍부.
  • YOLO 공식
  • GPU 사용 안함 NNPACK

  • 덧붙여서, NNPACK는 Ninja의 인스톨이나 컴파일이 필요해, AWS 의 순서도 보면서 컴파일 할 수 있었다. GPU+CUDA를 설치할 수 있으면 NNPACK은 필요 없다.
    요컨대, clone한 ninja 폴더내의 build.ninja 파일에 다음의 2행의 추가 편집이 필요하다.
    cflags = -std=gnu99 -g -pthread -fPIC
    cxxflags = -std=gnu++11 -g -pthread -fPIC
    

    어이의 경우, 최종적으로 GPU가 없는 엣지 단말에 재교육한 YOLO를 둘 때는 OPEN VINO를 사용할 생각이므로, 역시 NNPACK는 불필요.

    컴파일



    먼저 복제합니다.
    $ git clone https://github.com/AlexeyAB/darknet.git
    

    home 바로 아래에 darknet 폴더가 있기 때문에 거기서 작업한다.
    실제로 clone하면 darkent의 폴더에 열쇠 마크가 붙었다.
    root와 home의 유저에게 권한 제한은 없다고 하지만 chmod 777해도 마크가 잡히지 않고, 기분이 나빴기 때문에 이것은 삭제(rm -r)했다.
    클론이 아닌 "Download ZIP"버튼을 뽐내고, 해동하여 생긴 darknet 폴더를 home 바로 아래에 복사(cp -r)했다.

    make 조건이 작성된 Makefile을 편집합니다.
    $ cd darknet
    $ sudo vim Makefile
    

    Makefile에서 Enable(=1)로 설정하는 것은 GPU, CUDNN, OPENCV
    GPU=1
    CUDNN=1
    CUDNN_HALF=0
    OPENCV=1
    AVX=0
    OPENMP=0
    LIBSO=0
    ZED_CAMERA=0

    또한 지금 살아 있는 "ARCH="를 코멘트 아웃하고, 환경에 맞추어 그 하행에 있는 코멘트 아웃되고 있는 "#ARCH="를 살린다.

    #GTX 1080, GTX 1070, GTX 1060, GTX 1050, GTX 1030, Titan Xp, Tesla P40, Tesla P4
    ARCH=-gencode arch=compute_61,code=sm_61 -gencode arch=compute_61,code=compute_61

    덮어쓰기 저장(:wq!)하고 make한다.
    원래의 "ARCH="로 make해도 그 후의 동작에 문제는 없었지만, 환경에 맞춘 "ARCH="로 변경하면 make 시간이 짧아진 것 같다.
    $ sudo make
    Makefile:171: recipe for target 'obj/convolutional_kernels.o' failed
    make: *** [obj/convolutional_kernels.o] Error 127
    

    회사의 환경이라고 순조롭게 make 할 수 있었지만, 집에서는 에러가 나왔다. pjreddie의 darknet에서도 같은 오류가 나온다.
    시험에 GPU, CUDNN을 0으로하면 문제 없음.

    Github에서 Close했다.
    #NVCC=nvcc
    NVCC=/usr/local/cuda/bin/nvcc
    

    CUDA 설치가 올바르지 않았을까.

    확인



    여기에서는 darknet/data 폴더에 들어 있던 개의 jpg 파일로 동작 확인을 실시한다.
    Yolov3 모델에서 사전에 교육이 끝난 웨이트가 필요하지만 AlexeyAB의 darknet에는 들어 있지 않았기 때문에 pjreddie의 darknet에 들어 있던 yolov3.weights를 darknet 폴더 바로 아래에 복사해 둔다.
    그리고 전단에서 make한 실행 파일로 개를 검출시킨다.
    $./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
     CUDA-version: 10020 (10020), cuDNN: 7.6.5, GPU count: 1  
     OpenCV version: 3.4.8
    net.optimized_memory = 0 
    batch = 1, time_steps = 1, train = 0 
       layer   filters  size/strd(dil)      input                output
       0 conv     32       3 x 3/ 1    416 x 416 x   3 ->  416 x 416 x  32 0.299 BF
       1 conv     64       3 x 3/ 2    416 x 416 x  32 ->  208 x 208 x  64 1.595 BF
       2 conv     32       1 x 1/ 1    208 x 208 x  64 ->  208 x 208 x  32 0.177 BF
       3 conv     64       3 x 3/ 1    208 x 208 x  32 ->  208 x 208 x  64 1.595 BF
       4 Shortcut Layer: 1,  wt = 0, wn = 0, outputs: 208 x 208 x  64 0.003 BF
    /***  中略  ***/
     104 conv    256       3 x 3/ 1     52 x  52 x 128 ->   52 x  52 x 256 1.595 BF
     105 conv    255       1 x 1/ 1     52 x  52 x 256 ->   52 x  52 x 255 0.353 BF
     106 yolo
    [yolo] params: iou loss: mse (2), iou_norm: 0.75, cls_norm: 1.00, scale_x_y: 1.00
    Total BFLOPS 65.879 
    avg_outputs = 532444 
     Allocate additional workspace_size = 52.43 MB 
    Loading weights from yolov3.weights...
     seen 64, trained: 32013 K-images (500 Kilo-batches_64) 
    Done! Loaded 107 layers from weights-file 
    data/dog.jpg: Predicted in 25.815000 milli-seconds.
    bicycle: 99%
    dog: 100%
    truck: 94%
    

    결과 jpg가 표시되고 predictions.jpg로 darknet 폴더에 있으면 성공

    케이스

    다음 번에 드디어 모델 재교육과 실시간 감지에 도전

    이상

    좋은 웹페이지 즐겨찾기