关于复现Tardal的一些相关问题

Tardal原文github链接:https://github.com/dlut-dimt/TarDAL

1、前言

在复现Tardal的时候,有些命令和数据是需要修改的,官网的步骤有些地方的地址指向和数据加载存在一些问题,以此来记录相关的问题。

2、官方步骤

2.1 环境配置及数据准备

根据官方步骤安装conda环境和配置文件都没有很大的问题

# create virtual environment
conda create -n tardal python=3.10
conda activate tardal
# select pytorch version yourself
# install tardal requirements
pip install -r requirements.txt
# install yolov5 requirements
pip install -r module/detect/requirements.txt

官方的data框架包含m3fd、tno、roadscene三个数据集

TarDAL ROOT
├── data
|   ├── m3fd
|   |   ├── ir # infrared images
|   |   ├── vi # visible images
|   |   ├── labels # labels in txt format (yolo format)
|   |   └── meta # meta data, includes: pred.txt, train.txt, val.txt
|   ├── tno
|   |   ├── ir # infrared images
|   |   ├── vi # visible images
|   |   └── meta # meta data, includes: pred.txt, train.txt, val.txt
|   ├── roadscene
|   └── ...

但是其网盘数据中:

M3FD解压后并未包含meta

tno、roadscene数据集中则正常包含ir、vi、meta,于是尝试查看tno和roadscene中的meta内容。

2.2 问题查找

经查看发现,tno和roadscene中的meta是按照官方框架里包含pred.txt, train.txt, val.txt

1、于是我们查看tno中的txt文件

(1)pred.txt中包含tno所有的样本数

(2)train.txt中的随机对数据进行了选择,未将所有数据进行训练

(3)val.txt中则只包含028.png

但是仅看tno可能还无法自己尝试复原m3fdmeta数据,所以我们同样再查看一次roadscene中的meta组成

2、查看roadscene中的txt文件发现,pred.txt, train.txt, val.txt中均包含了所有数据

所以为了尝试的去复原数据,我们采用pred.txt同样包含m3fd中所有的数据,而train.txt和val.txt尝试将数据进行随机提取分为1:1的数据。

import random

# 定义文件名范围
start_number = 0
end_number = 4199

# 生成文件名列表
all_filenames = [f"{i:05d}.png" for i in range(start_number, end_number + 1)]

# 随机选择2100个文件名并按大小顺序排列,用sorted函数来按大小顺序排序
selected_filenames = sorted(random.sample(all_filenames, 2100))

# 将文件名分为两组
first_batch = selected_filenames
second_batch = sorted(list(set(all_filenames) - set(selected_filenames)))


# 写入第一个记事本
with open('train.txt', 'w') as file_1:
    for filename in first_batch:
        file_1.write(filename + '\n')

# 写入第二个记事本
with open('val.txt', 'w') as file_2:
    for filename in second_batch:
        file_2.write(filename + '\n')

由此我们就尝试得到了相对能够用于匹配的meta文件

2.3 尝试复现中的问题处理

问题一:

在github官网步骤上,作者给予了三个预训练的模型

并且在运行infer.py是这么写的

# TarDAL-DT
# use official tardal-dt infer config and save images to runs/tardal-dt
python infer.py --cfg configs/official/tardal-dt.yaml --save_dir runs/tardal-dt
# TarDAL-TT
# use official tardal-tt infer config and save images to runs/tardal-tt
python infer.py --cfg configs/official/tardal-tt.yaml --save_dir runs/tardal-tt
# TarDAL-CT
# use official tardal-ct infer config and save images to runs/tardal-ct
python infer.py --cfg configs/official/tardal-ct.yaml --save_dir runs/tardal-ct

但是下载后的TarDAL-main文件中,关于对应的tardal-ct.yaml、tardal-dt.yaml、tardal-tt.yaml其实存放于official中的infer和train里面,虽然查看这两个文件夹里的对应的yaml文件内容,其实都是一致的,但如果根据官方的指令直接运行就会存在运行不了的情况。

所以在运行指令时需要修改为,添加对应的文件夹,且configs要替换为config跟路径一致

# TarDAL-DT
# use official tardal-dt infer config and save images to runs/tardal-dt
python infer.py --cfg ./config/official/infer/tardal-dt.yaml --save_dir runs/tardal-dt
# TarDAL-TT
# use official tardal-tt infer config and save images to runs/tardal-tt
python infer.py --cfg ./config/official/infer/tardal-tt.yaml --save_dir runs/tardal-tt
# TarDAL-CT
# use official tardal-ct infer config and save images to runs/tardal-ct
python infer.py --cfg ./config/official/infer/tardal-ct.yaml --save_dir runs/tardal-ct

问题二:

如果在运行infer.py时出现了

python: symbol lookup error: /home/<username>/anaconda3/envs/tardal/lib/python3.xx/site-packages/torch/lib/../../nvidia/cudnn/lib/libcudnn_cnn_infer.so.xx: undefined symbol: _ZN15TracebackLoggerC1EPKc, version libcudnn_ops_infer.so.xx

