2014년 9월 25일 목요일

베니스와 비첸차 여행 #3

물의 도시 베니스

산마르코 광장(Piazza San Marco)

 본래 광장은 시민들이 모여 정치적인 이야기를 펼칠 수 있는 민주주의의 장으로 여겨진다. 그러나 베니스에서 본 산마르코 광장은 궁전과 종탑, 의회 건물들로 둘러싸인 다소 장엄한 느낌으로 다가왔다. 최근엔 중국 단체 관광객이 깃발을 들고 다니면서 비둘기들과 함께 노니는 모습도 종종 보인다.

 

산마르코 종탑의 종을 치는 사내들

산마르코 종탑에서 바라본 베니스








세월의 흔적을 담고 있는 녹슨 청동 종



두칼레 궁전

두칼레 궁전안에서는 사진 촬영이 금지 되어 있어 내부는 눈으로 보는 것으로 만족해야 했다.




산 조르지오 마조레 성당

 산 조르지오 마조레 성당은 성당 그 자체로도 유명하지만 근처에서 파는 젤라또 덕분에 더욱 인기가 많다. 성당 앞의 물가에는 햇볕과 함께 젤라또를 함께 하는 관광객이 즐비하다.



아치형 천장의 채광 구조는 현대의 건축물에서 찾아볼 수 없는 자연 친화적인 느낌을 준다.


개구리를 든 소년

 카날 그란데 끝자락에 있는 Punta della Dogana art museum 앞에는 캘리포니아 예술가 Charles Ray가 디자인한 조각상이 있다. 2009년도에 자리했고, 지금은 베니스에서 동상을 업애고 원래 있던 가로등으로 바꾸었다고 한다. 역사성이 있는 물건은 아니었지만 관광객들에게 사랑받는 명소였는데 아쉬움이 남는다.

개구리를 든 소년(Boy with frog)



베니스와 비첸차 여행 #2

물의 도시 베니스

 메스트레에서 기차를 타고 바다를 건너면 베니스 산타루치아 역에 도착한다. 베니스역의 광장에는 관광객들로 항상 북적인다. 여기엔 관광객을 상대로 호객행위를 하는 경우도 있으므로 주의가 필요하다.





 당연한 이야기겠지만 베니스에는 차가 없다. 그래서 차도도 없고 차도 대신 모두 배로 다닌다. 택시도 배고 버스도 배다. 그간 수위가 높아졌다는 것을 증명하는 듯 출입구가 물에 잠긴 무시무시한 집도 있다.


 이탈리아에는 베니스 말고도 로마, 밀라노, 피렌체와 같은 유명한 관광지가 너무나도 많다. 그럼에도 불구하고 베니스를 꼭 거쳐가야하는 관광지로 생각하는 이유는 무엇일까? 그건 아마도 베니스가 가지고 있는 수난의 역사에서 비롯되지 않았을까? 베니스는 베네치아 공화국이라는 독립국이었다가 이탈리아에 귀속되기까지 주변 강대국들의 많은 침략을 받았다. 꼭 우리나라처럼 말이다. 문화, 상업의 지정학적 요충지라는 것도 비슷하다.

구글지도에서 본 베니스 본섬
 지금부터 베니스에서 매우 유명한 것들중에 몇 가지만 소개합니다.

리알토 다리(Ponte di Rialto)

 리알토 다리(Ponte di Rialto)가 처음 건축되었던 때는 12세기 후반이었던 것 같다. 처음엔 그냥 물위에 떠 있는 형태였다가 나무로 덮개를 덮은 것에서 현재의 모습으로 변했다. 현재 모습을 디자인 한 것은 안토니오 다 폰테(Antonio da Ponte)이다. 우리에게 유명한 미켈란젤로와 안드레아 팔라디오도 건축을 제안하였으나 결국 안토니오의 제안으로 현재의 모습을 갖추게 되었다.

 베니스하면 떠올려지는 것이 화려한 가면이다. 가면 축제(Carnevale di Venezia)는 사순설 10일 전까지 벌어지는 카니발의 마지막 중에 열리며 신분에 상관없이 즐겁게 즐기던 풍습에서 유래한다. 무척 화려한 가면들이 기념품 점에 전시되어 있다.

리알토 다리

리알토 다리위에 기념품 점

리알토 역
 밤에 본 리알토 다리는 사뭇 다른 느낌이다.



