66import sys
77import imp
88import numpy as np
9+ import ctypes
910
1011from mmdnn .conversion .examples .imagenet_test import TestKit
1112import utils
@@ -319,6 +320,48 @@ def CntkEmit(original_framework, architecture_name, architecture_path, weight_pa
319320
320321 return converted_predict
321322
323+ @staticmethod
324+ def DarknetEmit (original_framework , architecture_name , architecture_path , weight_path , image_path ):
325+ try :
326+ from mmdnn .conversion .examples .darknet import darknet as cdarknet
327+ from mmdnn .conversion .darknet .darknet_emitter import DarknetEmitter
328+
329+ # IR to code
330+ converted_file = original_framework + '_darknet_' + architecture_name + "_converted"
331+ converted_file = converted_file .replace ('.' , '_' )
332+ emitter = DarknetEmitter ((architecture_path , weight_path ))
333+ emitter .run (converted_file + '.py' , converted_file + '.npy' , 'test' )
334+ del emitter
335+ del DarknetEmitter
336+
337+ # import converted model
338+ imported = imp .load_source ('DarknetModel' , converted_file + '.py' )
339+
340+ imported .make_net (converted_file + '.cfg' )
341+ imported .gen_weight (converted_file + '.npy' , converted_file + '.weights' )
342+
343+ original_framework = checkfrozen (original_framework )
344+ func = TestKit .preprocess_func [original_framework ][architecture_name ]
345+ img = func (image_path )
346+ img = np .ascontiguousarray (img , dtype = np .float32 )
347+
348+ model_converted = cdarknet .load_net ((converted_file + '.cfg' ).encode (), (converted_file + '.weights' ).encode (), 0 )
349+ outputs = cdarknet .network_outputs (model_converted )
350+ output = cdarknet .network_predict (model_converted , img .ctypes .data_as (ctypes .POINTER (ctypes .c_float )))
351+ predict = np .ctypeslib .as_array (output , shape = (outputs ,))
352+ converted_predict = np .squeeze (predict )
353+
354+ cdarknet .free_network (model_converted )
355+ del sys .modules ['DarknetModel' ]
356+ os .remove (converted_file + '.py' )
357+ os .remove (converted_file + '.npy' )
358+ os .remove (converted_file + '.cfg' )
359+ os .remove (converted_file + '.weights' )
360+
361+ return converted_predict
362+ except ImportError :
363+ print ("Cannot import Darknet. Darknet Emit is not tested." )
364+ return None
322365
323366 @staticmethod
324367 def TensorflowEmit (original_framework , architecture_name , architecture_path , weight_path , test_input_path ):
@@ -798,7 +841,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
798841 },
799842
800843 'keras' : {
801- 'vgg19' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
844+ 'vgg19' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit , DarknetEmit ],
802845 'inception_v3' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
803846 'resnet50' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
804847 'densenet' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
@@ -811,7 +854,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
811854 },
812855
813856 'mxnet' : {
814- 'vgg19' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
857+ 'vgg19' : [DarknetEmit , CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
815858 'imagenet1k-inception-bn' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
816859 'imagenet1k-resnet-18' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
817860 'imagenet1k-resnet-152' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
@@ -834,7 +877,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
834877 },
835878
836879 'tensorflow' : {
837- 'vgg19' : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
880+ 'vgg19' : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit , DarknetEmit ],
838881 'inception_v1' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ], # TODO: CntkEmit
839882 'inception_v3' : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
840883 'resnet_v1_152' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ], # TODO: CntkEmit
@@ -878,7 +921,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
878921 'alexnet' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
879922 'densenet201' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
880923 'inception_v3' : [CaffeEmit , CoreMLEmit , KerasEmit , PytorchEmit , TensorflowEmit ], # Mxnet broken https://github.com/apache/incubator-mxnet/issues/10194
881- 'vgg19' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
924+ 'vgg19' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit , DarknetEmit ],
882925 'vgg19_bn' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
883926 'resnet152' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
884927 }
0 commit comments