代码是在这个仓库SSD. 基础上进行添加、修改的
在SSD基础上,主要改进点:
-
替换backbone为Resnet/MobileNet
-
添加一种更加轻量高效的特征融合方式 feature fusion module
-
添加注意力机制 (Squeeze-and-Excitation Module 和 Convolutional Block Attention Module)
-
添加一种解决正负样本不平衡的损失函数Focal Loss
原始ssd-vgg16网络结构图
改进后的feature fusion + ssd + resnet50网络结构图
【项目一、xxx病虫害检测项目】1、SSD原理和源码分析
【项目一、xxx病虫害检测项目】2、网络结构尝试改进:Resnet50、SE、CBAM、Feature Fusion
【项目一、xxx病虫害检测项目】3、损失函数尝试:Focal loss
pip install -r requirements.txt
可以仿照VOC的数据格式:
datasets
|__ VOC2007
|_ JPEGImages
|_ Annotations
|_ ImageSets
|_ SegmentationClass
|__ VOC2012
|_ JPEGImages
|_ Annotations
|_ ImageSets
|_ SegmentationClass
|__ ...
也可以仿照COCO的数据格式:
datasets
|__ 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
|__ ...
在ssd/data/datasets/voc.py或在ssd/data/datasets/coco.py中进行修改
修改示例(将class_names改为自己的数据集标签,注意0是背景):
在configs/对应的配置文件中修改MODEL.NUM_CLASSES=classes+1
Configs:
Backbone: Resnet50
Input size: 300
SE: False
CBAM: False
FUSION: False
Run:
python train.py --config-file configs/resnet50_ssd300_voc0712.yaml
Configs:
Backbone: Resnet50
Input size: 300
SE: False
CBAM: False
FUSION: True
Run:
python train.py --config-file configs/resnet50_ssd300_voc0712_feature_fusion.yaml
也可以自己修改/自定义config文件,进行训练
还可以按照DEVELOP_GUIDE.md的步骤自定义数据集,重写MyDataset函数进行训练
训练验证测试只需要修改train.py/test.py/demo.py中的配置文件地址和权重文件地址即可