테스트 환경 :
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 및 실행
- 첨부한 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하기
-----------------------------------------------------------------
'프로그래밍 > 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 |