6
6
import sys
7
7
import imp
8
8
import numpy as np
9
+ import ctypes
9
10
10
11
from mmdnn .conversion .examples .imagenet_test import TestKit
11
12
import utils
@@ -310,6 +311,48 @@ def CntkEmit(original_framework, architecture_name, architecture_path, weight_pa
310
311
311
312
return converted_predict
312
313
314
+ @staticmethod
315
+ def DarknetEmit (original_framework , architecture_name , architecture_path , weight_path , image_path ):
316
+ try :
317
+ from mmdnn .conversion .examples .darknet import darknet as cdarknet
318
+ from mmdnn .conversion .darknet .darknet_emitter import DarknetEmitter
319
+
320
+ # IR to code
321
+ converted_file = original_framework + '_darknet_' + architecture_name + "_converted"
322
+ converted_file = converted_file .replace ('.' , '_' )
323
+ emitter = DarknetEmitter ((architecture_path , weight_path ))
324
+ emitter .run (converted_file + '.py' , converted_file + '.npy' , 'test' )
325
+ del emitter
326
+ del DarknetEmitter
327
+
328
+ # import converted model
329
+ imported = imp .load_source ('DarknetModel' , converted_file + '.py' )
330
+
331
+ imported .make_net (converted_file + '.cfg' )
332
+ imported .gen_weight (converted_file + '.npy' , converted_file + '.weights' )
333
+
334
+ original_framework = checkfrozen (original_framework )
335
+ func = TestKit .preprocess_func [original_framework ][architecture_name ]
336
+ img = func (image_path )
337
+ img = np .ascontiguousarray (img , dtype = np .float32 )
338
+
339
+ model_converted = cdarknet .load_net ((converted_file + '.cfg' ).encode (), (converted_file + '.weights' ).encode (), 0 )
340
+ outputs = cdarknet .network_outputs (model_converted )
341
+ output = cdarknet .network_predict (model_converted , img .ctypes .data_as (ctypes .POINTER (ctypes .c_float )))
342
+ predict = np .ctypeslib .as_array (output , shape = (outputs ,))
343
+ converted_predict = np .squeeze (predict )
344
+
345
+ cdarknet .free_network (model_converted )
346
+ del sys .modules ['DarknetModel' ]
347
+ os .remove (converted_file + '.py' )
348
+ os .remove (converted_file + '.npy' )
349
+ os .remove (converted_file + '.cfg' )
350
+ os .remove (converted_file + '.weights' )
351
+
352
+ return converted_predict
353
+ except ImportError :
354
+ print ("Cannot import Darknet. Darknet Emit is not tested." )
355
+ return None
313
356
314
357
@staticmethod
315
358
def TensorflowEmit (original_framework , architecture_name , architecture_path , weight_path , image_path ):
@@ -772,7 +815,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
772
815
},
773
816
774
817
'keras' : {
775
- 'vgg19' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
818
+ 'vgg19' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit , DarknetEmit ],
776
819
'inception_v3' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
777
820
'resnet50' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
778
821
'densenet' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
@@ -783,7 +826,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
783
826
},
784
827
785
828
'mxnet' : {
786
- 'vgg19' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
829
+ 'vgg19' : [DarknetEmit , CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
787
830
'imagenet1k-inception-bn' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
788
831
'imagenet1k-resnet-18' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
789
832
'imagenet1k-resnet-152' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
@@ -806,7 +849,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
806
849
},
807
850
808
851
'tensorflow' : {
809
- 'vgg19' : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
852
+ 'vgg19' : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit , DarknetEmit ],
810
853
'inception_v1' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ], # TODO: CntkEmit
811
854
'inception_v3' : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
812
855
'resnet_v1_152' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ], # TODO: CntkEmit
@@ -847,7 +890,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
847
890
'alexnet' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
848
891
'densenet201' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
849
892
'inception_v3' : [CaffeEmit , CoreMLEmit , KerasEmit , PytorchEmit , TensorflowEmit ], # Mxnet broken https://github.com/apache/incubator-mxnet/issues/10194
850
- 'vgg19' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
893
+ 'vgg19' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit , DarknetEmit ],
851
894
'vgg19_bn' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
852
895
'resnet152' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
853
896
}
0 commit comments