2017-03-23 4 views
1

한 쌍의 기능 맵 전체에서 2D 교차 컨볼 루션 (예 : MATLAB의 https://www.mathworks.com/help/signal/ref/xcorr2.html)을 수행해야합니다. 대한 명확한Tensorflow의 일괄 상호 상관

:

하자가 B x W1 x H1 x CYB x W2 x H2 x C 될 수 X.

I 원하는 출력은 형상 B x W2 x H2 x 1이다

출력의 i 번째 1 x W2 x H2 x 1 슬라이스가 X[i,:,:,:]Y[i,:,:,:] 예컨대 간 교차 상관이다 (우리는 "필터"우리 SAME 패딩 Y 통해 통과 X 치료 가정)

tf.nn.conv2d(Y[i,:,:,:], X[i,:,:,:], [1,1,1,1], padding='SAME') 

같은이 작업을 구현하기위한 효율적인 방법이 있나요?

참고 :

사실을 활용
cross_corr = tf.nn.conv2d(
    Y, tf.transpose(X, perm[1,2,3,0], [1,1,1,1], padding='SAME') 

Tensorflow 간 상관 관계로 conv2d을 구현하는 : X1 x W1 x H1 x C이며, 우리는 각 슬라이스 B에서 Y 함께 교차 상관 관계를 원하는 경우,이 쉽다 그리고 우리는 작은 텐서를 본질적으로 전치 후에 필터로 취급 할 수 있다는 사실. B 다른 필터의 교차 회선을 취해야하기 때문에이 문제는 해결되지 않습니다.

아마도 conv3d가 가능할까요?

주 2 : 필터 채널이 입력 채널을 분리하는 경우 matconvnet의 vl_nnconv이 수행합니다. Tensorflow에는 이에 상응하는 것이 있습니까?

답변

0

here과 같이 tf.map 기능을 사용할 수 있습니다.

다시 시도해 보니 conv3d을 사용해 보았지만 제대로 작동 할 수있는 방법을 찾지 못했습니다.

+0

답변 주셔서 감사합니다, 이것은 내가 찾고있는 것입니다. 'tf.expand_dims (inputs [0], 0)'을 호출 할 때 한 주석 (원래 응답에 대한 주석을 달 수있는 담당자가 충분하지 않음)은 추가 차원을 추가하지 않습니까? tf.nn.conv2d의 입력을 5D 텐서로 만들지 않을까요? 기타 : 혹시라도 이것을 실행 해 보셨습니까? 지도 기능이 GPU에서 실제로 병렬 처리됩니까? –

+0

나는 달리는 것을 시도했다, 그것은 작동한다. 속도에 관해서는, 정직하게 아무 생각. 기본적으로 map (4D, 4D)는 각 (3D, 3D) 슬라이스에 함수를 적용하므로 기본적으로 '이미지 단위'기능을 사용합니다. 두 개의 'tf.expand_dims'는 (3D, 3D)를 (4D, 4D)로 변환하여 서로 얽혀 있습니다. 최종 결과는 5D 텐서이지만 2 차원이 1이므로 끝 부분에서 제거합니다. (나는 명확한 설명을 위해 나의 원래 대답을 주석으로 달았다) – Evariste