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