makefile / frcnn

Faster R-CNN / R-FCN :bulb: C++ version based on Caffe
Other
184 stars 75 forks source link

Can you offer converting code for converting yolov3 weight model to caffe format? #2

Open xingyewuyu opened 6 years ago

xingyewuyu commented 6 years ago

@makefile , Thank you for your codes. Can you offer converting code for converting yolov3 weight model to caffe format? What's more , yolov3 tiny model is more smaller, will you update it in the near future?

makefile commented 6 years ago

The script is in dir 'examples/YOLO'. I think the script also works for tiny yolo or needs some modification.

claudehang commented 6 years ago

Hi, dude! I tried to convert yolov3 darknet model using ./examples/YOLO/darknet2caffe.py but get this error:

unknow layer type yolo 
OrderedDict([('bottom', 'layer80-conv'), ('top', 'layer84-route'), ('name', 'layer84-route'), ('type', 'Concat')])
84
2
OrderedDict([('bottom', 'layer85-conv'), ('top', 'layer86-upsample'), ('name', 'layer86-upsample'), ('type', 'Module'), ('module_param', OrderedDict([('module', 'modules'), ('type', 'Upsample'), ('param_str', "{'scale': 2}")]))])
('upsample:', 86)
{1: 'layer1-conv', 2: 'layer2-conv', 3: 'layer3-conv', 4: 'layer4-conv', 5: 'layer5-shortcut', 6: 'layer6-conv', 7: 'layer7-conv', 8: 'layer8-conv', 9: 'layer9-shortcut', 10: 'layer10-conv', 11: 'layer11-conv', 12: 'layer12-shortcut', 13: 'layer13-conv', 14: 'layer14-conv', 15: 'layer15-conv', 16: 'layer16-shortcut', 17: 'layer17-conv', 18: 'layer18-conv', 19: 'layer19-shortcut', 20: 'layer20-conv', 21: 'layer21-conv', 22: 'layer22-shortcut', 23: 'layer23-conv', 24: 'layer24-conv', 25: 'layer25-shortcut', 26: 'layer26-conv', 27: 'layer27-conv', 28: 'layer28-shortcut', 29: 'layer29-conv', 30: 'layer30-conv', 31: 'layer31-shortcut', 32: 'layer32-conv', 33: 'layer33-conv', 34: 'layer34-shortcut', 35: 'layer35-conv', 36: 'layer36-conv', 37: 'layer37-shortcut', 38: 'layer38-conv', 39: 'layer39-conv', 40: 'layer40-conv', 41: 'layer41-shortcut', 42: 'layer42-conv', 43: 'layer43-conv', 44: 'layer44-shortcut', 45: 'layer45-conv', 46: 'layer46-conv', 47: 'layer47-shortcut', 48: 'layer48-conv', 49: 'layer49-conv', 50: 'layer50-shortcut', 51: 'layer51-conv', 52: 'layer52-conv', 53: 'layer53-shortcut', 54: 'layer54-conv', 55: 'layer55-conv', 56: 'layer56-shortcut', 57: 'layer57-conv', 58: 'layer58-conv', 59: 'layer59-shortcut', 60: 'layer60-conv', 61: 'layer61-conv', 62: 'layer62-shortcut', 63: 'layer63-conv', 64: 'layer64-conv', 65: 'layer65-conv', 66: 'layer66-shortcut', 67: 'layer67-conv', 68: 'layer68-conv', 69: 'layer69-shortcut', 70: 'layer70-conv', 71: 'layer71-conv', 72: 'layer72-shortcut', 73: 'layer73-conv', 74: 'layer74-conv', 75: 'layer75-shortcut', 76: 'layer76-conv', 77: 'layer77-conv', 78: 'layer78-conv', 79: 'layer79-conv', 80: 'layer80-conv', 81: 'layer81-conv', 82: 'layer82-conv', 83: 'layer82-conv', 84: 'layer84-route', 85: 'layer85-conv', 86: 'layer86-upsample'}
OrderedDict([('bottom', ['layer86-upsample', 'layer62-shortcut']), ('top', 'layer87-route'), ('name', 'layer87-route'), ('type', 'Concat')])
87
unknow layer type yolo 
OrderedDict([('bottom', 'layer92-conv'), ('top', 'layer96-route'), ('name', 'layer96-route'), ('type', 'Concat')])
96
2
OrderedDict([('bottom', 'layer97-conv'), ('top', 'layer98-upsample'), ('name', 'layer98-upsample'), ('type', 'Module'), ('module_param', OrderedDict([('module', 'modules'), ('type', 'Upsample'), ('param_str', "{'scale': 2}")]))])
('upsample:', 98)
{1: 'layer1-conv', 2: 'layer2-conv', 3: 'layer3-conv', 4: 'layer4-conv', 5: 'layer5-shortcut', 6: 'layer6-conv', 7: 'layer7-conv', 8: 'layer8-conv', 9: 'layer9-shortcut', 10: 'layer10-conv', 11: 'layer11-conv', 12: 'layer12-shortcut', 13: 'layer13-conv', 14: 'layer14-conv', 15: 'layer15-conv', 16: 'layer16-shortcut', 17: 'layer17-conv', 18: 'layer18-conv', 19: 'layer19-shortcut', 20: 'layer20-conv', 21: 'layer21-conv', 22: 'layer22-shortcut', 23: 'layer23-conv', 24: 'layer24-conv', 25: 'layer25-shortcut', 26: 'layer26-conv', 27: 'layer27-conv', 28: 'layer28-shortcut', 29: 'layer29-conv', 30: 'layer30-conv', 31: 'layer31-shortcut', 32: 'layer32-conv', 33: 'layer33-conv', 34: 'layer34-shortcut', 35: 'layer35-conv', 36: 'layer36-conv', 37: 'layer37-shortcut', 38: 'layer38-conv', 39: 'layer39-conv', 40: 'layer40-conv', 41: 'layer41-shortcut', 42: 'layer42-conv', 43: 'layer43-conv', 44: 'layer44-shortcut', 45: 'layer45-conv', 46: 'layer46-conv', 47: 'layer47-shortcut', 48: 'layer48-conv', 49: 'layer49-conv', 50: 'layer50-shortcut', 51: 'layer51-conv', 52: 'layer52-conv', 53: 'layer53-shortcut', 54: 'layer54-conv', 55: 'layer55-conv', 56: 'layer56-shortcut', 57: 'layer57-conv', 58: 'layer58-conv', 59: 'layer59-shortcut', 60: 'layer60-conv', 61: 'layer61-conv', 62: 'layer62-shortcut', 63: 'layer63-conv', 64: 'layer64-conv', 65: 'layer65-conv', 66: 'layer66-shortcut', 67: 'layer67-conv', 68: 'layer68-conv', 69: 'layer69-shortcut', 70: 'layer70-conv', 71: 'layer71-conv', 72: 'layer72-shortcut', 73: 'layer73-conv', 74: 'layer74-conv', 75: 'layer75-shortcut', 76: 'layer76-conv', 77: 'layer77-conv', 78: 'layer78-conv', 79: 'layer79-conv', 80: 'layer80-conv', 81: 'layer81-conv', 82: 'layer82-conv', 83: 'layer82-conv', 84: 'layer84-route', 85: 'layer85-conv', 86: 'layer86-upsample', 87: 'layer87-route', 88: 'layer88-conv', 89: 'layer89-conv', 90: 'layer90-conv', 91: 'layer91-conv', 92: 'layer92-conv', 93: 'layer93-conv', 94: 'layer94-conv', 95: 'layer94-conv', 96: 'layer96-route', 97: 'layer97-conv', 98: 'layer98-upsample'}
OrderedDict([('bottom', ['layer98-upsample', 'layer37-shortcut']), ('top', 'layer99-route'), ('name', 'layer99-route'), ('type', 'Concat')])
99
unknow layer type yolo 
[libprotobuf ERROR google/protobuf/text_format.cc:245] Error parsing text-format caffe.NetParameter: 2622:18: Message type "caffe.LayerParameter" has no field named "module_param".
WARNING: Logging before InitGoogleLogging() is written to STDERR
F0719 11:29:21.104534 49449 upgrade_proto.cpp:90] Check failed: ReadProtoFromTextFile(param_file, param) Failed to parse NetParameter file: my_yolov3.prototxt
*** Check failure stack trace: ***
Aborted

