66import  sys 
77import  imp 
88import  numpy  as  np 
9+ import  ctypes 
910
1011from  mmdnn .conversion .examples .imagenet_test  import  TestKit 
1112import  utils 
@@ -310,6 +311,48 @@ def CntkEmit(original_framework, architecture_name, architecture_path, weight_pa
310311
311312        return  converted_predict 
312313
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 
313356
314357    @staticmethod  
315358    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
772815            },
773816
774817            'keras'  : {
775-                 'vgg19'         : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
818+                 'vgg19'         : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ,  DarknetEmit ],
776819                'inception_v3'  : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
777820                'resnet50'      : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
778821                'densenet'      : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
@@ -783,7 +826,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
783826            },
784827
785828            'mxnet'  : {
786-                 'vgg19'                         : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
829+                 'vgg19'                         : [DarknetEmit ,  CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
787830                'imagenet1k-inception-bn'       : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
788831                'imagenet1k-resnet-18'          : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
789832                'imagenet1k-resnet-152'         : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
@@ -806,7 +849,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
806849            },
807850
808851            'tensorflow'  : {
809-                 'vgg19'                  : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
852+                 'vgg19'                  : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ,  DarknetEmit ],
810853                'inception_v1'           : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ], # TODO: CntkEmit 
811854                'inception_v3'           : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
812855                '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
847890                'alexnet'      : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
848891                'densenet201'  : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
849892                '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 ],
851894                'vgg19_bn'     : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
852895                'resnet152'    : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
853896            }
0 commit comments