目录
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:在哪里修改主干网络,以及怎么修改?
该工程的网络简介已经很多,我就不再赘言,上一篇参考链接:重磅,最强重识别工具箱FastReID开源,附带多种SOTA模型 - 知乎
step1:首先找一些fast-reid的说明文档,通过文档介绍,找到fast-reid工程的下载路径;
step2:在下载官方页面找到相应的训练或部署的信息,然后下载官方的fast-reid工程;
step3:安装官方文档要求的依赖库;因为我自己的机器上有相应的一些库,所以只安装了部分依赖,包括:yacs,faiss_cpu,tabulate,Cython;如果网络环境好,直接pip安装很方便,要是网络环境不好的时候需要下载相应的库,然后再使用pip安装,下载位置通过百度搜索“pypi”,然后进去搜索对应python版本和机器环境的库;
step4:进行自己的数据训练
可以参考查看解析:Fast-ReID 训练自己的数据集调优记录(二)_songlixiangaibin的博客-CSDN博客
自己一步一步调试成功的记录查看:fast-reid跑通自己的数据_猫猫与橙子的博客-CSDN博客
需要 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
修改‘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)
)
在‘Base-bagtricks.yml’中修改增强方式:
相关的代码位置在 :
其中调用了pytorch中torchvision.transforms的数据增强方式,目前支持的数据增强方式有:
crop,augmix augmentation,auto augmentation,horizontal filp(镜像),padding, color jitter,random affine,random erasing,random patch
有参考链接: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赋不同值就可以解决上面的问题;
修改网络主干在
中的
默认是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