인공지능을 좋아하는 곧미남

Google Protocol Buffers (데이터 직렬화) 본문

인공지능 개발자의 기본 소양

Google Protocol Buffers (데이터 직렬화)

곧미남 2021. 6. 3. 22:08

Object Detection Open API를 배포하기 위해 텐서플로우는 데이터 직렬화로 Google Protocol Buffers를 많이 사용한다.

 

따라서, 본 내용에서는 내가 Protocol Buffers를 공부한 내용을 기록해보겠다.

 

오늘의 내용은 아래 목차와 같다.

 

< INDEX >

 

1. 데이터 직렬화란?

 

2. Protocol Buffers?

 

3. Protocol Buffers with Python

 

4. 참고 블로그

 

5. 내가 쓴 Code

 

Protocol Buffers를 처음 만난건 위성 사진에서 Ship Object Detection 하기 위해 GIT_HUB에서 RBOXCNN이라는 API를 찾아서 구현해보고 새로운 방법으로 정확도를 높여보는 작업을 했었던 시절이었다. (사실 지금은 작업을 하는 중이다.)

 

근데 Tensorflow Version 1.xx 에서 데이터 직렬화로 Protocol Buffers를 주로 사용하는데 처음엔 데이터 직렬화라는 것 조차 몰랐다. 그래서 데이터 직렬화에 대한 내용부터 정리하겠다.


1. 데이터 직렬화

우선, 데이터 직렬화란 용어부터 이해하기 애매한 부분이 있었다. 

 

1. 데이터직렬화 정의 : 메모리를 디스크에 저장하거나 네트워크 통신을 통해 전달하기 위해 소스코드의 모든 정보들을 변환한다.

2. 디스크에 저장하거나 네트워크 통신을 위해 어떻게 소스코드를 변환할까?

    - 우선 메모리 영역에는 힙, 스텍 영역이 있다. 근데 스텍에는 값 형식의 데이터 즉, int, float, char 등으로 선언된 변수

      들이 쌓이고 힙에는 참조 형식의 데이터인 포인터 변수, Object 타입 등이 쌓인다.

    - 근데 웃긴게 디스크 저장이나 네트워크 통신은 값 형식의 데이터만 사용할 수 있다.

    - 그 예로, 포인터 변수는 고유의 주소 값이 있는데 그 주소 값을 저장해서 가져온다고 하더라도 프로그램이 종료되면

      무용지물이 되버린다. (그냥 그 주소로 접근하더라도 그 값을 불러올 수 없음.)

3. 직렬화를 하게되면 각 주소 값을 가지는 Reference Type의 데이터들을 모두 Value Type으로 변환해준다.

 

이러한 이유 때문에 우린 데이터 직렬화를 해야하고 일반적으로 사용되는 데이터 직렬화를 도와주는 도구들은 에이브로(Avro), 쓰리프트(Thrift), 프로토콜 버퍼(Protocol Buffer), 시퀀스 파일(SequeunceFile) 등이 있다.


2. Protocol Buffer

위에서 언급한바와 같이 Tensorflow Version 1.xx에서 파일 저장 포맷으로 Protocol Buffer를 사용하더라..

그래서, 간단히 설명하고 넘어가겠습니다.

 

1. Protocol Buffer의 개요 : 구글에서 개발한 데이터 직렬화 구조로 오픈소스로 제공된다.

2. Protocol Buffer의 장점 : C++,C#, Go, Java, Python, Object C, Javascript, Ruby 등 다양한 언어를 지원하고 직렬화 속도가 빠르다.
3. Protocol Buffer의 이용범위 : 하나의 파일에 최대 64M까지 지원되며, JSON파일을 Protocol Buffer파일로 변환 가능하고 Protocol Buffer파일을 JSON파일로 역으로 변환도 가능하다.

4. Protocol Buffer의 설치 및 이용방법 : 데이터 포맷 파일을 컴파일 해주는 protoc과 프로그래밍 언어에서 사용할 수 있게 해주는 SDK 라이브러리가 있습니다.

* (SDK, protoc compiler DOWNLOAD URL : https://github.com/protocolbuffers/protobuf/releases)

5. Python의 SDK 사용방법 url : https://github.com/protocolbuffers/protobuf/tree/master/python


3. Protocol Buffer with Python

Python 프로그래밍 언어에서 Protocol Buffer를 사용하는 방법은 아래와 같습니다.

 

1. "*.proto" 이라는 저장 파일 형식을 가진 Proto Buffer File을 얻는다.

   - 특정 프로그래밍 언어에 종속되지 않아 따로 형식이 정의됨.

2.  이 proto file을 각 프로그래밍 언어에 맞는 protoc로 compile을 실시하면, 사용하고자 하는 프로그래밍 언어로 데이터 클래스 파일을 생성해준다.  

3. 그 후 생성된 데이터 파일을 가져와 직접 커스텀하여 사용하면 된다.


4. 참고 블로그 

https://bcho.tistory.com/1182


5. Myself code example (추후 게시)

 

Comments