最近在做小样本学习,之前试着复现了一些模型,配置很麻烦,最后也没跑通几个。突然看到了mmfewshot这个框架,以前用过mmdetection所以还是比较亲切的。果断配置了跑一下试试
官方教程文档: https://github.com/open-mmlab/mmfewshot/blob/main/README_zh-CN.md
在ubuntu16.04上跑
python3.7
cuda 10.1
torch1.7.0
torchvision 0.8.0
torchaudio 0.7.0
mmcv 1.4.0
mmdet 2.20.0
mmcls 0.15.0
在这里卡了挺长时间,这几个东西的版本对应的很不舒服。按照官方教程自动下的版本没跑起来,去网上查说什么的都有,弄了好久发现是这几个自动下载的mm的包版本问题,他们和cuda torch的版本有对应。这几个mm包自己之间也有对应关系。最后这样的版本跑起来了。
(官方教程的版本是:mmcv 1.3.12+ mmdet 2.16.0+ mmcls 0.15.0+ 如果都按自动安装的话我反正没跑成功。)
之后一路按照官方教程文档的配。数据用voc测了一下。成功
网上相关的教程好少啊
使用自己的元学习数据集
我的数据集有10个类,目前公司服务器上有VOC2012官方集,就用VOC2012的20个类做base,我自己的类做novel,合并在一起。因为习惯了用coco格式就把数据集转成coco格式的。
等回来把基类换成coco数据集应该效果会更好。
/configs/detection/找到所需的模型,/meta_rcnn/coco/me…py 里面的numclasses nummetaclasses改为基类的数量。
/configs/detection/nwaykshot/basecoco.py 里面的num_support_way 改为基类数量
/data文件夹里面放数据集
/mmfewshot/detection/datasets/coco.py 改类名
记不太清都别的都做过啥操作了。。
好吧。这一通操作下来最后正确率几乎没有。不知道哪里的问题
重新配置了一遍,弄了个新工程,这次把数据集整理了一遍,用回本来的VOC数据集了,跑成功了
mmfewshot/detection/datasets/voc.py 改CLASS为自己的类
configs/detection/metarcnn/voc/…base-training.py 改numclass num_meta_class
configs/detection/metarcnn/metarcnn_r50c4.py 改num_classes num_meta_classes
/configs/detection/base/nwaykshot/base_voc。py 改数据集 我是把我自己的数据直接加到VOC官方数据里面了。
目前训练结果正常,七八十的ap。
等训练完了下一步query
第一部的训练改类别没效果,第二步训练发现没有novel类,。卡了好久发现,是环境中(不是项目中)的mmfewshot里面的voc.py里面的类的问题,把环境文件中mmfs的类改成我的base和novel类以后成功恢复运行。
在from mmfewshot import voc的时候,项目文件里有个mmfewshot,环境文件里也有个mmfewshot,直接import会从环境文件里面找voc.py。去anaconda/env里面改了mmfewshot里面的voc就正常了。
重新训练一遍
训练结果不是很好和官方给出的baseline差了一半,但是已经能看出来训练出了东西。基类里面有个person,所以对新类里面的一些人身上穿的东西和人体动作的识别就效果比较好,而对一些和base类完全无关的新类效果就比较差。