MobileNet-YOLO icon indicating copy to clipboard operation
MobileNet-YOLO copied to clipboard

将yolo模型转换为caffe模型后测试有误差

Open Majiawei opened this issue 5 years ago • 12 comments

在yolo源码训练模型后进行测试效果: image 执行python darknet2caffe.py转换为caffe模型进行测试效果: image 可以看到预测框与原模型测试结果相比有偏差. 我有以下几个疑问: 1,请问上图转换后的inference误差来源在哪? 2,请问yolo源码中使用的objectness>0.5,为何要换成objectness*class_score>0.1来去除冗余框? 3,yolo传入图像时使用的ipltoimage进行像素处理是否会造成caffe inference的不一致? 4,yolov3_detection_output_layer.cpp中的类别分数为何要用class_score[c - 5] = sigmoid(input_data[index2 + 0]),yolo源码中并无对类别分数进行sigmod处理?

Majiawei avatar Oct 09 '19 12:10 Majiawei

转换后的模型还需要finetuning吗?

Majiawei avatar Oct 09 '19 12:10 Majiawei

@eric612

Majiawei avatar Oct 10 '19 07:10 Majiawei

誤差可能由下列幾項造成的

  • input image channel order (BGR or RGB )
  • input image scale and mean
  • batch norm eps
  • relu and leakly relu
  • image scaler mode (keep aspect ratio or not , the default parameter was different between original darknet and alexyAB darknet) 要完全不需要finetune ,可能要先確認上述幾項都完全與darknet framework一樣

eric612 avatar Oct 13 '19 11:10 eric612

Hi Eric,

請問darknet2caffe 有考慮input image channel order嗎?

  1. 我的轉換出來框框比原本小很多.....
  2. 紅綠燈會誤判.... 謝謝

jerryho-quanta avatar Feb 20 '20 10:02 jerryho-quanta

Hi @jerryho-quanta ,

我印象中darknet的image order 與caffe是相反的,你可以確認看看。

eric612 avatar Feb 21 '20 00:02 eric612

Hi @eric612 ,

Thanks, darknet是RBG, caffe(opencv)為BGR, 有辦法在darknet2caffe就先轉換channel? 還是得等到轉完,從caffe那邊再轉一次呢? 需要改code? 還是可以從train/test.prototxt那邊直接寫嗎?

jerryho-quanta avatar Feb 21 '20 00:02 jerryho-quanta

@jerryho-quanta ,

如果你能從darknet2caffe轉換時,就把weighting調換當然可以,只是需要比較多的時間修改跟確認,或是你可以先改code將input image channel 調換試試 https://github.com/eric612/MobileNet-YOLO/blob/master/examples/yolo/yolo_detect.cpp#L474-#L480

eric612 avatar Feb 21 '20 00:02 eric612

Hi @eric612 , Thanks, 很有幫助 另外請教我轉換完重新caffe finetune,可否指點一下data input channel 調換的地方? 謝謝

jerryho-quanta avatar Feb 21 '20 02:02 jerryho-quanta

@jerryho-quanta

https://github.com/eric612/MobileNet-YOLO/blob/master/src/caffe/data_transformer.cpp 有兩種方式:

  1. 在每個 DecodeDatumToCVMat 後面用opencv api 倒換順序
  2. 直接修改 https://github.com/eric612/MobileNet-YOLO/blob/master/src/caffe/data_transformer.cpp#L792-L794

如果有segmentation 還要另外修改

eric612 avatar Feb 21 '20 02:02 eric612

@eric612 , 另外 有個問題 我在測map時很低只有2%, 可否在test直接改channel order 試看看 會不會好一點?

jerryho-quanta avatar Feb 21 '20 03:02 jerryho-quanta

如果只有2%的話 應該不只有order問題 太低了

你要確定看看這下列項目 https://github.com/eric612/MobileNet-YOLO/issues/177#issuecomment-541410096

eric612 avatar Feb 21 '20 03:02 eric612

@eric612 Thanks, 我正在看這部分.....但目前沒什麼特別想法 資料重新餵進去finetuning後一下就跑到8成以上了 ...原本darknet到90%

jerryho-quanta avatar Feb 21 '20 03:02 jerryho-quanta