Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于图片输入模型时的预处理 #15

Open
fatejzz opened this issue Jul 5, 2022 · 7 comments
Open

关于图片输入模型时的预处理 #15

fatejzz opened this issue Jul 5, 2022 · 7 comments

Comments

@fatejzz
Copy link

fatejzz commented Jul 5, 2022

你好就是我最近在尝试部署我的yoloV5模型,我阅读你的源码后认为你的letterbox操作跟python源码的好像不太一样。但是我按照官方的思路写letterbox的话输入模型会报错,有时还会产生python端不会预测的框,按照你的思路写的话就不会报那个错误,产生的框也是python端产生的框。

@ncdhz
Copy link
Owner

ncdhz commented Jul 5, 2022

@fatejzz 图片输入模型我自己封装了一下,你可以说说你的思路,我们可以一起研究一下。

@fatejzz
Copy link
Author

fatejzz commented Jul 6, 2022

就是那个官方的源码中他好像是会根据stride计算两边所需要填充的像素个数,比如输入[1920×1080]的图像,用你的源码会生成[640×640],按照官方的思路会生成[640×384],官方好像采取了一种最小pad(填充)的原理。
类似这样:“设置最多不能pad超过64像素,故对(640-360)采用取模操作,变成280%32=24,然后对15进行/2,然后左右pad即可”
但是我按照官方这样写,就是把图片转换成tensor后

torch::Tensor` in_tensor = torch::from_blob(resized_frame.data, {int(resized_frame.rows),int(resized_frame.cols),3}, torch::kByte)
如果是用当前图片的形状却会报错,[640,640,3]不会报错但效果上来看会生成一些不准确的框(参照python源码的detect)
但是我看大多数人都是这样写的

@ncdhz
Copy link
Owner

ncdhz commented Jul 6, 2022

@fatejzz yolov5在转TorchScript时候会根据输入的尺寸计算出模型输入最合适的尺寸,如 [640x300],stride取32得到的结果是,[640x320],然后通过最小pad填充[640x300]到[640x320](这部分和你说的一样)。但是TorchScript有个特点,当从Torch模型转为TorchScript时他的输入尺寸就固定了(不知道最新版torch是不是这样),也就是说后面的模型只能用[640x320]的输入了。
这个项目可以设置图片的height和width,可以通过设置这两个值来适应yolov5的TorchScript模型 YoloV5(std::string ptFile, bool isCuda = false, bool isHalf = false, int height = 640, int width = 640, float confThres = 0.25, float iouThres = 0.45)。

@fatejzz
Copy link
Author

fatejzz commented Jul 6, 2022

@ncdhz 我理解的是采用最小pad是为了加快推理速度,然后因为我模型转成torchscript模型的输入尺寸就被限制了(这一点我稍后会去了解),所以只能输入经过未最小pad处理后的[640×640]图像这样吗。

@ncdhz
Copy link
Owner

ncdhz commented Jul 6, 2022

@fatejzz 可以输入最小pad处理后的图像,但是是固定的不能一会儿[640x604],一会儿[640x320],你可以对你的数据集求一个宽高均值,然后再选定合适的输入大小。

@fatejzz
Copy link
Author

fatejzz commented Jul 6, 2022

那我应该是要使用torchscript转换模型的时候确定图片大小吧

@ncdhz
Copy link
Owner

ncdhz commented Jul 6, 2022

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants