OSnet代码复现

  最近小组合作做一个项目,我刚好负责Reid部分, 所以找到了CVPR上的这篇osnet来复现一下,代码可以从链接自取。:https://github.com/KaiyangZhou/deep-person-reid

代码叉下来之后先看里面的readme文件,里面已经写的很详细了。如何建环境,这里要插一嘴的是在安装torch的时候它没有指定版本torch和cuda的版本,torch版本过高很容易出现其他意想不到的错误,亲测了torch1.0.2是可以运行的,cuda查看自己对应的版本安装就好。

   另外还有一个有点坑的是作者的request.txt文件的包没有指定版本,所以很多包版本过高,这个根据提示消息按要求安装对应的版本就行。

进入第一个get started,在终端输入python,然后导入对应的torchreid的包,然后回车,后面的参数给定也可以用这种方法,也可以将这些参数都写一个sh文件,然后在终端用sh.demo.sh来命令,效果是一样的。

  然后在数据集market1501上来训练自己的模型,这里我用的是上面提供的第二种方法,

将python后面的都复制进一个txt文件中,这里的path参数需要自己更改,将自己存放martket1501数据集的绝对路径复制到这里即可。然后在终端运行demo.sh开始加载自己的模型。

  重点来了,运行的是scripts下的main文件,加载数据集一直都ok,到最后engine.run的时候就出错了,如下:

 网上百度不到这个错误,给的都是改网络的配置文件,这里是python的包出了问题,看最开始报错的地方开始看发现是building model的时候出现的错误,在pycharm上回到main中追一下building model看一下这个函数:

 这里发现模型使用了预训练,打印一下pretrained的内容为true,然后打印model.pretrain发现加载的预训练模型为osnet_x1_0,在building model下的字典中查看到了这个模型:

 ctrl追一下这个函数,看见如果预训练就就将模型赋值

 接着追一下init_pretrained_weights这个函数

def init_pretrained_weights(model, key=''):
    """Initializes model with pretrained weights.
    
    Layers that don't match with pretrained layers in name or size are kept unchanged.
    """
    import os
    import errno
    import gdown
    from collections import OrderedDict

    def _get_torch_home():
        ENV_TORCH_HOME = 'TORCH_HOME'
        ENV_XDG_CACHE_HOME = 'XDG_CACHE_HOME'
        DEFAULT_CACHE_DIR = '~/.cache'
        torch_home = os.path.expanduser(
            os.getenv(
                ENV_TORCH_HOME,
                os.path.join(
                    os.getenv(ENV_XDG_CACHE_HOME, DEFAULT_CACHE_DIR), 'torch'
                )
            )
        )
        return torch_home

    torch_home = _get_torch_home()
    model_dir = os.path.join(torch_home, 'checkpoints')
    try:
        os.makedirs(model_dir)
    except OSError as e:
        if e.errno == errno.EEXIST:
            # Directory already exists, ignore.
            pass
        else:
            # Unexpected OSError, re-raise.
            raise
    filename = key + '_imagenet.pth'
    cached_file = os.path.join(model_dir, filename)

    if not os.path.exists(cached_file):
        gdown.download(pretrained_urls[key], cached_file, quiet=False)

  代码最后显示如果path不存在配置文件,就调用下面的链接去下载!根据这个路径的命令,看出预训练文件应该放在.catch文件夹下,用vnc显示隐藏文件发现确实没有!然后它就去用这个链接下载了,点进连接看发现:

这是一个需要访问谷歌的网站,这也是为什么报网络错误的原因!!

 解决方法:点进链接将配置文件下载下来然后放到对应的文件下就可以了,然后运行sh脚本文件运行程序,可以发现代码已经开始训练了。

 

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
GitHub代码复现是指在GitHub上找到一个感兴趣或有用的开源代码项目,并通过阅读代码、运行代码并进行修改来重新实现或再次创建整个项目。 首先,需要在GitHub上搜索并找到目标项目。可以通过GitHub的搜索功能,输入关键词、项目名称、描述等来筛选出符合条件的项目。选择一个代码质量好、维护活跃的项目会更有保障。 一旦找到了目标项目,就可以clone(克隆)该项目到本地。可以使用git命令行或者通过GitHub Desktop等工具进行操作。克隆项目后,就可以在本地对代码进行修改、调试、定制等。 接下来,对项目进行配置和安装依赖。一般来说,项目中会有一个readme文件或者其他文档来指导配置环境和安装所需的依赖包。根据项目要求进行配置和安装。 然后,就可以运行项目了。根据项目的要求,可能需要提供一些参数或者数据集。根据项目的文档,在终端或者IDE中运行相应的命令或者程序。 当项目运行成功后,就可以根据自己的需求对代码进行修改和优化。可以根据项目的架构和实现逻辑进行更改,添加新的功能,或者提升代码的性能等。 最后,如果对项目的改进比较显著,可以考虑提交自己的贡献给项目的维护者。可以通过Fork项目、修改代码、提交Pull Request等方式向项目提交自己的改动。项目维护者会进行代码审查,并决定是否接受你的改动。 总之,GitHub代码复现是一个学习和交流的过程。通过复现别人的代码,可以提升自己的编程能力,了解项目的实现细节,还可以与其他开发者交流、合作,共同提高。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值