Pascal VOC数据集介绍,内网环境下在上运行TFA代码(Frustratingly Simple Few-Shot Object Detection)

(转载)记录ubuntu16.04安装torch0.4+torchvision0.2 (pip方法,python2.7)。其中torchvision中有的包安装不成功,可以从报错日志中找到下载链接,然后通过第三方离线安装包的方式安装。
https://blog.csdn.net/qq_45577581/article/details/108032792
有两种加速训练的方法:半精度和图像先从硬盘放到内存中
Pascal voc介绍
Pascal VOC数据集介绍,内网环境下在上运行TFA代码(Frustratingly Simple Few-Shot Object Detection)_第1张图片
VOC07一共有9963张图片,由train/val/test三部分组成。

  • 其中VOCtrainval有5011张,其中train2501张,val2510张,图像共标注24,640个对象,每张图片可能有多个对象被标注,每张图片大约是2.4个对象,
  • VOCtest有4952张,(test的标注信息也提供了)ImageSets-Main有21个文件。有一个test.txt,20个xx_test.txt。

Pascal voc2012
总共11540张图片,其中5717张训练集和5823张验证集,收集了08-11年的图片,不与VOC07有重合图片。

20类分为15个基类和5个新类,采取了三种随机划分(但是为了方便模型的性能对比,实际三种划分的类别分布是固定的),分别为split1,split2,split3。对三种划分之后采用的方式方法完全相同。这里,以split1为例子。split1的
novel1为[“bird”, “bus”, “cow”, “motorbike”, “sofa”]。base1为 [ “aeroplane”, “bicycle”, “boat”, “bottle”, “car”, “cat”, “chair” “diningtable”, “dog”, “horse”, “person”, “pottedplant”, “sheep”, “train”, “tvmonitor”,],
第一步:
Datasets:
TRAIN: (‘voc_2007_trainval_base1’, ‘voc_2012_trainval_base1’)
TEST: (‘voc_2007_test_base1’,)

nohup python3 -m tools.train_net --num-gpus 2  \
 --config-file configs/PascalVOC-detection/split1/faster_rcnn_R_101_FPN_base1.yaml  \
  > base1.log 2>&1 &

第二步:
–src1 的参数是由第一步产生的。使用随机最后的检测头参数(Box Classifier和Box Regressor)

python3 -m tools.ckpt_surgery \
        --src1 checkpoints/voc/faster_rcnn/faster_rcnn_R_101_FPN_base1/model_final.pth \
        --method randinit \
        --save-dir checkpoints/voc/faster_rcnn/faster_rcnn_R_101_FPN_all1

第三步:
Datasets:
TRAIN: (‘voc_2007_trainval_all1_1shot’,)
TEST: (‘voc_2007_test_all1’,)
平衡的基类和新类数据集,20类都有参与微调,只需要指定07,程序会在07和12间自动加载。
指令中的 模型参数,来自上一步得到的,比如model_reset_surgery.pth就是上一步随机初始化得到的。

python3 -m tools.train_net --num-gpus 2 \
        --config-file configs/PascalVOC-detection/split1/faster_rcnn_R_101_FPN_ft_all1_1shot.yaml \
        --opts MODEL.WEIGHTS checkpoints/voc/faster_rcnn/faster_rcnn_R_101_FPN_all1/model_reset_surgery.pth

评估:

python3 -m tools.test_net --num-gpus 2 \
        --config-file configs/PascalVOC-detection/split1/faster_rcnn_R_101_FPN_ft_all1_1shot.yaml \
        --eval-only

在这里插入图片描述

多次运行:

python3 -m tools.run_experiments --num-gpus 2 \
        --shots 1 2 3 5 10 --seeds 0 30 --split 1
python3 -m tools.aggregate_seeds --shots 3 --seeds 30 --split 1 \
        --print --plot

====================================== 分割线 =============================================

1.本地机子搭建环境,使用conda pack命令迁移到服务器
2.数据集放置,VOC07+VOC12放在dataset下,voc07和voc12的train/val集合用于训练,voc07的test集合用于测试,要求的目录结构是(test貌似也是混合到一起吗?)
Pascal VOC数据集介绍,内网环境下在上运行TFA代码(Frustratingly Simple Few-Shot Object Detection)_第2张图片
vocsplit需要生成,数据生成需要运行prepare_voc_few_shot.py去使用种子随机产生,代码里总共20组(包括最初的那一组),论文说是30组。
Pascal VOC数据集介绍,内网环境下在上运行TFA代码(Frustratingly Simple Few-Shot Object Detection)_第3张图片
上图的文件则是使用内置函数自动生成,不需要手动生成。

3.base基类训练(ps:Detectron2会有联网操作,注意使用本地链接替代)
4.用tools/ckpt_surgery.py得到全模型的参数初始化,仅仅修改检测头的最后层,有两种方法,一个是随机初始化,一个是在新类上微调的
5.微调

整个训练流程
PASCAL VOC: Base training --> random initialization --> fine-tuning
COCO and LVIS: Base training --> novel weights initializaiton --> fine-tuning
1.先在基类上训练整个模型
python3 -m tools.train_net --num-gpus 8 \
        --config-file configs/PascalVOC-detection/split1/faster_rcnn_R_101_base1.yaml
2.随机生成检测头的参数(还有另外一种方法,参见官方源码)
python3 -m tools.ckpt_surgery \
        --src1 checkpoints/voc/faster_rcnn/faster_rcnn_R_101_FPN_base1/model_final.pth \
        --method randinit \
        --save-dir checkpoints/voc/faster_rcnn/faster_rcnn_R_101_FPN_all1
3.使用all全部类别(平衡的基类和新类)的1shot去微调
python3 -m tools.train_net --num-gpus 8 \
        --config-file configs/PascalVOC-detection/split1/faster_rcnn_R_101_FPN_ft_all1_1shot.yaml \
        --opts MODEL.WEIGHTS $WEIGHTS_PATH

最后验证:

python3 -m tools.test_net --num-gpus 8 \
        --config-file configs/PascalVOC-detection/split1/faster_rcnn_R_101_FPN_ft_all1_1shot.yaml \
        --eval-only

训练完成方可测试。
运行时ModuleNotFoundError: No module named 'fsdet’的解决方法:
https://blog.csdn.net/qq_33564045/article/details/116598663

FSCE中T-SNE的可视化代码https://github.com/MegviiDetection/FSCE/issues/3
在Universal-Prototype Enhancing for Few-Shot Object Detection中使用的就是两块GPU,在VOC数据集上只使用了10次随机种子
跟随的都是FSRW采样,

你可能感兴趣的:(深度学习,tensorflow,pytorch)