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

fish2631님의 프로필 이미지
fish2631

작성한 질문수

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

yolo 모델 크기 관련

작성

·

1.5K

0

안녕하세요 선생님, 모델 크기 관련하여 질문드립니다.

YOLOv3를 긴 시간동안에 걸쳐 학습을 마무리하면 trained_weights_final.h5 모델 파일이 생성되는데요,

아무리 많은 데이터를 학습해도 237MB이상 커지지 않습니다.

h5파일의 크기는 저장할 수 있는 가중치의 수용량이라고 알고 있는데요, 보다 많은 데이터를 학습시키고 성능 향상을 위해서 h5파일의 크기를 키우고 싶은데 방법이 있을까요?

답변 3

0

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

네, 이미지 크기와 동일하게 input_shape를 맞춰야 합니다.

그리고 모델 저장이 weight만 되게 되면 이미지 크기를 키워도 모델 binary size는 거의 대동 소이합니다. 왜냐하면 weight가 conv 필터에 저장되므로, conv 필터는 이미지 크기와 상관없이 동일하기 때문입니다.

모델의 성능을 키우는데 있어서 이미지 크기를 늘리는게 더 좋지만, 그게 아니고, cnn 필터수를 늘려서 적용해 보고 싶으시다면, YOLO 네트웍 모델 자체를 변경해야 합니다.  Keras YOLO 3의 소스 코드를 Local로 download 받으셔서 , 아래로 가시면,

https://github.com/qqwweee/keras-yolo3/blob/master/yolo3/model.py에서

아래 darknet_body()함수가 있습니다. 여기서 resblock_body()의 64, 128, 256, 512, 1024 를 더 크게 만드시면 CNN filter수를 이보다 더 크게 만드는 것입니다.

def darknet_body(x):
    '''Darknent body having 52 Convolution2D layers'''
    x = DarknetConv2D_BN_Leaky(32, (3,3))(x)
    x = resblock_body(x, 64, 1)
    x = resblock_body(x, 128, 2)
    x = resblock_body(x, 256, 8)
    x = resblock_body(x, 512, 8)
    x = resblock_body(x, 1024, 4)
    return x

명심하셔야 할 사항은 이렇게 변경하는 것은 원본 YOLO Network 자체를 아예 변경하는 것입니다. 저도 테스트 해보지 않았습니다. 

다시 말씀 드리지만, 모델 성능을 더 늘리시려면 이미지 크기를 더 키우시는게 여기 필터수를 늘리는것 보다 더 나은 선택일 것입니다.

0

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

input_shape 부분을 수정하는게 맞지 않나요?

480x480으로 수정해도 모델의 크기가 235.47M으로 변하지 않는것 같습니다.

모델의 크기를 키울 수 있는 방법이 없을까요?

0

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

안녕하십니까,

모델의 크기와 학습 횟수와는 관련이 없습니다.  이미지 파일의 크기를 조정해 주시면 됩니다.(weight 만 저장되면 이미지 파일이 커져도 모델 크기는 대동 소이합니다)

일반적으로 Yolo v3의 Default image크기는 416x416 입니다. 이걸 키워 주시되, 32 크기 간격으로 증가 시켜 주시면 됩니다. 즉 448x448, 480x480,,,,  이런 식으로 이미지 크기를 좀 더 선명하게 키워 주시면 됩니다.

그런데 조심하셔야 할 사항은 이미지 크기를 키우면 GPU 메모리 증가가 매우 커집니다(학습시간도 더 오래 걸립니다). 이미지 크기는 너비 이므로 높이 증가분 + 너비 증가분 만큼 늘어나고, Feature map의 크기 역시 늘어나기 때문에 메모리를 훨씬 많이 사용합니다.  OOM 가 발생하기 쉬우므로 Batch size등을 확실히 더 줄여야 할 것입니다.

감사합니다.

fish2631님의 프로필 이미지
fish2631

작성한 질문수

질문하기