728x90
반응형

 AutoML efficientDet 을 이용한 custom data train

- AutoML efficientDet은 efficientDet모델 위에 최신의 성능 향상 기법이 도입된, 잘짜여진 모듈로 구성

- config 기반으로 다양한 환경 설정이 필요하지만 이를 위한 tutorial/document가 부족

- tfrecord 기반으로 학습/검증데이터 만들어야 함

 

 

TFrecords 개요

- 매우 많은 갯수의 이미지, 오디오, 비디오, 텍스트들의 (주로 비정형) 데이터를 보다 빠르게 access 하기 위해 만들어진 데이터 포멧

- 파일 시스템에 있는 여러 개의 데이터 파일들을 하나의 큰 protobuf(protocol buffers) 포맷을 가지는 파일로 변경하여 Random IO access를 줄여 access 성능을 향상시킴

  -- 하드디스크는 각 데이터를 Random i/o를 해줘야 하는데, filesize가 크지 않더라도 움직임이 큼

  => 그래서 뭉탱이로, tfrecord로 만들어주어서 움직임을 작게 만들어줌 

  => 원래는 img가 imread로 numpy 인코딩되어서 읽어들이는데 tfrecord는 압축된 상태로 올라감

  => i/o가 안받쳐주니까 gpu가 활약을 못하는 걸 해결함

- Tensorflow에서 cpu에서 gpu로의 데이터 전송속도를 향상시켜 학습속도를 빠르게 하기 위해서 도입

(하지만 병렬 I/O처리로도 충분히 gpu 데이터 전송속도를 향상시켜서 학습속도를 빠르게 할 수 있음)

- 직관적이지 않은인터페이스 api, 어려운 debugging 등의 문제가 있다.

   => 그래서 보통 엄청 큰, 학습속도가 중요한 데이터 처리할 때 사용

 

 

TFrecord 의 구성

tfrecord #1 : 이미지파일, annotation의 example # 1 ~ # 250

원래는 img하나, annotation하나 읽어야했던걸, sequential 하게 쭉 읽어버림

 

protobuf의 이해

json, xml, avro와 같이 데이터전송과 저장(serialization)을 위한 스키마 정보를 포함한 데이터 포맷

xml이 스키마 정보를 가지고 있는데 formatting하는데 소모가 많이 됨

 

 

일반 파일 기반의 딥러닝 모델 data pipeline

- cpu 처리 : 소스 (img file, annotation file) => dataGenerator/sequence(numpy array) => iterator(batch size 만큼 데이터를 담음)

- gpu 처리 : fit_generator(), tensor로 vectorization, 병렬 처리

=> cpu에서 gpu로 학습 데이터 전달 속도가 원활하지 않아서 gpu utilization 이 떨어지고, 학습시간이 오래 걸리는 현상이 발생

 

tfrecord 기반의 딥러닝 모델 data pipeline => cpu의 병목현상 해소

- cpu 처리 : tfrecord => tf.Data (텐서화) => iterator

- gpu 처리 : model 학습 fit_generator() 

 

- tfrecord를 이용하여 파일 i/o 시간을 많이 줄여 줄 수 있으므로 더 많은 데이터를 gpu로 전달하여 gpu utilization을 높이고 학습수행속도 향상

- 일반 파일 기반에서도 8코어, 병렬로 i/o를 cpu로 로딩 후 gpu로 전달하면 gpu utilization이 많이 향상되어 tfrecord 기반의 학습시간과 별차이가 없음

- 하지만 tpu의 경우는 보다 높은 용량, bandwidth로 데이터 처리가 가능하므로 tfrecord를 이용하여 효율적인 학습시간단축이 가능

 

 

 

반응형

+ Recent posts