인프런 커뮤니티 질문&답변

austin님의 프로필 이미지
austin

작성한 질문수

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드

keras-yolo raccoon 관련 질문 있습니다.

작성

·

114

0

안녕하세요 선생님

먼저, raccoon 강의 정말 잘 들었습니다.

제가 저만의 학습데이터에 전이학습을 완성해봤는데요.

그 성능을 테스트하기 위해서 예전 질문&답변을 살펴보았고 git 주소를 알려주셨던게 있어서 그것을 통해 평가하려고 하고있습니다.

다름이 아니라 제 질문은 train 데이터를 제외하고 학습시 사용했던 validation 데이터셋만 추출하여 평가하고 싶습니다.

예를 들어, 코드에서 val_split = 0.3의 경우 30%를 val로 할당하는 것으로 알고 있는데,

여기서 random.seed를 설정했으니 그 인덱스를 알 수 있을까요? 학습시 사용했던 validation 파일만 추출하려면 어디서 확인해야할까요?

답변 2

0

권 철민님의 프로필 이미지
권 철민
지식공유자

1. 네, 일반적으로 test set을 따로 만들어 평가하는게 좋습니다.

2. 이미지 파일의 유형과 기준 IOU에 따라서 다르며 정해진 기준은 없습니다. 경험적으로 말씀 드리면,

VOC와 같이 IOU를 0.5 로 고정할 경우 mAP는 0.5 이상이면 보통 이상, 0.6 - 0.7 이상이면 뛰어남, 0.7 이상이면 매우 좋음 입니다. 그런데 이건 이미지에 오브젝트가 몇개가 들어가 있는지, 전체 클래스는 몇개가 있는, 구분하기 어려운 오브젝트(예를 들어 비슷비슷하게 생긴 개들의 상세 품종 구분)들이 전체 오브젝트에 얼마나 있는지에 따라 크게 차이가 날 수 있습니다.

COCO와 IOU를 0.5~ 0.95까지 변경하면서 테스트 하면 일반적으로 mAP 0.4는 보통, 0.5정도는 뛰어남, 0.55 이상이면 매우 좋음 으로 볼수 있습니다. 

Yolo v3 사이트에서 coco dataset으로 mAP가 어느정도 나왔는지 확인해 보시는게 이해에 더 도움이 될 수 있을 것 같습니다.

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

소스 코드 train.py를 보면 (https://github.com/qqwweee/keras-yolo3/blob/master/train.py) 아래와 같이 10%를 valid로 가져옵니다.

이 중에 처음부터 90%를 학습용으로 90%이후를 validation용으로 사용합니다.

즉 100개의 line으로 된 데이터가 있다면, 일단 shuffle을 합니다.

그런 다음 1번부터 90번 까지 line 데이터를 학습용으로 사용하고, 91번부터 100번까지의 데이터를 검증용으로 사용합니다.

val_split = 0.1
with open(annotation_path) as f:
lines = f.readlines()
np.random.seed(10101)
np.random.shuffle(lines)
np.random.seed(None)
num_val = int(len(lines)*val_split)
num_train = len(lines) - num_val

위에서 구한 num_train을 기반으로 아래 fit_generator() 호출시 lines[:num_train]을 학습으로, lines[num_train:]을 검증용 데이타로 활용합니다.

model.fit_generator(data_generator_wrapper(lines[:num_train], batch_size, input_shape, anchors, num_classes),
                steps_per_epoch=max(1, num_train//batch_size),
                validation_data=data_generator_wrapper(lines[num_train:], batch_size, input_shape, anchors, num_classes),
                validation_steps=max(1, num_val//batch_size),
                epochs=50,
                initial_epoch=0,
                callbacks=[logging, checkpoint])

검증용 데이터를 찾으시려면 위 로직 그대로 line으로 된 csv 파일을 동일하게 random seed 적용하여 shuffle하고 맨 뒤 10% 데이터만 추출하시면 될 것 같습니다.

감사합니다.

austin님의 프로필 이미지
austin
질문자

정말 감사합니다 선생님.

추가적으로 여쭈어볼게 있는데요...

1. validation set으로 모델의 mAP를 구해도 괜찮은 걸까요?

원래는 test set을 따로 만들어 평가하는게 일반적이지 않나요?

2. 모델의 mAP는 어느정도 되어야 좋다고 말할 수 있을까요?

객관적인 평가자료 같은게 존재할까요?

austin님의 프로필 이미지
austin

작성한 질문수

질문하기