机器视觉之yolov8:实现物体检测
机器视觉之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()效果如下:

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


所有评论(0)