이전글(1. Tensorflow와 놀자! : Linear Regression)에서 말했던 것처럼 이번에는 최소제곱법에서 TensorFlow의 알고리즘을 쓰지 않고 직접 편미분을 해보고 그 방식으로 Linear Regression을 해보겠습니다.


이전글에 있던 cost값 함수는 다음과 같습니다.


이 그래프에서 cost 값을 가장 낮추려면, 편미분을 통해 cost 함수의 극소점을 찾아야합니다. 과정은 다음과 같습니다.


1. a, b에 대해서 각각 편미분을 한다.

두 독립변수에 대해 편미분을 하면 다음과 같은 결과가 나오게 됩니다. 이때 우리는 3차원 그래프에서 극소점을 찾아야하기 때문에 두 편도함수의 값은 당연히 0이 되어야 합니다. c = cost(a, b)로 뒀습니다.



2. 연립방정식을 푼다.

간단하게 중2 때 배운 일차연립방정식 풀이처럼 하면 되겠지만, 저는 귀찮으므로(계수 크기가 ㅂㄷㅂㄷ) 공학용 계산기를 사용해서 계산했습니다.



결론적으로 Linear Regression에서 최소제곱법으로 구한 함수는 다음과 같네요.


혹시 몰라서 TensorFlow의 GradientDescentOptimizer로 구한 a, b값을 cost 함수에 넣어봤더니 0.536026232가 나왔고, 직접 편미분해서 구한 값을 cost 함수에 넣었을 땐 0.5360230548이 나왔습니다. 호오, 둘 다 cost값이 비슷하네요.


아래 그림은 TensorFlow에서 구한 Linear Regression과 직접 편미분 계산해서 구한 Linear Regression의 선입니다. TesorFlow것이 파란색, 제가 직접 구한게 빨간색입니다. 데이터들은 초록색 점이고요. 당연히 cost값이 소수점 다섯째자리까지 일치하는 만큼 그래프도 거의 일치하는 걸 볼 수 있습니다.

흠, 나중에는 미적분 알고리즘도 공부해봐서 직접 미적분을 구현해서 Linear Regression을 구현해봐도 재미있을 거 같네요 허헣

저는 현재 3개의 모니터를 동시에 쓰고 있습니다. 한 개는 가로로 두고, 나머지 두 개는 세로로 둬서 코딩하는데 쓰는데, 모니터 세 대가 종류가 다 달라서 크기도 가지각색이고 그럽니다. 뭐 아무튼 이 환경에서 Ubuntu 16.04.1과 Windows 10을 멀티부팅해서 쓰는데, 윈도에서는 각 모니터마다 배경화면을 달리 정할 수 있지만, Ubuntu에서는 기본적으로는 불가능합니다. 좀 당황해서 처음에는 검색하면서 여러가지 다 시도해봤는데 다 안돼서 좌절했는데, 오늘 다시 해보니까 되더라고요(음?) 이 방법을 소개해보려고 합니다.


