TFRecord란?
TFRecord 이진 레코드 시퀀스를 저장하기 위한 형식이다.
프로토콜 버퍼는 구조화 된 데이터의 효율적인 직렬화를 위한 플랫폼간 라이브러리이고, 프로토콜에 대한 메시지는 .proto 파일로 정의 된다.
TFRecord 변환 이점
More efficient storage
TFRecord 데이터는 원래 데이터 보다 적은 공간을 차지할 수 있고, 여러 파일로 분할 할 수도 있다.
Fast I/O
TFRecord 형식은 병렬 I/O 작업으로 읽을 수 있고, TPU 또는 여러 호스트에 유용하다.
Self-contained files
TFRecord 형식의 데이터는 단일 소스에서 읽을 수 있다. 예를들면 COCO2017 데이터 세트는 원래 데이터를 두 폴더(image, annotation)에 저장하는데 하나의 tfrecord 파일로 관리할 수 있다.
언제 사용할까
첫번째 이점을 한번 보자. 저장에 대해서 더욱 효율적이라고 한다. 저장용량이 줄어든다는 의미이다. 딥러닝은 빅데이터를 기반으로 하기 때문에 효율성이 있어보인다. Example로 이미지가 저장된 74M 디렉토리의 이미지를 모두 1개의 tfrecord로 변환을 했을 때, 73M의 크기로 줄었다. 대략 1MB의 효용이 생긴다. (tfrecord 로 변환할 때 width, height, depth, label, image 정보를 저장했다.) 이미지에 대한 라벨링 정보를 csv 파일 형태로 갖고 있다면 조금 더 이점이 생긴다. 3번째 이점과 연결된다. 여러 파일로 분할 할 수 있다는 의미에 대해서는 아직 이해가 잘 가지 않는 부분이다.
두번째 이점은 .tfrecord로 변환 시에 binary stream 형태로 변환이 되기 때문에 분산화된 환경에서 데이터를 옮기거나 학습을 진행하는 경우 I/O 작업에서 훨씬 이득을 볼 수 있다는 생각이든다. 분산환경에서의 학습이 아니더라도 엔지니어간 분산된 작업환경에 있어서도 이득을 볼 수 있다는 생각이든다.
활용하기 위해서는
tfrecord로 변환하게 되면 원본 이미지 파일과 tfrecord 변환된 파일과의 DB를 어떻게 구성할 것인가라는 부분을 고민해봐야 할 것 같다. 왜냐하면 딥러닝 현업에서는 주석을 받은 영상과 받지 않은 영상이 구분이 될 것이다. 비용의 문제이든 다른 이유에서든 주석에 대한 한계가 존재한다. 어쨌든 이렇게 주석의 유무에 따른 데이터를 구분하고 주석을 받은 영상에 대해서만 학습에 반영할 수 있다고 보면, 분명히 주석이 되는 시점에 tfrecord 파일로의 변환이 필요해 보인다. tfrecord 파일로의 변환 때문만이라고는 볼 수 없지만, 데이터 파이프라인의 구축이 중요해 보인다.