PyTorch中SSD的高质量、快速、模块化参考实现

torch-ssd的Python项目详细描述


pytorch1.0中SSD的高质量、快速、模块化参考实现

此存储库实现SSD (Single Shot MultiBox Detector)。实现受到ssd.pytorchpytorch-ssd和{a4}项目的严重影响。该库旨在为基于SSD的研究提供代码库。在

LossesLearning rateMetrics
losseslrmetric

亮点

  • PyTorch 1.0:支持PyTorch 1.0或更高版本。在
  • ^{str1}$Multi-GPU训练与推理:我们使用DistributedDataParallel,你可以用任意的GPU进行训练或测试,训练模式也会随之改变。在
  • Modular:并且您可以毫不费力地拥有模块。我们抽象出backboneDetectorBoxHeadBoxPredictor等,你可以用你自己的代码替换每个组件,而不需要更改代码基。例如,您可以添加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加载预先训练的权重并将其缓存。在

安装

要求

  1. Python3
  2. Pythorch 1.0或更高版本
  3. 亚克斯
  4. Vizer
  5. GCC>;=4.9
  6. 开放式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文件夹,您可以创建指向datasetsexport 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}$

可可:

BackboneInput Sizebox APModel SizeDownload
VGG1630025.2262MBmodel
VGG16512xx.xxxx.xMB
Mobilenet V2320xx.xxxx.xMB

帕斯卡VOC:

BackboneInput SizemAPModel SizeDownload
VGG1630077.6201MBmodel
VGG16512xx.xxxx.xMB
Mobilenet V232068.825.5MBmodel
EfficientNet-B330073.997.1MBmodel

故障排除

如果您在运行或编译此代码时遇到问题,我们已经编译了TROUBLESHOOTING.md中的常见问题列表。如果您的问题没有出现在那里,请随时打开一个新的问题。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何使用java向dropup html/css添加项目   如何从java中的向量向量打印   Java Maven库项目模板   java使用atmosphere api还是直接使用grizzly?   java JComponent仅部分显示   如何将动态值传递给自定义注释,以从Java数据进行映射。性质   java破解已实现方法的返回类型的最佳方法?   java Netbeans在JFrame Gui布局中覆盖图像   spring java仅向登录用户显示注销按钮   java如何对com进行身份验证。谷歌。云bigquery。带有服务帐户的BigQuery`   java禁止空字符串参数和抛出RuntimeException以阻止方法继续的利弊   java分析项目中的所有JAR以获取版本和许可证信息   Java,数据库为什么要分配一个新对象,而我们可以直接将它放入数据库