1.安装python3.7
2.首先到pytroch官网https://pytorch.org/根据你要下载的pytroch版本确定你要装的cuda版本(注意该版本你的显卡得支持)
3.我的电脑显卡是1050Ti支持cuda10.1,从官网下载cuda10.1+cudnn7.6.4并安装(注册个账号就可以免费下载)
cuda下载地址:https://developer.nvidia.com/cuda-10.1-download-archive-base,cmd命令行输入nvcc -V,出现版本信息代表安装成功
cudnn下载地址:https://developer.nvidia.com/cudnn,解压后将里面的三个文件夹复制到cuda安装目录下,进行替换
4.cmd命令行输入
pip install torch==1.5.0+cu101 torchvision==0.6.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
安装前面cuda10.1对应的pytorch1.5
下面开始利用pytroch进行训练
1.数据集的制作,用LabelImg进行标注(可直接生成.txt标签文件,不是.xml可省去后面的转换)
2.github上获取yolov3的pytroch代码(首先得安装git)
git clone https://github.com/ultralytics/yolov3.git
3.在pip install -r requirements.txt之前,首先用cmd命令:
pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
安装pycocotools(针对win10环境)
4.data文件夹下创建images(存放图片数据集),labels(存放标签.txt文件),ImageSets(存放train.txt,test.txt这两个txt文件后面可自动生成)
5.新建get_train_test_data.py
#-*- coding:utf-8 -*-
import os
import random
trainval_percent = 0.2 #可自行进行调节,测试集的比例
train_percent = 1
txtfilepath = 'labels'
txtsavepath = 'ImageSets'
total_txt = os.listdir(txtfilepath)
num = len(total_txt)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
#ftrainval = open('ImageSets\\trainval.txt', 'w')
ftest = open('ImageSets\\test.txt', 'w') #只生成了训练集和测试集
ftrain = open('ImageSets\\train.txt', 'w')
#fval = open('ImageSets\\val.txt', 'w')
for i in list:
name = 'data\\images\\' + total_txt[i][:-4] + '.jpg' + '\n'
if i in trainval:
#ftrainval.write(name)
if i in train:
ftest.write(name)
#else:
#fval.write(name)
else:
ftrain.write(name)
#ftrainval.close()
ftrain.close()
#fval.close()
ftest.close()
生成的文件格式如下:
6.data文件夹下新建landmarks.names,标识你要分类的类别,内容如下:
landmark1
landmark2
landmark3
landmark4
landmark5
landmark6
landmark7
landmark8
landmark9
7.data文件夹下新建landmark.data,指明你训练集和测试集,以及分类类别,内容如下:
classes=9
train=data/ImageSets/train.txt
valid=data/ImageSets/test.txt
names=data/landmarks.names
backup=backup/
最终data文件夹下要添加的文件和文件夹如上图红框内所示。
8.以yolov3-tiny为例,配置与训练过程如下:
主要修改以下两次地方(最前面需要将Testing注释掉改为Training模式,batch和subdivisions可根据GPU情况自行修改):
如果想修改anchor的值,需要根据kmeans聚类跑自己的数据集得出结果,代码地址:https://github.com/lars76/kmeans-anchor-boxes
9.将yolov3-tiny.weights和yolov3-tiny.conv.15放入weights文件夹,这两个我已上传到我的百度云盘
链接:https://pan.baidu.com/s/1dEM9829foGR9CIvKMPqz8w
提取码:z5ca
10.开始训练
python train.py --data data/landmark.data --cfg cfg/yolov3-tiny.cfg --weights weights/yolov3-tiny.weights --epochs 200 --batch-size 16
11.检测(data文件夹下的samples文件夹下放入要检测的图片视频等,得到的结果在output目录下)
python detect.py --data data/landmark.data --cfg cfg/yolov3-tiny.cfg --weights weights/latest.pt
python detect.py --source ...
usage: detect.py [-h] [--cfg CFG] [--data DATA] [--weights WEIGHTS]
[--source SOURCE] [--output OUTPUT] [--img-size IMG_SIZE]
[--conf-thres CONF_THRES] [--nms-thres NMS_THRES]
[--fourcc FOURCC] [--half] [--device DEVICE] [--view-img]
Image: --source file.jpg
Video: --source file.mp4
Directory: --source dir/
Webcam: --source 0
RTSP stream: --source rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa
HTTP stream: --source http://112.50.243.8/PLTV/88888888/224/3221225900/1.m3u8
eg:
python detect.py --cfg cfg/yolov3-tiny.cfg --data data/landmark.data --weights weights/best.pt --source data/samples/test_mode1.mp4 --conf-thres 0.5
控制台输出:
Namespace(cfg='cfg/yolov3-tiny', conf_thres=0.5, data='data/landmark.data', device='', fourcc='mp4v', half=False, img_size=416, nms_thres=0.5, output='output', source='data/samples/test_mode1.mp4', view_img=False, weights='weights/best.pt')
Using CUDA device0 _CudaDeviceProperties(name='GeForce GTX 1050 Ti', total_memory=4096MB)
12.结果可视化
python -c “from utils import utils; utils.plot_results()”