数据集地址
该图像数据集是 通过一个特色的渠道获取了数据集,然后一通处理以后得到的数据,其中一张图的一部分显示如下(因为保密):。
整个数据集有100张图像,但是每张图像上的对象实在太多了,每办法,花了两天的时候,标注了其中65张图像,60张作为训练集、5张做为测试集。算是完成了数据标注工作。
模型训练
准备好数据集以后,直接按下面的命令行运行即可:
yolo train model=yolov8s.pt data=sperm_dataset.yaml epochs=50 imgsz=1280 batch=8
导出与测试
模型导出与测试
yolo export model=sperm50_640_best.pt format=onnx yolo predict model=sperm50_640_best.pt source=.sperm_test
部署推理
转成ONNX格式文件以后,基于OpenVINO-Python部署推理,相关代码如下
ie = Core() for device in ie.available_devices: print(device) # Read IR model = ie.read_model(model="sperm_best.onnx") compiled_model = ie.compile_model(model=model, device_name="CPU") output_layer = compiled_model.output(0) frame = cv.imread("D:/1.jpg") bgr = format_yolov8(frame) img_h, img_w, img_c = bgr.shape start = time.time() image = cv.dnn.blobFromImage(bgr, 1 / 255.0, (640, 640), swapRB=True, crop=False) res = compiled_model([image])[output_layer] # 1x84x8400 rows = np.squeeze(res, 0).T class_ids = [] confidences = [] boxes = [] x_factor = img_w / 640 y_factor = img_h / 640 for r in range(rows.shape[0]): row = rows[r] classes_scores = row[4:] _, _, _, max_indx = cv.minMaxLoc(classes_scores) class_id = max_indx[1] if (classes_scores[class_id] > .25): confidences.append(classes_scores[class_id]) class_ids.append(class_id) x, y, w, h = row[0].item(), row[1].item(), row[2].item(), row[3].item() left = int((x - 0.5 * w) * x_factor) top = int((y - 0.5 * h) * y_factor) width = int(w * x_factor) height = int(h * y_factor) box = np.array([left, top, width, height]) boxes.append(box) indexes = cv.dnn.NMSBoxes(boxes, confidences, 0.25, 0.45) for index in indexes: box = boxes[index] color = colors[int(class_ids[index]) % len(colors)] rr = int((box[2] + box[3])/4) cv.circle(frame, (box[0]+int(box[2]/2), box[1]+int(box[3]/2)), rr-4, color, 2) cv.putText(frame, class_list[class_ids[index]], (box[0] + int(box[2] / 2), box[1] + int(box[3] / 2)), cv.FONT_HERSHEY_SIMPLEX, .5, (0, 0, 0)) cv.putText(frame, "gloomyfish@2024", (20, 45), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) cv.imshow("YOLOv8+OpenVINO2023 Sperm Count", frame) cv.waitKey(0) cv.destroyAllWindows()
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !