NagatoYuki0943 / anomalib-openvino-cpp

5 stars 0 forks source link

Tensorrt推理 #3

Closed 294978174 closed 5 months ago

294978174 commented 1 year ago

请问有考虑用tensorrt进行推理吗,其中的余弦相似度计算需要写plugin吗

NagatoYuki0943 commented 1 year ago

我用trtexec转换onnx就能用了,不过速度也不快,https://github.com/NagatoYuki0943/anomalib-tensorrt-cpp

NagatoYuki0943 commented 1 year ago

在10700+1080ti上使用efficient_ad small 模型测试MVTec的bottle数据集, 平均速度为 openvino: 151.4 ms onnxruntime-gpu(使用gpu): 26.7 ms tensorrt: 24.05 ms

maobaoqi commented 1 year ago

在10700+1080ti上使用efficient_ad small 模型测试MVTec的bottle数据集, 平均速度为 openvino: 151.4 ms onnxruntime-gpu(使用gpu): 26.7 ms tensorrt: 24.05 ms

image

我在AMD 5900HX上测试patchcore resnet18,推理很慢

NagatoYuki0943 commented 1 year ago

openvino是intel的,他们说不为AMD处理器提供技术支持,要不试试onnxruntime吧,没准快点 10700使用openvino测试 wide_resnet50_2 patchcore 的平均速度速度为65.35 ms,5900hx这么慢肯定有问题,试试https://github.com/NagatoYuki0943/anomalib-onnxruntime-cpp吧,如果还慢的话就没办法了,amd也没提供ai加速库

maobaoqi commented 1 year ago

openvino是intel的,他们说不为AMD处理器提供技术支持,要不试试onnxruntime吧,没准快点 10700使用openvino测试 wide_resnet50_2 patchcore 的平均速度速度为65.35 ms,5900hx这么慢肯定有问题,试试https://github.com/NagatoYuki0943/anomalib-onnxruntime-cpp吧,如果还慢的话就没办法了,amd也没提供ai加速库

onnxruntime cpu和gpu运行不了patchcore导出的onnx模型,但可以运行padim导出的onnx模型,不知道为何。patchcore的onnx报如下错误。 image

NagatoYuki0943 commented 1 year ago

在anomalib的`src/anomalib/models/patchcore/torch_model.py文件的subsample_embedding函数添加如下代码,然后重新训练,代码的目的是限制memory的size

    def subsample_embedding(self, embedding: Tensor, sampling_ratio: float) -> None:
        """Subsample embedding based on coreset sampling and store to memory.

        Args:
            embedding (np.ndarray): Embedding tensor from the CNN
            sampling_ratio (float): Coreset sampling ratio
        """

        #------------------------------add this------------------------------#
        # The maximum allowed embedding length to prevent onnxruntime errors, you can try adjusting the embedding_max_len depending on the image resolution
        embedding_max_len = 15000
        embedding_len     = int(embedding.size(0))
        if embedding_len * sampling_ratio > embedding_max_len:
            sampling_ratio = embedding_max_len / embedding_len
            print(f"embedding_max_len = {embedding_max_len}, use sampling_ratio = {sampling_ratio}, smaller than config")
        #------------------------------add this------------------------------#

        # Coreset Subsampling
        sampler = KCenterGreedy(embedding=embedding, sampling_ratio=sampling_ratio)
        coreset = sampler.sample_coreset()
        self.memory_bank = coreset

可以调整embedding_max_len的大小防止报错,这个错误是onnxruntime独有的,openvino和tensorrt都没问题

NagatoYuki0943 commented 1 year ago

另外有一点要说明的是patchcore的推理速度和memory bank的大小有关,越大推理速度越慢,memory size的大小与图片的数量,图片训练分辨率有关,我的代码限制了memory size的最大值,也就是说推理速度也被限定在了一个最小值,如果速度不满意的话可以试试efficient ad模型,速度很快

opentld commented 10 months ago

另外有一点要说明的是patchcore的推理速度和memory bank的大小有关,越大推理速度越慢,memory size的大小与图片的数量,图片训练分辨率有关,我的代码限制了memory size的最大值,也就是说推理速度也被限定在了一个最小值,如果速度不满意的话可以试试efficient ad模型,速度很快

有没有可能出一个opencv dnn版本的,白嫖党深表感谢 :P

NagatoYuki0943 commented 10 months ago

另外有一点要说明的是patchcore的推理速度和memory bank的大小有关,越大推理速度越慢,memory size的大小与图片的数量,图片训练分辨率有关,我的代码限制了memory size的最大值,也就是说推理速度也被限定在了一个最小值,如果速度不满意的话可以试试efficient ad模型,速度很快

有没有可能出一个opencv dnn版本的,白嫖党深表感谢 :P

其实写了一部分,不过dnn载入模型有问题,还有就是让dnn返回的结果不对,正在想办法

opentld commented 10 months ago

另外有一点要说明的是patchcore的推理速度和memory bank的大小有关,越大推理速度越慢,memory size的大小与图片的数量,图片训练分辨率有关,我的代码限制了memory size的最大值,也就是说推理速度也被限定在了一个最小值,如果速度不满意的话可以试试efficient ad模型,速度很快

有没有可能出一个opencv dnn版本的,白嫖党深表感谢 :P

其实写了一部分,不过dnn载入模型有问题,还有就是让dnn返回的结果不对,正在想办法

加油!!:)

NagatoYuki0943 commented 9 months ago

另外有一点要说明的是patchcore的推理速度和memory bank的大小有关,越大推理速度越慢,memory size的大小与图片的数量,图片训练分辨率有关,我的代码限制了memory size的最大值,也就是说推理速度也被限定在了一个最小值,如果速度不满意的话可以试试efficient ad模型,速度很快

有没有可能出一个opencv dnn版本的,白嫖党深表感谢 :P

其实写了一部分,不过dnn载入模型有问题,还有就是让dnn返回的结果不对,正在想办法

加油!!:)

这是opencvdnn推理的库,https://github.com/NagatoYuki0943/anomalib-opencv-dnn-cpp,不过要用opencv4.7.0版本且只测试了fastflow模型,patchcore和efficient_ad模型载入失败(在4.8.0版本载入成功但是推理结果异常,我使用shufflenetv2模型做图片分类结果也是错误的,只能等opencv官方修复了