탄식의 다리(Ponte dei Sospiri)

 재판에서 유죄를 선고받은 죄수가 탄식의 다리를 건너면 수용소로 들어가기 전에 마지막으로 세상을 볼 수 있는 돌로 만들어진 창살이 있다. 그나마 죄수를 위한 마지막 배려라고 해야할까? 죄수들이 이 다리를 건너면서 탄식을 하여 이름이 붙여진 다리.

탄식의 다리
 탄식의 다리 밑에서 종이 울릴때 곤돌라를 타고 연인들이 키스를 하면 영원한 사랑을 이루어 진다고 믿는다.

수용소의 모습

2014년 9월 24일 수요일

베니스와 비첸차 여행 #1

물의 도시 베니스

 베니스로 들어가는 관문 마르코 폴로 공항은 별로 복잡하지 않으나 깔끔한 느낌이다.


 베니스는 영어식 발음이고 이탈리아어로는 베네치아 (베니찌이아~ 정도로 발음)다. 베니스 여행을 위한 숙박은 베니스 본섬을 이용해도 되지만 베니스만 관광할 것이 아니라면 섬 밖의 메스트레 정도에서도 훨씬 저렴한 가격에 이용할 수 있다. 근교의 지역인 파도바와 비첸차에도 더 가까우니 추천한다.

 베니스에 도착하면 처음에 보이는 것이 전부 물이라서 적잖이 당황하게 된다. 베니스의 상인과 베니스 영화제로 우리에게 친숙한 이곳은 본래 이탈리아에 속하기 전에 독립국가로 오랫동안 존재했고 지중해 항로를 바탕으로한 상업과 유리세공, 레이스 가공 장인들이 살던 섬들로 이루어져 있다.




 베니스 본 섬의 한가운데 자리하고 있는 산마르코 스퀘어를 일단 보고 본격적인 이야기를 시작하는 것이 좋을 것 같다. 그 만큼 산마르코 광장은 베네치아 사람들에게 의미있는 곳이다.



EKF vs. UKF 비선형 상태 변환 성능 비교

 필터에서 상태 천이 함수가 선형인 경우엔 Kalman filter를 사용합니다. 상태 천이 함수가 비선형인 경우에는 EKF, UKF, PF를 사용하게 되는데, 이 때 간단한 비선형 천이 함수를 이용하여 EKF와 UKF의 성능이 어떤 차이가 발생하는지를 확인해보고자 합니다.

 다음에 제시한 예제는 \(x, y\) domain에서 \( \rho, \theta \)로 변환하는 기본적인 비선형 천이 함수를 이용해 EKF와 UKF가 예측한 \(2\sigma\)를 표현한 타원을 보면 직관적으로 그 차이를 이해할 수 있습니다.

 http://refopen.blogspot.com/2014/09/ekf-vs-ukf.html

 Magnus Nørgaard는 derivative-free filter인 UKF가 taylor series의 2차까지 근사화하므로 비선형 함수에서 더욱 정확한 성능을 보장한다고 주장했습니다.


EKF vs. UKF 비선형 상태 변환 성능 비교 예제

filterComparison

Contents

% EKF vs. UKF
% 2014. 9. 24
% refopen.blogspot.com
% This example intuitively shows that the difference between EKF and UKF
% when state transition is non-linear function.

function filterComparison()

Create real data

Create some real data points(1000points)
$$\sigma_x = 5, \sigma_y = 3$$
sigmax = 5;
sigmay = 3;
rx = randn(1000, 1)*sigmax;
ry = randn(1000, 1)*sigmay;

% real data points and MLE parameter estimation
figure(001);
plot(rx, ry, 'r.');
xlabel('x');
ylabel('y');
axis([-15 15 -15 15]);
[x, P] = MLEnPlot(rx, ry);
$$r = \sqrt{x^2+y^2}$$
$$\theta = tan^{-1}\frac{y}{x}$$
figure(002);
rho = sqrt(rx.^2 + ry.^2);
theta = atan2(ry, rx);
plot(rho, theta, 'r.');
xlabel('\rho');
ylabel('\theta');
MLEnPlot(rho, theta);
fprintf('press any key to continue...\n');
pause;
press any key to continue...

Extended Kalman Filter

Find out jacobian matrix when it transformed by non-linear state transition matrix.
$$J = \left[\begin{array}{cc} \frac{\partial r}{\partial x} & \frac{\partial r}
{\partial y} \\ \frac{\partial \theta}{\partial x} & \frac{\partial
\theta}{\partial y} \end{array}\right]$$
Now, prediction of covariance matrix at the pridiction step $P_{r\theta}=JP_{xy}J^T$
q = x(1).^2 + x(2).^2;
J = [x(1)/sqrt(q) x(2)/sqrt(q); -x(2)/q x(1)/q];

