블로그 이미지
pgmr이상현
Instagram:sh_lee77 머신비전, YOLO, 영상처리, Deep Learning, 딥러닝

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

Notice


이번 포스팅에서는 YOLO의 구성 즉, YOLO 분석에 관한 포스팅을 하겠습니다.


1. YOLO


YOLO 페이지 - 앞 포스팅에서 링크를 걸었지만 다시 한번 링크 걸겠습니다. 


YOLO githubYOLO설치없이 YOLO source code를 확인할 수 있습니다.



Darknet 디렉토리 구조


2. cfg


cfg디렉토리를 열어보면 여러 cfg파일들을 확일할 수 있습니다.

Darknet Framework는 cfg파일의 변경 혹은 변형을 통해서, 본인만의 모델을 만들어 데이터 학습을 시킬 수 있습니다.

예를 들어 yolo-obj.cfg 파일 안의 내용인데 이 안에서 batch size라든가 classification을 몇 개를 할 것인가에 따른 class수를 변경시킬 수 있습니다.


3. data


data디렉토리는 Real Time Detection시에 Bounding Box를 그릴때 필요한 Label들의 폰트와 Label list, Test Image들이 있습니다. 

YOLO를 test할때는기본적으로 있는 data set으로 coco.data를 사용하는데, coco.data에는 어떻게 Labeling이 되어 있는지 coco.names를 열어봄으로써 확인해 보겠습니다.

화면상으로 다는 캡쳐가 안됐지만 세어보니 80개의 Label을 확인할 수 있었습니다. 이것으로 봐서 YOLO의 기본 data set은 80개의 classification이 가능하다는 것을 확인할 수 있습니다.


4. src


src디렉토리는 말그대로 source디렉토리입니다. YOLO사용에 꼭 필요한 C코드 또는 헤더파일들이 있습니다. 예를 들어보면 image.c파일은 YOLO로 Detection을 할때, Object에 그려지는 Bounding Box를 어디에 그릴지에 관한 Top, Bottom, Left, Right좌표에 대한 코드들이 있고 또 그 곳에 Bounding Box를 그려라라는 코드가 있습니다.

  

5. Makefile


마지막으로 Makefile인데 Makefile은 주로 GPU, CUDENN, OPENCV, OPENMP, DEBUG를 사용할 것인가에 관한 정보를 다루고 있습니다.

이번 포스팅은 Darknet YOLO에 관한 분석이였습니다. 다음 포스팅은 Darknet YOLO데이터학습에 관한 포스팅을 하겠습니다.

posted by pgmr이상현

Opencv를 설치하였으니, YOLO를 설치 해보도록 하겠습니다.


1. Darknet의 YOLO Download

  1. git clone https://github.com/pjreddie/darknet


2. CUDA또는 Opencv가 설치되어 있다면 사용하기 위해 Makefile을 엽니다.

  1. vi Makefile

CUDA를 사용한다면 GPU=1로

opencv를 사용한다면 OPENCV=1로 변경해준다. 

앞서 Opencv를 설치하였으니 1로 바꿔 줍니다. Opencv를 사용함으로써

이미지나 영상내에서 Bounding Box로 물체를 인식할 수 있습니다.


3. Make하기

  1. cd darknet

  2. make

자 이제 YOLO의 설치는 마무리가 되었습니다. 이제는 사용을 해보겠습니다.


4. YOLO에서 제공하는 학습된 가중치 파일(Weight) 설치

  1. wget https://pjreddie.com/media/files/yolo.weights

YOLO Darknet에서 제공하는 학습파일을 받았음으로 이제 여러 예제들을 실행해 볼 수 있습니다. 첫 번째로 이미지 실행 두 번째 동영상 실행 세 번째로는 Webcam으로 돌려 보겠습니다.


5. 이미지파일 예제 실행하기

  1. ./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg

다음과 같이 강아지, 자전거, 자동차가 잘 인식되는 것을 확인할 수 있습니다.

