SSIM을 수정해 보았습니다.
부탁
stereo matching loss를 계산하기 위해 SSIM(Structure Similarity)를 사용하려고 하고, git 스스로 수정해 보았다.
이 Github는 논문의 저자의 git에서 논문도 꽤 유명하기 때문에, 잘못되었는지 의심스러워도 git의 코드가 굉장하거나, 나의 수정이 잘못되면 지적해 주시면 다행입니다!
본가의 코드
sigma의 계산이 모두 잘못되었다고 생각합니다.
def SSIM(self, x, y):
C1 = 0.01 ** 2
C2 = 0.03 ** 2
mu_x = slim.avg_pool2d(x, 3, 1, 'VALID')
mu_y = slim.avg_pool2d(y, 3, 1, 'VALID')
sigma_x = slim.avg_pool2d(x ** 2, 3, 1, 'VALID') - mu_x ** 2
sigma_y = slim.avg_pool2d(y ** 2, 3, 1, 'VALID') - mu_y ** 2
sigma_xy = slim.avg_pool2d(x * y , 3, 1, 'VALID') - mu_x * mu_y
SSIM_n = (2 * mu_x * mu_y + C1) * (2 * sigma_xy + C2)
SSIM_d = (mu_x ** 2 + mu_y ** 2 + C1) * (sigma_x + sigma_y + C2)
SSIM = SSIM_n / SSIM_d
return tf.clip_by_value((1 - SSIM) / 2, 0, 1)
수정 후 코드
여러가지 변경을 더해 버렸습니다만 기본적 변경은 sigma의 곳만
def SSIM(self, x, y,window_size=3):
C1 = 0.01 ** 2
C2 = 0.03 ** 2
clip_size = (window_size -1)/2
mu_x = nn.functional.avg_pool2d(x, window_size, 1, padding=0)
mu_y = nn.functional.avg_pool2d(y, window_size, 1, padding=0)
x = x[:,:,clip_size:-clip_size,clip_size:-clip_size]
y = y[:,:,clip_size:-clip_size,clip_size:-clip_size]
sigma_x = nn.functional.avg_pool2d((x - mu_x)**2, window_size, 1, padding=0)
sigma_y = nn.functional.avg_pool2d((y - mu_y)** 2, window_size, 1, padding=0)
sigma_xy = (
nn.functional.avg_pool2d((x- mu_x) * (y-mu_y), window_size, 1, padding=0)
)
mu_x = mu_x[:,:,clip_size:-clip_size,clip_size:-clip_size]
mu_y = mu_y[:,:,clip_size:-clip_size,clip_size:-clip_size]
SSIM_n = (2 * mu_x * mu_y + C1) * (2 * sigma_xy + C2)
SSIM_d = (mu_x ** 2 + mu_y ** 2 + C1) * (sigma_x + sigma_y + C2)
SSIM = SSIM_n / SSIM_d
loss = torch.clamp((1 - SSIM) , 0, 2)
save_image(loss, 'SSIM_GRAY.png')
return torch.mean(loss)
Stereo Matching의 정확도를 계산할 때
입력의 왼쪽 이미지
오른쪽 이미지를 추정한 Disparity를 사용하여 워프한 이미지
내 눈에는 똑같이 보이지만 SSIM은 어떻게 될까
SSIM의 loss
texture가 없는 영역이 하얗게 되어 있다. 분명 disparity의 추정 정밀도가 낮았을 것이다.
* 하얀 곳이 loss가 높다. 검은 곳이 loss가 0
입력을 같은 이미지로 만들면
물론 loss는 0!
왼쪽 이미지와 오른쪽 이미지를 입력하면
물체가 있는 장소는 제대로 loss가 나오네요.
자동차의 앞유리는 일부 검게되어 있기 때문에 좌우의 이미지에서 같은 휘도라는 것을 알 수 있다.
window size를 5로 설정하면
window size를 7로 설정하면
window size를 9로 하면
결론
무엇이 맞는지 정직하게 확인하는 것이 어렵습니다만, 코멘트 받을 수 있으면 다행입니다!
참고문헌
htps : // 기주 b. m / mr riko t / 물로 pth / b / b / b76 bee 4bd12610b482163871b7 ~ f93 931cb5331 / 물로 pth_도 l. py#L98
Structural similarity
htps // 엔.ぃきぺぢ아. 오 rg / うぃき / St ru c
Reference
이 문제에 관하여(SSIM을 수정해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/minh33/items/686ba470e1d9e383501c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def SSIM(self, x, y):
C1 = 0.01 ** 2
C2 = 0.03 ** 2
mu_x = slim.avg_pool2d(x, 3, 1, 'VALID')
mu_y = slim.avg_pool2d(y, 3, 1, 'VALID')
sigma_x = slim.avg_pool2d(x ** 2, 3, 1, 'VALID') - mu_x ** 2
sigma_y = slim.avg_pool2d(y ** 2, 3, 1, 'VALID') - mu_y ** 2
sigma_xy = slim.avg_pool2d(x * y , 3, 1, 'VALID') - mu_x * mu_y
SSIM_n = (2 * mu_x * mu_y + C1) * (2 * sigma_xy + C2)
SSIM_d = (mu_x ** 2 + mu_y ** 2 + C1) * (sigma_x + sigma_y + C2)
SSIM = SSIM_n / SSIM_d
return tf.clip_by_value((1 - SSIM) / 2, 0, 1)
def SSIM(self, x, y,window_size=3):
C1 = 0.01 ** 2
C2 = 0.03 ** 2
clip_size = (window_size -1)/2
mu_x = nn.functional.avg_pool2d(x, window_size, 1, padding=0)
mu_y = nn.functional.avg_pool2d(y, window_size, 1, padding=0)
x = x[:,:,clip_size:-clip_size,clip_size:-clip_size]
y = y[:,:,clip_size:-clip_size,clip_size:-clip_size]
sigma_x = nn.functional.avg_pool2d((x - mu_x)**2, window_size, 1, padding=0)
sigma_y = nn.functional.avg_pool2d((y - mu_y)** 2, window_size, 1, padding=0)
sigma_xy = (
nn.functional.avg_pool2d((x- mu_x) * (y-mu_y), window_size, 1, padding=0)
)
mu_x = mu_x[:,:,clip_size:-clip_size,clip_size:-clip_size]
mu_y = mu_y[:,:,clip_size:-clip_size,clip_size:-clip_size]
SSIM_n = (2 * mu_x * mu_y + C1) * (2 * sigma_xy + C2)
SSIM_d = (mu_x ** 2 + mu_y ** 2 + C1) * (sigma_x + sigma_y + C2)
SSIM = SSIM_n / SSIM_d
loss = torch.clamp((1 - SSIM) , 0, 2)
save_image(loss, 'SSIM_GRAY.png')
return torch.mean(loss)
무엇이 맞는지 정직하게 확인하는 것이 어렵습니다만, 코멘트 받을 수 있으면 다행입니다!
참고문헌
htps : // 기주 b. m / mr riko t / 물로 pth / b / b / b76 bee 4bd12610b482163871b7 ~ f93 931cb5331 / 물로 pth_도 l. py#L98
Structural similarity
htps // 엔.ぃきぺぢ아. 오 rg / うぃき / St ru c
Reference
이 문제에 관하여(SSIM을 수정해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/minh33/items/686ba470e1d9e383501c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(SSIM을 수정해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/minh33/items/686ba470e1d9e383501c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)