(转载)记录ubuntu16.04安装torch0.4+torchvision0.2 (pip方法,python2.7)。其中torchvision中有的包安装不成功,可以从报错日志中找到下载链接,然后通过第三方离线安装包的方式安装。
https://blog.csdn.net/qq_45577581/article/details/108032792
有两种加速训练的方法:半精度和图像先从硬盘放到内存中
Pascal voc介绍
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貌似也是混合到一起吗?)
vocsplit需要生成,数据生成需要运行prepare_voc_few_shot.py去使用种子随机产生,代码里总共20组(包括最初的那一组),论文说是30组。
上图的文件则是使用内置函数自动生成,不需要手动生成。
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采样,
版权声明:本文为CSDN博主「暄染落墨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36136196/article/details/122305253
暂无评论