Multi-Objective Matrix Normalization for Fine-Grained Visual Recognition论文复现

博主尝试复现一篇20年发表在IEEE上的细粒度识别论文,遇到环境配置冲突、数据集处理繁琐、模型精度不高等问题。论文代码在Pytorch版本、模型加载、数据预处理及模型实现上存在不足,导致复现困难。此外,模型在不同数据集上的表现不佳,精度一致,可能存在问题。博主已整理遇到的问题并分享资源。
摘要由CSDN通过智能技术生成

这是20年发表在IEEE上的关于细粒度识别的一篇论文。
这篇论文代码,个人认为存在很大的问题,在跑了几篇论文之后,总结出了这样的规律,越是顶会的论文,越容易复现,鲁棒性也特别强,相反,其余的论文质量参差不齐,经受不住读者的检验,更别说是时间的检验了!下面介绍一下跑此篇代码遇到的问题!
论文链接:https://pan.baidu.com/s/1tZ6pz4HOYmbK0jjUqUiL4A
提取码:2021
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享
论文源地址:https://ieeexplore.ieee.org/document/9027108
代码地址:https://github.com/mboboGO/MOMN
1、首先就是环境的问题,先来看看github上给的环境:

在这里插入图片描述
pytorch1.0,经过我验证有一个load_state_dict_from_url的库需要pytorch>=1.1.0,这不就与给的环境冲突吗???
下面列举下我跑这篇论文的环境:
python 3.7.0
cuda 10.1
Driver Version: 450.102.04
torch 1.4.0
torchvision 0.5.0
还要吐槽的是,训练好的模型竟然还放到外网上去…呜呜,在学长的帮助下才下载下来,最后惊讶的发现没有用到…
我下载好的模型,给大家分享一下:
链接:https://pan.baidu.com/s/1PRJKO79Z66oE8628p2_7Og
提取码:2021
2、就是数据集的加载了,然而不能直接加载,以CUB200数据集为例,得利用官方给的信息,对数据集进行处理,、把信息加载到txt文本中!
下面给出我写的代码,仅供参考:

# *_*coding: utf-8 *_*
 # author --liming--
 
"""
读取images.txt文件,获得每个图像的标签
读取train_test_split.txt文件,获取每个图像的train, test标签.其中1为训练,0为测试
读取image_class_labels.txt文件,获取每个图像的类别标签
"""
import os
import time
time_start = time.time()
# 文件路径
path_images = 'D:/BaiduNetdiskDownload/CUB_200_2011/CUB_200_2011/images.txt'
path_split =  'D:/BaiduNetdiskDownload/CUB_200_2011/CUB_200_2011/train_test_split.txt'
path_class="D:/BaiduNetdiskDownload/CUB_200_2011/CUB_200_2011/image_class_labels.txt"
path="D:/BaiduNetdiskDownload/CUB_200_2011/CUB_200_2011/images/"#图片所在路径
#新建txt文件
f_test=open("D:/BaiduNetdiskDownload/CUB_200_2011/CUB_200_2011/test.txt","w")
f_train=open("D:/BaiduNetdiskDownload/CUB_200_2011/CUB_200_2011/train.txt","w")
# 读取images.txt文件
images = []
with open(path_images,'r') as f:
    for line in f:
        images.append(list(line.strip('\n').split()))
# 读取train_test_split.txt文件
split = []
with open(path_split, 'r') as f_:
    for line in f_:
        split.append(list(line.strip('\n').split()))
 # 读取image_class_labels.txt文件
clss=[]
with open(path_class, 'r') as f_c:
    for cls in f_c:
        clss.append(list(cls.strip('\n').split()))
# 根据train_test_split.txt文件信息1、0划分
num = len(images) # 图像的总个数
print(num)
for k in range(num):
    file_name = images[k][-1]
    label = split[k][-1]
    Class=clss[k][-1]
    if int(label) == 1: # 划分到训练集
        f_train.write(path+file_name+" "+Class+"\n")
    else:
        f_test.write(path+file_name+" "+Class+"\n")
time_end = time.time()
print('CUB200训练集和测试集划分完毕, 耗时%s!!' % (time_end - time_start))
f_test.close()
f_train.close()

哈哈,如果直接从一开始编号的话,即:1——>200会报错!原因是作者代码分类器那块,是从0开始编号的。
只需把上面代码稍微修改下就可以了!
3、再来看看算法部分吧,我第一次跑的时候,我调用了model/momn.py文件里的momn方法来启动整个程序:
在这里插入图片描述
哈哈,这算是一个坑吧,因为刚开始看论文的时候,全文都是讲momn模型,结果,最后的结果只有84%的精度,这才感到不对劲。
在这里插入图片描述
还有一个很奇怪的现象是最后的精度都是一模一样…有问题啊
然后就是跑moln这个模型:
在这里插入图片描述
孩子很惊讶啊,结果也不是很高,最高只有85%…最后的精度还是保持不变。奇怪
在这里插入图片描述
在换上自己的数据集后又跑了一遍!结果这里就不说了…
4、最后,又运行了eval.py是在整个数据集上进行评估,作者在这里做了一些flipping test trick,是我学识浅薄了…
还是看下结果吧:

在这里插入图片描述
这是自己的数据集的结果,竟然和main.py的结果差不多…
害,这篇论文的代码质量并不高,就当是练手了!欢迎大家一起交流!
最后笔者又仔细研究了作者提供的训练好的模型,呜呜,最终复现出来了 ,中间也发邮件向作者咨询了,因内容是在太多,没有时间一点一点以博文的方式记录下来,所有遇到的问题我已经以word的形式上传了!欢迎大家指教,也可以私聊我!
https://download.csdn.net/download/hb_learing/18505508

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值