瑞芯微RV1126部署yolov5-face

瑞芯微RV1126部署yolov5-face  1.前言

yolov5-face只检测一个种类,nc=1,yolov5-face的三个输出分别是

1x3x80x80x16

1x3x40x40x16

1x3x20x20x16

这里的3是指RGB三个通道,每个通道都会产生一个结果,这里的16是指x y w h boxScore x1 y1   x2 y2   x3 y3    x4 y4   x5 y5 idScore。

2.代码

这里以瑞芯微的代码为例,只不过在前面和后面加上了有关padding resize的处理,瑞芯微的具体代码见rknpu/rknn/rknn_api/examples/rknn_yolov5_demo at master · rockchip-linux/rknpu · GitHub

2.1 padding resize代码

瑞芯微的官方demo里面是用opencl读取图片,这里我改成了用opencv读取图片,关于opencv的交叉编译见:ubuntu交叉编译RV1126的opencv库/ubuntu交叉编译opencv

void padding_resize(cv::InputArray src, cv::OutputArray dst, cv::Size size) {
        float padd_w = 0;
        float padd_h = 0;
        float r = std::min(float(size.width) / src.cols(), float(size.height) / src.rows());
        int inside_w = round(src.cols() * r);
        int inside_h = round(src.rows() * r);
        padd_w = size.width - inside_w;
        padd_h = size.height - inside_h;
        cv::resize(src, dst, cv::Size(inside_w, inside_h));
        padd_w = padd_w / 2;
        padd_h = padd_h / 2;
        //外层边框填充灰色
        printf("gain:%f, padd_w:%f,padd_h:%f. in padding_resize============n", r, padd_w,padd_h);
        int top = int(round(padd_h - 0.1));
        int bottom = int(round(padd_h + 0.1));
        int left = int(round(padd_w - 0.1));
        int right = int(round(padd_w + 0.1));
        cv::copyMakeBorder(dst, dst, top, bottom, left, right, cv::BORDER_CONSTANT, cv::Scalar(114, 114, 114));
    }
 
cv::Mat read_image(const char *image_path, int w, int h, int & img_width, int & img_height, cv::Mat & img) 
{
    img = cv::imread(image_path);
    img_width = img.cols;
    img_height = img.rows;
    cv::Mat sample_resize, sample;
    padding_resize(img, sample_resize, cv::Size(w, h));
    //cv::resize(img, sample_resize, cv::Size(w, h));
    cv::cvtColor(sample_resize, sample, cv::COLOR_BGR2RGB);
    return sample;
}
2.2 yolov5-face后处理(在瑞芯微yolov5后处理代码基础上修改)

这是瑞芯微的yolov5 demo里的代码,这里面我把坐标框后处理时影射回原图的四行代码注释掉了。然后其他代码也针对yolov5-face进行了修改。

参考文献:

yolov5输出后处理_C++实现

ubuntu交叉编译RV1126的opencv库/ubuntu交叉编译opencv

opencv实现padding resize

瑞芯微RV1126的YOLOv5官方推理demo

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5635774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存