(0.485, 0.456, 0.406)??

오부랭이·2022년 5월 11일
0

Pytorch를 통해 모델을 만들 경우 torchvision.transform을 이용하여 augmentation이나 resizing, normalization 등을 간편하게 적용할 수 있다.

그런데 인터넷에 공유된 다수의 코드들이 다음과 같은 동일한 조건을 사용하여 정규화하는 점을 발견했다(심지어 파이토치 공식 문서에도 아래의 내용이 적혀있다!)

normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

이를 보고 두 가지 의구심이 들었다.

  1. "이미지를 폐구간 [0, 1]의 범위로 표현하면 표준편차를 차치하고, 평균을 0.5로 설정하는 것이 상식적이지 않은가?"

  2. "만일 이미지의 수가 모자라 모든 RGB 값 평균이 0.5로 수렴하지 않더라도, 왜 서로 다른 데이터셋에 대하여 같은 잣대를 적용하는가? 데이터셋의 종류가 다르다면 정규화를 위한 하이퍼파라미터의 값도 다르지 않은가?"

결론적으로 보자면 위의 평균과 표준편차는 ImageNet 데이터셋의 통계치이다. ImageNet과 같은 방식으로 촬영된 사진들(자연물이며, RGB 3원광으로 표현되고 그 밖의 요소로 인해 편향되지 않은 사진)의 경우 위의 수치를 따르는 것이 권고된다.

그러나 위성사진, 방사선(X선, 감마선 등)으로 촬영된 사진, 흑백사진 등은 데이터셋에 맞게 평균과 표준편차 값을 새로 구하는 것이 좋은 판단이라 생각된다.

이 질의응답을 참조하였습니다.

profile
설명충은 이기적이므로

0개의 댓글