PaddlePaddle / PaddleSeg

Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.
https://arxiv.org/abs/2101.06175
Apache License 2.0
8.69k stars 1.68k forks source link

关于部署bisenet模型进行infer的问题 #1715

Closed T0L0ve closed 1 year ago

T0L0ve commented 2 years ago

模型导出后使用deploy/python/infer.py 预测了100张图片,total time spent(s): 2.8983,但看bisenet的论文说能有156FPS,是我模型部署出的问题,还是我理解错了156FPS的含义。 另外,我在运行deploy/python/infer.py 时发现了问题,当输入多张图像时,只输出了一张预测图像

def _save_imgs(self, results, img):

#     for i in range(results.shape[0]):
#         result = get_pseudo_color_map(results[i])
#         basename = os.path.basename(imgs[i])
#         basename, _ = os.path.splitext(basename)
#         basename = f'{basename}.png'
#         result.save(os.path.join(self.args.save_dir, basename))

问题应该是出在这部分代码,results.shape[0]的值为1导致imgs[i]也是一个固定值,图像重复覆盖

haoyuying commented 2 years ago

预测时候要打开--benchmark选项,需要额外安装auto_log,具体安装方式为:https://github.com/LDOUBLEV/AutoLog paddle infer文档可参考https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.3/docs/deployment/inference/python_inference.md

T0L0ve commented 2 years ago

预测时候要打开--benchmark选项,需要额外安装auto_log,具体安装方式为:https://github.com/LDOUBLEV/AutoLog paddle infer文档可参考https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.3/docs/deployment/inference/python_inference.md --benchmark选项是设置为True的,auto_log也是安装了的

LutaoChu commented 2 years ago

total time spent是总体耗时,包括模型推理、前后处理、程序初始化的时间。应该看inference time 另外实现方式和运行软硬件可能和论文有出入,速度就会有diff

LutaoChu commented 2 years ago

另外,我在运行deploy/python/infer.py 时发现了问题,当输入多张图像时,只输出了一张预测图像

def _save_imgs(self, results, img):

for i in range(results.shape[0]):

result = get_pseudo_color_map(results[i])

basename = os.path.basename(imgs[i])

basename, _ = os.path.splitext(basename)

basename = f'{basename}.png'

result.save(os.path.join(self.args.save_dir, basename))

问题应该是出在这部分代码,results.shape[0]的值为1导致imgs[i]也是一个固定值,图像重复覆盖

results.shape[0]表示batch size,如果为1的话for循环就只有一次,讲道理不会图像重复覆盖才对

T0L0ve commented 2 years ago

另外,我在运行deploy/python/infer.py 时发现了问题,当输入多张图像时,只输出了一张预测图像

def _save_imgs(self, results, img):

for i in range(results.shape[0]):

result = get_pseudo_color_map(results[i])

basename = os.path.basename(imgs[i])

basename, _ = os.path.splitext(basename)

basename = f'{basename}.png'

result.save(os.path.join(self.args.save_dir, basename))

问题应该是出在这部分代码,results.shape[0]的值为1导致imgs[i]也是一个固定值,图像重复覆盖

results.shape[0]表示batch size,如果为1的话for循环就只有一次,讲道理不会图像重复覆盖才对

for循环只有一次这个没有问题,问题在basename是根据imgs[i]来确定的,只循环一次就表明basename一直是imgs[0]这个值。 在run函数中每循环一次就调用了 _save_imgs(self, results, imgs),imgs是图片名称列表,basename的值就成了第一张图片的名称,在保存时文件名相同所以覆盖了。 只要让图像save时basename不同就正常了。 捕获

T0L0ve commented 2 years ago

total time spent是总体耗时,包括模型推理、前后处理、程序初始化的时间。应该看inference time 另外实现方式和运行软硬件可能和论文有出入,速度就会有diff

ok,我明白了,谢谢。

LutaoChu commented 2 years ago

另外,我在运行deploy/python/infer.py 时发现了问题,当输入多张图像时,只输出了一张预测图像

def _save_imgs(self, results, img):

for i in range(results.shape[0]):

result = get_pseudo_color_map(results[i])

basename = os.path.basename(imgs[i])

basename, _ = os.path.splitext(basename)

basename = f'{basename}.png'

result.save(os.path.join(self.args.save_dir, basename))

问题应该是出在这部分代码,results.shape[0]的值为1导致imgs[i]也是一个固定值,图像重复覆盖

results.shape[0]表示batch size,如果为1的话for循环就只有一次,讲道理不会图像重复覆盖才对

for循环只有一次这个没有问题,问题在basename是根据imgs[i]来确定的,只循环一次就表明basename一直是imgs[0]这个值。 在run函数中每循环一次就调用了 _save_imgs(self, results, imgs),imgs是图片名称列表,basename的值就成了第一张图片的名称,在保存时文件名相同所以覆盖了。 只要让图像save时basename不同就正常了。 捕获

好像是的,你用的什么数据集呢?我复现一下

T0L0ve commented 2 years ago

另外,我在运行deploy/python/infer.py 时发现了问题,当输入多张图像时,只输出了一张预测图像

def _save_imgs(self, results, img):

for i in range(results.shape[0]):

result = get_pseudo_color_map(results[i])

basename = os.path.basename(imgs[i])

basename, _ = os.path.splitext(basename)

basename = f'{basename}.png'

result.save(os.path.join(self.args.save_dir, basename))

问题应该是出在这部分代码,results.shape[0]的值为1导致imgs[i]也是一个固定值,图像重复覆盖

results.shape[0]表示batch size,如果为1的话for循环就只有一次,讲道理不会图像重复覆盖才对

for循环只有一次这个没有问题,问题在basename是根据imgs[i]来确定的,只循环一次就表明basename一直是imgs[0]这个值。 在run函数中每循环一次就调用了 _save_imgs(self, results, imgs),imgs是图片名称列表,basename的值就成了第一张图片的名称,在保存时文件名相同所以覆盖了。 只要让图像save时basename不同就正常了。 捕获

好像是的,你用的什么数据集呢?我复现一下

数据集就是样例的视盘数据集optic_disc_seg

github-actions[bot] commented 1 year ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 7 days if no further activity occurs. Thank you for your contributions.