참고한 곳은 여기입니다. (http://askubuntu.com/questions/390367/using-different-wallpapers-on-multiple-monitors-gnome-2-compiz) 처음에 여기 방법을 시도하다가 잘못해서 성공 못 해서 다른 곳도 찾아봤는데, 진짜 이거 말고는 답이 없어보입니다.


일단 먼저 배경화면으로 설정할 사진들을 여럿 준비하시고, nitrogen과 gnome-tweak-tool이라는 프로그램을 깝니다.


sudo apt install nitrogen gnome-tweak-tool


여기서 일단 gnome-tweak-tool을 실행합니다. 아마 gnome 환경에 대한 세세한 설정을 할 수 있게 해주는 프로그램인 거 같네요. 여기서 Desktop을 들어가시고 Icons on Desktop을 OFF로 둡니다. 이거 안 하면 배경화면을 암만 바꿔도 설정된 게 보이지 않더군요. 그리고 이거 끄면, 바탕화면에 어떠한 아이콘을 둘 수 없다는 것을 염두하셔야 합니다. (Windows의 바탕화면 아이콘 표기 안 하기랑 같은 기능 같네요)


다음으로 nitrogen을 실행합니다.


실행한 후에 Preferences에서 바탕화면 사진들이 들어있는 경로 폴더를 추가해줍니다.

이후 OK를 누르시면 그 폴더에 있는 사진들이 뜹니다.  (쿨럭, 제가 바로 아이유 팬입니다!)


그 사진들 중에서 하나 선택하시고 Automatic이 있는 곳을 통해 사진 설정(꽉 채우기, 바둑판식 채우기 등)을 하시고 어디 모니터에 하실지 선택하신 후 Apply해주시면 배경화면이 설정됩니다! 저는 아래와 같이 세팅해뒀습니다~~~


아 그리고, 이 nitrogen으로 설정된 배경화면은 세팅한 이후로 재부팅하면 사라지기 때문에 Launcher에 있는 Search your computer을 클릭하신 후 Startup Applications을 클릭하시고 여기서 다음 명령어를 시작 프로그램에 추가해주시면 됩니다.


nitrogen --restore


참고로 재시작한 이후에 로그인 하시고 한 10초 정도? 기다리셔야지 바뀐 배경화면들이 다시 적용되어서 보입니다. 아마 시작 프로그램의 딜레이 때문 아닐까 싶네요.

원래 제 목표가 자비스 만드는 거라(ㄹㅇ) 딥 러닝쪽 공부를 이제서야 시작하게 되었습니다. 원래 여름방학 때부터 하려고 했는데, 그놈의 귀차니즘이.....

이번엔 목표가 제대로 생겨서(고2때 카이스트 입학) 동기부여가 잘 되서, 좀 방향이 잡히더라고요. 여튼 뭐 그래서 제가 공부한 것들 좀 올려보려고 합니다.


일단 앞으로 딥 러닝 공부는 Tensorflow로 할 생각입니다. 제가 Python을 상당히 싫어하지만, 또 써보니 괜찮은 언어이기도 하고 무엇보다 제가 공부하고 있는 곳(http://hunkim.github.io/ml/)을 기준으로 추가적으로 제가 더 찾아보고 그러는 거라서, Tensorflow가 적합한 거 같네요.


- 1. Linear Regression은 무엇인고?


선형 회귀라고도 하며, 두 변수에 대한 선형 관계를 나타낸 것이라고 할 수 있을 듯 합니다.


- 2. Linear Regression을 한 번 해보자!


예를 들어 게임을 하는데 게임을 하는 시간과 그에 따라 얻는 경험치에 대한 표가 있다고 합시다.


 시간(y)

경험치(x)

2

35

60 

70 

100 


그리고 앞으로 게임에서 매일 일정 레벨에 도달하려고 할 때 얼마 만큼의 경험치를 얻기 위해 하루에 몇 시간 정도 게임을 하는 것이 적합한 지에 대해 알고 싶어한다고 합시다. 일반적으로 자연 현상에서는 대부분이 선형 관계이므로 1차 함수꼴(y = ax + b)로 두 변수에 대한 관계를 나타낼 수 있습니다. 따라서 일단 그 관계를 함수로 나타내기 위해서 저 데이터들을 그래프에 나타내봅시다.


이렇게 나옵니다. 이때 저 네 점에 대해 가장 가깝게 지나는 1차 함수를 구해야 합니다. 그래서 나온 것이 최소제곱법입니다. y = ax + b라는 식과 xi, yi 라는 데이터가 있을 때, 최소제곱법의 값은 cost(a, b)라고 하면, 아래와 같은 식이 나옵니다.

이때, 구하고자 하는 가장 최적의 y = ax + b를 만들려면 이때의 cost값이 가장 작아야합니다. TensorFlow에서는 이러한 cost값을 줄여주기 위한 알고리즘으로 GradientDescentOptimizer가 있습니다.  실제로 cost를 줄이는 알고리즘을 구현하고자 하면 조금 까다롭긴 하지만 크게 어렵지는 않습니다.


먼저 y = ax + b에서 우리는 cost를 줄이기 위해 a, b를 변수로 두고 이를 조정해야합니다. 위의 cost(a, b)식을 전개하면 다음과 같이 나옵니다.


휴... 전개가 좀 힘드네요. 여튼 잘 보시면 이 식은 간단하게 z = ax2 + by2 + cxy + d(a, b, c, d는 상수)의 함수꼴로 나타낼 수 있습니다. 일단 cost 함수를 위의 예시대로 데이터를 넣어서 전개해봅시다.

그리고 이 식대로 그래프를 한 번 그려봅시다. (식이 조금 복잡한 관계로, 다른 그래프들과 달리 https://academo.org/demos/3d-surface-plotter/를 사용했습니다.)



?! 아닛, 3D 포물면을 보는 기분이군요(WolframAlpha에서도 같은 함수를 돌렸는데 포물면인가 뭐시기라고 나온 거 같네요) 근데 사실 정확히 포물면은 아니고, 저기에 마우스 대서 값을 보면 최솟값인 부분이 한 군데로 수렴하는 거 같습니다. 뭐 여튼, 이때 cost의 최솟값 부분을 찾아야 하니 이 함수를 미분해서 0인 부분을 찾으면 됩니다! (아마 고등학교 과정의 미적분 수준으로는 힘들 거 같고, 편미분으로 할 수 있지 않을까 싶네요) 편미분으로 하는 과정은 다음 글에 한 번 써보도록 노력을 해보겠습니다. 


일단 본래 목적은 TensorFlow에서 GradientDescentOptimizer를 통해 cost를 줄여, 최종적인 1차 함수꼴을 얻는게 목적이니 이제 TensorFlow를 사용해봅시다. 소스 코드는 다음과 같습니다.

import tensorflow as tf import matplotlib.pyplot as plt x_data = [35, 60, 70, 100] y_data = [2, 4, 5, 9] W = tf.Variable(tf.random_uniform([1], -2.0, 2.0)) b = tf.Variable(tf.random_uniform([1], -2.0, 2.0)) y = W * x_data + b loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.0002) train = optimizer.minimize(loss) init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) for step in xrange(300001): sess.run(train) if step % 60000 == 0: print(step, sess.run(W), sess.run(b)) print(step, sess.run(loss)) # Graph plt.plot(x_data, y_data, "go") plt.plot(x_data, sess.run(W) * x_data + sess.run(b)) plt.axis([0, 110, 0, 10]) plt.show()

문제는 GradientDescentOptimizer의 특성인지, learning_rate를 0.0002정도로 세팅해야지, 이 이상으로 세팅하면 값이 수렴하지 않고 오히려 INF로 넘어가서 아예 함수를 못 만들게 되는 현상이 일어납니다... learning_rate를 아주 작게 세팅하니 그만큼 수렴 속도도 무진장 느리고요... 원인 파악은 못 했으나 GradientDescentOptimizer 대신 TensorFlow의 다른 Optimizer를 시험삼아 써봤더니 아주 아주 조금 부정확하지만 빨리 수렴하더라고요 흠... 연구가 많이 필요해보입니다. 아마 다음 글에서 편미분하고 알고리즘 직접 작성하면서 알게될 수 있을지도 모르겠다는 생각이 드네요.


그리고 제가 GPU 세팅된 TensorFlow 버전을 사용하는데도 다 돌리는데 1분 넘게 걸리니 웬만하면 step을 1천 정도로 잡아주시는게 간단히 보는데 좋을 거 같습니다. 굳이 좋게 하실려면 GradientDescentOptimizer 대신 AdamOptimizer(0.5)를 돌려주시면 깔끔하게 나올 겁니다. (저건 또 왜인지 모르겠지만 무진장 좋긴 한데, 로그를 보시면 값이 수렴하지 않고 마지막까지 조금씩 바뀌기도 하더군요)


그래프의 변화도 첨부하고 싶었는데, 좀 노잼이여서(... 겁나 느리게 수렴합니다) 그냥 마지막 그래프만 보여드리겠습니다.


Linear Regression은 뭐 이정도면 얼추 끝난 거 같습니다. 다음 글에서는 위에서 말한 편미분을 통한 cost 줄이기 알고리즘을 직접 설계해서 돌려보도록 하겠습니다. 그 다음엔 다중 Linear Regression? 뭐 이런 걸 할 거 같네요. (위에 언급한 머신러닝 강의 순서대로 공부하고 글을 쓸 예정입니다)

제가 IDC에 서버를 두고 앱 서버를 돌리는데, 이번에 남는 서버가 한 대 생겨서(문제는 램 드라이버 문제 때문에 CentOS 6.4부터 안 올라감 ㅁㅊ) 거기에 GPU 하나 끼워서 제 연구서버로 써볼까 생각을 해봤습니다. 서버가 1U짜리이기 때문에 서버 케이스 안에 GPU를 넣는 건 좀 오바고, riser(PCIE 연장선)을 이용해서 좁디 좁은 케이스 밖에 GPU를 두려고 생각을 해봤습니다. 찾아보니까 PCIE riser가 있긴 있는데, 대부분 비트코인 같은 사이버코인 마이닝용으로 나온 PCIE x16 to x1 밖에 없더군요(;;) 나름 서버 내부에 x16 레인이 있기 때문에 써보고 싶었는데 x1과 x16의 GPGPU 상의 성능이 크게 차이가 나지 않는다는 소리가 들어서 한 번 테스트해봤습니다.


만저 제 컴퓨터 사양은 다음과 같습니다.

CPU: Intel i7-5820K

RAM: DDR4 16GB

GPU: GTX970

HDD: SATA2 Seagate 320GB (08년도쯤에 생산된 것으로 추정됩니다 ㄷㄷ)

PSU: SuperFlower SF-600R14SE Silver Green FX


OS: Ubuntu 16.04.1

Kernel: Linux 4.4.0-34-generic

Software: neural-style, Torch7, CUDA 7.5, cuDNN(버전은 기억이 안 나네요)


참고로 테스트시에는 모니터 3개를 켜뒀고(DVI x 2, DP x 1) 크롬 켜두고, 터미널 창 세 개 켜뒀습니다. 한 터미널은 공백 상태(log 저장용이라 걍 켜둔 셈), 한 터미널에서는 neural-style이 돌아가고 있었고, 나머지 한 터미널에서는 아래의 명령어로 GPU를 모니터링했습니다.


watch -n 1 nvidia-smi


* 테스트는 riser를 끼운 상태(x1)에서 오후 12시쯤에 테스트했고, riser를 안 끼운 상태(x16)에서는 오후 8시쯤에 테스트했습니다. nvidia-smi를 확인해보니 GPU에 쓰로틀링이 걸리던데, 일단 아래 두 테스트할 때 riser 끼운 상태에서는 GPU 사용률이 95%에서 맴돌았고 riser를 안 끼운 상태에서는 97~100%를 맴돌았습니다. 제 방은 에어컨따위 틀지 않고 오직 선풍기만 틀어서 방안 온도는 크게 변하지 않았을 것으로 추정되어 테스트에 큰 영향은 없을 것이라 생각이 됩니다.


비교를 위해 사용한 riser는 아래 링크에 있는 riser입니다. 사실 이더리움 마이닝 테스트용으로 한 개 샀던 것인데, 딱히 마이닝할 일도 없고 이번에 성능 비교해서 잘 나오면 IDC에 박으려고 생각했던 것입니다. (무려 그 일주일 전에 알리에서 샀던 이어폰보다 먼저 오시는 riser 클라스 ㄷㄷ)

http://www.aliexpress.com/item/PCIe-PCI-E-PCI-Express-Riser-Card-1x-to-16x-USB-3-0-Data-Cable-SATA/32548726067.html?spm=2114.13010608.0.50.CpdraB



라이저를 끼우고 그래픽카드를 외부로 뺀 상황입니다.


그리고 테스트를 돌렸습니다. 테스트는 위에 써둔 것처럼 Torch7 기반의 neural-style을 GPU로 돌려봤습니다. 명령어는 아래와 같습니다.


time th neural_style.lua -style_image examples/inputs/picasso_selfport1907.jpg -content_image examples/inputs/brad_pitt.jpg -gpu 0


총 3회를 테스트하였으며 맨 밑의 더보기를 통해 그 로그들을 확인하실 수 있습니다. 참고로 이상하게 컴퓨터를 부팅한 이후 바로 torch를 돌리면 준비 때문인지 약간 딜레이가 있어서 두 테스트 다 처음에 1회 간단히 돌린 이후에 테스트를 돌렸습니다. (즉, 간단히 돌린 이 1회를 제외한 그 다음 테스트부터 아래 표에 반영되어 있습니다.)


테스트 결과는 다음과 같습니다. time 명령어를 통해 real 시간을 측정하였습니다.



흠... 생각보다 정말 듣던대로 x16과 x1에서의 성능차이는 크지 않았습니다. x16 riser가 구해지지 않으면, 지금 가지고 있는 이걸 IDC에 있는 서버에 끼워서 연구용 서버로 사용해야할 거 같네요. 굿굿


ps. 차트 이쁘게 넣어보겠다고 찾아보다가, Google Chart 모듈을 찾아서 넣어봤습니다. 정작 글 쓰면서 차트 모듈 사용해서 차트 작성한게 1시간 반정도 먹는 듯... ㅠㅠ


neural-style w/ riser


neural-style w/o riser


'Artificial Intelligence' 카테고리의 다른 글

PCIE x16 VS PCIE x1에서의 GPU 성능 비교  (0) 2016.08.10

음, 1시간 동안 Minecraft 아이콘 삽질을 해보면서 한 번 남겨보면 좋을 거 같아서 남겨봅니다. 일단 Ubuntu 바로가기 아이콘은 종류가 대략 두 가지로 나뉠 거 같은데, 전 바탕화면 따위를 더럽히고 싶지 않아서 아래와 같이 Launcher라고 불리는 구역에 바로가기 아이콘을 넣는 형식을 소개할 겁니다.

아이고 이미지 참 기네요. 여튼 이 구역에 저기 중앙 즈음에 있는 마인크래프트 크리퍼 아이콘처럼 바로가기를 넣어볼 것입니다.


1. sudo vi /usr/share/applications/이름.desktop 이 명령어로 바로가기를 생성할 수 있습니다. 우리는 저 Launcher에 넣는게 목표이기 때문에 주로 각종 앱들의 바로가기 파일들이 저장되어 있는 /usr/local/applicaitons에 생성합니다. 이후 아래와 같이 편집할 수 있습니다.

[Desktop Entry] Version=x.y                        # 프로그램 버전번호(1.0 등) Name=프로그램 이름 Comment=프로그램 설명 Exec=프로그램 실행 명령어 Icon=프로그램 아이콘 이미지 경로 Terminal=false                     # 터미널 실행여부(true: 실행, false: 실행 안함) Type=Application                   # 형식이 앱이다. 웬만해선 이건 수정 안 해도 됩니다. Categories=Utility;Application;    # 카테고리인데 저 같은 경우는 귀찮기도 하고 그래서 이 옵션 자체를 안 쓰긴 합니다만

# https://specifications.freedesktop.org/menu-spec/latest/apa.html 참고 가능합니다.


2. :wq로 저장한 후 sudo chmod +x 이름.desktop 으로 실행권한을 줍니다.

3. 윈도우의 시작버튼이라고 할 수 있는 우분투의 시작버튼을 눌러 검색창에서 그 프로그램 이름치면 나옵니다. 안 나오는 경우 /usr/share/applications 가서 직접 저 프로그램 실행해보시고 오류 뜨시면 명령어 수정하셔야합니다. 전 이거 명령어 문제 땜에 안 되더라고요. 여튼 아이콘 뜨면 그거 런쳐에 박으시면 끝!

이전에 제 데스크탑에 각종 리눅스(Deepin OS, Ubuntu, Debian, Fedora, Elementary OS 등)를 설치해보면서 겪어본 바로는, 생각보다 리눅스 호환성이 좋지는 않다(......)는 것입니다. 그래서 한 번 설치기를 올려보려고 합니다. 저 같은 경우는 한 20시간 삽질하면서 해봤네요.


일단 제 데스크탑 기준으로 설명할 것입니다. 사양은 다음과 같습니다.

CPU: Intel i7-5820K

RAM: 16GB

Mainboard: MSI X99S SLI PLUS

Graphic Card: GTX970

HDD: SATA2 Seagate 320GB로 추정됨


1. 일단 원하는 리눅스를 다운 받습니다. 저 같은 경우는 Ubuntu 16.04(현재 최신 Ubuntu LTS 버전)을 다운받았습니다.

2. USB 이동식 디스크에 리눅스 iso 파일을 굽습니다. 이때 추천해드리는 툴이 Rufus입니다. 개인적으로 많이 애용하고, 다른 툴에 비해 호환성도 좋더군요.

3. iso 파일을 구운 USB 이동식 디스크를 넣고 부팅합니다. BIOS 창에서 USB 이동식 디스크를 부팅 옵션 최상단에 두거나, 저 같은 경우 F11을 눌러서 부트 메뉴에서 선택할 수 있었습니다.

4. 이제 기본적인 grub(주로 쓰이는 리눅스 부트로더)가 보입니다. 이때 한 번 Install OS 또는 Start OS 등을 눌러서 부팅을 시도해봅니다. 저 같은 경우는 이후 화면이 이상하게 바뀌거나 검정색이 되면서 아무것도 되지 않았습니다. 원인은 Nvidia 그래픽카드 때문이죠. (리누즈 토르발스가 엔비디아에 욕을 날린 이유가 분명 있습니다 ㅇㅇ) 따라서 다시 컴퓨터를 재시작하고 다시 grub 화면까지 진입한 후, e를 눌러 명령어 수정을 시도합니다. 잘 찾아보면 대체적인 Desktop Linux 버전에서는 아마 splash 명령어가 보일겁니다. 거기 앞 또는 뒤에 nomodeset을 넣어줍니다. 그리고 F10인가를 눌러서 부팅을 시도합니다. 아마 잘 될 겁니다.

5. 부팅을 시도한뒤 언어를 설정하고 맘대로 설치하시면 됩니다. 개인적으로 추천해드리고 싶은 파티션 구조는 /boot에 500MB정도 할당, swap에 자신의 램의 1~2배 할당, 나머지를 /에 할당하는 겁니다. 귀찮으시면 Default 옵션으로 가셔도 되고요.

6. 설치 후 이제 리눅스 GUI 화면에 진입했을 것입니다. 일단 grub 부트 옵션을 부팅할 때마다 일일히 넣어줄 수 없으니, 수정해서 넣어야 합니다. 

sudo vi /etc/default/grub 으로 grub 부트 옵션을 수정할 수 있습니다. 아래와 같은 화면이 나올텐데, 뭐 GRUB_CMDLINE_LINUX에 nomodeset만 넣어도 충분하지만, 저 같은 경우 언제 또 리눅스가 죽을지 모르기 때문에(ㅠㅠ) 부트 로그를 보여주지 않는 옵션인 splash quiet 옵션을 지우고 넣었습니다. 저처럼 하시면 grub에서 선택 후 멋-진 리눅스 부팅 로그를 구경하실 수 있습니다 하핫

저 같은 경우는 트리플 모니터를 사용하는데 이 상황에선 하나 밖에 인식이 안 됩니다. 그래픽카드 드라이버가 깔리지 않았기 때문이죠. 이제 깔아주러 갑니다. 가능하면 검색해서 나오는대로 까시지 말고(전 그렇게 했다가 무한로그인 만나고 GG 쳤습니다) 제 방식대로 하시면 잘 될거라 생각됩니다.

7. 구글에 검색해보시면(nvidia linux driver 등...) 엔비디아에서 다운받을 수 있는 리눅스 드라이버가 있습니다. 이때 파일 확장자를 .run을 선택하시는 걸 추천드립니다.(딱히 증명된건 아니지만 일단 전 잘되었거든요 쿨럭...) 저는 NVIDIA-Linux-x86_64-367.35.run 를 다운받았네요.

8. 다운 받은 후 드라이버를 깔기 위해서 GUI 모드를 끕니다. Ubuntu의 경우, Ctrl + Alt + F1을 누르면 CLI 모드에 진입할 수 있습니다. 진입한 후, 일단 su로 root 계정 로그인 후 service lightdm stop으로 GUI를 끌 수 있습니다.

9. 종료 후, run 파일을 찾아서 실행합니다. 적당히 동의해주시면 됩니다. 참고로 저는 모든 곳에서 다 동의했습니다. 듣기로는 리눅스 드라이버 깔 때 OpenGL을 깔 것이냐가 뜰 수도 있는데, OpenGL 까는 건 무시해야 나중에 무한 로그인화면이 뜨지 않는다고 하더군요. 전 그런 창 뜨진 않았네요 :)

