🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

GraphDef 가 궁금합니다.

20.11.12 21:26 작성 조회수 724

0

안녕하세요 강사님 몇가지 질문이 있습니다. 구글링에도 잘 찾을 수 없어 질문글 남깁니다.
#inference graph를 읽음. .
with tf.gfile.FastGFile(os.path.join(default_rcnn_dir, 'pretrained/faster_rcnn_resnet50_coco_2018_01_28/frozen_inference_graph.pb'), 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())

with
tf.Session() as sess:
# Session 시작하고 inference graph 모델 로딩
sess.graph.as_default()
tf.import_graph_def(graph_def, name='')
1. 여기서 'rb'란 binary 타입으로 read? 인가요? 왜 이렇게 쓰이는지 궁금합니다.
2. tf.GraphDef() 가 무엇을 의미하는지 왜 쓰이는지 궁금합니다.
3. tf.import_graph_def(graph_def, name='') 이 함수도 어떤 역할을 수행하는지 궁금합니다.

답변 1

답변을 작성해보세요.

0

안녕하십니까,

tensorflow의 경우 학습이 된 모델을 저장할 때 protobuf 타입(확장자 pb)으로 저장할 수 있습니다. 

이렇게 저장된 protobuf 모델은 weight값과 Graph형태의 딥러닝 모델(예를 들어 resnet50 모델, tensorflow는 operation과 tensor, layer들을 모두 계산 graph형태로 가집니다)을 같이 가지고 있습니다. 

위의 코드는 이렇게 저장된 protobuf형태의 frozen graph(더 이상 gradient 학습을 허용하지 않는 weight와 모델구조)를 다시 tensorflow를 통해 Load하고 이를 이용해서 inference를 수행하는 어느정도 정형화(?)된 코드 입니다.  즉 pb 파일로 저장된 모델을 tensorflow의 CNN구조 모델로 다시 메모리 load하기 위한 코드입니다(tensorflow는 평범한 로직도 개발자에게 늘 많은 타이핑을 요구합니다. ^^;;)

1. rb는 이 protobuf 형태로 저장된 모델을 binary 타입 read로 읽고자 함입니다.

2. 다음 새로운(비어있는) Graph를 만들고, probuf를 parsing하면서 이 Graph를 채워넣습니다.

 graph_def = tf.GraphDef()
 graph_def.ParseFromString(f.read())

3. 이후에 tf.import_graph_def(graph_def, name='') 를 이용하여 tensorflow 모델로 로딩합니다.

아래 한글 문서도 참조 하시면 좋을 것 같습니다.

https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/how_tos/tool_developers/

감사합니다.

채널톡 아이콘