主要参考
(0)注意voc格式xml文件的转换见下文
yolov5数据集制作之xml转txt,数据集划分程序,一键转换,搞不定联系我,我帮你搞_大鹏要高飞的博客-CSDN博客
(1)
YoloV5实战:手把手教物体检测——YoloV5_AI浩的博客-CSDN博客_yolov5实战
(2)
YOLOv5训练自己的数据集(超详细完整版)_深度学习菜鸟的博客-CSDN博客_yolov5训练自己数据集
(3)
GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite
一、安装和测试
(1)安装
git clone https://github.com/ultralytics/yolov5
pip install -r requirements.txt
(2)可以先迅雷下载,放在weights目录下
https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
(3)测试
python3 detect.py --source ./data/images/zidane.jpg --weights ./weights/yolov5s.pt
(4)如果出现错误
mportError cannot import name _imaging from PIL
pip install --upgrade pillow
二、训练自己的数据
(1)数据集的制作
主要参考了YoloV5实战:手把手教物体检测——YoloV5_AI浩的博客-CSDN博客_yolov5实战
注意,voc和yolov5在平及的目录下,
VOC yolov5
(2)修改models/yolov5s.yaml的nc为2
# parameters
nc: 2 # number of classes
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
(3)修改data/voc.yaml的内容如下:
# PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC/
# Train command: python train.py --data voc.yaml
# Default dataset location is next to YOLOv5:
# /parent_folder
# /VOC
# /yolov5
# download command/URL (optional)
#download: bash data/scripts/get_voc.sh
# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ../VOC/images/train/ # 16551 images
val: ../VOC/images/val/ # 4952 images
# number of classes
nc: 2
# class names
#类别的名称,和转换数据集时的list对应
names: ["aircraft", "oiltank"]
(4)训练在train.py进行以下几个修改,主要参考了YOLOv5训练自己的数据集(超详细完整版)_深度学习菜鸟的博客-CSDN博客_yolov5训练自己数据集
在train.py进行以下几个修改:
实际关键修改如下
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='weights/yolov5s.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='model.yaml path')
parser.add_argument('--data', type=str, default='data/voc.yaml', help='dataset.yaml path')
parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')
parser.add_argument('--epochs', type=int, default=300)
parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')
parser.add_argument('--rect', action='store_true', help='rectangular training')
parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
parser.add_argument('--notest', action='store_true', help='only test final epoch')
参考如下
以上参数解释如下:
epochs:指的就是训练过程中整个数据集将被迭代多少次,显卡不行你就调小点。
batch-size:一次看完多少张图片才进行权重更新,梯度下降的mini-batch,显卡不行你就调小点。
cfg:存储模型结构的配置文件
data:存储训练、测试数据的文件
img-size:输入图片宽高,显卡不行你就调小点。
rect:进行矩形训练
resume:恢复最近保存的模型开始训练
nosave:仅保存最终checkpoint
notest:仅测试最后的epoch
evolve:进化超参数
bucket:gsutil bucket
cache-images:缓存图像以加快训练速度
weights:权重文件路径
name: 重命名results.txt to results_name.txt
device:cuda device, i.e. 0 or 0,1,2,3 or cpu
adam:使用adam优化
multi-scale:多尺度训练,img-size +/- 50%
single-cls:单类别的训练集
(5)训练的指令
python3 train.py --img 640 --batch 16 --epoch 300 --data data/voc.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --device 0,1 # 0号GPU和1号GPU
或者
python3 train.py --img 640 --batch 16 --epoch 300 --data data/voc.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --device 0 # 0号GPU
-----上次可能有问题如下----
python3 train.py --img 640 --batch 16 --epoch 300 --data data/voc.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --device '0' # 0号GPU
三/训练过程可视化
利用tensorboard可视化训练过程,训练开始会在yolov5目录生成一个runs文件夹,利用tensorboard打开即可查看训练日志,命令如下
tensorboard --logdir=runs
四.模型测试
XXXX
五.模型推理
XXXX
六/单幅图测试
python3 detect.py --source ./testimg/aircraft_23.jpg --weight runs/train/exp3/weights/best.pt