yoloV2的预测代码在examples/detector.c中的test_detector函数中。具体步骤为:
1、模型、参数、待检测图片等信息的加载
2、图片resize,这里使用的是letterbox_image函数。与opencv的resize函数不同的是letterbox不会使物体变形。这边是移植到手机端的一个坑。
3、前向传播,获取网络输出,大小为13*13*425(假设,输入为416*416,80类,5个候选框)
4、根据网络预测的候选框与anchor的x,y偏移量和w,h比值,求出候选框的bbox。get_region_boxes函数。
5、利用非极大值抑制去除重叠的候选框
letterbox_image
image letterbox_image(image im, int w, int h)//w,h:要resize的大小
{
int new_w = im.w;
int new_h = im.h;
//计算保持宽高比的新宽高
if (((float)w/im.w) < ((float)h/im.h)) {
new_w = w;
new_h = (im.h * w)/im.w;
} else {
new_h = h;
new_w = (im.w * h)/im.h;
}
//直接resize
image resized = resize_image(im, new_w, new_h);
//创建一个大小为w*h的空图片
image boxed = make_image(w, h, im.c);
//将空图片用【0.5,0.5,0.5】填充
fill_image(boxed, .5);
//int i;
//for(i = 0; i < boxed.w*boxed.h*boxed.c; ++i) boxed.data[i] = 0;