이미지 Dataset에 대한 평균과 표준편차 구하기

사진 이미지는 촬영된 주변 환경에 따라 그 명도나 채도 등이 서로 다릅니다. 이 사진 이미지를 대상으로 하는 머신러닝을 수행하기 전에 이미지들을 동일한 환경으로 맞춰주는 후처리로 전체 이미지에 대한 화소값의 평균과 표준편차를 구해 이 값을 이미지들에 일괄적으로 적용합니다.

아래의 코드는 PyTorch에서 Dataset에 대한 평균과 표준편차를 구하기 위한 코드입니다.

transform = transforms.Compose([
    transforms.ToTensor()
])

dataset = torchvision.datasets.CIFAR10(root='./data/cifar10', train=True, download=True, transform=transform) 

mean = dataset.train_data.mean(axis=(0,1,2))
std = dataset.train_data.std(axis=(0,1,2))

mean = mean / 255
std = std / 255

실제 mean과 std의 값은 각각 [0.4913, 0.4821, 0.4465], [0.2470, 0.2434, 0.2615]와 유사한데, 실제 CIFAR10 데이터를 이용한 딥러닝 예제 코드에서 상수값으로 입력되는 바로 그 값입니다. 실제로 이 평균과 편차는 다음 코드 예시를 통해 적용됩니다.

train_transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean, std)
])

train_dataset = torchvision.datasets.CIFAR10(root='./data/cifar10', train=True, download=True, transform=train_transform) 

사람에 대한 Detection, Segmentation @A.I-TestBed

딥러닝 모델을 활용하여 어떤 이미지에서 사람의 위치를 찾아 내는 방식은 Detection과 Segmentation으로 분류할 수 있으며, Segmentation은 다시 Instance Segmentation과 Semantic Segmentation으로 나뉩니다.

Detection은 이미지에서 사람의 위치를 사각형 영역으로 잡아주는 방식이고 Segmentation은 이미지에서 사람에 해당하는 위치를 화소(Pixel)단위로 잡아줍니다. Segmentation 방식 중 Instance는 하나의 이미지에 여러명의 사람이 있다면 각 사람(각 Instance 별로)에 대해 분리해 픽셀 위치를 잡아주고, Semantic은 이미지에서 사람이라는 의미(Semantic)를 가지는 픽셀들을 잡아줍니다.

Segmentation 방식은 Detection 보다 학습과 메모리 소비가 훨씬 더 많이 소요되며, 훈련 데이터 중 레이블을 만들기가 훨씬 어렵습니다. Detection의 레이블은 사람에 해당하는 사각형 영역만을 지정하면 되지만, Segmentation의 레이블은 사람에 해당하는 픽셀을 모두 지정해줘야 하기 때문입니다.

Detection 방식의 모델은 매우 다양한데, 대표적으로 R-CNN 등이 있으며, Segmentation 방식의 모델에는 R-CNN을 통해 먼저 위치를 사각형 영역으로 잡고 다시 이 사각형 영역에 대해서 사람에 해당하는 픽셀을 잡는 Mask R-CNN이 있으며, 그냥 처음부터 이미지의 모든 픽셀에 대해 사람인지를 잡는 FCN 모델이 있습니다. Mask R-CNN 모델은 Instance Segmentation 방식이고 FCN 모델은 Semantic Segmentation 방식입니다. FCN 모델은 Semantic Segmentation 방식의 가장 기본이 되는 모델로 이 모델을 기본으로 Semantic Segmentation 방식을 더 개선한 다양한 모델이 파생되었습니다.

아래의 동영상은 머신러닝을 테스트하기 위한 TestBed 웹페이지로써 Detection과 Segmentation에 대한 기능을 보여줍니다.

참고로 위의 동영상에서 Detection과 Instance Segmentation의 결과에 대해 추론(hypothesis)값이 90% 이상으로 잡았습니다. 이 값을 좀더 내린다면 사람으로 잡지 못한 이미지의 부분에 대해서도 검출될 것입니다.

Accuracy, Precision, Recall

어떤 문제가 True, False인지를 예측할 때, 얼마나 정확하게 예측하는지의 척도로써 사용되는 3가지입니다. 먼저 Accuracy는 다음과 같습니다.

다음은 Precision입니다.

다음은 Recall입니다.

위의 공식에서 언급된 TP, FP, FN, FN은 다음과 같습니다. 정답이 참인지 거짓인지에 따라 T(True), F(False)로 표기하고 추정이 참인지 거짓인지에 따라 P(Positive), N(Negative)로 표기한 것입니다.

정리하면 Accuracy는 전체 예측에 대해 옳바르게 예측한 비율이고, Precision은 True라고 예측한 것 중에서 실제로 True인 것에 대한 비율입니다. Recall은 실제 True인 것 중에서 True라고 예측한 것에 대한 비율입니다.

감기 예측 모델을 예로 들면 Accuracy는 전체 예측에 대해 얼마나 올바르게 예측했는지에 대한 지표이고, Precision은 얼마나 정확하게 감기라고 예측하는지에 대한 지표이며, Recall은 실제 감기인 사람에 대해서 얼마나 정확하게 감기라고 예측하는지에 대한 지표입니다.