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 ):
@@ -775,7 +818,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
775
818
},
776
819
777
820
'keras' : {
778
- 'vgg19' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
821
+ 'vgg19' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit , DarknetEmit ],
779
822
'inception_v3' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
780
823
'resnet50' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
781
824
'densenet' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
@@ -788,7 +831,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
788
831
},
789
832
790
833
'mxnet' : {
791
- 'vgg19' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
834
+ 'vgg19' : [DarknetEmit , CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
792
835
'imagenet1k-inception-bn' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
793
836
'imagenet1k-resnet-18' : [CaffeEmit , CntkEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
794
837
'imagenet1k-resnet-152' : [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
'tensorflow' : {
814
- 'vgg19' : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
857
+ 'vgg19' : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit , DarknetEmit ],
815
858
'inception_v1' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ], # TODO: CntkEmit
816
859
'inception_v3' : [CaffeEmit , CoreMLEmit , CntkEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
817
860
'resnet_v1_152' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ], # TODO: CntkEmit
@@ -854,7 +897,7 @@ def OnnxEmit(original_framework, architecture_name, architecture_path, weight_pa
854
897
'alexnet' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
855
898
'densenet201' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
856
899
'inception_v3' : [CaffeEmit , CoreMLEmit , KerasEmit , PytorchEmit , TensorflowEmit ], # Mxnet broken https://github.com/apache/incubator-mxnet/issues/10194
857
- 'vgg19' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
900
+ 'vgg19' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit , DarknetEmit ],
858
901
'vgg19_bn' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
859
902
'resnet152' : [CaffeEmit , CoreMLEmit , KerasEmit , MXNetEmit , PytorchEmit , TensorflowEmit ],
860
903
}
0 commit comments