在yolov5目标检测模型进行训练和测试时,均成功检测,检测框、置信度均没有问题。
但是在板子上测试检测模型时,出现了大框包小框,并且最大的框都不能将目标全部框住的问题。在全网搜索解决方法,分别排查:
- 是否是pt转换为onnx文件时出现的问题。5. YOLOv5(目标检测) — [野火]嵌入式AI应用开发实战指南—基于LubanCat-RK系列板卡 文档 (embedfire.com)https://doc.embedfire.com/linux/rk356x/Ai/zh/latest/lubancat_ai/example/yolov5.html#
- 是否是模拟测试时量化的dataset.txt的问题。(量化的图片选择、量化图片质量、量化图片数量)
- 修改阈值和框的大小
BOX_THRESH = 0.5 NMS_THRESH = 0.6
def draw(image, boxes, scores, classes): """Draw the boxes on the image. # Argument: image: original image. boxes: ndarray, boxes of objects. classes: ndarray, classes of objects. scores: ndarray, scores of objects. all_classes: all classes name. """ for box, score, cl in zip(boxes, scores, classes): top, left, right, bottom = box print('class: {}, score: {}'.format(CLASSES[cl], score)) print('box coordinate left,top,right,down: [{}, {}, {}, {}]'.format(top, left, right, bottom)) top = int(top) left = int(left) right = int(right) bottom = int(bottom) cv2.rectangle(image, (top, left), (right, bottom), (255, 0, 0), 2) cv2.putText(image, '{0} {1:.2f}'.format(CLASSES[cl], score), (top, left - 6), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2)
- 以上所有的方法都试验之后,均不能在根本上解决问题,最后发现是数据集的问题。训练的数据集中一大部分是网络图片,并不是真实场景的图片,而量化的时候采用的是真实场景中的图片,导致在板子上模拟测试效果极差。最后修改训练数据集,将网络图片删除,增加大量真实场景的图片,训练成功。