프로그래밍/Tensorflow

Tensorflow Export(Protocol buff) + OpenCV Load(dnn)

바람냥냥 2018. 6. 11. 18:25

테스트 환경 :

Python : 3.5

Tools : Pycharm , Visual Studio 2012( Opencv 3.4.0 )


1. Tensorflow 모델 학습

2. PB(Protocol Buffer)로 graph 정보 및 weight 저장

  : freeze_grpah.py 모듈을 사용

   - 학습 변수(weights)들 상수화

   - fold batch normaliation ? : dropout과 같은 node는 구동(run)환경에서 불필요하므로 제거함.

   - training node 제거 

다음 코드는 optimize_for_inference_lib.py 모듈 코드 일부이다.
  """Applies a series of inference optimizations on the input graph.

  Args:
    input_graph_def: A GraphDef containing a training model.
    input_node_names: A list of names of the nodes that are fed inputs during
      inference.
    output_node_names: A list of names of the nodes that produce the final
      results.
    placeholder_type_enum: The AttrValue enum for the placeholder data type, or
        a list that specifies one value per input node name.

  Returns:
    An optimized version of the input graph.
  """
  ensure_graph_is_valid(input_graph_def)
  optimized_graph_def = input_graph_def
  optimized_graph_def = strip_unused_lib.strip_unused(optimized_graph_def,
                                                      input_node_names,
                                                      output_node_names,
                                                      placeholder_type_enum)
  optimized_graph_def = graph_util.remove_training_nodes(optimized_graph_def)
  optimized_graph_def = fold_batch_norms(optimized_graph_def)
  optimized_graph_def = fuse_resize_and_conv(optimized_graph_def,
                                             output_node_names)
  ensure_graph_is_valid(optimized_graph_def)


3. Visual Studio에서 PB 파일 Read 및 실행

- MNIST READ code

- 첨부한 Export_Tf.py 을 train 모드로 실행하면 아래 3개의 파일이 생성됨.

 : ① froze_CNN.pbtxt : 모든 graph정보를 txt파일로 저장

  ② frozen_CNN_final.pb : freeze 한 graph를 저장

  ③ optimized_CNN.pb : input, output node의 필요한 부분만 새로 최적화해서 저장?

- frozen_CNN_final.pb를 Visual Studio 실행 폴더에 Copy

- 실행




[Ref]

텐서플로우 Train 모델 C에서 Load하기

-----------------------------------------------------------------

Export_Tf.py

mnist_reader_less.hpp

main.cpp












'프로그래밍 > Tensorflow' 카테고리의 다른 글

OpenCV +Tensorflow  (0) 2018.06.11
OpenCV + Tensorflow + PB  (0) 2018.06.08
텐서플로우 Train 모델 C에서 Load하기  (0) 2018.06.07
Tensorflow C++ build  (0) 2018.06.04
Tensor 및 훈련 변수 접근하기  (0) 2018.05.28