10. 다 까신 후, 재부팅하시고 무한 로그인 화면만 안 뜨시면 어느정도 성공하신 겁니다!


뭐 개인적으로 디자인이 이쁜 Deepin OS나 Elementary OS를 쓰고 싶었는데, 제 컴에서 아예 부팅조차 되지 않는 괴랄한(...) 현상이 보여서 시도조차 못 해본게 조금 아쉽긴 합니다.

  1. 개발자 [0] 2017.01.15 13:44

    감사합니다!!
    그래픽 카드 때문에 계속 말썽이었는데 정보가 도움 됬어요

  3월 초 즈음에 주문했던 Intel Realsense SR300 모델이 드디어 지난달 마지막 주에 도착했습니다!(물론 시험은 망했습니다...쿨럭)

뭐 여튼 거의 두달 만에 받는 상품인지라 되게 기대하고 까봤습니다.



상품 구성은 상당히 간단했습니다. 달랑 저 박스 하나였고, 저 박스 하나에 리얼센스 카메라 한 개랑 설명서(?) 같은 것들만 있었습니다 (값어치 안 하는 기분이 쿨럭)  아래 사진은 리얼센스 카메라를 설치한 모습입니다.

뭐 나름대로 괜찮아 보였습니다. 단점이라면....

1. 생각보다 호환성이 좋지 않다: 지원 스펙을 보면 6세대 이상의 CPU만을 지원한다는데 그거 때문인지 뭔지는 모르겠지만 USB 인식이 병맛 같았습니다.

