以下是仅使用个人笔记本电脑进行简单 yolo 项目的方法。
- 效果
首先准备数据集:https://drive.google.com/file/d/1UwbEjnZzSO7gwsUU85a-RpDSmLmHZyP6/view?usp=sharing
该数据集构成为:训练653 :测试100 :验证100
首先先创建一个项目文件
下载yolov5代码: GitHub - ultralytics/yolov5: YOLOv5 in PyTorch > ONNX > CoreML > TFLiteYOLOv5 in PyTorch > ONNX > CoreML > TFLite. Contribute to ultralytics/yolov5 development by creating an account on GitHub.https://github.com/ultralytics/yolov5
将其解压至项目文件夹中
使用Anaconda创建yolov5的环境
conda create -n yolov5 python==3.7.0
将路径切换至项目路径,然后安装yolov5的依赖库
pip install -r requirements.txt
接下来使用各自喜欢的编辑器处理项目,可以用pycharm(推荐),
也可以用VScode(不推荐)(如果处理服务器上的项目的时候还是比较方便的)
这里使用VScode进行
使用VScode打开项目文件
python 环境选择: ctrl + shift + p
>python: select Interpreter
detect.py 运行尝试
如果在run/detect/exp 文件夹下出现该图片表示环境ok
环境构建成功的话,接下来开始训练自己的数据集了
首先在data文件夹下创建一个yaml文件填入数据集路径,类个数,类名信息
创建mask.yaml 输入相关内容
train: D:/yanglunfei/data/face_mask/yolov5_mask/images/train
val: D:/yanglunfei/data/face_mask/yolov5_mask/images/val
test: D:/yanglunfei/data/face_mask/yolov5_mask/images/test
nc: 3
names: ['without_mask', 'with_mask', 'mask_weared_incorrect']
修改train.py中的代码,指定数据集
# parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')
parser.add_argument('--data', type=str, default='mask.yaml', help='dataset.yaml path')
如果电脑不太好的话,就比如我,,会出现GPU容量不足的情况
解决方法是尽量调整数据输入量和线程,减少电脑负担,
在train文件里调小workers、batch-size
这些参数,如果还是不行那需要调整num_workers值,调整如下
workers=4
batch-size=8
在utils文件夹下的dataloaders.py文件下,搜索num_workers,调整至合适的值,我电脑太差直接归零了,一般2、4也都行
num_workers=0
再次执行train文件就能训练了。
如果无法使用GPU那应该是yolov5提供的pytorch是cpu版本,可以查找yolo对应pytorch的gpu版本相关命令,试过好多次,直接在anaconda的环境里执行安装相应版本就行
这是符合我电脑的
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
训练结束后在runs/train/ 文件夹下查看结果
然后就可以修改detect文件的参数,指定自己训练好的权重、检测方式(摄像头)、data 这三个变量就行。
# parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'yolov5s.pt', help='model path(s)')
parser.add_argument('--weights', nargs='+', type=str, default='runs/train/exp5/weights/best.pt', help='model path(s)')
# parser.add_argument('--source', type=str, default=ROOT / 'data/images', help='file/dir/URL/glob, 0 for webcam')
parser.add_argument('--source', type=str, default=0, help='file/dir/URL/glob, 0 for webcam')
# parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='(optional) dataset.yaml path')
parser.add_argument('--data', type=str, default='data/yolov5_mask.yaml', help='(optional) dataset.yaml path')
另外,自带的detect代码没有结束的的设置,只是测试的话可以设置一个opencv的waitkey来结束进程。
实验效果如下
每天一遍爱坤~