1 minute read

Intro

  • 어제 떠올린 “유튜브 영상을 통해 편하게 이미지 데이터를 수집해보자!”라는 아이디어는 실패했다.

유튜브 데이터 활용 - 단점

  1. 건물 외관만 깔끔하게 찍어둔 영상은 대단히 드물게 존재했다.

  2. vlog는 대부분 건물 내부로 들어가 활동하는것에 초점이 맞추어져 있고, 따라서 외부 모습이 찍혀있는 영상이 아예 없는 경우가 많았다.(양재 AT센터 등)

  3. 특정 지역에 몰려있는 랜드마크의 경우(KBS, SBS, MBC등의 상암DMC에 위치한 랜드마크 등) 이들을 통째로 묶어 영상을 촬영했기 때문에, 개별 데이터들에 대한 영상을 확보하기 어려웠다.

  4. 확보된 영상만 사용해서 학습을 진행하자니 데이터 불균형 문제가 발생할수 있어 고민끝에 전량 폐기했다.

모델 재구성 및 고찰

  • 유튜브 데이터를 못쓴다고 손놓고 하루 버리기는 애매해서, 일단 어제 추가했던 보라매공원, 양재 시민의숲 데이터를 제외한 모델을 다시 훈련시키기로 했다.

  • 훈련을 세번쨰 진행하면서 생각하는것인데, 모델 한개를 생성할때마다 4시간 가까이 시간을 사용하게 되는데, 훈련 시간을 줄일 방법을 찾을 필요를 느꼈다.

  • 텐서플로 파이프라인 튜토리얼에서는 성능 향상을 위해 다음과 같은 최적화 기법을 제시하고 있다.

    • prefetch
      • 전처리와 훈련스텝의 모델 실행을 오버랩하여 훈련이 실행되는 동시에 데이터를 읽어들여 시간을 단축
    • interleave + num_parallel_calls
      • 데이터셋을 병렬화시켜 읽어들임으로서 파일을 여는데에 기다리는 시간을 단축
    • map + num_parallel_calls
      • 동일한 전처리 함수를 병렬로 적용하여 전처리 시간을 단축
    • cache
      • 데이터셋을 캐싱하여 1epoch 이후부터 캐시된 데이터를 재사용
    • batch + map
      • 매핑된 함수를 한번만 호출함으로서 전체 시간 성능을 향상
    • 시간을 소모하는 매핑 -> 캐싱 -> 메모리를 소모하는 매핑 으로 변환을 연결하는것이 유리함.
  • interleave는 데이터셋 디렉터리 하나에서 take를 통해 test, train을 나누는 방식이라 그런지 적용해도 유의미한 시간 감소가 나타나지 않았다.

  • map함수를 통한 프로세스 병렬화 역시 제대로 작동하지 않았다.

  • 무언가 참고할만한 예제가 있다면 그걸 기반으로 쌓아올릴텐데, 그저 막막하다.