Not sure where is not correct. Could you give some suggestions? Many thanks!!

makefile commented 6 years ago

@claudehang Hi, you can remove the layer in yolov3.cfg file since it has no weight params. And yolo layer functions is implemented in test_yolov3.cpp

claudehang commented 6 years ago

You're just brilliant. Thanks a lot!

claudehang commented 6 years ago

My god, still one more error that confuses me:

I0719 15:40:28.297994 16478 net.cpp:243] This network produces output layer104-conv
I0719 15:40:28.298002 16478 net.cpp:243] This network produces output layer82-conv
I0719 15:40:28.298007 16478 net.cpp:243] This network produces output layer93-conv
I0719 15:40:28.298159 16478 net.cpp:256] Network initialization done.
Traceback (most recent call last):
  File "darknet2caffe.py", line 437, in <module>
    darknet2caffe(cfgfile, weightfile, protofile, caffemodel)
  File "darknet2caffe.py", line 59, in darknet2caffe
    start = load_conv_bn2caffe(buf, start, params[conv_layer_name], params[bn_layer_name], params[scale_layer_name])
  File "darknet2caffe.py", line 132, in load_conv_bn2caffe
    conv_param[0].data[...] = np.reshape(buf[start:start+conv_weight.size], conv_weight.shape); start = start + conv_weight.size
  File "/usr/lib64/python2.7/site-packages/numpy/core/fromnumeric.py", line 257, in reshape
    return _wrapfunc(a, 'reshape', newshape, order=order)
  File "/usr/lib64/python2.7/site-packages/numpy/core/fromnumeric.py", line 52, in _wrapfunc
    return getattr(obj, method)(*args, **kwds)
ValueError: cannot reshape array of size 135698 into shape (256,128,3,3)

What a strange shape (256, 128, 3, 3)!? I swear the .cfg and .weights files work just perfect in Darknet framework. How can I probably solve this? Many Thanks for your good advice and patience!!

makefile commented 6 years ago

@claudehang I'm not sure what caused this problem. Maybe your .weight file is mismatch with .cfg or there is some params in conv layer that the script cannot process correctly. And the shape (256, 128, 3, 3) is related to the input layer size. Hope this can give you some clue...

claudehang commented 6 years ago

Huge thanks for your sharing and supporting!!

claudehang commented 6 years ago

Finally figure it out :D by referring to the post here: https://github.com/ChenYingpeng/caffe-yolov3/issues/1 I rectified my .cfg file and it matched to its .weight friend now!