본문 바로가기
Tech Story/AI, ML, BigData

Deep Learning - (3) Ubuntu16.04 에서 YOLO: Real-Time Object Detection

Deep Learning - (3) Ubuntu16.04 에서 YOLO: Real-Time Object Detection


2018. 8. 10.



reference : https://github.com/pjreddie/darknet/wiki/YOLO:-Real-Time-Object-Detection


config 파일은 기존 darknet framework을 설치하면서 cfg 디렉토리에 있다


pi@pi-15U560-MFLGL:~/darknet$ ls

LICENSE       LICENSE.meta  README.md  cfg       include        predictions.jpg  src

LICENSE.fuck  LICENSE.mit   TestImg    darknet   libdarknet.a   python           yolo.weights

LICENSE.gen   LICENSE.v1    TestYolo   data      libdarknet.so  results

LICENSE.gpl   Makefile      backup     examples  obj            scripts


pi@pi-15U560-MFLGL:~/darknet$ ls cfg

alexnet.cfg        extraction.conv.cfg           rnn.cfg          yolov1.cfg

cifar.cfg          extraction22k.cfg             rnn.train.cfg    yolov2-tiny-voc.cfg

cifar.test.cfg     go.cfg                        strided.cfg      yolov2-tiny.cfg

coco.data          go.test.cfg                   t1.test.cfg      yolov2-voc.cfg

combine9k.data     gru.cfg                       tiny.cfg         yolov2.cfg

darknet.cfg        imagenet1k.data               vgg-16.cfg       yolov3-spp.cfg

darknet19.cfg      imagenet22k.dataset           vgg-conv.cfg     yolov3-tiny.cfg

darknet19_448.cfg  imagenet9k.hierarchy.dataset  voc.data         yolov3-voc.cfg

darknet9000.cfg    jnet-conv.cfg                 writing.cfg      yolov3.cfg

densenet201.cfg    resnet152.cfg                 yolo9000.cfg

extraction.cfg     resnet50.cfg                  yolov1-tiny.cfg

pi@pi-15U560-MFLGL:~/darknet$ 




darknet 디렉토리에서 weight 파일(이미 트레이닝받은 파일)을 받는다.

용량은 약 200MB정도 된다.


pi@pi-15U560-MFLGL:~/darknet$  wget http://pjreddie.com/media/files/yolo.weights

URL transformed to HTTPS due to an HSTS policy

--2018-08-10 15:51:13--  https://pjreddie.com/media/files/yolo.weights

Resolving pjreddie.com (pjreddie.com)... 128.208.3.39

Connecting to pjreddie.com (pjreddie.com)|128.208.3.39|:443... connected.

HTTP request sent, awaiting response... 200 OK

Length: 203934260 (194M) [application/octet-stream]

Saving to: ‘yolo.weights.1’


yolo.weights.1              0%[                                     ]  87.70K  27.7KB/s    eta 1h 59m 

pi@pi-15U560-MFLGL:~/darknet$ ls -al yolo.weights

-rw-rw-r-- 1 pi pi 203934260  3월 27  2017 yolo.weights



YOLO 환경파일을 이용하여 강아지 이미지 테스트


 pi@pi-15U560-MFLGL:~/darknet$ 

 pi@pi-15U560-MFLGL:~/darknet$ ./darknet yolo test cfg/yolov1.cfg yolo.weights data/dog.jpg

layer     filters    size              input                output

    0 conv     64  7 x 7 / 2   448 x 448 x   3   ->   224 x 224 x  64  0.944 BFLOPs

    1 max          2 x 2 / 2   224 x 224 x  64   ->   112 x 112 x  64

    2 conv    192  3 x 3 / 1   112 x 112 x  64   ->   112 x 112 x 192  2.775 BFLOPs

    3 max          2 x 2 / 2   112 x 112 x 192   ->    56 x  56 x 192

    4 conv    128  1 x 1 / 1    56 x  56 x 192   ->    56 x  56 x 128  0.154 BFLOPs

    5 conv    256  3 x 3 / 1    56 x  56 x 128   ->    56 x  56 x 256  1.850 BFLOPs

...
...
   27 conv   1024  3 x 3 / 1     7 x   7 x1024   ->     7 x   7 x1024  0.925 BFLOPs
   28 Local Layer: 7 x 7 x 1024 image, 256 filters -> 7 x 7 x 256 image
   29 dropout       p = 0.50               12544  ->  12544
   30 connected                            12544  ->  1715
   31 Detection Layer
forced: Using default '0'
Loading weights from yolo.weights...Done!
data/dog.jpg: Predicted in 10.088818 seconds.





tiny YOLO 테스트


 pi@pi-15U560-MFLGL:~/darknet$ wget http://pjreddie.com/media/files/yolo-tiny.weights

 pi@pi-15U560-MFLGL:~/darknet$ ./darknet yolo test cfg/yolov1-tiny.cfg yolo-tiny.weights data/person.jpg

layer     filters    size              input                output

    0 conv     16  3 x 3 / 1   448 x 448 x   3   ->   448 x 448 x  16  0.173 BFLOPs

    1 max          2 x 2 / 2   448 x 448 x  16   ->   224 x 224 x  16

    2 conv     32  3 x 3 / 1   224 x 224 x  16   ->   224 x 224 x  32  0.462 BFLOPs

    3 max          2 x 2 / 2   224 x 224 x  32   ->   112 x 112 x  32

    4 conv     64  3 x 3 / 1   112 x 112 x  32   ->   112 x 112 x  64  0.462 BFLOPs

    5 max          2 x 2 / 2   112 x 112 x  64   ->    56 x  56 x  64

    6 conv    128  3 x 3 / 1    56 x  56 x  64   ->    56 x  56 x 128  0.462 BFLOPs

    7 max          2 x 2 / 2    56 x  56 x 128   ->    28 x  28 x 128

    8 conv    256  3 x 3 / 1    28 x  28 x 128   ->    28 x  28 x 256  0.462 BFLOPs

    9 max          2 x 2 / 2    28 x  28 x 256   ->    14 x  14 x 256

   10 conv    512  3 x 3 / 1    14 x  14 x 256   ->    14 x  14 x 512  0.462 BFLOPs

   11 max          2 x 2 / 2    14 x  14 x 512   ->     7 x   7 x 512

   12 conv   1024  3 x 3 / 1     7 x   7 x 512   ->     7 x   7 x1024  0.462 BFLOPs

   13 conv    256  3 x 3 / 1     7 x   7 x1024   ->     7 x   7 x 256  0.231 BFLOPs

   14 connected                            12544  ->  1470

   15 Detection Layer

forced: Using default '0'

Loading weights from yolo-tiny.weights...Done!

data/person.jpg: Predicted in 1.089886 seconds.






옵션테스트 -thresh 0.9하면 90%이상의 값만 보여준다.


 pi@pi-15U560-MFLGL:~/darknet$ ./darknet yolo test cfg/yolov1.cfg yolo.weights data/dog.jpg -thresh 0


threshold값을 0으로 주는 옵션으로 기본적으>로는 0.2보다 같거나높은 값만 보여준다고 합니다. (-thresh 값)

이렇게 0으로 주면 0보다 같거나 높은 모든 찾아낸 object를 표시해주는데 매우 복잡하기 때문에 자주 사용하지는 않습니다.




실시간 웹캡을 이용한 detection 테스트.


 pi@pi-15U560-MFLGL:~/darknet$ ./darknet detector demo cfg/coco.data cfg/yolov1.cfg yolo.weights


웹캡으로 나오는 이미지를 실시간으로 확인이 가능합니다.



End of Posting