当前位置:   article > 正文

YOLO8 OBB~自定义旋转对象检测_yolo obb能识别360度的物体么

yolo obb能识别360度的物体么

从准备数据集、训练模型,导出与测试和部署推理四个方面,介绍如何使用YOLOv8 OBB实现自定义旋转对象的检测。

数据集制作

用手机拍一张图像

然后自己写个代码,每旋转一度保存一张图像,这样就成功生成了360张图像及其注释文件,分为训练集与验证集。训练文件夹包含 320张带有注释的图像。测试和验证文件夹都包含 40 张带有注释的图像。数据集部分图像显示如下:

模型训练

准备好数据集以后,直接按下面的命令行运行即可:

yolo obb train data=pen_dataset.yaml model=yolov8s-obb.pt epochs=25 imgsz=640

导出与测试

模型导出与测试           whaosoft aiot http://143ai.com

  1. # export model
  2. yolo export model=yolov8s-obb.pt format=onnx
  3. # inference model
  4. yolo obb predict model=pen_best.pt source=pen_rotate_test.png

部署推理

转成ONNX格式文件以后,基于OpenVINO-Python部署推理,相关代码如下

  1. class_list = ["pen"]
  2. colors = [(255, 255, 0), (0, 255, 0), (0, 255, 255), (255, 0, 0)]
  3. ie = Core()
  4. for device in ie.available_devices:
  5. print(device)
  6. # Read IR
  7. model = ie.read_model(model="pen_best.onnx")
  8. compiled_model = ie.compile_model(model=model, device_name="CPU")
  9. output_layer = compiled_model.output(0)
  10. ## xywhr
  11. frame = cv.imread("D:/python/my_yolov8_train_demo/four_pen.jpg")
  12. bgr = format_yolov8(frame)
  13. img_h, img_w, img_c = bgr.shape
  14. start = time.time()
  15. image = cv.dnn.blobFromImage(bgr, 1 / 255.0, (640, 640), swapRB=True, crop=False)
  16. res = compiled_model([image])[output_layer] # 1x25x8400
  17. rows = np.squeeze(res, 0).T
  18. boxes, confidences, angles, class_ids = post_process(rows)
  19. indexes = cv.dnn.NMSBoxes(boxes, confidences, 0.25, 0.45)
  20. M = np.zeros((2, 3), dtype=np.float32)
  21. for index in indexes:
  22. box = boxes[index]
  23. d1 = -angles[index]
  24. color = colors[int(class_ids[index]) % len(colors)]
  25. pts = [(box[0], box[1]), (box[0]+box[2], box[1]), (box[0]+box[2], box[1]+box[3]), (box[0], box[1]+box[3])]
  26. rrt_pts = get_rotate_point(pts, M, d1, box)
  27. cv.drawContours(frame, [np.asarray(rrt_pts).astype(np.int32)], 0, (255, 0, 255), 2)
  28. cv.putText(frame, class_list[class_ids[index]], (int(box[0]+box[2]/2), int(box[1]+box[3]/2)), cv.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 2)
  29. end = time.time()
  30. inf_end = end - start
  31. fps = 1 / inf_end
  32. fps_label = "FPS: %.2f" % fps
  33. cv.putText(frame, fps_label, (20, 45), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
  34. cv.imshow("YOLOv8-OBB Rotate Object Detection", frame)
  35. cv.imwrite("D:/pen_result.jpg", frame)
  36. cv.waitKey(0)
  37. cv.destroyAllWindows()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/257191?site
推荐阅读
相关标签
  

闽ICP备14008679号