Skip to content

Commit 1c57071

Browse files
author
Francisco Facioni
committed
Adds darknet for testing
1 parent 6342da9 commit 1c57071

File tree

4 files changed

+57
-8
lines changed

4 files changed

+57
-8
lines changed

mmdnn/conversion/examples/darknet/darknet.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ class METADATA(Structure):
4242
_fields_ = [("classes", c_int),
4343
("names", POINTER(c_char_p))]
4444

45-
46-
4745
lib = CDLL("./mmdnn/conversion/examples/darknet/libdarknet.so", RTLD_GLOBAL)
4846
lib.network_width.argtypes = [c_void_p]
4947
lib.network_width.restype = c_int
@@ -77,6 +75,7 @@ class METADATA(Structure):
7775

7876
network_predict = lib.network_predict
7977
network_predict.argtypes = [c_void_p, POINTER(c_float)]
78+
network_predict.restype = POINTER(c_float)
8079

8180
reset_rnn = lib.reset_rnn
8281
reset_rnn.argtypes = [c_void_p]
@@ -85,6 +84,9 @@ class METADATA(Structure):
8584
load_net.argtypes = [c_char_p, c_char_p, c_int]
8685
load_net.restype = c_void_p
8786

87+
free_network = lib.free_network
88+
free_network.argtypes = [c_void_p]
89+
8890
do_nms_obj = lib.do_nms_obj
8991
do_nms_obj.argtypes = [POINTER(DETECTION), c_int, c_int, c_float]
9092

@@ -113,6 +115,10 @@ class METADATA(Structure):
113115
predict_image.argtypes = [c_void_p, IMAGE]
114116
predict_image.restype = POINTER(c_float)
115117

118+
network_outputs = lib.network_outputs
119+
network_outputs.argtypes = [c_void_p]
120+
network_outputs.restype = c_int
121+
116122
def classify(net, meta, im):
117123
out = predict_image(net, im)
118124
res = []

tests/test_conversion_imagenet.py

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import sys
77
import imp
88
import numpy as np
9+
import ctypes
910

1011
from mmdnn.conversion.examples.imagenet_test import TestKit
1112
import 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
}

tests/test_keras.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def get_test_table():
2727
else:
2828
return {
2929
'keras' : {
30-
'vgg19' : [TestModels.CaffeEmit, TestModels.CntkEmit, TestModels.CoreMLEmit, TestModels.KerasEmit, TestModels.MXNetEmit, TestModels.PytorchEmit, TestModels.TensorflowEmit],
30+
'vgg19' : [TestModels.CaffeEmit, TestModels.CntkEmit, TestModels.CoreMLEmit, TestModels.KerasEmit, TestModels.MXNetEmit, TestModels.PytorchEmit, TestModels.TensorflowEmit, TestModels.DarknetEmit],
3131
'inception_v3' : [TestModels.CaffeEmit, TestModels.CntkEmit, TestModels.CoreMLEmit, TestModels.KerasEmit, TestModels.MXNetEmit, TestModels.PytorchEmit, TestModels.TensorflowEmit],
3232
'resnet50' : [TestModels.CaffeEmit, TestModels.CntkEmit, TestModels.CoreMLEmit, TestModels.KerasEmit, TestModels.MXNetEmit, TestModels.PytorchEmit, TestModels.TensorflowEmit],
3333
'densenet' : [TestModels.CaffeEmit, TestModels.CntkEmit, TestModels.CoreMLEmit, TestModels.KerasEmit, TestModels.MXNetEmit, TestModels.PytorchEmit, TestModels.TensorflowEmit],

tests/test_tensorflow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def get_test_table():
1515

1616
return { 'tensorflow' :
1717
{
18-
'vgg19' : [TestModels.CaffeEmit, TestModels.CoreMLEmit, TestModels.CntkEmit, TestModels.KerasEmit, TestModels.MXNetEmit, TestModels.PytorchEmit],
18+
'vgg19' : [TestModels.CaffeEmit, TestModels.CoreMLEmit, TestModels.CntkEmit, TestModels.KerasEmit, TestModels.MXNetEmit, TestModels.PytorchEmit, TestModels.DarknetEmit],
1919
'inception_v1' : [TestModels.CaffeEmit, TestModels.CoreMLEmit, TestModels.KerasEmit, TestModels.MXNetEmit, TestModels.PytorchEmit, TestModels.TensorflowEmit],
2020
'inception_v3' : [TestModels.CaffeEmit, TestModels.CoreMLEmit, TestModels.CntkEmit, TestModels.KerasEmit, TestModels.MXNetEmit, TestModels.PytorchEmit, TestModels.TensorflowEmit],
2121
'resnet_v1_152' : [TestModels.CaffeEmit, TestModels.CoreMLEmit, TestModels.KerasEmit, TestModels.MXNetEmit, TestModels.PytorchEmit, TestModels.TensorflowEmit],

0 commit comments

Comments
 (0)