home/<username>/anaconda3/envs/<env_name>/lib/python3.xx/site-packages/nvidia/cublas/lib/libcublas.so.xx: undefined symbol: cublasLtGetStatusString (<或者其他>), version libcublasLt.so.xx

(tardal) xzh@XZH:~/TarDAL-main$ python infer.py --cfg ./config/official/train/tardal-ct.yaml --save_dir runs/tardal-ct
2023-11-13 15:30:33,947 | infer.py[line:32] | INFO | enter fuse & detect inference mode
2023-11-13 15:30:33,947 | infer_fd.py[line:22] | INFO | TarDAL-v1 Inference Script
2023-11-13 15:30:33,947 | infer_fd.py[line:45] | INFO | create save folder runs/tardal-ct
2023-11-13 15:30:33,947 | m3fd.py[line:43] | WARNING | not found scenario.json, using current train & val list.
2023-11-13 15:30:33,948 | m3fd.py[line:47] | INFO | load 4200 images from m3fd
2023-11-13 15:30:33,990 | checker.py[line:21] | INFO | find all images on list
2023-11-13 15:30:34,756 | checker.py[line:50] | INFO | find all labels on list
2023-11-13 15:30:34,756 | checker.py[line:73] | INFO | find suitable size for prediction
finding suitable size: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4200/4200 [00:55<00:00, 75.39it/s]
2023-11-13 15:31:30,468 | checker.py[line:80] | INFO | max size in dataset: H:768 x W:1024
2023-11-13 15:31:30,613 | fuse.py[line:33] | INFO | deploy tardal-fuse on device cuda
2023-11-13 15:31:30,616 | fuse.py[line:40] | INFO | init generator with (dim: 32 depth: 3)
2023-11-13 15:31:30,616 | fuse.py[line:58] | INFO | download pretrained parameters from https://github.com/JinyuanLiu-CV/TarDAL/releases/download/v1.0.0/tardal-dt.pth
2023-11-13 15:31:30,839 | detect.py[line:34] | INFO | deploy yolov5s on device cuda
2023-11-13 15:31:30,845 | yolo.py[line:108] | INFO | overriding model.yaml nc=80 with nc=6
2023-11-13 15:31:31,032 | torch_utils.py[line:260] | INFO | YOLOv5s summary: 270 layers, 7035811 parameters, 7035811 gradients, 16.0 GFLOPs
2023-11-13 15:31:31,060 | detect.py[line:41] | INFO | init yolov5s with (nc: 6)
infer 00000.png (8 images):   0%|                       | 0/525 [00:02<?, ?it/s]python: symbol lookup error: /home/xzh/anaconda3/envs/tardal/lib/python3.10/site-packages/torch/lib/../../nvidia/cudnn/lib/libcudnn_cnn_infer.so.8: undefined symbol: _ZN15TracebackLoggerC1EPKc, version libcudnn_ops_infer.so.8

解决方法:

1、找到错误里对应的路径,通过命令 $ ldd /home/<username>/anaconda3/envs/<env_name>/lib/python3.xx/site-packages/nvidia/cublas/lib/libcudnn_ops_infer.so.xx 查看当前 libcublasLt.so.xx(或libcudnn_ops_infer.so.xx) 的所在位置,然后发现它link到了诸如 /usr/local/cuda/lib64/libcublasLt.so.xx 这样的位置。

注意,Idd后面的路径为你报错里对应的symbol look up error:冒号后对应的路径,直接粘贴就行。

如图,我的就被link到了/usr/local/cuda-11.3/lib64/libcudnn_ops_infer.so.8

2、通过命令 $ export LD_LIBRARY_PATH=/home/<username>/anaconda3/envs/<env_name>/lib/python3.7(或<your_python_version>)/site-packages/nvidia/cublas/lib/:$LD_LIBRARY_PATH 将当前 conda env lib path 加过去。(记得替换 <username> <env_name>,并确认 <python_version>
3、以上做法只是临时设置 LD_LIBRARY_PATH ,下次开机时需要重新设置。为了把这个值持续写到 LD_LIBRARY_PATH 里,我们可以$ vim ~/.bashrc,在该文件的未尾加入步骤2中的命令。

修改完后,记得$ source ~/.bashrc 从而使上面的配置生效。
4、然后我们在用步骤1的Idd命令再看一次,发现路径已经被正确指向,再运行infer.py就能够正常跑了

3 结果展示

tardal-dt为例

运行infer.py后的程序结果如图

其中的图像输出结果显示,以00000.png为例

(1)我们在 m3fd 中的 ir 找到00000.png

(2)同样的在 m3fd 中的 vi 找到00000.png

(3)根据运行infer.py后会生成一个runs文件夹,我们里面找到tardal-dt文件夹,可以找到输出的结果00000.png

可以看出通过对红外和图像的融合,对人的分割突显还是较为明显的。

参考博客:

Fix Bug: “undefined symbol: ..., version libcublasLt.so.11“ (简单有效!强推~)

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值