TIP으로는 -thresh를 주어 정확도에 따른 인식을 다르게 할 수 있습니다. 예를들어

./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg -thresh 0.9

다음과 같이 0.9를 주었다면 인식률이 90%이상 이였을 경우에만 Bounding BOX로 인식을 하게 됩니다. 0.6이면 인식률이 60%이상만 된다면 Bounding Box로 표시 합니다.


6. 동영상파일 예제 실행하기

  1. ./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights <video file>



7. Webcam으로 실행하기

  1. ./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights

본인의 팀원들이 Webcam으로 잘 인식되는 것을 볼 수 있습니다. 옆에 보면 백팩도 인식이 잘 되고 핸드폰도 잘 인식이 되는 것을 확인할 수 있습니다.

posted by pgmr이상현

본인은 Ubuntu 16.04.1환경에서 설치 했습니다.

YOLO를 설치하기전에 Opencv를 선행으로 설치를 해주어야 합니다.


Opencv3.2설치


1. g++, cmake 설치

  1. sudo apt-get install g++
  2. sudo apt-get install cmake


2. Opencv설치를 위한 필요 패키지 설치

  1. sudo apt-get install build-essential cmake pkg-config libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev libv4l-dev v4l-utils libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libqt4-dev mesa-utils libgl1-mesa-dri libqt4-opengl-dev libatlas-base-dev gfortran libeigen3-dev python2.7-dev python3-dev python-numpy python3-numpy


3. Opencv Download

  1. mkdir opencv
  2. cd opencv
  3. wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.2.0.zip
  4. unzip opencv.zip
  5. wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.2.0.zip
  6. unzip opencv_contrib.zip


4. Opencv build

  1. cd opencv-3.2.0/
  2. mkdir build
  3. cd build
  4. cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=OFF -D WITH_IPP=OFF -D WITH_1394=OFF -D BUILD_WITH_DEBUG_INFO=OFF -D BUILD_DOCS=OFF -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D ENABLE_NEON=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.2.0/modules -D WITH_V4L=ON -D WITH_FFMPEG=ON -D WITH_XINE=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D PYTHON_INCLUDE_DIR=/usr/include/python2.7 -D PYTHON_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python2.7 -D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so ../
  5. make -j
  6. sudo make install



5. 설치확인

  1. pkg-config --modversion opencv
  2. pkg-config --libs --cflags opencv



위 이미지와 같이 3.2.0 version으로 Opencv가 성공적으로 설치가된 것을 확인할 수 있습니다.

posted by pgmr이상현

개발배경은 앞서 보았듯이 막대한 농작물의 피해를 Deep Learning기술을 사용함으로써, 방지하자 입니다. 그러면 어떤 Algorithm을 사용할 것인가? 또 그 Algorithm은 어떻게 설치하고 사용하는지 알아보도록 하겠습니다.


YOLO는 You Only Look Once의 약자입니다.  (YOLO클릭 시 YOLO페이지로 이동)

무한도전으로 유명해진 욜로(YOLO, You Only Live Once - 한 번뿐인 인생을 즐기자) 로 인해 개발당시 자료를 찾기가 조금 버거웠습니다.


YOLO 가 등장할 당시에 오브젝트 디텍션은 주로 Faster R-CNN (Region with Convolutional Neural Nerwork) 계열이 좋은 성능을 내고 있었다고 합니다.

Faster 니까 빠르다? 기존보다 빨라졌다는 뜻일 뿐 10프레임도 안나왔다고 합니다.

이때 YOLO가 등장하여 45프레임을 보여주었고 빠른 버전의 경우 155프레임을 기록하며 사람들을 놀라게 했습니다.


많은 Deep Learning Real Time Object Detection Algorithm들을

조사해 보았습니다. 또 그 중에서 우리가 개발시에 필요한 순으로 

우선순위를 매겼습니다.

종류 

mAp 

Fps (Titan X GPU) 

우선순위 

 YOLO V2

76.8 

67 Fps 

 1 

 SSD 500

75.5 

 58 Fps 

 2 

  SSD 300 

