您好我正在尝试为道路标志训练探测器,类似于fhog_object_detector_ex.cpp。我将裁剪的地面实况图像放在 stopsign_train 文件夹中。
string stopsign_train = "/media/user/DATA/Dataset/StopSignModeling/train
/01/";
std::vector<string> imgListTrain, imgListValidation ;
listAllFiles(imgListTrain, stopsign_train, "png");
dlib::array<array2d<dlib::rgb_pixel > > images_train ;
std::vector<std::vector<rectangle> > stop_boxes_train ;
//filling the stop_boxes_train and images_train
for(unsigned int ii=0; ii < imgListTrain.size(); ii++){
string fileName = stopsign_train + imgListTrain[ii];
dlib::array2d<dlib::rgb_pixel > tmpImg ;
load_png(tmpImg, fileName);
array2d<rgb_pixel> sizeImg(18, 18);
resize_image(tmpImg, sizeImg, interpolate_nearest_neighbor());
images_train.push_back(sizeImg);
dlib::rectangle tmpRect(dlib::point(2, 2), dlib::point(16, 16)) ;
std::vector<rectangle> tmpVecRect ;
tmpVecRect.push_back(tmpRect);
stop_boxes_train.push_back(tmpVecRect);
}
typedef scan_fhog_pyramid<pyramid_down<6> > image_scanner_type;
image_scanner_type scanner;
// The sliding window detector will be 16 pixels wide and 16 pixels tall.
scanner.set_detection_window_size(16, 16);
// I have tried 12 by 12 as well as 14 by 14 (samller than the
stop_boxes_train rectangle size as well as exact also)
int C = 1;
trainer.set_c(C);
float eps = 0.01 ;
trainer.set_epsilon(eps);
object_detector<image_scanner_type> detector = trainer.train(images_train,
stop_boxes_train);
总是存在类似输出的异常,如下所示 的 -------------------------------------------
num training图片:2284
异常抛出! 检测到一组不可能的对象标签。发生这种情况是因为没有 由提供的图像扫描仪检查的对象位置是否足够接近 匹配其中一个真值框。要解决此问题,您需要降低 match_eps或调整图像扫描仪的设置,使其达到此目的 真相盒。或者你可以调整有问题的真实矩形,这样就可以了 与当前的图像扫描仪匹配。另外,如果您正在使用 scan_image_pyramid对象然后你可以尝试使用更精细的图像金字塔或 添加更多检测模板。例如。如果您现有的检测之一 模板具有匹配的宽度/高度比,并且面积小于违规 矩形然后更精细的图像金字塔可能会有所帮助。
图像索引0
match_eps:0.5
最佳匹配:0.0926276
真相矩形:[(2,2)(16,16)]
真相矩形/高度:1
真实地区:225
最近检测模板rect:[(10,10)(24,24)]
最近检测模板rect width / height:1
最近检测模板rect区域:225