前情提要

此系列博客记录我从创建,训练,数据集,验证模型的检测精度等的全部踩坑过程,遇到的问题以及解决方法,留下点东西,作为自己这段时间学习的总结,如果能对他人有些帮助就更好了。

环境

系统:Windows10
GPU:GTX1660Ti
CUDA:11.0
pytorch:1.6.0

训练过程中可以使用GPU加速,要安装对应自己显卡版本的CUDA,官网可查。不用的话只使用自己的CPU,速度会比较慢。
如果你的显卡不是N卡,或者N卡算力比较低,可以利用谷歌的colab完成训练,注意这个是基于linux的,本文写的都是基于windows的,部分细节可能不同

pytorch环境安装即SSD-pytorch代码下载

点击链接登陆pytorch官网根据电脑的操作系统配置选择安装(pytorch需要python3以上的版本):
http://pytorch.org/ SSD-Pytorch代码链接:
https://github.com/amdegroot/ssd.pytorch
SSD中使用到了VGG 特征提取网络,训练的时候需要加载:
https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth

准备自己的数据集

ssd可以用VOC和COCO两种数据集,这里以VOC为例子。

1.背景介绍

VOC数据集的目录结构。其下主要包含以下几个目录:Annotations、ImageSets、JPEGImages。
Annotations:存放xml为结尾的文件,即在一张图片中用一定的坐标范围指出某个物体,并存放标签信息,后面会细说如何创建。
JPEGImages:存放训练和验证的图片
ImageSets:目录下有个Main文件夹,后面细说。

2.步骤

1.首先将你的图片放到JPEGImages文件夹下,重命名进行按顺序编号,比如001,002,003这样。
2.在Annotations文件夹生成图片的中物体坐标的xml文件,xml文件的名称与图片名称相同。(一定要每一张都仔细相对应,我曾弄到最后发现少一个,只能回去一个个重新校对)。
可以使用LabelImage软件来生成,操作简单界面清晰。
下载地址:
https://github.com/tzutalin/labelImg#macos

!!!!

但是我安装完之后,labelimg执行.py文件后无图像化界面出现,软件打不开,我又重新浏览了一下源码下载网站,发现了一个预编译好的二进制文件。

pytorch 是否能使用gpu pytorch对gpu有什么要求_深度学习

解压完之后直接运行可执行文件。

pytorch 是否能使用gpu pytorch对gpu有什么要求_深度学习_02

可以用,舒服了。

pytorch 是否能使用gpu pytorch对gpu有什么要求_机器学习_03

之后就是对一堆图片的漫长的标注过程,完成后即可进行下一步。

3.下一步生成Main文件下的四个文件(test.txt , train.txt, val.txt ,trainval.txt),这里可以在写相关的脚本来生成,我放一个。

import os
import random

trainval_percent = 0.8
train_percent = 0.7
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath)

num=len(total_xml)
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/Main/trainval.txt', 'w')
ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('ImageSets/Main/val.txt', 'w')

for i in list:
name=total_xml[i][:-4]+'\n'
if i in trainval:
ftrainval.write(name)
if i in train:
ftrain.write(name)
else:
fval.write(name)
else:
ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest .close()

这个文件放在Imageset同级目录下,或者把上面的路径换成绝对路径,不然找不到路径。

上述步骤之后,就创建了一个可以使用的VOC数据集了,下篇文章将介绍实现训练的过程。