72.1 

58 Fps

3

  Faster R-CNN

73.2 

7 Fps 

4

 Fast R-CNN 

68.4 

5

위 결과는 Titan X GPU기준의 프레임과 정확도입니다.

이러한 결과로 우리팀은 야생동물을 포착하여 물총이 따라가면서 요격을 해야하기 때문에 정확도도 좋고 가장빠른 YOLO V2를 사용하기로 했습니다.


YOLO V2영상

posted by pgmr이상현


구글의 알파고로 AI또는 Deep Learning에 대한 사람들의 관심이 뜨거웠습니다.

저 또한 신기하고 놀라웠습니다. 갑자기 주제 이야기를 하다가 왜 알파고를 이야기

하나 의아 하실 수 있는데 아이디어는 여기서부터 시작 됩니다.

Deep Learning의 방향은 여러 방향이 있겠지만, 그중 이미지 학습이 있는데요.
이 이미지 학습을 통해서 야생동물인 고라니 또는 멧돼지를 학습시켜 인식을 하면

어떨까? 라는 생각을 하면서 

Deep Learning(YOLO)기반의 Smart Scarecrow를 개발하는 계기가 됩니다.


또 작년부터 지도교수님이 보여주시고 알려주셨던,

NVIDIA의 Cat Chaser 또한 개발의 계기가 됩니다. 

(cat chaser클릭 시 NVIDIA cat chaser페이지로 이동)

Cat Chaser는 엔비디아 엔지니어인 로버트 본드가 자택 부지에 대변을 보는 고양이가 끊이지 않는다는 점을 해결하기 위해 고양이만 쫓아내기 위해 만든 시스템입니다. 이 시스템은 IP 카메라를 이용해 정원을 7초 간격으로 모니터링한다. 촬영한 사진 처리는 엔비디아의 임베디드 모듈 시스템인 젯슨 TX1(Jetson TX1)을 이용했다. 여기에 딥러닝 기술(FCN)을 더해 고양이 사진을 대량으로 학습해 정원에 침입한 고양이를 확실하게 감지해낸다고 한다.

이 시스템이 고양이를 찾게 되면 와이파이를 이용해 정원으로 신호를 보내고 스프링클러를 자동으로 작동시킨다. 이러한 Deep Learning 학습기술과 어떠한 Action을 취하면 야생동물을 쫓아낼 수 있지 않을까 생각을 하며 개발을 시작하게 됩니다.


Cat Chaser의 시스템 구성도는 다음과 같습니다.

1. IP카메라를 이용해 정원을 촬영합니다.

2. 촬영중인 영상을 Photon Server로 보내줍니다.

3. Photon Server는 Jetson TX1으로 영상을 보내줍니다.

4. Jetson TX1은 FCN Algorithm을 통해서 고양이의 유무를 확인한 뒤 다시 Photon Server로 결과를 전송합니다.

5. Photon Server는 고양이의 유무에 따라 스프링클러의 작동여부를 결정합니다. 


다시 처음으로 돌아가서 개발배경인 야생동물로 인한 농작물피해에 대해 조사를 해보게 되었습니다.

5년간 643억원의 농작물 피해로 연간 100억원이 넘는 피해입니다. 야생동물로 인한 농작물 피해가 상당하다는 것을 알수 있습니다.


아래 영상은 현재 아마존에서 판매되고 있는 유사제품입니다. 

시청하시고 문제점이 무엇인지 확인해 봅시다.

현재 아마존에서 판매하고있는 제품들은 모두 동작감지센서로 작동합니다.

그렇기에 사람이 앞에 지나가도 동작을 감지하고 스프링클러를 작동시켜 사람에게도

피해를 주는것을 알 수 있습니다. 그렇기에 이러한 문제점을 해결하기위해 야생동물만을 인식하고 쫓아내는 Deep Learning(YOLO)기반의 Smart Scarecrow로 졸업작품 주제로 선정하게 됩니다.

posted by pgmr이상현
prev 1 2 next