블로그 이미지
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

2018. 11. 14. 20:02 TensorFlow Study

안녕하세요, 이상현입니다.


이번에 TensorFlow공부를 시작해 보려고합니다.


공부를 하면서 알게되는 내용 공유를 하려고하니, 잘 봐주셨으면 좋겠습니다.



TensorFlow?

Tensorflow는 Machine Learning과 Deep Learning연구를 목적으로,
구글의 연구조직인 구글 브레인 팀의 연구자와 엔지니어들에 의해 개발된
Deep Learning Open Source Library입니다.

Why Tensorflow? 

* 발달된 Community

 - Tensorflow는 가장 활성화 되어있는 Deep Learning Open Source Library입니다.

Pytorch, caffe, Theano, Keras등 많은 Library가 있지만 그중에서도 가장 활성화된 Library가 바로 TensorFlow입니다. 예를 들어 Facebook의 Tensorflow kr라는 커뮤니티가 활성화
되어있으며, 새로운 논문이 
나올때에도 가장 먼저 Open Source로 나오는 것이 바로Tensorflow입니다.


그러면 오늘은 간단하게 TensorFlow의 환경구축을 먼저 시작하겠습니다.

저의 환경은 아래와 같습니다.

Window 10-64bit

Anaconda3 5.1.0-64bit

Tensorflow 1.8.0

Python 3.6.4



1. ANACONDA 가상환경 설치


* ANACONDA 설치 이유
 - Anaconda는 600만명이 넘는 사용자들을 보유하고 있으며, 250개가 넘는 패키지들이 내포되어 있어, 번잡하게 환경을 구축할 필요 없이 개발을 손 쉽게 할수있습니다.


* 독립성

 - 가상환경을 여러개를 만들 수 있어, 각각 독립적으로 환경을 다르게 구축할 수 있습니다.


Anaconda설치  <--Click

왼쪽 하단의 Python 3.6 Version Download를 클릭합니다.


Next

I Agree

Just Me 클릭 Next 클릭

Next

Install

설치 진행중

Next

Skip 클릭

Anaconda의 설치가 완료 되었습니다.

좌측 하단의 돋보기 모양 검색버튼을 클릭후 Anaconda를 검색합니다.

그러면 위와 같이 Anaconda Prompt가 보이게됩니다. 실행시켜 줍니다.

실행이 되었습니다.

PiP를 이용, TensorFlow GPU Version을 설치합니다.

pip install tensorflow-gpu 입력합니다.

NVDIA의 GPU를 사용하지 않는 PC의 경우는 CPU Version으로 설치합니다.

pip install tensorflow 입력합니다.

import tensorflow 입력합니다.

CPU Version을 설치하신 분들은 정상적으로 작동이됩니다.

허나 GPU Version으로 설치하신 분들은 Error가 발생하게 됩니다.


GPU Version을 잘못 설치를 한게 아닌 CUDA와 cuDNN을 설치하지 않아서 나오는 Error입니다.

GPU Version을 설치하신 분들에 한해서 2번째 환경구축 게시물로 이동하시면 되겠습니다.

감사합니다.

posted by pgmr이상현

물총을 회전시키기 위해서는 지지대가 필요하다고 생각했습니다.

그래서 공방에 의뢰하여 다음과 같이 제작하게 되었습니다.

위와같이 Servomotor를 안에 넣을 수 있게 모양을 따서 만들게 되었습니다.

안에 Servomotor를 넣게되면

네 이쁘게 Servomotor가 들어가는 것을 알 수 있습니다.


그럼 이제 Servomotor가 회전하는 영상을 보겠습니다.

네 위와같이 회전이 잘 되는것을 확인할 수 있습니다.

그러면 이제는 물총에서 Trigger역할을 하는 Servomotor를 달아보겠습니다.

네 제가 열중하면서 Trigger용 Servomotor를 달고 있습니다.

다 되었으면 회전용 Servomotor위에 물총을 달아보겠습니다.


네 이제야 좀 짜세가 나오는 것 같습니다. 저만 그렇게 느끼는 건가요?ㅎㅎ


Servomotor제어를 시뮬레이션 해보면서 문제점이 생겼습니다. 엄청 큰..

우리팀은 회전용 Servomotor와 Trigger용 Servomotor로 총 2개의

Servomotor를 구매했습니다.


그런데 2개다 360도Servomotor를 구매했습니다. 360도Servomotor를

제어를 해보면서 느낀것이 자유자재로 회전을 시킬 수 없다는 것 입니다.