xekf = [sqrt(x(1).^2 + x(2).^2) atan2(x(2), x(1))];
Pekf = J*P*J';

% draw ellipse
e = make_covariance_ellipses(xekf, Pekf);
hold on; plot(e(1, :), e(2, :), 'g-' , 'LineWidth', 3); hold off;
fprintf('press any key to continue...\n');
pause;
press any key to continue...

Unscented Kalman Filter

Set up some values
D = length(x);  % dimension
N = D*2 + 1;
$$ 2n+1 $$ samples are should be generated.
scale = 3;
kappa = scale-D;

% Create unscented sample points
Ps = chol(P)' * sqrt(scale);
ss = [x', repvec(x',D)+Ps, repvec(x',D)-Ps];
$$(x, y) \rightarrow (\rho, \theta)$$
rho = sqrt(ss(1, :).^2 + ss(2, :).^2);
theta = atan2(ss(2, :), ss(1, :));
x = [rho; theta];

idx = 2:N;
xukf = (2*kappa*x(:,1) + sum(x(:,idx),2)) / (2*scale);
diff = x - repvec(xukf,N);  % weighted sample cov.
Pukf  = (2*kappa*diff(:,1)*diff(:,1)' + diff(:,idx)*diff(:,idx)') / (2*scale);

% draw ellipse
e = make_covariance_ellipses(xukf, Pukf);
hold on; plot(e(1, :), e(2, :), 'k-' , 'LineWidth', 3); hold off;
end

function [x, P] = MLEnPlot(x, y)
phatx = mle(x);
phaty = mle(y);
x = [phatx(1) phaty(1)];
P = [phatx(2) 0; 0 phaty(2)];
e = make_covariance_ellipses(x, P);
hold on; plot(e(1, :), e(2, :), 'b-' , 'LineWidth', 3); hold off;
end

from timbailey's matlab utility

function p= make_covariance_ellipses(x,P)
% compute ellipses for plotting state covariances
N= 60;
inc= 2*pi/N;
phi= 0:inc:2*pi;

lenx= length(x);
lenf= (lenx-3)/2;
p= zeros (2,(lenf+1)*(N+2));

ii=1:N+2;
p(:,ii)= make_ellipse(x(1:2), P(1:2,1:2), 2, phi);

ctr= N+3;
for i=1:lenf
    ii= ctr:(ctr+N+1);
    jj= 2+2*i; jj= jj:jj+1;

    p(:,ii)= make_ellipse(x(jj), P(jj,jj), 2, phi);
    ctr= ctr+N+2;
end
end
%
%

function p= make_ellipse(x,P,s, phi)
% make a single 2-D ellipse of s-sigmas over phi angle intervals
r= sqrtm(P);
a= s*r*[cos(phi); sin(phi)];
p(2,:)= [a(2,:)+x(2) NaN];
p(1,:)= [a(1,:)+x(1) NaN];
end

function x = repvec(x,N)
x = x(:, ones(1,N));
end

2014년 9월 18일 목요일

R-CNN 설치와 실행

R-CNN 설치와 실행


 이제 Ubuntu 14.04LTS, MATLAB 2013b, caffe, cuda 6.0을 모두 설치하셔다면 R-CNN까지도 접해보시기를 추천합니다. 서두에 말씀드렸던 것처럼 CNN을 prototxt 파일을 수정함으로써 원하는 형태로 구성하고 학습할 수 있습니다.

 github rcnn 페이지에서도 영문으로 가이드를 보실 수 있습니다.

 특별히 설정을 바꾸거나 하지 않아도 readme.md에 설명된 대로만 따라가면 rcnn_demo를 실행할 수 있습니다.

 다만, NVIDIA cuda가 장착되지 않은 그래픽 카드이거나 사양이 낮다면 다음 글을 참고하여 실행해보시기 바랍니다.

 R-CNN: Regions with Convolutional Neural Network Features. 저사양의 그래픽 카드에서 GPU mode로 실행하기

 실행된 화면은 다음과 같습니다.

 재미있는 사진을 데모에 제시했습니다. 사람과 물고기 모양 자전거를 보여주면 어떻게 인식이 되는지.볼 수 있습니다. 가장 높은 스코어 순서로 사람, 자전거, 선글라스가 검출되었습니다.