2. 고주파음: 최악입니다. 크지는 않지만 리얼센스 카메라가 작동될 때 미세한 삐이이~ 소리가 들립니다. 카메라 불량인가 싶어서 포럼에도 질문을 올려봤는데, 미국분들이라 마음이 넓으신건지 그냥 쓰거나 케이스 만들어서 쓰라고(...)하시더군요. 나름대로 익숙해져서 쓰는 중입니다. 교환 받기도 애매할 꺼 같을 뿐더러, 귀찮습니다.

3. 생각보다 성능이 좋진 않다: 제 주관적 평가이긴 합니다만, 생각보다 3D scan이 좋은 편이 아니더라고요... 뭐 3D scan기능 쓰려고 산 건 아닌지라 어느정도 만족은 합니다. 아마 사람 얼굴 스캐닝하면 GTA4정도의 얼굴 랜더링에서 조금 미흡한 수준일 듯 합니다. 아, 그리고 안경 같은 물체는 인식 잘 못 합니다. 안경 쓰고 스캐닝하니까 얼굴에 안경 그대로 찍혀나오더라고요(뭔...)


  아래 이미지들은 예제 중 일부를 실행해본 모습입니다. 이상하게 Object 3D Scan은 잘 안되더라고요. 예제도 아주 좋은 편은 아닌 거 같다는 생각이 조금 들긴 했습니다. (제 얼굴 RGB 사진을 올리긴 뭐하니, Depth쪽 예제를 실행해봤습니다)



 나름대로 괜찮은 편입니다. 손 모양도 신기하게 잘 잡아내더라고요. 두번째 이미지가 손을 인식한건데, 우하단에 thumb_up을 눌러주면 저걸 Listening 하게 되어 위와 같은 제스쳐를 인식하여 밑에 로그처럼 나오게 됩니다.(예제 오류인지 왼손인지, 오른손인지 인식 잘 못 하는 건 함정)


  종합적으로 제가 계획하고 있는 프로젝트에는 적합하되, 아주 좋다고는 못 할 듯 합니다. 데이터 시트인가를 보면 실제로 리얼센스 기능들도 거의 다 베타, 알파로 정해져있더라고요. 다음주부터 본격적으로 C# 공부를 하면서 리얼센스 개발 수기를 쓸 예정입니다~