각도를 재서 회전을 할수가없고 한 방향으로 회전을 시키다가 몇초뒤에

역 방향으로 회전을 시킨다는 둥으로의 제어 밖에 가능하지 못한다는

문제점을 이제야 깨닫게 되었습니다. 이제 구매할 시간조차 없는 와중에


수소문 끝에 180도 Servomotor를 가진 친구를 찾았고, 그 친구덕분에

Bounding Box를 따라 각도별로 회전할 수 있게 되었습니다. Thank you


이 포스팅을 보시는 분들 중에서 Servomotor를 사용하기전 이신분들은

꼭 180도와 360도 Servomotor의 차이를 알고 구매하셨으면 좋겠습니다.


그러면 이제 Webcam만 물총위에 장착하게되면 완성입니다. 해보겠습니다.

와 드디어!!!! 이제 뭔가 진짜 있어보입니다. 그러면 우리팀이 만든

Deep Learning(YOLO)기반의 Smart Scarecrow 시연영상을 보도록 하겠습니다.

시연영상을 통해서 잘 동작하는걸 알 수 있습니다.

이 후에 12월22일에 부산 벡스코에서 열리는

2017 한국 소프트웨어 종합 학술대회인

KSC 2017 SW 구현/데모 경진대회에 참가하게됩니다.


[1]번 포스팅인 개발배경부터 다시 간단하게 정리를 해보자면

야생동물인 (고라니, 멧돼지)로 이한 농작물 피해가 연간100억원 이상으로 집계되고

있습니다. 현재 국내에서는 울타리를 치는 등의 방법으로 방지하고자 하는데,

조사를 해보니 고라니들이 울타리 아래의 땅을 파고들어가는 경우를 보았습니다.


또 국내 유사제품으로는 야생동물퇴치기 팜캡스라는 제품이 있었는데, 이 제품 같은 경우에는 시간의 주기적으로 빛 이나 소리를 냄으로써

야생동물을 쫓아내는 형식입니다. 이 경우에는 나중에 고라니가 소리가 나도

아무렇치 않구나 라고 학습을 하게되어 효과가 사라진다는 후기가 있었습니다.


해외에서는 아마존을 통해서 Scarecrow라는 제품을 구입하여 사용하는데,

이 경우에는 모션센서를 이용해 작동합니다. 그렇기에 사람또한 인식되어

스프링클러에 공격을 당하는 경우가 많았습니다.


이러한 문제점들을 해결하기 위해

Deep Learning기술로 야생동물(고라니, 멧돼지)를 학습하여,

사람에게는 피해없이 동작하고, 주기적이 아닌 객체인식을 통하여 작동하는

Deep Learning기반의 Smart Scarecrow를 제작하게 되었습니다.


Smart Scarecrow는 야생동물이 나타나기까지 계속 180도 회전합니다.

야생동물이 나타나 인식하게되면 180도 범위안에서 쫓아낼때까지

좌표를 계속 추적하며 물총을 쏘게됩니다. 

posted by pgmr이상현

앞 포스팅에서 서버연결까지 맞추었습니다.

이제는 아두이노에서도 Bounding Box의 좌표를 가져올 수 있습니다.

그럼이제 그 좌표를 물총이 180도 회전을 하면서 물을 발사할 수 있어야 합니다.


우리는 Servomotor를 2개 준비했습니다.

한개는 물총아래서 돌면서 물총의 회전을 담당하고, 한개는 손잡이 부분에서

Trigger역할을 합니다.


1. Servo motor연결하기


사진출처 [피지컬 컴퓨팅 교육]

 

위 이미지와 같이 2개의 서보모터를 제어할 수 있습니다.

그래서 우리도 위와같이 꽂아 보았습니다.

7번과 9번핀에 서보모터를 연결하였습니다.

하나는 회전 하나는 발사를 담당하게 됩니다.

Servomotor의 제어또한 오픈소스를 이용해서 수정을 하면 되겠습니다.


2. Servo motor코딩하기

위와 같이 Servo예제를 실행하게 되면 다음과 같은 예제코드가 나옵니다.

위에서 핵심 코드입니다.

Servo myservo;        // 서보모터 변수 선언


myservo.attach(9);    // 선언한 서보모터 변수에 9번에 연결된 모터를 연결


myservo.write(pos);    // 서보모터 변수에 연결된 모터를 pos 각도로 회전

위에 코드를 활용하여 서보모터를 제어할 수 있습니다.


posted by pgmr이상현
prev 1 2 3 4 5 6 7 ··· 9 next