YOLOv5x6模型来了! 同样支持CPU上ONNX部署与推理

点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达

说一下是YOLOv5的第五个版本不是YOLO的第五个版本!是YOLOv5又又改进了!

01

YOLOv5x6模型来了

自从Pytorch版本YOLOv5发布之后,经历过了四个版本的升级,YOLOv5的功能与模型精度不断提升。不久之前YOLOv5-Pytorch发布第五个版本,第五个版本跟之前版本最大的差异就是多出了一个输出层,之前的输出层分辨率倍数为:[8、16、32]三个层的输出。现在YOLOv5多出的一个输出层之后,它的输出变为:[8、16、32、64]。但是我找遍了model文件夹中的模型描述文件,没发现跟模型对应的描述文件,所以我就不知道是否可以支持训练。这里我就重点说一下如何使用已经发布的YOLOv5支持四层输出的模型:

别担心之前的第四版本模型都可以用,模型命名带数字6的都是支持四个输出层的,以YOLOv5s6为例,转ONNX格式查看截图如下:

02

数值精度取舍

首先需要需要运行下面的命令行获取整个YOLOv5项目的源码:

git clone https://github.com/ultralytics/yolov5.git

然后测试运行:

测试没有问题,就可以转换模型yolov5s6为ONNX格式,命令行如下:

这样就获取到了ONNX格式文件,注意它的对应输出格式为:

1x3x1280x1280RGB, 像素值在0到1之间

导入模型

model_onnx = "D:/python/yolov5/yolov5s6.onnx"net = ie.read_network(model=model_onnx)input_blob = next(iter(net.input_info))head_it = iter(net.outputs)out_blob_160 = next(head_it) # 160out_blob_80 = next(head_it)  # 80out_blob_40 = next(head_it)  # 40out_blob_20 = next(head_it)  # 20

处理输入图象与推理

rgb = cv.cvtColor(frame, cv.COLOR_BGR2RGB)rgb = cv.resize(rgb, (w, h))image = np.float32(rgb.transpose(2, 0, 1))/255.0inf_start = time.time()res = exec_net.infer(inputs={input_blob:[image]})outs = []outs.append(res[out_blob_20])outs.append(res[out_blob_40])outs.append(res[out_blob_80])outs.append(res[out_blob_160])

解析输出结果:

for out in outs:
    out = np.squeeze(out, 0)
    dims, side_h, side_w, side_data = out.shape
    side_square = side_h * side_w
    stride = get_stride(side_w)
    anchor_index = get_anchor_index(side_w)
    for i in range(side_square):
        for d in range(dims):
            row = i // side_h;
            col = i % side_h;
            box_data = out[d, row, col]
            conf = sigmoid(box_data[4]);
            if conf < 0.25:
                continue
            xx = (sigmoid(box_data[0]) * 2 - 0.5 + col) * stride;
            yy = (sigmoid(box_data[1]) * 2 - 0.5 + row) * stride;
            ww = pow(sigmoid(box_data[2]) * 2, 2) * anchors[anchor_index + d * 2];
            hh = pow(sigmoid(box_data[3]) * 2, 2) * anchors[anchor_index + d * 2 + 1];

            max_prob = -1
            max_index = -1
            for p in range(5, 85, 1):
                prob = sigmoid(box_data[p])
                if prob > max_prob:
                    max_prob = prob
                    max_index = p - 5

            # 转换为top - left, bottom - right坐标
            x1 = int((xx - ww / 2) * sx)
            y1 = int((yy - hh / 2) * sy)
            x2 = int((xx + ww / 2) * sx)
            y2 = int((yy + hh / 2) * sy)

            boxes.append([x1, y1, x2-x1, y2-y1])
            confidences.append(float(conf))
            classIds.append(max_index)

最后NMS输出结果如下:

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

 圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值