attention 값 alpha → 특정 위치 i가 주어진 소리와 관련된 올바른 위치일 확률로 해석
visual 특징(v_i)와 sound embedding(h) 사이의 cosine similarity 사용
⇒ Attention weight를 이용해 visual feature들의 가중합을 계산하여 → 대표 시각 특징 z 얻음
음수 상관관계를 억제하기 위한 alternative attention mechanism 제안 (두 개의 방식)
Mechanism 1
v_i와 h를 정규화 → cosine similarity 계산
Mechanism 2
음수 값을 0으로 억제하는 ReLU 적용
Representative feature vector (z)
Attention 값 alpha → 소리와 시각적 맥락의 상호작용을 맵 형태로 표현
alpha와 sound source localization을 연결 ⇒ Representative visual context vector(z) 계산
음원의 위치에 대응하는 visual feature를 나타냄
z: 확률적 랜덤 변수, alpha가 음원 위치를 잘 나타낸다고 가정
Localizing Sound Source via Listening
video frame과 Audio 신호가 각 공간 위치에서 서로 유사한지 아닌지 판별
두 stream network를 통해, 프레임과 소리에 대해 각각의 서브 네트워크가 산출한 예측을 얻음
Unsupervised Learning
Visual feature(f_v)와 sound feature(f_s) 사용
positive pair (같은 비디오의 프레임-소리 쌍)의 fv와 fs는 서로 가깝게
negative pair (다른 비디오에서 가져온 쌍)는 멀어지도록
video frame에서 얻은 fv를 query로 두고, 같은 비디오에서 sliding window로 추출한 소리 fs를 positive sample로, 다른 랜덤 비디오에서 추출한 fs를 negative sample로 설정
Triple Loss (Query, positive sample, negative sample)
두 개의 거리 항 출력
비지도 학습 손실 함수
양성 쌍의 경우, 비지도 손실은 fv가 fs와 유사해지도록 강제함
z가 fv를 생성하려면, $\alpha$가 sound embedding (h)와 visual feature(v)의 상관관계에 따라 원인 위치(causal location)를 선택해야함
⇒ h는 v와 동일한 embedding 공간을 공유하게 되고, fs 또한 video frame과 상관된 맥락 정보를 인코딩하게 됨
pigeon superstition 문제
unsupervised learning이 잘 작동하는 것처럼 보이지만, pigeon superstition(비합리적 잘못된 연관 학습) 문제가 발생
ex) 기차 소리와 기차 이미지를 함께 주더라도, 모델은 기차가 아닌 철로(railway)를 음원으로 잘못 인식할 수 있음 (의미적으로 불일치하는 결과)
Semi-supervised Learning
pigeon superstition 문제를 해결하기 위한 방법
semi-supervised learning에서 supervisory signal을 일부 제공
semi-supervised loss 공식
L_U : unsupervised loss
L_S : supervised loss
alphaGT : 정답(ground-truth) attention map
lambda(\cdot) : 데이터의 감독 여부를 제어하는 함수
비지도 손실 L_U
감독 손실 L_S : 평균 제곱 오차(MSE) 또는 cross entropy loss를 사용할 수 있음
cross-entropy lossSupervised Loss
i → attention map의 위치 인덱스
alphaGT, i → 0 또는 1의 binary value
alphaGT의 존재 여부에 따라 loss를 unsupervised/supervised 모두로 유연하게 적용할 수 있음
정리
Supervised Learning의 한계
기존의 음원 위치 추정(Sound source localization, SSL)은 대부분 지도 학습(supervised learning) 방식
→ 하지만 라벨(정답 위치 정보, bounding box 등)을 사람이 직접 달아줘야 하므로 데이터 수집 비용이 매우 큼
영상과 소리는 자연스럽게 같이 존재하는데, 매번 사람이 레이블링하는 것은 현실적으로 비효율적
Unsupervised Learning의 필요성
따라서 저자들은 비지도 학습(unsupervised learning)을 제안 → 단순히 “영상-소리 쌍”만으로 음원의 위치를 추정하도록 학습
즉, “소리가 나는 장면과 안 나는 장면은 다르다”는 상관관계(correlation)만을 활용
Unsupervised Learning의 한계 (Pigeon Superstition 문제)
그러나 비지도 학습은 잘못된 상관관계를 학습할 위험이 있음
예: 기차 소리를 들려줬더니, 기차가 아니라 철로(railway)를 음원 위치로 예측 → 의미적으로는 틀린 결론
이를 논문에서 “pigeon superstition” 문제라 부름
비둘기 실험에서 실제 인과와 무관한 행동을 반복 학습하는 현상과 유사
논문의 해결 방법
기본 접근
Unsupervised two-stream network (영상 CNN + 소리 CNN + Attention)
영상-소리 쌍만을 이용해 공유 임베딩 공간(shared embedding space)에서 맞춰주고, Attention으로 음원 위치를 예측
문제 해결책
Semi-supervised Learning을 제안
즉, 완전히 라벨 없는 학습(unsupervised)과 라벨 있는 학습(supervised)의 중간
→ 대부분의 데이터는 라벨 없이 쓰고, 일부 데이터만 정답 어텐션 맵(ground truth attention map)을 제공
이점
소량의 라벨만 있어도 잘못된 상관관계를 교정할 수 있음
따라서 데이터 라벨링 비용을 줄이면서도 supervised 수준에 가까운 성능을 낼 수 있음
⇒ 이 논문은 완전 지도 학습이 요구하는 높은 레이블링 비용을 피하기 위해 비지도 학습 기반 음원 위치 추정을 제안했지만, 비지도 학습의 한계(pigeon superstition)를 보완하기 위해 반지도 학습(semi-supervised)을 통해 더 정확하고 안정적인 음원 위치 추정을 달성
[기존 접근: Supervised Learning]
문제: 라벨(정답 위치 정보)이 필요 → 데이터 레이블링 비용이 큼 ↓
[새로운 접근: Unsupervised Learning]
장점: 영상–소리 쌍만으로 학습 가능 (라벨 불필요)
문제: 잘못된 상관관계 학습 (pigeon superstition)
예) 기차 소리 → 기차 대신 철로를 음원으로 인식 ↓
[해결책: Semi-supervised Learning]
방법: 대부분 비지도 데이터 + 일부 정답 어텐션 맵 제공
효과: 소량의 라벨만 있어도 잘못된 상관관계 교정 가능
결과: 라벨 비용 ↓ + 성능 ↑ (supervised에 근접)
“이 논문은 비싼 라벨 비용을 줄이기 위해 비지도 학습 기반 음원 위치 추정을 제안했지만, 그 한계인 pigeon superstition 문제를 해결하기 위해 반지도 학습 방식을 도입했다.”
** 문제 터렛 **
조규현(A)과 백승환(B)은 터렛에 근무하는 직원이다.
하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다.
다음은 조규현(A)과 백승환(B)의 사진이다.
이석원(C)은 조규현(A)과 백승환(B)에게 상대편 마린(류재명;D)의 위치를 계산하라는 명령을 내렸다.
조규현과(A) 백승환(B)은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.
조규현(A)의 좌표 (x1, y1)와 백승환(B)의 좌표 (x2, y2)가 주어지고,
조규현(A)이 계산한 류재명(D)과의 거리 r1과
백승환(B)이 계산한 류재명(D)과의 거리 r2가 주어졌을 때,
류재명(D)이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.
** 입력 **
첫째 줄에 테스트 케이스의 개수 T가 주어진다.
각 테스트 케이스는 다음과 같이 이루어져 있다.
한 줄에 공백으로 구분 된 여섯 정수 x1, y1, r1, x2, y2, r2 가 주어진다.
** 출력 **
각 테스트 케이스마다 류재명(D)이 있을 수 있는 위치의 수를 출력한다.
만약 류재명(D)이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
** 제한 **
-10,000 <= x1, y1, x2, y2 <= 10,000
1 <= r1, r2 <= 10,000
** 풀이 **
A는 중심이 (x1, y1)인 원을 그림
B는 중심이 (x2, y2)인 원을 그림
두 원의 반지름은 각각 r1, r2
-> 두 원이 겹치는 부분이 D가 있을 수 있는 위치임
-> 두 원이 몇개의 점에서 만나는지 고려해야함
- 두 점에서 만남 (만나는 점의 개수 2개)
- 한 점에서 만남 (만나는 점의 개수 1개)
- 안 만남 (만나는 점의 개수 0개)
- 완전히 겹침 ; 중심, 반지름 모두 같음 (무한 -> -1 출력)
두 원 중심 사이 거리 d 계산
d = 루트 (x2-x1)^2 + (y2-y1)^2
- d == 0 and r1 == r2 : 완전히 겹침
- d == r1 + r2 or d == |r1 - r2| : 딱 한 점에서 만남
- |r1 - r2| < d < r1 + r2 : 두 점에서 만남
- 나머지 경우 : 안 만남
import math
def calculate_func(x1, y1, r1, x2, y2, r2):
d = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
if d == 0 and r1 == r2:
return -1
elif d == (r1 + r2) or d == abs(r1 - r2):
return 1
elif abs(r1 - r2) < d < (r1 + r2):
return 2
else:
return 0
T = int(input())
for i in range(T):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
print(calculate_func(x1, y1, r1, x2, y2, r2))