tensorrtx
tensorrtx copied to clipboard
batch 为2时,第一张图,识别是不对的,第二张识别对的,什么问题?
Env
- GPU, e.g. V100, RTX2080, TX2, Xavier NX, Nano, etc.
- OS, e.g. Ubuntu16.04, Win10, etc.
- Cuda version
- TensorRT version
About this repo
- which branch/tag/commit are you using?
- which model? yolov5, retinaface?
Your problem
- what is your command? e.g.
sudo ./yolov5 -s - what's your output?
- what output do you expect?
did you rebuild and re-serialize engine?
我的步骤: 1、官网的yolov5s.pt模型,生成wts文件 2、修改batch为2,使用wts,生成engine文件 3、使用生成的engine文件,同时输出2张图像推理。 训练生成yolov5s.pt时,也需要设置batch为2吗?我直接使用的官网的
重新生成engine的是,设置了batch后,我看只有这里:builder->setMaxBatchSize(maxBatchSize);
推理的时候,感觉是这里,第一张图像被压缩和覆盖了:
float* buffer_idx = (float*)buffers[inputIndex];
for (int b = 0; b < fcount; b++) {
cv::Mat img = cv::imread(img_dir + "/" + file_names[f - fcount + 1 + b]);
if (img.empty()) continue;
imgs_buffer[b] = img;
size_t size_image = img.cols * img.rows * 3;
size_t size_image_dst = INPUT_H * INPUT_W * 3;
//copy data to pinned memory
memcpy(img_host,img.data,size_image);
//copy data to device memory
CUDA_CHECK(cudaMemcpyAsync(img_device,img_host,size_image,cudaMemcpyHostToDevice,stream));
preprocess_kernel_img(img_device, img.cols, img.rows, buffer_idx, INPUT_W, INPUT_H, stream);
buffer_idx += size_image_dst;
}
我试了batchsize为2,没出现什么问题。你试试当batchsize=4,8时有没问题
这是识别的2张图,第一张有问题,第二张正常
我截你的第一张图,复制4份,然后设置batchsize=2,跑出来是正常的。 你首先确定图像是小于3000*3000的,然后换个batchsize(3,4,8等等)试试,看有没问题
我截你的第一张图,复制4份,然后设置batchsize=2,跑出来是正常的。 你首先确定图像是小于3000*3000的,然后换个batchsize(3,4,8等等)试试,看有没问题
我发现,当我图像尺寸一样大小时是正常的,但是,当我2张图像尺寸大小不一样时,是不对的
batch = 4:
我同一张图像4次放入识别,正常:
不同四张图像放入,就最后一张正常,前面三张都是乱的:

我截你的第一张图,复制4份,然后设置batchsize=2,跑出来是正常的。 你首先确定图像是小于3000*3000的,然后换个batchsize(3,4,8等等)试试,看有没问题
您这边试的是,4张同样的,还是不同的图?
我这边不同的图片也是正确的。你重新生成引擎了吧?
您指定重新生成引擎是指什么? batch=4后,我重新生成了engine了
总结一下,你的情况是: 只有batchsize=1的时候,输出才是正确的,试过的其他batchszie都是错的?
3000*3000
MAX_IMAGE_INPUT_SIZE_THRESH 我设置的是8000*8000,四张图总大小加起来,都小于这个尺寸
总结一下,你的情况是: 只有batchsize=1的时候,输出才是正确的,试过的其他batchszie都是错的?
我现在的情况是: batchsize=1的时候,输出是正常的; batchsize=2的时候,2张同样图,识别正常,2张不同尺寸图,就最后一张正常,第一张识别不正常; batchsize=4的时候,4张同样图,识别正常,4张不同尺寸图,就最后一张正常,前三张都识别不正常;
总结一下,你的情况是: 只有batchsize=1的时候,输出才是正确的,试过的其他batchszie都是错的?
咋样,大佬,有没有思路?您那都是正常的吗?
我这边的输出都是正常的。不过我的代码是刚加cuda预处理后的版本。最新版本的代码我还没尝试。等到下周我忙完了再帮你看看吧
我这边的输出都是正常的。不过我的代码是刚加cuda预处理后的版本。最新版本的代码我还没尝试。等到下周我忙完了再帮你看看吧
好的。感谢大佬,可否加个微信?
有啥事就在这上面说吧,或者群里问就行
有啥事就在这上面说吧,或者群里问就行
How about this issues?
我试过了最新代码。 batchsize = 3后也没问题。你是否按照以下步骤来的: 1.在yolov5.cpp中 将#define BATCH_SIZE 改为5后,保存文件。 2.重新make 3.执行./yolov5 -s yolov5s.wts yolov5s.engine s 生成新的引擎 4.执行./yolov5 -d yolov5s.engine ../samples 推理图片
我试过了最新代码。 batchsize = 3后也没问题。你是否按照以下步骤来的: 1.在yolov5.cpp中 将#define BATCH_SIZE 改为5后,保存文件。 2.重新make 3.执行./yolov5 -s yolov5s.wts yolov5s.engine s 生成新的引擎 4.执行./yolov5 -d yolov5s.engine ../samples 推理图片
您确认可以吗?
我使用最新的代码,刚刚跑了一遍,使用yolov5s的模型导出的wts,然后导出的batch=4的模型,
都是最新的源码,里面设置的 BATCH_SIZE =4,推理
同一个文件夹下,放同一张图复制4份:
结果是对的:
但是,同一个文件下,放不同的四张图:
推理结果都是乱的:
就最后一张是正确的,前三张都是不对的
我试过了最新代码。 batchsize = 3后也没问题。你是否按照以下步骤来的: 1.在yolov5.cpp中 将#define BATCH_SIZE 改为5后,保存文件。 2.重新make 3.执行./yolov5 -s yolov5s.wts yolov5s.engine s 生成新的引擎 4.执行./yolov5 -d yolov5s.engine ../samples 推理图片
tensorrt_yolov5.zip 这是推理代码,您看看
最新代码里面,我把数据拷贝换成v5版本里面的Data拷贝模式,可以。所以新版本里面的数据拷贝,从host到device有问题
你解决了就好。具体是哪里的代码除了问题,能分享下吗?
你解决了就好。具体是哪里的代码除了问题,能分享下吗?
其实,我没有解决掉问题。现在的图像数据拷贝是直接cuda拷贝,我感觉是高效的,直接再cuda里面,可以减少cpu图像预处理和cpu gpu来回传图,但是感觉这里host到device的数据拷贝有问题,数据排列不对:
具体问题是什么,还不知道,烦请帮忙看一下。
而yolov5v5版本里面数据预处理和拷贝是这样的,都是在cpu内部处理,比较低效:

你解决了就好。具体是哪里的代码除了问题,能分享下吗?
原来yolov5v5版本里面的,数据拷贝方式,可以正常batch推理,不论图像大小一样不一样。但是最新版的里面,只有四张图一样的时候,才是对的,四张图不一样和尺寸不一样,推理结果都不对。
你是什么硬件平台?我看看此问题会不会和平台相关
你是什么硬件平台?我看看此问题会不会和平台相关
windows10 VS019 nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2020 NVIDIA Corporation Built on Wed_Jul_22_19:09:35_Pacific_Daylight_Time_2020 Cuda compilation tools, release 11.0, V11.0.221 Build cuda_11.0_bu.relgpu_drvr445TC445_37.28845127_0
你是什么硬件平台?我看看此问题会不会和平台相关
请问有结果吗?
@xinsuinizhuan Cannot reproduce your issue. I tried batch=4, the output images are fine. Please use the default code without any changes to test.
cc: @liuqi123123