2016-09-08 6 views
1

현재 C++를 사용하여보다 빠른 RCNN을 사용하고 있습니다. net_->blob_by_name("data")에 cv 매트 개체 (컬러 이미지)를로드하려고합니다. 나는 주어진 지시에 따라 여기에 https://github.com/YihangLou/FasterRCNN-Encapsulation-Cplusplus하지만 결과는 정말 나쁜 것입니다 : result imagecv :: mat을 더 빠른 rcnn blob에로드하십시오.

나는 원래 코드에서 아무것도 변경하지 않았습니다. 따라서 BLOB에 데이터를로드하는 것이 문제가 될 수 있습니다.

코드 :

float im_info[3]; 
float data_buf[height*width*3]; 
float *boxes = NULL; 
float *pred = NULL; 
float *pred_per_class = NULL; 
float *sorted_pred_cls = NULL; 
int *keep = NULL; 
const float* bbox_delt; 
const float* rois; 
const float* pred_cls; 
int num; 

for (int h = 0; h < cv_img.rows; ++h) 
{ 
    for (int w = 0; w < cv_img.cols; ++w) 
    { 
     cv_new.at<cv::Vec3f>(cv::Point(w, h))[0] = float(cv_img.at<cv::Vec3b>(cv::Point(w, h))[0])-float(102.9801); 
     cv_new.at<cv::Vec3f>(cv::Point(w, h))[1] = float(cv_img.at<cv::Vec3b>(cv::Point(w, h))[1])-float(115.9465); 
     cv_new.at<cv::Vec3f>(cv::Point(w, h))[2] = float(cv_img.at<cv::Vec3b>(cv::Point(w, h))[2])-float(122.7717); 

    } 
} 

cv::resize(cv_new, cv_resized, cv::Size(width, height)); 
im_info[0] = cv_resized.rows; 
im_info[1] = cv_resized.cols; 
im_info[2] = img_scale; 

for (int h = 0; h < height; ++h) 
{ 
    for (int w = 0; w < width; ++w) 
    { 
     data_buf[(0*height+h)*width+w] = float(cv_resized.at<cv::Vec3f>(cv::Point(w, h))[0]); 
     data_buf[(1*height+h)*width+w] = float(cv_resized.at<cv::Vec3f>(cv::Point(w, h))[1]); 
     data_buf[(2*height+h)*width+w] = float(cv_resized.at<cv::Vec3f>(cv::Point(w, h))[2]); 
    } 
} 

net_->blob_by_name("data")->Reshape(1, 3, height, width); 
net_->blob_by_name("data")->set_cpu_data(data_buf); 
net_->blob_by_name("im_info")->set_cpu_data(im_info); 
net_->ForwardFrom(0); 
bbox_delt = net_->blob_by_name("bbox_pred")->cpu_data(); 
num = net_->blob_by_name("rois")->num(); 

어떤 조언은? 코드를 수정하고 확인하십시오 수

+0

안녕하세요이 내가 가진 결과입니다. [link] (http://i.stack.imgur.com/2s9Kc.jpg) –

답변

0

...

cv::resize(cv_new, cv_resized, cv::Size(width, height)); 
im_info[0] = cv_resized.rows; 
im_info[1] = cv_resized.cols; 
im_info[2] = img_scale; 

net_->blob_by_name("data")->Reshape(1, 3, height, width); 
const shared_ptr<Blob<float> >& data_blob = net_->blob_by_name("data"); 
float* data_buf = data_blob->mutable_cpu_data(); 

for (int h = 0; h < height; ++h) 
{ 
    for (int w = 0; w < width; ++w) 
    { 
     data_buf[(0*height+h)*width+w] = float(cv_resized.at<cv::Vec3f> cv::Point(w, h))[0]); 
     data_buf[(1*height+h)*width+w] = float(cv_resized.at<cv::Vec3f>(cv::Point(w, h))[1]); 
     data_buf[(2*height+h)*width+w] = float(cv_resized.at<cv::Vec3f>(cv::Point(w, h))[2]); 
    } 
} 

net_->Forward();