文章目录
- 1.数据集
- 2.训练代码
- 3.数据预处理
- 3.1 将Annotations和images放入data目录下,并新建文件夹ImageSets,labels
- 3.2 运行根目录下makeTxt.py
- 3.3 运行根目录下voc_label.py
- 4.配置文件
- 4.1 在data目录下新建xxx.data,配置训练的数据:
- 4.2 在data目录下新建xxx.names,配置预测的类别:
- 4.3 网络结构配置,在工程下cfg目录下有很多的yolov3网络结构,我们本次采用的是yolov3-tiny.cfg
- 5.训练
- 6.预测
- 7.注意:
- 8.遇到的问题
- 8.1 cuda 内存溢出:
- 8.2 OSError: [WinError 1455] 页面文件太小,无法完成操作
- 8.3 GPU利用率低:
- 8.4 命令行如何debug:
- 补充:
1.数据集
3.数据预处理
3.1 将Annotations和images放入data目录下,并新建文件夹ImageSets,labels
3.2 运行根目录下makeTxt.py
将数据分成训练集,测试集和验证集,比例可以在代码设置。在ImageSets得到四个文件,其中我们主要关注的是train.txt,test.txt,val.txt,主要存储图片名称。
3.3 运行根目录下voc_label.py
生成labels下的具体内容,和data下的train.txt,test.txt,val.txt,得到完整的图片具体路径
4.配置文件
4.1 在data目录下新建xxx.data,配置训练的数据:
classes=1
train=data/train.txt
valid=data/test.txt
names=data/xxx.names
backup=backup/
eval=coco
4.2 在data目录下新建xxx.names,配置预测的类别:
xxx
4.3 网络结构配置,在工程下cfg目录下有很多的yolov3网络结构,我们本次采用的是yolov3-tiny.cfg
5.训练
python train.py --device 0 --data data/xxx.data --cfg cfg/yolov3-tiny.cfg --epochs 10 --weights weights/yolov3-tiny.weights
训练结束得到最好的模型: best.pt
6.预测
python detect.py --device 0 --names data/xxx.names --source data/samples/ --cfg cfg/yolov3-tiny.cfg --weights weights/best.pt --conf-thres 0.056
7.注意:
运行:tensorboard --logdir=runs --> http://localhost:6006/
device 设置: 0 or 0,1 or cpu
CUDA_VISIBLE_DEVICES=1 # 只有编号为1的GPU对程序是可见的,在代码中gpu[0]指的就是这块GPU;
CUDA_VISIBLE_DEVICES=0,2,3 # 只有编号为0,2,3的GPU对程序是可见的,在代码中gpu[0]、gpu[1]和gpu[2]分别指的是第0、2和3块。
8.遇到的问题
8.1 cuda 内存溢出:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = '1'
8.2 OSError: [WinError 1455] 页面文件太小,无法完成操作
1.修改Dataloader中的num_workers参数为0(似乎仅针对windows系统下)
2.缩小batch_size
3.把训练的代码块放入if __name__=='__main__':中
8.3 GPU利用率低:
1.把batch_size设置大些(如batch_size=512),尽可能利用GPU;
2.train_loader中pin_memory=True,num_workers=8或16,提高计算速度。
8.4 命令行如何debug:
import pdb; pdb.set_trace() (n代表下一步)