# yolov5训练自己的数据集
## 1.下载`yolo v5`源码
在GitHub中搜索`yolov5`,找到[ultralytics](https://github.com/ultralytics)/**[yolov5](https://github.com/ultralytics/yolov5)**项目,下载`.zip`文件,这里我下载的是`5.0`版本,或者使用git bash 输入https://github.com/ultralytics/yolov5.git下载代码。若下载的是`yolov5-5.0.zip`文件,下载完成后解压至代码编辑的地方。
## 2.使用Anaconda创建虚拟环境
若无anaconda环境,也可直接使用python环境
在Anaconda Prompt中输入`conda create --name yolov5 python=3.8`
输入y回车,然后输入命令`conda activate yolov5`进入虚拟环境。
yoloV5[要求](https://github.com/ultralytics/yolov5/blob/master/requirements.txt)[**在Python>= 3.7.0**](https://www.python.org/)环境中,包括[**PyTorch> = 1.7。**](https://pytorch.org/get-started/locally/)
然后我们进入解压后的YOLO V5项目文件夹,使用`pip install -r requirements.txt`命令下载项目所需依赖包(无anaconda可直接使用本命令安装依赖库,默认你安装好了python)
安装完成后,我们进入[PyTorch](https://pytorch.org/)官网,这里我选择以下配置:
`PyTorch Build`选择`Stable (1.10.2)`
`Your OS`选择`Windows` 系统
`Package`选择`Pip` 注意这里最好选用pip,conda会一直出现报错
`Language`选择`Python`
`Compute Platform`选择`CUDA 10.2`有显卡建议选这个,没有显卡选择`CPU`
`Run this Command:`显示
```python
pip3 install torch==1.10.2+cu102 torchvision==0.11.3+cu102 torchaudio===0.10.2+cu102 -f https://download.pytorch.org/whl/cu102/torch_stable.html
```
将上面命令复制到控制台,安装pytorch,显示Successful即可
## 3.建立VOC格式标准文件夹
在`yolov5-5.0\`下创建`make_voc_dir.py`
```python
import os
os.makedirs('VOCdevkit/VOC2007/Annotations')
os.makedirs('VOCdevkit/VOC2007/JPEGImages')
```
运行`make_voc_dir.py`
在`\yolov5-5.0\VOCdevkit\VOC2007\Annotations`中存放`xml`格式文件
在`\yolov5-5.0\VOCdevkit\VOC2007\JPEGImages`中存放`JPG`格式文件
## 4.将xml格式转换成yolo格式
在`yolov5-5.0\`下创建`voc_to_yolo.py`
```python
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
import random
from shutil import copyfile
classes = ["crack","helmet"] # 这个列表里存放的是你的类别
TRAIN_RATIO = 90 # 训练的比例
# 遍历文件夹
def clear_hidden_files(path):
dir_list = os.listdir(path)
for i in dir_list:
abspath = os.path.join(os.path.abspath(path), i)
if os.path.isfile(abspath):
if i.startswith("._"):
os.remove(abspath)
else:
clear_hidden_files(abspath)
# 对宽高进行归一化操作 size:原图的宽和高
def convert(size, box):
dw = 1. / size[0]
dh = 1. / size[1]
x = (box[0] + box[1]) / 2.0
y = (box[2] + box[3]) / 2.0
w = box[1] - box[0]
h = box[3] - box[2]
x = x * dw
w = w * dw
y = y * dh
h = h * dh
return (x, y, w, h)
# 解析XML
def convert_annotation(image_id):
in_file = open('VOCdevkit/VOC2007/Annotations/%s.xml' % image_id,'rb')
out_file = open('VOCdevkit/VOC2007/YOLOLabels/%s.txt' % image_id, 'w')
tree = ET.parse(in_file)
root = tree.getroot()
size = root.find('size')
w = int(size.find('width').text)
h = int(size.find('height').text)
for obj in root.iter('object'):
difficult = obj.find('difficult').text
cls = obj.find('name').text
if cls not in classes or int(difficult) == 1:
continue
cls_id = classes.index(cls)
xmlbox = obj.find('bndbox')
b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
float(xmlbox.find('ymax').text))
bb = convert((w, h), b)
out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
in_file.close()
out_file.close()
wd = os.getcwd()
wd = os.getcwd()
data_base_dir = os.path.join(wd, "VOCdevkit/")
if not os.path.isdir(data_base_dir):
os.mkdir(data_base_dir)
work_sapce_dir = os.path.join(data_base_dir, "VOC2007/")
if not os.path.isdir(work_sapce_dir):
os.mkdir(work_sapce_dir)
annotation_dir = os.path.join(work_sapce_dir, "Annotations/")
if not os.path.isdir(annotation_dir):
os.mkdir(annotation_dir)
clear_hidden_files(annotation_dir)
image_dir = os.path.join(work_sapce_dir, "JPEGImages/")
if not os.path.isdir(image_dir):
os.mkdir(image_dir)
clear_hidden_files(image_dir)
yolo_labels_dir = os.path.join(work_sapce_dir, "YOLOLabels/")
if not os.path.isdir(yolo_labels_dir):
os.mkdir(yolo_labels_dir)
clear_hidden_files(yolo_labels_dir)
yolov5_images_dir = os.path.join(data_base_dir, "images/")
if not os.path.isdir(yolov5_images_dir):
os.mkdir(yolov5_images_dir)
clear_hidden_files(yolov5_images_dir)
yolov5_labels_dir = os.path.join(data_base_dir, "labels/")
if not os.path.isdir(yolov5_labels_dir):
os.mkdir(yolov5_labels_dir)
clear_hidden_files(yolov5_labels_dir)
yolov5_images_train_dir = os.path.join(yolov5_images_dir, "train/")
if not os.path.isdir(yolov5_images_train_dir):
os.mkdir(yolov5_images_train_dir)
clear_hidden_files(yolov5_images_train_dir)
yolov5_images_test_dir = os.path.join(yolov5_images_dir, "val/")
if not os.path.isdir(yolov5_images_test_dir):
os.mkdir(yolov5_images_test_dir)
clear_hidden_files(yolov5_images_test_dir)
yolov5_labels_train_dir = os.path.join(yolov5_labels_dir, "train/")
if not os.path.isdir(yolov5_labels_train_dir):
os.mkdir(yolov5_labels_train_dir)
clear_hidden_files(yolov5_labels_train_dir)
yolov5_labels_test_dir = os.path.join(yolov5_labels_dir, "val/")
if not os.path.isdir(yolov5_labels_test_dir):
os.mkdir(yolov5_labels_test_dir)
clear_hidden_files(yolov5_labels_test_dir)
train_file = open(os.path.join(wd, "yolov5_train.txt"), 'w')
test_file = open(os.path.join(wd, "yolov5_val.txt"), 'w')
train_file.close()
test_file.close()
train_file = open(os.path.join(wd, "yolov5_train.txt"), 'a')
test_file = open(os.path.join(wd, "yolov5_val.txt"), 'a')
list_imgs = os.listdir(image_dir) # list image_one files
prob = random.randint(1, 100)
print("Probability: %d" % prob)
for i in range(0, len(list_imgs)):
path = os.path.join(image_dir, list_imgs[i])
if os.path.isfile(path):
image_path = image_dir + list_imgs[i]
voc_path = list_imgs[i]
(nameWithoutExtention, extention) = os.path.splitext(os.path.basename(image_path))
(voc_nameWithoutExtention, voc_extention) = os.path.splitext(os.path.basename(voc_path))
annotation_name = nameWithoutExtention + '.xml'
annotation_path = os.path.join(annotation_dir, annotation_name)
label_name = nameWithoutExtention + '.txt'
label_path = os.path.join(yolo_labels_dir, label_name)
prob = random.randint(1, 100)
print("Probability: %d" % prob)
if (prob < TRAIN_RATIO): # train dataset
if os.path.exists(annotation_path):
train_file.write(image_path + '\n')
convert_annotation(nameWithoutExtention) # convert label
copyfile(image_path, yolov5_images_train_dir + voc_path)
copyfile(label_path, yolov5_labels_train_dir + label_name)
else: # test dataset
if os.path.exists(annotation_path):
test_file.write(image_path + '\n')
convert_annotation(nameWithoutExtention) # convert label
copyfile(image_path, yolov5_images_test_dir + voc_path)
copyfile(label_path, yolov5_labels_test_dir + label_name)
train_file.close()
test_file.close()
```
执行一下`voc_to_yolo.py`
```shell
(yoloV5) E:\PythonCode\yoloV5_toukui\yolov5-5.0>python voc_to_yolo.py
Probability: 6
Probability: 79
Probability: 26
Probability: 19
Probability: 64
Probability: 5
Probability: 80
Probability: 40
Probability: 46
Probability: 23
Probability: 87
Probability: 19
Probabilit
没有合适的资源?快使用搜索试试~ 我知道了~
基于YOLOV5的头盔佩戴检测识别系统源码+训练好的数据+权重文件
共78个文件
jpg:26个
yaml:24个
py:13个
4星 · 超过85%的资源 需积分: 0 104 下载量 79 浏览量
2023-04-14
10:34:11
上传
评论 5
收藏 23.68MB ZIP 举报
温馨提示
1、使用Anaconda创建虚拟环境,2、建立VOC格式标准文件夹,3、将xml格式转换成yolo格式,4、修改yaml配置文件,5、权重文件下载,6、参数修改,再点开train.py,找到if __name__ == '__main__':开始修改参数7、使用训练好的权重文件进行识别,8、使用USB摄像头进行识别
资源推荐
资源详情
资源评论
收起资源包目录
yolov5-5.0-main.zip (78个子文件)
yolov5-5.0-main
make_voc_dir.py 100B
yolov5_train.txt 17KB
voc_to_yolo.py 5KB
yolov5_val.txt 2KB
weights
download_weights.sh 277B
data
coco128.yaml 2KB
argoverse_hd.yaml 849B
hyp.finetune.yaml 846B
coco.yaml 2KB
images
IMG_1025.jpg 24KB
IMG_1015.jpg 18KB
IMG_1007.jpg 14KB
IMG_1099.jpg 19KB
IMG_1018.jpg 13KB
IMG_1009.jpg 16KB
IMG_1023.jpg 16KB
IMG_1004.jpg 18KB
IMG_1010.jpg 19KB
IMG_1021.jpg 15KB
IMG_1086.jpg 6KB
IMG_1024.jpg 12KB
IMG_1003.jpg 12KB
IMG_1012.jpg 19KB
T2_Trim.mp4 22.94MB
IMG_1020.jpg 13KB
IMG_1100.jpg 14KB
IMG_1001.jpg 20KB
IMG_1087.jpg 20KB
IMG_1002.jpg 14KB
IMG_1011.jpg 18KB
IMG_1000.jpg 16KB
IMG_1014.jpg 17KB
IMG_1084.jpg 16KB
IMG_1008.jpg 18KB
IMG_1095.jpg 10KB
IMG_1101.jpg 20KB
voc.yaml 841B
hyp.scratch.yaml 2KB
scripts
get_argoverse_hd.sh 2KB
get_voc.sh 4KB
get_coco.sh 963B
LICENSE 34KB
hubconf.py 5KB
utils
aws
userdata.sh 1KB
mime.sh 780B
resume.py 1KB
autoanchor.py 7KB
activations.py 2KB
VOCdevkit
VOC2007
说明 49B
Dockerfile 2KB
requirements.txt 599B
models
hub
yolov5x6.yaml 2KB
anchors.yaml 3KB
yolov5-p2.yaml 2KB
yolov5-panet.yaml 1KB
yolov5s6.yaml 2KB
yolov3.yaml 1KB
yolov5-p6.yaml 2KB
yolov5-p7.yaml 2KB
yolov5l6.yaml 2KB
yolov5m6.yaml 2KB
yolov3-spp.yaml 1KB
yolov3-tiny.yaml 1KB
yolov5-fpn.yaml 1KB
yolov5s-transformer.yaml 1KB
export.py 4KB
yolov5m.yaml 1KB
yolov5s.yaml 1KB
yolov5l.yaml 1KB
common.py 17KB
experimental.py 5KB
yolov5x.yaml 1KB
yolo.py 12KB
detect.py 8KB
train.py 33KB
test.py 17KB
README.md 30KB
tutorial.ipynb 385KB
共 78 条
- 1
资源评论
- 虚怀042023-04-17请问未制作数据集直接运行detect.py时发现如下报错怎么解决? ModuleNotFoundError: No module named 'utils.datasets'
- 小雨同志2024-01-18好像不怎么好使,缺少训练好的权重文件
- Meaning20162023-04-20#全网独家 #内容详尽 还不错,感谢分享
云哲-吉吉2021
- 粉丝: 3214
- 资源: 1130
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 沈丘盛世龙门图纸符合规范化
- HM3400-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 基于python+streamlit联邦学习进行高校学生成绩预测研究python源码+项目说明+模型+数据.zip
- HM3400D-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- HM3400B-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- spring-boot示例
- 搜集火星资源.py
- JAR应用启动停止脚本化解决方案.zip
- 配合eclipse svn插件subclipse-4.3.4版本的javahl
- Bash脚本教程:如何优雅地停止JAR服务.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功