pytorch-SSD在windows下训练自己的数据集

参考:https://zhuanlan.zhihu.com/p/98059235

最近做实验,参考各位大神的教程来跑自己的数据集,

整个过程做一个记录,为以后的复现做参考。

所用的代码地址:https://github.com/lufficc/SSD

这份代码是比较新的,比起两年前star数量最多的SSD Pytorch实现有更多的灵活度,更详细的文档,作者给出了不同的Backbone,在readme里面给出了特别详细的修改指导,对于想要自己更改网络,写自己的数据类的小伙伴,强烈安利!在此感谢原作者。

因为安装使用SSD和源码解读是很大两块内容,分俩个部分来写,第一部分主要是关于SSD的使用。

 

SSD安装/训练/推理

安装:(ubuntu环境)对于如何安装并跑这份代码作者在readme里面写得简直不能太详尽,只补充几个注意点:

  • 养成好习惯,尽量在conda 里面创个虚拟环境
  • CUDA9/10皆可,但是CUDA8是不行的
  • 小Tip: conda install torchvision==0.3.0,一行命令基本帮忙把torch相关依赖都装上了

git clone https://github.com/lufficc/SSD.git
cd SSD
# Required packages: torch torchvision yacs tqdm opencv-python vizer
pip install -r requirements.txt
# Done! That's ALL! No BUILD! No bothering SETUP!

插播一下数据准备

在根目录下新建一个datasets文件夹。源码支持coco/voc格式,当然你也可以自定义一个数据接口,这个作者也有指导!自己写数据类请参考ssd/data/datasets/目录下的coco.py和voc.py

对于VOC

--datasets
|   --voc2007
|        --Annotations
|             --1.xml,2.xml,....,......
|        --JPEGImages
|             --1.jpg,2.jpg,....,......
|        --ImageSets
|             --Main
|                 --test.txt #用于测试的。形如1,2,3,4...也就是index 加上.xml或者.jpg就是标签和图像的名字
|                 --train.txt #用于训练的
|                 --trainval.txt #训练加验证
|                 --val.txt #验证

仿照VOCDataset(torch.utils.data.Dataset)写一个针对自己特定数据格式的类就可!

对于想自己定义数据类以及更改网络结构的,给出原作者的指导

https://github.com/lufficc/SSD/blob/master/DEVELOP_GUIDE.md

 

含有三个目标的voc格式的.xml文件标长这样:

注意:这边有个坑,原作者是在训练时同事用了VOC2007和VOC2012的格式。所以在自己的数据集中也要有这两种格式的,其实就是吧VOC2007的复制一下,然后把名字改成VOC2012就行。或者如下修改只用voc2007就行。

当然也可以只用VOC2007,只需要在SSD-master/configs/vgg_ssd300_voc0712.yaml中设置就行

训练阶段

建立好自己数据后,需要把它的路径写到 ssd/config/path_catlog.py中,同时configs/vgg_ssd300voc0712.yaml文件中指定所用数据。为了方便,上面我直接把自己的数据就命名为VOC2007,这样其实不需要改 pathcatlog.py.

 注意要点:还有一个特别需要注意的点就是类别的更改,在SSD-master/ssd/config/defaults.py和,configs/vgg_ssd300voc0712.yaml中的NUM_CLASSES是自己的数据的类别,记得加上背景,且一定要和数据集中的一样,而且不能有大写,空格等符号,只能是小写字母。同时,一定要在SSD-master/ssd/data/datasets/voc.py或者SSD-master/ssd/data/datasets/coco.py中(如果用的voc/coco格式)将类别标签都改为自己的.

SSD-master/ssd/config/defaults.py

 configs/vgg_ssd300voc0712.yaml

SSD-master/ssd/data/datasets/voc.py

 

注意:

运行train.py的训练的时候,由于在ssd/config/default.py中,默认是vgg网络作为backbone,但是如果你选择了使用预训练模型,那么往往会遇到一个问题,预训练模型需要到程序中指定的那个url去下载,但往往会失败。所以,这个时候不如到网上找一个vgg16的预训练模型vgg16_reducedfc.pth,根据错误提示,把模型放到~/.torch/models/下面,要在命令行下面操作,.torch是隐藏文件,图形界面找不到的

根据训练命令

python train.py --config-file configs/vgg_ssd300_voc0712.yaml

根据提示,由于在线下载vgg16的预训练模型vgg16_reducedfc.pth太慢,所以,在其他地方下载后放置提示文件夹。

再次执行训练命令

python train.py --config-file configs/vgg_ssd300_voc0712.yaml

 

训练成功。然后会再output文件夹下生成训练权重。注意:如果想要重新训练,要把生成的训练权重文件清除。

 

测试

python demo.py --config-file configs/vgg_ssd300_voc0712.yaml  --images_dir demo --score_threshold 0.7 --ckpt ./outputs1
1/vgg_ssd300_voc0712/model_final.pth

测试结果

会再outputs11文件夹里面生成 result文件夹,里面是带有标签的测试结果

 

 

  • 3
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值