目标:采集数据,进行数据标注,使用自己的数据集训练yolo,实现目标检测(人脸)
一、数据采集以及标注
1.数据采集
(1)数据采集(摄像头)
"""
代码功能:调用摄像头,保存数据
2023.4.26
li
"""
import cv2
# 定义摄像头
# 参数为0是表示调用第一个摄像头,一般就是笔记本的内置摄像头
cap = cv2.VideoCapture(0)
save_img_path = "./data/" # 保存数据路径
save_img_yn = 1 # 是否保存数据, 1表示保存, 0表示不保存
img_counter = 1
while(1):
img_counter = img_counter + 1
ret,frame = cap.read()#读取每一帧
cv2.imshow('Camera',frame)#显示每一帧
if save_img_yn == 1:
cv2.imwrite(save_img_path + str(img_counter) + '.jpg', frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
(2)选用网上的图片
摄像头采集的数据每一帧都保存一张,数量太多,因此选择网上图片。
2.数据标注
使用make sense网站进行标注(也可以使用labeling,不过需要下载)
make sense网站:https://www.makesense.ai/
将标注好的数据导出(txt形式文件)
二、数据准备
1.数据需要分为train与val,文件夹格式如下
dataset #(数据集名字:例如fire)
├── images
├── train
├── xx.jpg
├── val
├── xx.jpg
├── labels
├── train
├── xx.txt
├── val
├── xx.txt
2.修改配置文件
由于yolo默认训练coco128数据集,因此想要训练自己的数据集,需要给出训练数据位置,信息。
在yolov5-master/data文件夹下添加xxxx.yaml文件,文件内容如下:(我这里设置的只检测人,因此类别只有1个people)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: E:\yolov5\data # dataset root dir
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')
test: # test images (optional)
# Classes
nc: 1 # number of classes
names: ['people'] # class names
三、训练模型——yolov5-master/train.py
1.修改模型参数
在pycharm右上角,点击train旁边的倒三角,选中Edit Configurations...
修改parameters信息为:
--weights yolov5s.pt --data data/people.yaml --workers 1 --batch-size 8
2.运行模型
3.结果
模型结果保存在yolov5-master/runs/train/exp中
其中results.png中显示模型训练的损失变化情况。
四、模型测试 ——yolov5-master/detect.py
1.使用测试图片进行目标检测
准备好测试图片后,修改detect的参数。选用上一步训练好的模型参数即best.py,其位置在下图
将best.py复制到yolov5-master文件夹下;同时修改测试图片来源source,如图测试图片位于yolov5-master/data/images。
--weights best.pt --source data/images
2.使用摄像头进行实时检测
修改detect.py文件
(修改前)
(修改后)
运行detect.py。
五、报错以及解决方法
1. 修改detect参数后,报错:detect.py: error: unrecognized arguments
原因:参数一开始按照教程模式设置:python detect.py --weights best.pt --source data/images
但实际不需要前缀(python detect.py)
正确写法:--weights best.pt --source data/images