'Programming > Intel RealSense' 카테고리의 다른 글

1. Intel Realsense 도착! 및 예제 실행  (4) 2016.05.04
0. Intel Realsense 구매  (0) 2016.04.23
  1. 송민관 2016.05.25 09:51

    안녕하세요, 저도 리얼센스에 관심이 있어, 인터넷을 검색하다 이 곳에서 구입후 사용에 대한 내용을 보고 글을 남기게 됐습니다.
    제가 궁금한 점은 리얼센스가 어두운 곳에서 동작인식이 되는지 궁금합니다 ^^
    혹시, 시간 되실때 시험해보시고 알려주실수 있으신지요 ^^
    초면에 이렇게 글을 남기게 되서 죄송합니다.
    된다면 저도 구입을 해볼까 생각중입니다 ^^
    꼭 좀 부탁드립니다.
    감사합니다 ^^

    • makeapp 2016.05.26 01:38 신고

      일단 제 방 불을 꺼보고(모니터는 일단 봐야 하니 끄진 못 했네요) 테스트를 해봤는데 동작 인식(V사인, OK사인 등)은 잘 되는 거 같네요. 아마 적외선 센서로 인식해서 그런거 같기도 합니다.

  2. dalboki 2017.12.26 14:30

    안녕하세요...

    리얼센스 검색하다보니 님 블로그에 와서 좋은글 봤습니다..ㅎㅎㅎ

    혹시 리얼센스 카메라로 동작인식 (사람의 모양)도 가능 한가요?

    • makeapp 2018.01.16 03:55 신고

      거리 인식이 가능하기 때문에 사람을 누끼 뜨듯이 할 수는 있을 겁니다. 사람 자체를 인식해서 하는 건 있는지 잘 모르겠네요

