YOLOV5学习记录
前言:
计算机视觉
什么是目标检测?
物体分类和目标检测的区别
目标检测,物体的类别和位置
学习选题,口罩检查,人脸识别
算法原理:知乎,csdn,目前还没到这种程度
大大滴崩溃:重装吧。。
打开要下载YOLO的文件夹,其中路径不能有中文
打开官方github连接
ONNX > OpenVINO > CoreML > TFLite">GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite
复制HTTP项目链接
输入到git进行拉取
git clone https//....
拉取成功
使用pycharm打开项目
查询cuda版本
nvcc -V
此处安装的为12.2的cuda
创建虚拟环境
conda create -n 环境名 python=版本号
conda create -n yolov2 python=3.8
查看是否创建成功
conda info --env
进入虚拟环境
conda activate yolov2
输入命令,下载
pip install ultralytics
直接使用这个后面会出错,最好根据下述链接来
!快速教你解决yolov8没有setup.py的问题_没有setup.py文件-CSDN博客
安装pytorch
官方链接:
PyTorch
选好配置,复制链接
安装yolo
pip install yolo
检查
新建一个est.py文件,加入以下代码并运行
import torch #查看版本 print(torch.__version__) #查看GPU是否可用 print(torch.cuda.is_available()) #返回设备GPU个数 print(torch.cuda.device_count()) #查看对应cuda的版本号 print(torch.backends.cudnn.version()) print(torch.version.cuda) quit()
用命令行启动模型
官方文档:
检测 -Ultralytics YOLO 文档
推理命令:
yolo predict model=yolov8n.pt source='ultralytics/assets/bus.jpg'
推理成功
根据路径找到代码
核心配置文件
文档中下载权重文件,放到根目录下
下载coco128数据集
https://ultralytics.com/assets/coco128.zip
在datasets文件夹中建立coco128文件夹,把下载好的coco128数据集放进去
coco128的格式
images:下面的子文件夹为train2017,存放所有的训练图片
labels:下面的子文件夹为labels2017,存放所有的标注标签
yaml文件
我下的coco128没有yaml,自己新建一个txt文件改名字写内容就好
自己建立数据集
将yolov8.yaml复制到datasets文件夹下
在datasets下新建一个data .yaml
安装labelme:
labelme的安装及使用_labelme安装-CSDN博客
打开labelme:
方法一:Anaconda Prompt里输入labelme
我发现我还没完全安装labelme
但是安装完后直接输入labelme还是不能打开
方法二:Anaconda Prompt里输入python -m labelme,使用python打开
进入labelme虚拟环境
conda activate labelme
使用python打开
python -m labelme
成功打开
方法三:在pycharm里面打开
labelme的使用:
界面
创建文件夹
wzry为自定义数据集名字,其余需一致
images是图片
labels是标签
train用于训练
test用于测试
json转txt
在yolov5-master中创建一个.py文件,代码如下
import json # 用于解析JSON文件 import os # 用于与操作系统交互,如文件路径操作 name2id = {'face': 0} # 标签名称,根据情况更改 def convert(img_size, box): # 将边界框的像素坐标转换为归一化坐标 dw = 1. / (img_size[0]) # 输入图像的宽度和高度 dh = 1. / (img_size[1]) x = (box[0] + box[2]) / 2.0 - 1 # 输入边界框的坐标(x1, y1, x2, y2) y = (box[1] + box[3]) / 2.0 - 1 w = box[2] - box[0] h = box[3] - box[1] x = x * dw w = w * dw y = y * dh h = h * dh return (x, y, w, h) # x和y是边界框中心的归一化坐标,w和h是边界框的宽度和高度的归一化值 def decode_json(json_floder_path, json_name): # json_floder_path包含JSON文件的文件夹路径 txt_name = 'F:\\YOLOV5\\yolov5-master\\FaceRecognition\\datasets\\labels\\txt' + json_name[0:-5] + '.txt' # json_name要解析的JSON文件名 # 存放txt的路径,根据情况更改 txt_file = open(txt_name, 'w') json_path = os.path.join(json_floder_path, json_name) data = json.load(open(json_path, 'r', encoding='utf-8')) # 让中文标签可识别 img_w = data['imageWidth'] img_h = data['imageHeight'] for i in data['shapes']: label_name = i['label'] if (i['shape_type'] == 'rectangle'): x1 = int(i['points'][0][0]) y1 = int(i['points'][0][1]) x2 = int(i['points'][1][0]) y2 = int(i['points'][1][1]) bb = (x1, y1, x2, y2) bbox = convert((img_w, img_h), bb) txt_file.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\n') if __name__ == "__main__": json_floder_path = 'F:\\YOLOV5\\yolov5-master\\FaceRecognition\\datasets\\labels\\train' # 存放json的文件夹的路径 json_names = os.listdir(json_floder_path) for json_name in json_names: decode_json(json_floder_path, json_name)
修改配置文件
coco128.yaml->wzry_parameter.yaml
在yolov5/data/coco128.yaml中先复制一份,粘贴到wzry中,改名为wzry_parameter.yaml(意义为wzry的参数配置)
wzry_parameter.yaml文件需要修改的参数是nc与names。nc是标签名个数,names就是标签的名字
yolov5x.yaml->wzry_model.yaml
在yolov5/models先复制一份yolov5x.yaml至wzry,更名为wzry_model.yaml(意为模型),只将如下的nc修改为训练集种类即可
开始训练train
调参
参数解释:
手把手带你调参YOLOv5 (v5.0-v7.0)(推理)_yolov5调参-CSDN博客
"--weights" # 修改处 初始权重 "--cfg" # 修改处 模型训练文件 default=ROOT / 'wzry/wzry_model.yaml' "--data" # 修改处 数据集参数文件 default=ROOT / "wzry/wzry_parameter.yaml" "--hyp" # 超参数设置,是人为设定的参数。包括学习率啥的等等,可不改 "--epochs"# 修改处 训练轮数 default=300 # 决定了训练时间与训练效果。如果选择训练模型是yolov5x.yaml, # 那么大约200轮数值就稳定下来了 "--batch-size"# 修改处 batch size default=32 # 这个要设置地小一些, # 否则会out of memory。这个决定了我们训练的速度 "--imgsz" # 修改处 图片大小 default=384 , # 虽然我们训练集的图片是已经固定下来了, # 但是传入神经网络时可以resize大小,太大了训练时间会很长, # 且有可能报错,这个根据自己情况调小一些 "--resume" # 断续训练 如果说在训练过程中意外地中断, # 那么下一次可以在这里填True,会接着上一次runs/exp继续训练 "--device" # 修改处 选择 填0是电脑默认的CUDA,前提是电脑已经安装了CUDA才能GPU加速训练 "--workers"# 修改处 越大读取数据越快,但是太大了也会报错,因此也要根据自己状况填小
问题一
Dataset not found , missing paths ['D:\\YOLOV5\\yolov5-master\\wzry\\datasets\\images\\train']
脚本无法找到名为 D:\\YOLOV5\\yolov5-master\\wzry\\datasets\\images\\train 的文件夹。
要把新建的文件夹建在'D:\\YOLOV5\\yolov5-master\下面
问题二
Downloading https://ultralytics.com/assets/Arial.Unicode.ttf to C:\Users\shata\AppData\Roaming\Ultralytics\Arial.Unicode.ttf...
urllib.error.HTTPError: HTTP Error 301: The HTTP server returned a redirect error that would lead to an infinite loop.
Arial.ttf下载超时
脚本尝试从 https://ultralytics.com/assets/Arial.Unicode.ttf 下载字体文件,但在这个过程中遇到了一个 HTTP 错误 301,这是一个永久重定向的错误。这通常意味着服务器返回了一个重定向响应,但脚本没有正确处理这个重定向,导致它进入了无限循环。
将Arial.ttf下好,手动放到yolov5根目录下,改名为Arial.Unicode.ttf
链接:Arial.ttf_免费高速下载|百度网盘-分享无限制 (baidu.com)
提取码:oznt
问题三
Downloading https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5x.pt to yolov5x.pt...
无法顺利下载权重文件yolov5x.pt
将yolov5x.pt下好,手动放到yolov5根目录下
链接:yolov5weights.zip_免费高速下载|百度网盘-分享无限制 (baidu.com)
提取码:t845
问题四
OSError: [WinError 1455] 页面文件太小,无法完成操作。
多种方法彻底解决pycharm中: OSError: [WinError 1455] 页面文件太小,无法完成操作 的问题_pycharm里面运行中显示页面文件太小-CSDN博客
一般是因为没分配虚拟内存
问题五
train: No labels found in F:\YOLOV5\yolov5-master\FaceRecognition\datasets\labels\train.cache, can not start training.
这意味着在指定的路径F:\YOLOV5\yolov5-master\FaceRecognition\datasets\labels\train.cache下没有找到任何标签(labels),因此无法开始训练过程。
将转换好的txt文件们放到错误提示的文件夹里面
问题六
Traceback (most recent call last): File "F:\YOLOV5\yolov5-master\utils\dataloaders.py", line 29, in from utils.augmentations import ( ModuleNotFoundError: No module named 'utils'
这个错误消息表明在尝试导入一个名为utils的模块时发生了问题。具体来说,错误ModuleNotFoundError: No module named 'utils'表示Python解释器在当前的工作目录或已安装的模块中找不到名为utils的模块。
No module named ‘utils‘,untils库的安装,不是pip和conda指令,特别可以的教程,还有为什么不能的原因,绝对良心。_no module named 'utils-CSDN博客
下面创建了名为xxx的虚拟环境,指定虚拟环境的 Python 版本为3.6:
conda create -n xxx python=3.6
进入名为xxx的虚拟环境:
source activate xxx # or conda activate xxx
退出当前虚拟环境:
conda deactivate
删除名为xxx的虚拟环境
conda remove -n xxx --all
查看本地已有哪些虚拟环境:
conda info --env
打开终端Anaconda Prompt输入pip install utils
无效,试一下装这个
pip install python-utils
问题七
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 234: illegal multibyte sequence
【Python】解决UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x9A in position xxx: illegal multibyte_unicodedecodeerror: 'gbk' codec can't decode byte -CSDN博客
把 parameter.yaml 里面的注释全删了