当前位置:   article > 正文

Yolov8教程,安装,训练,推理速度太强悍了,详细教学

yolov8

YOLOv8依旧是Ultralytics的巨作,这是备受赞誉的实时对象检测和图像分割模型的最新版本。 YOLOv8 建立在深度学习和计算机视觉的前沿进步之上,在速度和准确性方面提供无与伦比的性能。 其流线型设计使其适用于各种应用程序,并可轻松适应从边缘设备到云 API 的不同硬件平台。

yolov8的推理速度对比如下,极大的提高了训练速度。

1、安装:

官方提供了两种形式的安装方法,这里如果只是玩玩的话建议使用是一种方法安装,为了扩展,开发的可以是第二种方法安装(本文采用的是第二种方法,为了更好的管理项目)

  1. #方法一(建议)
  2. pip install ultralytics
  3. #方法二
  4. git clone https://github.com/ultralytics/ultralytics
  5. cd ultralytics
  6. pip install -e .

2、使用yolov8:

这里也分为两种方法

        1、命令行

example
Syntax

yolo TASK MODE ARGS

Where   TASK (optional) is one of [detect, segment, classify]
        MODE (required) is one of [train, val, predict, export, track]
        ARGS (optional) are any number of custom 'arg=value' pairs like 'imgsz=320' that override defaults.
 

Trainyolo train data=coco128.yaml model=yolov8n.pt epochs=10 lr0=0.01
Predictyolo predict model=yolov8n-seg.pt source='https://youtu.be/Zgi9g1ksQHc' imgsz=320
 
Valyolo val model=yolov8n.pt data=coco128.yaml batch=1 imgsz=640
 
Exportyolo export model=yolov8n-cls.pt format=onnx imgsz=224,128
 
Specialyolo help
yolo checks
yolo version
yolo settings
yolo copy-cfg
yolo cfg
 

        下面是在命令行训练的例子:

 在运行这个代码的时候可能会有些慢,因为要下载数据集和预训练权重,请小伙伴们耐心等待。

但是考虑到外网等问题,我将数据集和预训练权重放到了百度网盘网盘上,更新后的百度网盘地址需要的可以自取

我们可以找到我们下载的yolov8的位置,这里初始是只有ultralytics一个文件夹,我们新建一个datasets文件夹,并将从网盘下载的coco128移动到datasets文件夹内,将下载的权重移动到和ultralytics同层次的文件夹内。(在这里第二种方法下载yolov8的优势就体现出来了,可以很方便的找到对应的文件。

如果我们需要训练自己的数据集,我们的数据集可以按照coco128的形式整理,然后放到dataset下就可以(推荐大家使用makesense标注数据,直接为yolo格式的txt文件)。然后为在这里将标注的xml文件转为txt文件的代码,供大家参考。

  1. import xml.etree.ElementTree as ET
  2. import pickle
  3. import os
  4. from os import listdir , getcwd
  5. from os.path import join
  6. import glob
  7. classes = ["cone tank", "water horse bucket"]
  8. def convert(size, box):
  9. dw = 1.0/size[0]
  10. dh = 1.0/size[1]
  11. x = (box[0]+box[1])/2.0
  12. y = (box[2]+box[3])/2.0
  13. w = box[1] - box[0]
  14. h = box[3] - box[2]
  15. x = x*dw
  16. w = w*dw
  17. y = y*dh
  18. h = h*dh
  19. return (x,y,w,h)
  20. def convert_annotation(image_name):
  21. in_file = open('./indata/'+image_name[:-3]+'xml') #xml文件路径
  22. out_file = open('./labels/train/'+image_name[:-3]+'txt', 'w') #转换后的txt文件存放路径
  23. f = open('./indata/'+image_name[:-3]+'xml')
  24. xml_text = f.read()
  25. root = ET.fromstring(xml_text)
  26. f.close()
  27. size = root.find('size')
  28. w = int(size.find('width').text)
  29. h = int(size.find('height').text)
  30. for obj in root.iter('object'):
  31. cls = obj.find('name').text
  32. if cls not in classes:
  33. print(cls)
  34. continue
  35. cls_id = classes.index(cls)
  36. xmlbox = obj.find('bndbox')
  37. b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
  38. float(xmlbox.find('ymax').text))
  39. bb = convert((w,h), b)
  40. out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
  41. wd = getcwd()
  42. if __name__ == '__main__':
  43. for image_path in glob.glob("./images/train/*.jpg"): #每一张图片都对应一个xml文件这里写xml对应的图片的路径
  44. image_name = image_path.split('\\')[-1]
  45. convert_annotation(image_name)

 大家把数据整理完成之后需要进入ultralytics文件夹内的datasets文件夹下新建mydata.yaml

其中mydata.yaml文件内部的内容是将coco128.yaml文件的内容复制进去,对其的修改如下图所示:

 最后还需要修改ultralytics文件夹内的models文件夹的v8文件夹内yolov8.yaml,将其的nc由80改为你数据集的类别,我这里是两类。

 到这里就可以运行代码,训练我们自己的数据了

eg:

        2、使用python代码运行

  1. from ultralytics import YOLO
  2. # Create a new YOLO model from scratch
  3. model = YOLO('yolov8n.yaml')
  4. # Load a pretrained YOLO model (recommended for training)
  5. model = YOLO('yolov8n.pt')
  6. # Train the model using the 'coco128.yaml' dataset for 3 epochs
  7. results = model.train(data='coco128.yaml', epochs=3)
  8. # Evaluate the model's performance on the validation set
  9. results = model.val()
  10. # Perform object detection on an image using the model
  11. results = model('https://ultralytics.com/images/bus.jpg')
  12. # Export the model to ONNX format
  13. success = model.export(format='onnx')

3、使用yolov8推理视频

话不多说,先放代码

  1. import cv2
  2. from ultralytics import YOLO
  3. # 模型加载权重
  4. model = YOLO('yolov8n.pt')
  5. # 视频路径
  6. video_path = "path/to/your/video/file.mp4"
  7. cap = cv2.VideoCapture(video_path)
  8. # 对视频中检测到目标画框标出来
  9. while cap.isOpened():
  10. # Read a frame from the video
  11. success, frame = cap.read()
  12. if success:
  13. # Run YOLOv8 inference on the frame
  14. results = model(frame)
  15. # Visualize the results on the frame
  16. annotated_frame = results[0].plot()
  17. # Display the annotated frame
  18. cv2.imshow("YOLOv8 Inference", annotated_frame)
  19. # Break the loop if 'q' is pressed
  20. if cv2.waitKey(1) & 0xFF == ord("q"):
  21. break
  22. else:
  23. # Break the loop if the end of the video is reached
  24. break
  25. # Release the video capture object and close the display window
  26. cap.release()
  27. cv2.destroyAllWindows()

没了没了,yolov8大概就这么多吧,然后给大家一个避坑技巧就是大家使用强制转化的图片训练的时候会有一个警告

warning:corrupt JPEG restored and saved

大家可以把图片用opencv打开之后再保存即可代码如下:

  1. import os
  2. import cv2
  3. dataDir="images/val1/"
  4. saveDir="images/val/"
  5. if not os.path.exists(saveDir):
  6. print('ok')
  7. os.makedirs(saveDir)
  8. for one_pic in os.listdir(dataDir):
  9. one_path=dataDir+one_pic
  10. one_img=cv2.imread(one_path)
  11. new_path=saveDir+one_pic
  12. cv2.imwrite(new_path, one_img)

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

闽ICP备14008679号