git clone https://github.com/ultralytics/yolov5.git
网址: https://github.com/ultralytics/yolov5
预训练模型用于加快收敛
pip install -r requirements.txt # install
或者在conda环境下新建一个虚拟环境进行相关软件的安装
# 安装pip,若虚拟环境中已经安装pip则跳过
conda install pip
# 使用conda 中的pip安装yolov5训练环境所使用的软件
anaconda3/envs/your_env/bin/pip install -r requirements.txt
参考网址: https://blog.csdn.net/dou3516/article/details/103169690
使用脚本make_list_food_train_test_for_yolov5.py
# -*- coding: utf-8 -*-
"""
Created on Mon Jun 1 15:22:52 2020
@author: keylab
"""
#同时建立train、valid的图片路径
import os
import os.path
import shutil
dataDir='your_path'#原始数据路径
train_image_dir = 'your_path'#训练集图像路径
train_label_dir = 'your_path'#训练集标签路径
val_image_dir = 'your_path'#验证集图片路径
val_label_dir = 'your_path'#验证集标签路径
filenames = os.listdir(dataDir) #1pingguo 2shengnvguo...
for filename in filenames: #1pingguo
img_full_file = dataDir + filename
category_filenames = os.listdir(img_full_file + '/') #724.jpg 724.txt...
count = 11
for category_filename in category_filenames:
category_tem = category_filename[:-4]
if category_filename[-3:]=='txt':
src_txt = img_full_file + '/' + category_tem + '.txt'
src_img = img_full_file + '/' + category_tem + '.jpg'
count=count+1
if count %10 == 0:
dst_txt_val = val_label_dir + category_tem + '.txt'
dst_img_val = val_image_dir + category_tem + '.jpg'
shutil.copyfile(src_txt, dst_txt_val)
shutil.copyfile(src_img, dst_img_val)
else:
dst_txt_train = train_label_dir + category_tem + '.txt'
dst_img_train = train_image_dir + category_tem + '.jpg'
shutil.copyfile(src_txt, dst_txt_train)
shutil.copyfile(src_img, dst_img_train)
具体的会生成以下四个目录:
|————shujuji
|————train
|————images
|————labels
|————val
|————images
|————labels
在data目录下新建一个data.yaml文件,文件名根据自己需要进行自定义;
该文件只需要保留4行内容,分别为:
train: your_path/train/images # 训练集图片路径
val: your_path/val/images # 验证集图片路径
nc: 11 # 类别数量,这里多增加的类别为空手保留
names: ['kong','pingguo','shengnvguo','qiezi','xihongshi','lvyuanjiao','huanggua','beibeinangua','youcai','huluobo','wawacai'] # 类别名称
在这个文件中只需要修改类别的数量nc
,这里改为11
# 使用预训练模型进行训练
python train.py --img 640 --batch 4 --epochs 300 --data data/data100.yaml --cfg models/yolov5s_data100.yaml --weights weigth/yolov5s.pt
# 不使用与训练模型进行训练
python train.py --img 640 --batch 4 --epochs 300 --data data/data100.yaml --cfg models/data100.yaml --weights ""
具体的各参数含义:
其中weights
是权重文件.pt
格式,可以输入空格,代表使用随机权重,或者输入权重文件的路径
cfg
是模型的yaml
文件,一般存放在models
文件夹里
data
是数据集的yaml
文件,一般存放在data
文件夹里
epochs
是训练轮数,默认300
轮
batch-size
是batch
数,默认16
img
是输入图片大小,网络会自动按参数进行resize,默认640X640
参考链接:https://blog.csdn.net/qq_51993578/article/details/114950751
python detect.py --weights xxx.pt --source xxx.avi --view-img
–view-img为显示图片
Run inference on images, videos, directories, streams, etc.
Usage - sources:
$ python path/to/detect.py --weights yolov5s.pt --source 0 # webcam
img.jpg # image
vid.mp4 # video
path/ # directory
path/*.jpg # glob
'https://youtu.be/Zgi9g1ksQHc' # YouTube
'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream
Usage - formats:
$ python path/to/detect.py --weights yolov5s.pt # PyTorch
yolov5s.torchscript # TorchScript
yolov5s.onnx # ONNX Runtime or OpenCV DNN with --dnn
yolov5s.xml # OpenVINO
yolov5s.engine # TensorRT
yolov5s.mlmodel # CoreML (MacOS-only)
yolov5s_saved_model # TensorFlow SavedModel
yolov5s.pb # TensorFlow GraphDef
yolov5s.tflite # TensorFlow Lite
yolov5s_edgetpu.tflite # TensorFlow Edge TPU
yolovs自带了onnx模型转换脚本,即export.py
打开该脚本,在parse_opt()
函数相应的yaml和权重路径处进行相应的修改,也可以在终端自行输入
parser.add_argument('--data', type=str, default=ROOT / 'data/data100.yaml', help='dataset.yaml path')
parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'backup/yolov5s_data100.pt', help='model.pt path(s)')
运行命令:
# 相关路径已经在脚本中进行设置
python3 export.py --img-size 640 --batch-size 1
# 相关路径未在脚本中进行设置
python3 export.py --weights backup/yolov5s_data100.pt data/data100.yaml --img-size 640 --batch-size 1
部署方式简介如下,具体咋搞以后有空再弄了。。。
在电脑上使用pip安装onnx、onnxruntime库对模型进行部署
这一步在之前使用export.py
导出onnx类型的权重时就已经进行了相关文件的安装
这里可以直接使用作者提供的detect.py
文件,也可以自己进行编写
onnxruntime的安装包较大,可以直接将编译好的库文件和相关头文件放在运行设备上
该方式可以在CPU上运行