机器视觉之yolov8:实现物体检测(vscode)

步骤一:构建工作环境

在有anaconda的条件下,创建一个虚拟环境,

#创建一个叫yolov8的虚拟还环境
conda create -n yolov8 python=3.10 -y
conda activate yolov8

进入对应目录,加载环境:

source yolov8/bin/activate(对应自己的环境变量路径)

tips:如果不想每次都source环境变量。可以打开.bashrc文件,在最后面输入

alias yolov8="source yolov8/bin/activate"

这样只需要输入yolov8,就能自主加载环境,进入虚拟环境

退出环境命令:

 deactivate

下载yoloV8:

pip install ultralytics

步骤二:数据集的收集和处理
  • 数据集的收集分为两个部分:图像集和标注集

  • 图像集的收集有两个办法:

    • 自己收集特定物体的照片,比如方块,一般照片的数量越多越好,数量越多,后续的训练时间越长,但是准确率也会更高。

    • 一个是去网上收集数据集,有一些网站是可以提供数据集的,但是如果目标 不符合的话,一般就需要自己收集了。

  • 图像集的处理:一般数据集的处理就是做标注,可以使用lableme,labeling,makesense.ai,由于makesense使用比较简单,这里我就只讲这个怎么使用。

    • makesense.ai:直接使用类

      • 使用:直接去makesense,然后按照以下的步骤来:

        在这里插入图片描述

        放入图像集:

      在这里插入图片描述
      在这里插入图片描述

      创建标签(这个随便,可以有多个)

      在这里插入图片描述

      然后注意:做物体检测需要用矩形边框,只有做目标分离才需要用多边形

      全部标注好之后保存:

      然后解压,每个图像都可以得到一个txt文件。

  • 收集好了数据集之后,就需要在工作目录中新创建一个目录(dataset),然后按照下列的的顺序构建文件夹:iamges下的train和val存放的都是图像(jpg或者png),labels下的(train,val)放的都是解压后的txt。


步骤三:模型的训练
  • yaml文件的编写

    • yaml文件主要包含几个信息:

      • 数据集的路径,要写绝对路径
      • train,val的路径,这个已经内含了dataset的路径,所以只需要直接写dataset下面的路径就行。
      • nc:表示类别
      • names:这些类别的名字
    • 示例代码:

      path: /root/yolov8/dataset       
      train: images/train              
      val: images/val
      
      nc: 1                          
      names: ['cubic']               
      
      
  • 训练模型

    • 方法一:编写py文件

      作用:训练数据集,首先选定模型,比如yolov8n(小型且准确度高),yolov8s(小型),yolov8m(中型),yolov8l(大型),然后导入上面我们写的yaml文件,epochs表示训练的次数,次数越多代表精确度越高,相应的需要的时间也越多

    from ultralytics import YOLO
    
    model = YOLO('yolov8n.pt')  
    model.train(
        data='data_train.yaml',
        epochs=50,
        imgsz=640,
        batch=16
    )
    

    然后在终端执行

    python data_train.py(自己的py文件名称)
    

    经过一段时间,数据训练好后会保存在dataset/runs中,如下面所示:其中的best.pt则是训练好的模型,可以直接调用

    • 方法二:cli命令:快速训练

      yolo detect train data=data.yaml model=yolov8n.pt epochs=100 imgsz=640
      
  • 注意:上面的这些数据集还有yaml,py文件都需要放在你创建的yolo目录中,注意是否在装有yolo的虚拟环境下


步骤四:实测
  • 训练好模型后,我们可以使用这个模型来检测既定物体,下面示例读取视频的内容并进行检测,新建一个py文件

    from ultralytics import YOLO
    import os  #引入这个库,就可以调用其他文件的内容
    import cv2
    
    model_path = "/root/yolov8/runs/detect/train/weights/best.pt" #引入训练好的模型库的路径,此处注意需要更改
    
    model = YOLO(model_path)
    
    video_path = "/root/yolov8/vedio2.mp4" #视频路径  
    cap = cv2.VideoCapture(video_path)
    print("视频是否成功打开:", cap.isOpened())#检测是否正确打开
    
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps = cap.get(cv2.CAP_PROP_FPS)
    
    out = cv2.VideoWriter("output2.mp4", cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height)) #保存处理完后的视频
    
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break
    
        results = model.predict(frame, save=False, conf=0.3)
        annotated = results[0].plot()
        out.write(annotated)
        cv2.imshow("YOLOv8", annotated)
    
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    cap.release()
    out.release()
    cv2.destroyAllWindows()
    
    

    效果如下:

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