从无到有:跑通京东fast-reid工程

目录

1.fast-reid工程简介

2.怎样一步步的跑通fast-reid

3.怎样跑通自己的数据

4.在自己的训练样本上使用fast-reid遇到的问题

问题1:ModuleNotFoundError: No module named 'Cython'

问题2:在哪里加载自己预训练模型参数

问题3:在哪里修改数据增强方式

问题4:AssertionError: Error: all query identities do not appear in gallery

问题5:在哪里修改主干网络,以及怎么修改?


1.fast-reid工程简介

该工程的网络简介已经很多,我就不再赘言,上一篇参考链接:重磅,最强重识别工具箱FastReID开源,附带多种SOTA模型 - 知乎

2.怎样一步步的跑通fast-reid

step1:首先找一些fast-reid的说明文档,通过文档介绍,找到fast-reid工程的下载路径;

step2:在下载官方页面找到相应的训练或部署的信息,然后下载官方的fast-reid工程;

step3:安装官方文档要求的依赖库;因为我自己的机器上有相应的一些库,所以只安装了部分依赖,包括:yacs,faiss_cpu,tabulate,Cython;如果网络环境好,直接pip安装很方便,要是网络环境不好的时候需要下载相应的库,然后再使用pip安装,下载位置通过百度搜索“pypi”,然后进去搜索对应python版本和机器环境的库;

step4:进行自己的数据训练

3.怎样跑通自己的数据

可以参考查看解析:Fast-ReID 训练自己的数据集调优记录(二)_songlixiangaibin的博客-CSDN博客

自己一步一步调试成功的记录查看:fast-reid跑通自己的数据_猫猫与橙子的博客-CSDN博客

4.在自己的训练样本上使用fast-reid遇到的问题

问题1:ModuleNotFoundError: No module named 'Cython'

从无到有:跑通京东fast-reid工程_第1张图片

需要 Compile with cython to accelerate evalution

这样解决:

cd fastreid/evaluation/rank_cylib; make all

链接:fast-reid/GETTING_STARTED.md at master · JDAI-CV/fast-reid · GitHub

问题2:在哪里加载自己预训练模型参数

修改‘Base-bagtricks.yml’中的预训练模型加载的路径,如:

MODEL:
  META_ARCHITECTURE: Baseline

  BACKBONE:
    NAME: build_resnet_backbone
    NORM: BN                        #模型NORM 如果是多卡需要设置syncBN 多卡同步BN
    DEPTH: 50x
    LAST_STRIDE: 1
    FEAT_DIM: 2048                  #输出特征维度
    WITH_IBN: True #False
    PRETRAIN: True
    PRETRAIN_PATH: './model/resnest50_1203.pth'

然后具体的加载代码在resnet.py中。

 加载预训练模型参数的代码在335行,

if pretrain:
        # Load pretrain path if specifically
        if pretrain_path:
            try:
                state_dict = torch.load(pretrain_path, map_location=torch.device('cpu'))
                logger.info(f"Loading pretrained model from {pretrain_path}")
            except FileNotFoundError as e:
                logger.info(f'{pretrain_path} is not found! Please check this path.')
                raise e
            except KeyError as e:
                logger.info("State dict keys error! Please check the state dict.")
                raise e
        else:
            key = depth
            if with_ibn: key = 'ibn_' + key
            if with_se:  key = 'se_' + key

            state_dict = init_pretrained_weights(key)

        incompatible = model.load_state_dict(state_dict, strict=False)
        if incompatible.missing_keys:
            logger.info(
                get_missing_parameters_message(incompatible.missing_keys)
            )
        if incompatible.unexpected_keys:
            logger.info(
                get_unexpected_parameters_message(incompatible.unexpected_keys)
            )

问题3:在哪里修改数据增强方式

在‘Base-bagtricks.yml’中修改增强方式:

从无到有:跑通京东fast-reid工程_第2张图片

相关的代码位置在 :

其中调用了pytorch中torchvision.transforms的数据增强方式,目前支持的数据增强方式有:

crop,augmix augmentation,auto augmentation,horizontal filp(镜像),padding, color jitter,random affine,random erasing,random patch

问题4:AssertionError: Error: all query identities do not appear in gallery

有参考链接:How can I prepare my own data about gallery and query? · Issue #173 · JDAI-CV/fast-reid · GitHub

我的理解:query和gallery的数据不能出自同一个摄像头id,所以如果自己的训练样本出自同一个摄像头id,可以将query和gallery的id赋不同值就可以解决上面的问题;

问题5:在哪里修改主干网络,以及怎么修改?

修改网络主干在

从无到有:跑通京东fast-reid工程_第3张图片

中的

从无到有:跑通京东fast-reid工程_第4张图片

默认是resnet50,参数为: build_resnest_backbone;如果要修改为其他主干,查看工程下的路径:

 其中有相应的命名和对应网络主干:

# encoding: utf-8
"""
@author:  liaoxingyu
@contact: [email protected]
"""

from .build import build_backbone, BACKBONE_REGISTRY

from .resnet import build_resnet_backbone
from .osnet import build_osnet_backbone
from .resnest import build_resnest_backbone
from .resnext import build_resnext_backbone
from .regnet import build_regnet_backbone, build_effnet_backbone
from .shufflenet import build_shufflenetv2_backbone
from .mobilenet import build_mobilenetv2_backbone
from .mobilenetv3 import build_mobilenetv3_backbone
from .repvgg import build_repvgg_backbone
from .vision_transformer import build_vit_backbone

你可能感兴趣的:(reid,re-id)