发布时间:2023-05-30 13:30
在前面文章中提到,目标检测有两种方式,一种是one_stage(单阶段)如YOLO 一种是two_stage(双阶段)如Faster_Rcnn,Mask_Rcnn。之前介绍了Faster_Rcnn,这篇文章主要介绍YOLOV5 代码复现过程,以及配置文件的修改。
YOLO是目标检测的一种网络框架,检测速度非常快,适合做一些实时检测,YOLO现在经过几代版本的更迭,现在已经到了V5版本,V5提供了5l,5m,5s,5x几种版本,这篇文章使用5s的模型。
大家可以自行到百度网盘进行下载,附链接:
在上篇文章中,介绍了xml转txt文件的代码过程,可以自行查看,附链接:
代码
转换之后,还可以分成训练集跟测试集
images 放置文件
labels 放置txt文件
这里要注意的是,文件夹名称一定为images跟labels,原代码规定如下:
def img2label_paths(img_paths):
# Define label paths as a function of image paths
sa, sb = os.sep + \'images\' + os.sep, os.sep + \'labels\' + os.sep # /images/, /labels/ substrings
return [sb.join(x.rsplit(sa, 1)).rsplit(\'.\', 1)[0] + \'.txt\' for x in img_paths]
修改前:
path: ../datasets/VOC
train: # train images (relative to \'path\') 16551 images
- images/train2012
- images/train2007
- images/val2012
- images/val2007
val: # val images (relative to \'path\') 4952 images
- images/test2007
test: # test images (optional)
- images/test2007
修改后
train: # train images (relative to \'path\') 16551 images
- /mnt/wu/images/train
val: # val images (relative to \'path\') 4952 images
- /mnt/wu/images/val
修改前:
nc: 20 # number of classes
names: [\'aeroplane\', \'bicycle\', \'bird\', \'boat\', \'bottle\', \'bus\', \'car\', \'cat\', \'chair\', \'cow\', \'diningtable\', \'dog\',
\'horse\', \'motorbike\', \'person\', \'pottedplant\', \'sheep\', \'sofa\', \'train\', \'tvmonitor\'] # class names
修改后:
nc: 4 # number of classes
names: [\"Traffic_Light_go\",\"Traffic_Light_stop\",\"Traffic_Light_warning\",\'Traffic_Light_ambiguous\'] # class names
这里使用的是5s的模型,更改yolov5s.yaml文件
这里只需要更改nc可以,代表你训练的数据是几分类。
parser.add_argument(\'--weights\', type=str, default=ROOT / \'yolov5s.pt\', help=\'initial weights path\')
2.更改上面修改过models的yaml文件路径
parser.add_argument(\'--cfg\', type=str, default=\'models/traffic.yaml\', help=\'model.yaml path\')
3.更改上面修改过data的yaml文件路径
parser.add_argument(\'--data\', type=str, default=ROOT / \'data/traffic.yaml\', help=\'dataset.yaml path\')
4.训练批次
parser.add_argument(\'--epochs\', type=int, default=50)
5.批次大小,batch_size 如果在训练过程中出现显存不足可以降低batch_size的大小
parser.add_argument(\'--batch-size\', type=int, default=64, help=\'total batch size for all GPUs, -1 for autobatch\')
像YOLO这种深度框架,最好搭载服务器进行训练,博主使用的是矩池云,附链接矩池云
附邀请码:BQlYmrQhDiex1lZ
租服务器之前,先上传数据,数据很大的话,租服务器之后上传会浪费时间,还费钱。
进入我的网盘,上传数据。
这里选择显卡型号,进行租用。
环境选择yolov5环境,省去配环境的环节。
租用好之后,进入租用界面,显示租用服务器的详细信息。
这里使用ssh连接。
打开链接,进入终端。
输入conda env list
查看环境路径
配置环境路径,代码映射路径
mnt路径下就是自己的网盘路径。
如图所示,配置完成。
打开终端,cd到压缩数据集目录下,unzip 文件名
进行解压,如下图所示:
等待代码全部上传至服务器之后,按照服务器数据集路径,修改data下面的yaml文件中数据集路径,就可以进行训练了。
如下图所示:就是搭载服务器进行训练。
如图所示,开始训练。
训练结束。
这个路径下就是训练产生的权值文件。
best.ph 是最好的权值文件。
last.ph 是最后一次训练的权值文件。
我们可以通过winscp这个软件,将训练的好的文件夹,下载到本地
1.输入主机名,端口号,用户名,密码,连接服务器
如图所示,连接成功
2.找到文件夹,下载到本地。
我们可以根据训练好的权重进行测试。
测试代码detect.py
权重文件路径
parser.add_argument(\'--weights\', nargs=\'+\', type=str, default=ROOT / \'runs/train/exp6/weights/best.pt\', help=\'model path(s)\')
测试图片,视频路径,0表示开启摄像头。
parser.add_argument(\'--source\', type=str, default=\"traffic.mp4\", help=\'file/dir/URL/glob, 0 for webcam\')
设置好之后就可以就行测试。
测试完成,会显示保存路径。
打开文件夹,查看效果。
以上就是YOLOV5 搭载服务器复现的全部过程,大家在复现过程中,遇到的问题,可以反馈到评论区。