## 2016.05.02 업데이트


제가 관심있는 오픈소스 프로젝트를 간단하게 정리해보려고 합니다(즐겨찾기에 쌓아두었더니 보지도 않아서...)


1. 시인 시팔이(욕 아닙니다): https://github.com/carpedm20/poet-neural

  딥 러닝으로 인간이 쓴 시를 토대로 새로운 시를 쓰는 AI입니다. 처음에 알게 되었을 땐, 그냥 소개 자료만 있었는데 어느새 오픈소스가 되어 있더라고요.함정은 실제로 체험을 해보고 싶었는데, UNIST쪽에서 AI 모듈을 날린 거 같네요. 404 뜹니다.


2. 알파고 레플리카: https://github.com/Rochester-NRT/RocAlphaGo

  어느 분이 알파고 논문(Nature지 링크, 전 4만원정도 내고 샀슴다(...))을 토대로 만든 알파고 레플리카입니다. 그냥 뭐...짱 신기해보입니다. 논문 읽으면서, 하나씩 번역하고 그러고 있는데, 원리는 알겠지만, 뭔 소리인지는 모르겠는.... 파이썬 기반입니다. 6살 때부터 바둑 둬서 바둑 되게 잼있어하는데, Google DeepMind Challenge Match 보면서 좀 무섭기도 하고 뭐 그랬습니다.


