MobileNet-YOLO
MobileNet-YOLO copied to clipboard
将yolo模型转换为caffe模型后测试有误差
在yolo源码训练模型后进行测试效果:
执行python darknet2caffe.py转换为caffe模型进行测试效果:
可以看到预测框与原模型测试结果相比有偏差.
我有以下几个疑问:
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处理?
转换后的模型还需要finetuning吗?
@eric612
誤差可能由下列幾項造成的
- 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一樣
Hi Eric,
請問darknet2caffe 有考慮input image channel order嗎?
- 我的轉換出來框框比原本小很多.....
- 紅綠燈會誤判.... 謝謝
Hi @jerryho-quanta ,
我印象中darknet的image order 與caffe是相反的,你可以確認看看。
Hi @eric612 ,
Thanks, darknet是RBG, caffe(opencv)為BGR, 有辦法在darknet2caffe就先轉換channel? 還是得等到轉完,從caffe那邊再轉一次呢? 需要改code? 還是可以從train/test.prototxt那邊直接寫嗎?
@jerryho-quanta ,
如果你能從darknet2caffe轉換時,就把weighting調換當然可以,只是需要比較多的時間修改跟確認,或是你可以先改code將input image channel 調換試試 https://github.com/eric612/MobileNet-YOLO/blob/master/examples/yolo/yolo_detect.cpp#L474-#L480
Hi @eric612 , Thanks, 很有幫助 另外請教我轉換完重新caffe finetune,可否指點一下data input channel 調換的地方? 謝謝
@jerryho-quanta
https://github.com/eric612/MobileNet-YOLO/blob/master/src/caffe/data_transformer.cpp 有兩種方式:
- 在每個 DecodeDatumToCVMat 後面用opencv api 倒換順序
- 直接修改 https://github.com/eric612/MobileNet-YOLO/blob/master/src/caffe/data_transformer.cpp#L792-L794
如果有segmentation 還要另外修改
@eric612 , 另外 有個問題 我在測map時很低只有2%, 可否在test直接改channel order 試看看 會不會好一點?
如果只有2%的話 應該不只有order問題 太低了
你要確定看看這下列項目 https://github.com/eric612/MobileNet-YOLO/issues/177#issuecomment-541410096
@eric612 Thanks, 我正在看這部分.....但目前沒什麼特別想法 資料重新餵進去finetuning後一下就跑到8成以上了 ...原本darknet到90%