3.5기(200104~)/출석체크 팀

Colab에서 tensorflow ObjectDetection API를 이용해서 Object Detection을 trasnfer learning 해보자.

KAU-Deeperent 2020. 3. 21. 00:08

저희 조는 전이학습(transfer learning)개념을 이용하여 학습시간을 줄여보고자 했습니다.

 

전이학습이란(transfer learning)?

 

딥러닝 모델이 있는데 , 이러한 모델의 특징은 첫번째 층(layer)에서 "일반적인 특징"을 추출하고 , 두번쨰

층(layer)에서 "특정 문제에 적합한  특징"을 추출합니다.

 

Yosinski et al. (2014) 논문에서는 이러한 딥러닝의 특성에 대해, '만약 첫 번째 계층에서 추출된 특징이 일반적인 특징이고 마지막 층에서 추출된 특징이 구체적인 특징이라면, 네트워크 내의 어딘가에 일반적인 수준에서 구체적인 수준으로 넘어가는 전환점이 분명 존재할 것이다.' 라고 서술하고 있습니다.

transfer learning

사전 학습된 모델을 이제 나의 프로젝트에 맞게 재정의한다면, 먼저 원래 모델에 있던 classifier를 없애는 것으로 시작합니다. 원래의 classifier는 삭제하고, 내 목적에 맞는 새로운 classifier를 추가합니다. 그 후 마지막으로는 새롭게 만들어진 나의 모델을 다음 세 가지 전략 중 한 가지 방법을 이용해 파인튜닝(fine-tune)을 진행합니다.

모델을 학습시키고자 할 때 에는 여러가지 전략이 있습니다.

 

1. 처음부터 전부 학습하기

모델의 구조를 이용하여 처음부터 전부 학습하는 것입니다. 이 경우 내 데이터셋에 맞게 학습을 시킬수 있다는 장점이 있습니다.

하지만, 밑바닥부터 학습시키는것이기 때문에 엄청난 양의 데이터셋이랑 컴퓨팅 파워가 필요합니다. 즉, 많은 비용이 든다 볼 수 있습니다.

이러한 능력이 된다면 이렇게 하는것도 좋습니다.

 

2.Conv layer의 일부는 고정시키고 학습하기

주로, 만약 데이터셋이 작고 모델의 파라미터가 많다면, 오버피팅이 될 위험이 있으므로 더 많은 계층을 건들지 않고 그대로 둡니다. 반면에, 데이터셋이 크고 그에 비해 모델이 작아서 파라미터가 적다면, 오버피팅에 대한 걱정을 할 필요가 없으므로 더 많은 계층을 학습시켜서 내 프로젝트에 더 적합한 모델로 발전시킬 수 있습니

 

3.Classification의 일부만 고정하고 학습하기

이 경우는 보다 극단적인 상황일 때 생각할 수 있는 케이스입니다. convolutional base는 건들지 않고 그대로 두면서 특징 추출 메커니즘으로써 활용하고, classifier만 재학습시키는 방법을 씁니다.

 

 구체적으로 어떻게 Fine-tuning을 진행해야 하는지

1.크기가 크고 유사성이 작은 데이터셋일 때

1번방법이 최선입니다.

2.크기가 크고 유사성도 높은 데이터셋일 때

2번방법이 최선입니다.

3.크기가 작고 유사성도 작은 데이터셋일 때

2번방법이 최선입니다.

4.크기가 작지만 유사성은 높은 데이터셋일 때

3번방법이 최선입니다.

 

※여기서 유사성이란 문제가  학습한 데이터셋이 내가 학습시키고자 하는 데이터셋과 비슷한가 다른가를 말하는것입니다.

ex) 예를들어 pretrained_model이 개,고양이 분류를 학습햇는데 내가 학습시키고자하는게 세포들의 분류이면 유사도가 낮다고

볼 수 있습니다.

 

Colab에서 학습시키기

 

 

https://colab.research.google.com/drive/1HgGkuZLtKlUV_b3Vz4I_MlqrDoiF5BW2

 

Google Colaboratory

 

colab.research.google.com

 

링크로 들어가시면 설명 달아놨습니다.

xml_to_csv.py
0.00MB
labelmap.pbtxt
0.00MB
ssd_mobilenet_v1_coco.config
0.00MB
generate_tfrecord.py
0.00MB
프레젠테이션1.pptx
4.20MB