3. 예쁜 꼬마 선충 AI: https://github.com/openworm/OpenWorm

  아마 작년 이맘때쯤이었던거 같습니다. 예쁜 꼬마 선충 뉴런 구조를 이용해 만든 최초의 디지털 생명체(생명체라 하기도 뭐할 거 같긴 합니다)이죠. 관심 있게 보고, 막 이걸로 AI 로봇 만들어보려고 했는데, 역시 시간 부족(...프로젝트 관리 능력이 심히 떨어집니다)으로 관두고, 나중에 하고 싶은 프로젝트로 남았네요. 아마 오픈소스로는 뉴런 DB랑 파이썬으로 작성한 AI가 있는 걸로 압니다. 뉴런 DB는 다운 받아서 열어봤는데, 생물학에 문외해서 그런지 다 뭔소리인가 싶더라고요.


4. wego: https://github.com/schachmat/wego

  관심있는 프로젝트라기 보다는 좀 신기해서 담아두었던 프로젝트입니다. 무려 Go 언어 기반으로 CLI 환경에서 아스키 아트를 이용해 날씨를 알려줍니다. 깔아봤는데, 윈도에선 MSYS2 콘솔에서나 보기 편하지 명령 프롬프트나 파워쉘에선 절대 보기 좋진 않습니다. 설정 좀 건들여봤는데, 제 문제인지는 모르겠으나 제 컴에선 좀 깨져서 나오더라고요.


