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
@@ -319,6 +320,48 @@ def CntkEmit(original_framework, architecture_name, architecture_path, weight_pa
319
320
320
321
return converted_predict
321
322
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
322
365
323
366
@staticmethod
324
367
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
798
841
},
799
842
800
843
'keras' : {
801
- 'vgg19' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
844
+ 'vgg19' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit , DarknetEmit ],
802
845
'inception_v3' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
803
846
'resnet50' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
804
847
'densenet' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
@@ -811,7 +854,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
811
854
},
812
855
813
856
'mxnet' : {
814
- 'vgg19' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
857
+ 'vgg19' : [DarknetEmit , CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
815
858
'imagenet1k-inception-bn' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
816
859
'imagenet1k-resnet-18' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
817
860
'imagenet1k-resnet-152' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
@@ -834,7 +877,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
834
877
},
835
878
836
879
'tensorflow' : {
837
- 'vgg19' : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
880
+ 'vgg19' : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit , DarknetEmit ],
838
881
'inception_v1' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ], # TODO: CntkEmit
839
882
'inception_v3' : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
840
883
'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
878
921
'alexnet' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
879
922
'densenet201' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
880
923
'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 ],
882
925
'vgg19_bn' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
883
926
'resnet152' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
884
927
}
0 commit comments