/pytorch-ssd-for-ZQCNN

用pytorch训练ssd,相比原版pytorch-ssd改动了不少

Primary LanguagePython

pytorch-ssd-for-ZQCNN

Pytorch训练SSD

参考的代码是https://github.com/qfgaohao/pytorch-ssd 但是已经改动非常大了,两者不兼容

运行环境

pytorch1.6.0

其他缺啥装啥

数据集

VOC 格式

比如用VOC格式的wider

链接:https://pan.baidu.com/s/1vKPyPBVoCEDiKhUd_eakZg 提取码:hw6m

数据准备

进入VOC格式数据集路径(此时应该能看到如下目录),以下称此目录为VOC_ROOT

annotations
ImageSets
JPEGImages

运行如下代码

python /path/to/pytorch-ssd-zq/core/datasets/generate_vocdata.py label_file

其中label_file是一个文件,内容是类别名(不包含__BACKGROUND__),以','隔开

我写的label_file是这样的, 比如有3类,dog, cat, person, 我写成3行

dog,
cat,
person

训练时把label_file放在VOC数据里面,和JPEGImages同目录

训练

进入本项目路径

python example/train_ssd9.py \
            --config_file configs/model-face.cfg \
            --datasets VOC_ROOT \
            --validation_dataset VOC_ROOT \
            --batch_size 128 \
            --num_epochs 200 \
            --lr 0.01 \
            --gpus_id 0

如果用fp16 需要加上参数

--fp16 True

如果用带fpn的模型,用下面的命令

python example_fpn/train_ssd_fpn9.py \
            --config_file configs_fpn/ssd_fpn_zq14.cfg \
            --datasets VOC_ROOT \
            --validation_dataset VOC_ROOT \
            --batch_size 128 \
            --num_epochs 200 \
            --lr 0.01 \
            --gpus_id 0

多个VOC数据一起训练

--datasets后面接多个VOC数据集,用逗号隔开

python example/train_ssd9.py \
            --config_file configs/model-face.cfg \
            --datasets VOC_ROOT1,VOC_ROOT2,VOC_ROOT3,VOC_ROOT4 \
            --validation_dataset VOC_ROOT1 \
            --batch_size 128 \
            --num_epochs 200 \
            --lr 0.01 \
            --gpus_id 0

测试模型精度

进入本项目路径

python example/eval_ssd.py \
            --config_file configs/zq3.cfg \
            --trained_model YOUR_MODEL \
            --dataset VOC_ROOT \
            --use_cuda True \
            --gpus_id 0 \
            --label_file YOUR_LABEL_FILE

测试单张图

进入本项目路径

python example/run_ssd_example.py config_file model_file label_file image_file

导出onnx模型

进入本项目路径

python example/pth2onnx.py config_file in_file out_file num_valid_classes withsoftmax

onnx模型简化

https://github.com/daquexian/onnx-simplifier

pip install onnx-simplifier

python -m onnxsim in_file out_file

推理

ZQCNN

ZQCNN里有能加载的代码,转模型用https://github.com/zuoqing1988/ZQCNN/tree/master/onnx_to_ZQCNN 里的脚本

示例代码在https://github.com/zuoqing1988/ZQCNN/tree/master/SamplesZQCNN/SampleSSDDetectorPytorch