5. Web Captcha Bot: https://github.com/hletrd/SNU_sugangcaptcha

  아는 분이 작성하신 딥 러닝을 이용한 캡챠 봇인데, CNN을 사용했네요. 사실 연구과제로 캡챠 뚫는 딥 러닝 연구해보려고 했는데, 이 분이 이걸 만드셔서(...) 포기했습니다. 뭐 사실 이거 말고도 이미 크롬 앱으로도 캡챠 뚫는 수준의 프로그램이 나온 걸로 알고 있습니다.


6. Google TensorFlow: https://github.com/tensorflow/tensorflow

  구글에서 공개한 Deep Learning 라이브러리입니다. 성능은 그저 그런거 같은(Microsoft의 CNTK가 멀티 GPU에서 성능이 엄청 좋더라고요)데 무엇보다 검색했을 때 잘 나오고(어느정도 인지도가 있으니 질문 같은 것도 쉽게 할 수 있을 거 같네요), 무엇보다 튜토리얼이 잘 나와있어서 맘에 들어서 골랐네요. 일단은 텐서플로우로 딥 러닝 기초 쌓고 그 다음에 CNTK, Torch, Caffe 하고 싶네요. 아 참고로 텐서플로우는 윈도 미지원입니다. 쓰실려면 도커에 리눅스 깔아서 쓰시거나, 아니면 나중에 우분투 Bash 지원될때쯤 사용가능하지 않을까 싶네요. (Microsoft에서 발표한 퍼포먼싱 차트: ..여기선 거의 꼴등이긴 합니다 하하, 뭐 근데 어차피 상업용으로 공부하는 건 아니니 괜찮을 듯 하네요)

'Programming' 카테고리의 다른 글

관심있는 오픈소스 프로젝트  (0) 2016.04.23

  약 두 달 전쯤에 YES24에 Intel Realsense에 대한 책을 보게 되어 이 제품에 대해 알게 되었고, 책을 사서 읽어보니 상당히 흥미로워서 제품을 구매했습니다. 그 당시에 제품이 다 팔려서 pre order에 들어간 상태였고, 주문한 후 언제쯤 발송하는지 궁금해서 메일도 몇 번 보내봤는데, 재고가 워낙 잘 안 나오는 건지 소량 입고만 되서 pre order한지 두 달 만에 배송되고 있네요. 이 기술이 적용된 제품이 나온지는 한 2~3년 정도 되었는데, 이정도로 인기 있을 줄은 몰랐네요.



시험 기간인지라(...빨리 잘 끝나길 빕니다), 제품 오면 리뷰는 시험 끝난 날에 할 듯 합니다.


  간단하게 Intel Realsense에 대해 소개를 해보자면, 이 Intel Realsense라는 놈은 일반 카메라, IR 레이저 및 센서를 이용해 Color Data, Depth Data를 얻어 일반 카메라와는 다르게 물체의 3D 데이터를 얻습니다. 비슷하게 Microsoft의 Kinect가 있죠. 둘의 차이점이라면 Kinect는 게임에 특화되어 있고(인식 거리가 대략 1 ~ 4m로 알고 있습니다) 반면에 Realsense는 좀 더 컴퓨터 사용자에 친밀하도록(인식 거리가 대략 30cm ~ 1.2m) 되어 있습니다. 3D 데이터를 얻을 수 있기 때문에 3D 데이터를 이용해 Object로 랜더링 데이터를 만들어 낼 수 있고(3D 프린터로 인쇄가 가능하겠죠), 사용자의 제스쳐부터 표정을 이용해 기분의 정도를 알아낼 수 있습니다(이건 되게 신기하네요. Microsoft에서 나온 거랑 비슷하지 않을까 싶습니다).


  주로 다룰 언어는 GUI 만지기 편하게 C#를 쓸 예정입니다. 저는 보통 주 언어가 C/C++/Java/PHP여서 C#은 거의 처음 건들여보는 건데, 전에 딱 한 번 건들여봤을 때 생각보다 편한 거 같아서 Realsense 연구 수기 쓰면서 같이 공부해보려고 합니다. 책에서는 C++, C#, Unity 쓰는데, 저는 C#이 편해보이더라고요. 

'Programming > Intel RealSense' 카테고리의 다른 글

1. Intel Realsense 도착! 및 예제 실행  (4) 2016.05.04
0. Intel Realsense 구매  (0) 2016.04.23

+ Recent posts