]> git.sesse.net Git - ffmpeg/commitdiff
dnn: change .model file format to put layer number at the end of file
authorGuo, Yejun <yejun.guo@intel.com>
Thu, 29 Aug 2019 05:53:41 +0000 (13:53 +0800)
committerPedro Arthur <bygrandao@gmail.com>
Fri, 30 Aug 2019 14:41:30 +0000 (11:41 -0300)
currently, the layer number is at the beginning of the .model file,
so we have to scan twice in python script, the first scan to get the
layer number. Only one scan needed after put the layer number at the
end of .model file.

Signed-off-by: Guo, Yejun <yejun.guo@intel.com>
Signed-off-by: Pedro Arthur <bygrandao@gmail.com>
libavfilter/dnn/dnn_backend_native.c
tools/python/convert_from_tensorflow.py

index daa4f5008c33a8996656c6bac431ea4be0b1d79f..5d393537a8f3ff5e2415feae5527eebd4906f34a 100644 (file)
@@ -93,8 +93,10 @@ DNNModel *ff_dnn_load_model_native(const char *model_filename)
     }
     model->model = (void *)network;
 
+    avio_seek(model_file_context, file_size - 4, SEEK_SET);
     network->layers_num = (int32_t)avio_rl32(model_file_context);
     dnn_size = 4;
+    avio_seek(model_file_context, 0, SEEK_SET);
 
     network->layers = av_mallocz(network->layers_num * sizeof(Layer));
     if (!network->layers){
index 34454b86def6e1db4e98da36669f3fb8b5265165..cbc76a9f03b59d584c3ec47e70798e56434dc4dd 100644 (file)
@@ -129,15 +129,6 @@ class TFConverter:
         self.converted_nodes.add(node.name)
 
 
-    def generate_layer_number(self):
-        # in current hard code implementation, the layer number is the first data written to the native model file
-        # it is not easy to know it at the beginning time in the general converter, so first do a dry run for compatibility
-        # will be refined later.
-        with open('/tmp/tmp.model', 'wb') as f:
-            self.dump_layers_to_file(f)
-        self.converted_nodes.clear()
-
-
     def dump_layers_to_file(self, f):
         for node in self.nodes:
             if node.name in self.converted_nodes:
@@ -157,10 +148,9 @@ class TFConverter:
 
 
     def dump_to_file(self):
-        self.generate_layer_number()
         with open(self.outfile, 'wb') as f:
-            np.array([self.layer_number], dtype=np.uint32).tofile(f)
             self.dump_layers_to_file(f)
+            np.array([self.layer_number], dtype=np.uint32).tofile(f)
 
 
     def generate_name_node_dict(self):