PyTorch中SSD的高质量、快速、模块化参考实现
torch-ssd的Python项目详细描述
pytorch1.0中SSD的高质量、快速、模块化参考实现
此存储库实现SSD (Single Shot MultiBox Detector)。实现受到ssd.pytorch、pytorch-ssd和{a4}项目的严重影响。该库旨在为基于SSD的研究提供代码库。在
Losses | Learning rate | Metrics |
---|---|---|
亮点
- PyTorch 1.0:支持PyTorch 1.0或更高版本。在
- ^{str1}$Multi-GPU训练与推理:我们使用
DistributedDataParallel
,你可以用任意的GPU进行训练或测试,训练模式也会随之改变。在 - Modular:并且您可以毫不费力地拥有模块。我们抽象出
backbone
、Detector
、BoxHead
、BoxPredictor
等,你可以用你自己的代码替换每个组件,而不需要更改代码基。例如,您可以添加EfficientNet作为主干,只需添加efficient_net.py
(已经添加)并注册它,在配置文件中指定它,就完成了!在 - CPU对推理的支持:在推理时间内在CPU上运行。在
- Smooth and experience training procedure:我们保存了model、optimizer、scheduler、training iter的状态,您可以停止培训并从保存点恢复培训,而不必更改培训
CMD
。在 - Batched reference:可以使用每个GPU的每个批处理多个图像来执行推断。在
- 在培训期间进行评估:评估您每
eval_step
建模,以检查性能是否得到改善。在 - Metrics Visualization:在tensorboard中可视化度量详细信息,如COCO数据集或mAP的AP、APl、APm和APs,以及VOC数据集的20个类别的AP。在
- Auto download:从URL加载预先训练的权重并将其缓存。在
安装
要求
- Python3
- Pythorch 1.0或更高版本
- 亚克斯
- Vizer
- GCC>;=4.9
- 开放式CV
逐步安装
git clone https://github.com/lufficc/SSD.git cd SSD #Required packages pip install torch torchvision yacs tqdm opencv-python vizer # Optional packages# If you want visualize loss curve. Default is enabled. Disable by using --use_tensorboard 0 when training. pip install tensorboardX # If you train coco dataset, must install cocoapi.cd ~/github git clone https://github.com/cocodataset/cocoapi.git cd cocoapi/PythonAPI python setup.py build_ext install
构建
不需要构建NMS,因为我们提供了类似于python的NMS,但是比构建版本慢得多。在
^{pr2}$火车
设置数据集
帕斯卡VOC
对于Pascal VOC数据集,将文件夹结构设置为:
VOC_ROOT
|__ VOC2007
|_ JPEGImages
|_ Annotations
|_ ImageSets
|_ SegmentationClass
|__ VOC2012
|_ JPEGImages
|_ Annotations
|_ ImageSets
|_ SegmentationClass
|__ ...
在当前项目中,VOC_ROOT
的默认值是datasets
文件夹,您可以创建指向datasets
或{
可可
对于COCO数据集,将文件夹结构设置为:
COCO_ROOT
|__ annotations
|_ instances_valminusminival2014.json
|_ instances_minival2014.json
|_ instances_train2014.json
|_ instances_val2014.json
|_ ...
|__ train2014
|_ <im-1-name>.jpg
|_ ...
|_ <im-N-name>.jpg
|__ val2014
|_ <im-1-name>.jpg
|_ ...
|_ <im-N-name>.jpg
|__ ...
在当前项目中,COCO_ROOT
的默认值是datasets
文件夹,您可以创建指向datasets
或export COCO_ROOT="/path/to/coco_root"
的符号链接。在
单GPU培训
# for example, train SSD300:
python train.py --config-file configs/vgg_ssd300_voc0712.yaml
多GPU培训
# for example, train SSD300 with 4 GPUs:exportNGPUS=4 python -m torch.distributed.launch --nproc_per_node=$NGPUS train.py --config-file configs/vgg_ssd300_voc0712.yaml SOLVER.WARMUP_FACTOR 0.03333 SOLVER.WARMUP_ITERS 1000
我提供的配置文件假设我们在一个GPU上运行。当改变gpu数目时,超参数(lr,maxˉiter,…)也会根据本文的内容而改变:Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour。在
评估
单个GPU评估
# for example, evaluate SSD300:
python test.py --config-file configs/vgg_ssd300_voc0712.yaml
多GPU评估
# for example, evaluate SSD300 with 4 GPUs:exportNGPUS=4 python -m torch.distributed.launch --nproc_per_node=$NGPUS test.py --config-file configs/vgg_ssd300_voc0712.yaml
演示
预测文件夹中的图像很简单:
python demo.py --config-file configs/vgg_ssd300_voc0712.yaml --images_dir demo
然后,带有方框、分数和标签名称的预测图像将保存到demo/result
文件夹中。在
动物园模型
原纸:
^{tb2}$可可:
Backbone | Input Size | box AP | Model Size | Download |
---|---|---|---|---|
VGG16 | 300 | 25.2 | 262MB | model |
VGG16 | 512 | xx.x | xxx.xMB | |
Mobilenet V2 | 320 | xx.x | xxx.xMB |
帕斯卡VOC:
Backbone | Input Size | mAP | Model Size | Download |
---|---|---|---|---|
VGG16 | 300 | 77.6 | 201MB | model |
VGG16 | 512 | xx.x | xxx.xMB | |
Mobilenet V2 | 320 | 68.8 | 25.5MB | model |
EfficientNet-B3 | 300 | 73.9 | 97.1MB | model |
故障排除
如果您在运行或编译此代码时遇到问题,我们已经编译了TROUBLESHOOTING.md中的常见问题列表。如果您的问题没有出现在那里,请随时打开一个新的问题。在
- 项目
标签: