[Caffe SSD][轉載]math_functions.cpp 250 Check failed a XXX= b 0 vs -1.19209e-007解決方法

最近因爲這個錯誤折騰老長時間,重裝caffe ssd好幾次,沒有什麼作用,最後發現一個大佬解決這個問題

問題一:math_functions.cpp:250] Check failed: a <= b <0 vs -1.19209e-007>

解決:找到math_functions.cpp,找到在路徑爲~/caffe/src/caffe/util的math_functions.cpp,找到第250行出錯的地方,雙斜槓屏蔽,如下所示:最後重新在caffe路徑下make -j8

問題二:Data layer prefetch queue empty

原因:因爲如果註釋掉 CHECK_LE(a, b) 會出現Data layer prefetch queue empty,不註釋CHECK_LE(a, b) 會出現錯誤 a可能大於b,caffe_rng_uniform will get block, when bbox_width or bbox_height near 1.0 , (1 - bbox_width) will less than 0.f。

解決:找到在路徑爲~/caffe/src/caffe/util/sampler.cpp,在其中增加加粗黑體部分的代碼

void SampleBBox(const Sampler& sampler, NormalizedBBox* sampled_bbox) {
// Get random scale.
CHECK_GE(sampler.max_scale(), sampler.min_scale());
CHECK_GT(sampler.min_scale(), 0.);
CHECK_LE(sampler.max_scale(), 1.);
float scale;
caffe_rng_uniform(1, sampler.min_scale(), sampler.max_scale(), &scale);
// Get random aspect ratio.
CHECK_GE(sampler.max_aspect_ratio(), sampler.min_aspect_ratio());
CHECK_GT(sampler.min_aspect_ratio(), 0.);
CHECK_LT(sampler.max_aspect_ratio(), FLT_MAX);
float aspect_ratio;
caffe_rng_uniform(1, sampler.min_aspect_ratio(), sampler.max_aspect_ratio(),
&aspect_ratio);
aspect_ratio = std::max(aspect_ratio, std::pow(scale, 2.));
aspect_ratio = std::min(aspect_ratio, 1 / std::pow(scale, 2.));
// Figure out bbox dimension.
float bbox_width = scale * sqrt(aspect_ratio);
float bbox_height = scale / sqrt(aspect_ratio);
if(bbox_width>=1.0){
bbox_width=1.0;
}
if(bbox_height>=1.0){
bbox_height=1.0;
}

// Figure out top left coordinates.
float w_off, h_off;
caffe_rng_uniform(1, 0.f, 1.0f - bbox_width, &w_off);
caffe_rng_uniform(1, 0.f, 1.0f - bbox_height, &h_off);
sampled_bbox->set_xmin(w_off);
sampled_bbox->set_ymin(h_off);
sampled_bbox->set_xmax(w_off + bbox_width);
sampled_bbox->set_ymax(h_off + bbox_height);
}

最後一定要記得重新在caffe路徑下make -j8
原文鏈接:https://blog.csdn.net/jancis/java/article/details/102824091

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章