Learning Semantically Enhanced Feature for Fine-Grained Image Classification论文复现
Title: Developing Semantically Enhanced Representations for Fine-Grained Image Classification
Writers: Wei Luo (Senior Member, IEEE), Hengmin Zhang, Jun Li, and Xiu-Shen Wei
Conference: IEEE 2020
作者单位:South China Agricultural University, Guangzhou, China; East China University of Science and Technology, Shanghai, China; Nanjing University of Science and Technology, Nanjing, China
论文链接:
https://ieeexplore.ieee.org/document/9180030
代码链接:
https://github.com/cswluo/SEF
- 加载数据集
进入此目录:

然后把CUB200官方给的四个txt文件放到此目录下,直接加载:

运行python文件:
这里以鸟类数据集为例:
python cubbirds-imdb.py
代码解释
在当前目录下会生成imdb.pkl文件,在后续步骤中会完成数据集的读取过程。

运行之前,在main.py文件目录下必须创建results、models和ckpt三个文件夹。如果不这样做,在运行过程中可能会遇到找不到这些文件的错误。这是处理此类问题最直接的方法。

运行main.py
先在resnet50 backbone上进行训练
python main.py
代码解释
结果:

最大值仅为86.8%,而研究者在其论文中报告的数值为87.3%,仅差百分之一半左右!这似乎暗示着某种技术细节上的改进。
无奈地发现,在使用Resnext50架构时(即Resnext50设置为batch_size=16),模型无法正常运行。
无奈地发现,在使用batch_size=32时运行失败(即模型无法收敛),经排查发现原因在于显存不足(即计算过程中遇到了内存限制)。最终不得不将批次大小缩减至原先的一半(即16)以完成训练任务。
最后的结果竟然降低了!85.59%,与论文中给的87.8%相比,差远了。
论文中的结果:

3.直接用作者给的模型测试、评估
Github上分享了百度资源:i5wk
还是以CUB200为例、共有三个model:
1、cubbirds-resnext50-att4-lmgm1-entropy1-soft0.05-lr0.01-imgsz448-bsz32.model
说下:

经测试,在resnext50、等参数条件下确实达到了论文中的87.8%精度!
2、cubbirds-resnext50-att1-lmgm0-entropy0-soft0-lr0.01-imgsz448-bsz32.model
注意:
python eval.py
代码解释
报错,应该是加载模型参数时过于严格

我是把参数strict改为False后发现正常运行了!

精度吻合!
3、cubbirds-resnet50 -att4-lmgm1-entropy1-soft0.05-lr0.01-imgsz448-bsz32.model
哈哈,第一次运行的时候精度没达到正常的水平:

当我将npart参数强制设置为1时(如上图所示),结果令人满意地达到了论文中所描述的精度水平。(虽然有些难以理解)看到这个结果后会让人感到困惑的是:在训练阶段nparts都设置为4(而测试阶段却意外地全部变为1)。
