如何在一无所有每类别很少样本的情况下进行图片分类任务,你需要三步骤:
- 爬取数据,
- 训练粗粒度分类模型
- 训练精细化分类模型
数据爬取使用BeautifulSoup处理
代码数据处理采用torchvision处理
本模型采用已训练好的pytorch版本的VGG16模型
核心代码:spyder/ImagesSpyder.py
将需要爬去的类别信息填入spyder/name.txt中
运行后输入每个类别需要爬取的图片数量即可
将爬取的图片进行挑选后放入./data/train_old/目录下,记得按照每个类别一个目录的原则进行存放
一般可以为:
./data/train_old/0_person/
./data/train_old/1_flower/
...
将你拥有的珍贵的少量样本数据放入./data/train/目录下,这才是最终的分类目标
主体文件为recognition/models.py
需要修改的地方:
- main函数中的
n_classes,修改为你的类别个数 - 模型地址,
model_base_path - 你的GPU信息
os.environ['CUDA_VISIBLE_DEVICES']='0,1'
正如题目所说,你需要使用不同的训练集训练两遍本模型,第一次使用train_old中数据
第二次使用train中数据
使用时记得切换数据集,默认使用train中数据集训练,你可以自由修改
以下为准确率测试结果,当然不能片面看准确率,还要关注样本情况,最好是针对小样本使用GAN进行生成操作来增加样本量才是正道。。。
模型第一部分:
模型第二部分:
基础模型下载:VGG16
如失效可联系emsunfc@163.com