一、配置环境
1、代码下载链接:GitHub - wz940216/few-shot-object-detection: Implementations of few-shot object detection benchmarks
2、创建环境
conda create -n tfa python=3.7 #创建名为tfa的环境
conda activate tfa #激活环境
3、pytorch安装
这里我安装的是torch 1.9.0 + cu111
pytorch网址链接:PyTorch
pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html
4、detectron2安装
我安装的是对应torch1.9.0 + cu111的 detectron2 v0.5 版本(注意:detetron2需根据torch版本选择对应版本进行安装)
detetron2网址:Releases · facebookresearch/detectron2 (github.com)
python -m pip install detectron2==0.5 -f \
https://dl.fbaipublicfiles.com/detectron2/wheels/cu111/torch1.9/index.html
5、其他库安装
cd 到下载的代码文件下,安装requirements.txt中所写库
python3 -m pip install -r requirements.txt
二、准备官方VOC数据集
1、下载官方VOC数据集,这里下载voc2007与voc2012,以下为下载链接
https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
将下载好的数据集整理成以下结构,其中datasets/VOC2007/Annotations保存的为标签文件,datasets/VOC2007/ImageSets/Main保存的是训练,测试的txt文件,datasets/VOC2007/JPEGImages保存的是所有的图像(包括所有基类和新类训练、验证以及测试的图像),VOC2012同VOC2017结构一致。
2、准备小样本数据集
修改datasets/prepare_voc_few_shot.py文件中参数
修改后运行
python datasets/prepare_voc_few_shot.py --seeds 1 30
运行成功后在datasets下生成vocsplit文件,其中共29个seed,每个seed中保存每个类别的小样本训练txt文件
3、下载官方权重
将下载好的文件储存在base_model文件夹下
三、训练
(1)基础训练(这里以split1为例)
修改configs/Base-Rcnn-FPN.yaml中学习率与batch_size
修改fsdet/meta_pascal_voc.py文件中数据集路径
修改configs/PascalVOC-detection/split/faster_rcnn_R_101_FPN_base1.yaml文件
weights修改为之前下载好的pkl文件路径,
这里我为了方便展示训练流程就修改了max_iter为50,自己训练的话不用修改
修改好后我们开始第一阶段训练,在终端运行以下代码 ,我采用单卡训练,故num-gpus为1
python3 -m tools.train_net --num-gpus 1 \
--config-file configs/PascalVOC-detection/split1/faster_rcnn_R_101_FPN_base1.yaml
训练结果(为方便展示只训练了50iter,结果不会很好)
(2)初始化检测头
在进行完基础训练后,会生成checkpoint文件夹,在其中找到model_final.pth文件
在tools/ckpt_surgery.py中修改src1,save-dir,method参数,其中src1为上一步所提到的checkpoint文件夹下model_final.pth文件,save-dir为初始化检测头后权重文件保存路径,method为初始化方法,这里选择随机初始化
运行tools/ckpt_surgery.py,在save-dir中路径产生初始化后权重文件
(3)迁移训练
这里我选择10shot训练方式,修改configs/pascalvoc/split1/faster_rcnn_ R_101_FPN_ft_all1_10shot.yaml文件中weights为上一步中转换后的权重文件
base-lr为学习率参数,可自行修改,ims_per_batch为batchsize参数,可自行修改,max-iters为迭代次数,可自行修改。
修改后运行
python3 -m tools.train_net --num-gpus 1 \
--config-file configs/pascalvoc/split1/faster_rcnn_ R_101_FPN_ft_all1_10shot.yaml
训练完成