Segment-Anything-CPP icon indicating copy to clipboard operation
Segment-Anything-CPP copied to clipboard

有没有使用的demo啊

Open TinyQi opened this issue 2 years ago • 11 comments
trafficstars

感谢作者的共享,但是我想问问有没有demo啊

尤其是CLIP的输入时如何构造的,以及你们公众号分享的4个模型,分别是哪几个有点困惑

TinyQi avatar Aug 07 '23 05:08 TinyQi

您好,C++版本Demo还没有完成,可以尝试一下C#版本:https://github.com/AIDajiangtang/Segment-Anything-CSharp 引入CLIP是为了实现Text Promot,CLIP分别对text和Image进行编码,编码到同一个向量空间,然后计算余弦相似性,例如,输入“a dog”,将其Tolikenlize成77大小的向量,输入到CLIP,输出512大小向量,在一张图片上生成多个Point Promot,输入到SAM中,生成多个分割Mask,将每一个Mask生成一张图像,输入到CLIP,输出512大小的图像编码,与“a dog”最相似的图像编码就是最终分割结果。

AIDajiangtang avatar Aug 07 '23 06:08 AIDajiangtang

感谢作者的热心回复,请问,

  1. 我看您的代码中有一个Tokenlizer类,这个类中直接返回了一个数组(看起来是"a diagram", "a dog", "a cat"的token),那么如果我是其他的英文单词的话,怎么转换成这个token数组呢?
  2. 在您提到的“点prompt生成的mask再送入CLIP”中,mask是指通过裁剪的小图,还是裁剪后二值图,还是mask原图啊

TinyQi avatar Aug 07 '23 06:08 TinyQi

感谢作者的热心回复,请问,

  1. 我看您的代码中有一个Tokenlizer类,这个类中直接返回了一个数组(看起来是"a diagram", "a dog", "a cat"的token),那么如果我是其他的英文单词的话,怎么转换成这个token数组呢? 类似查字典,会有一个字典文件,可以参考官网实现 https://github.com/openai/CLIP/blob/main/clip/simple_tokenizer.py https://github.com/openai/CLIP/blob/main/clip/bpe_simple_vocab_16e6.txt.gz 这就相当于字典
  1. 在您提到的“点prompt生成的mask再送入CLIP”中,mask是指通过裁剪的小图,还是裁剪后二值图,还是mask原图啊 根据生成的Mask在原图上裁剪,如果模型支持动态大小就不需要Resize图像,如果模型仅支持固定大小,则需要先Resize

AIDajiangtang avatar Aug 07 '23 06:08 AIDajiangtang

感谢作者的热心回复,请问,

  1. 我看您的代码中有一个Tokenlizer类,这个类中直接返回了一个数组(看起来是"a diagram", "a dog", "a cat"的token),那么如果我是其他的英文单词的话,怎么转换成这个token数组呢?
  2. 在您提到的“点prompt生成的mask再送入CLIP”中,mask是指通过裁剪的小图,还是裁剪后二值图,还是mask原图啊

https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/automatic_mask_generator.py 可以参考SAM官方实现,它会根据分割Mask生成boundding box,不过是Python代码,转换为C++我这边正在进行中

AIDajiangtang avatar Aug 07 '23 07:08 AIDajiangtang

好的,再次感谢作者的无私贡献。谢谢您。我先根据您的指导,尝试在C++下实现这个功能

TinyQi avatar Aug 07 '23 07:08 TinyQi

好的,再次感谢作者的无私贡献。谢谢您。我先根据您的指导,尝试在C++下实现这个功能

那太好了,我这边就等着你的实现了

AIDajiangtang avatar Aug 07 '23 07:08 AIDajiangtang

好的,再次感谢作者的无私贡献。谢谢您。我先根据您的指导,尝试在C++下实现这个功能

那太好了,我这边就等着你的实现了

哈哈哈,我这边挺菜的,不一定搞的定呢

TinyQi avatar Aug 07 '23 08:08 TinyQi

楼主好,我这边按照python的代码尝试了复现,目前遇到了一些问题,跟你分享一下,希望楼主分享一下你的建议:

目前我做到的程度,主要是跟python端的代码比(automatic_mask_generator.py):

  1. 在python端和C++端使用同样的输入图像(我保存了c++程序的中间图像,作为python那边准备进行CLIP图像编码的输入图)
  2. 在经过一定的预处理后,C++端的图像指针内容与python中图像数组的值是一样的
  3. 同样的文本token,经过CLIP文本模型编码后,在python端和c++端结果是一样的

输入图像我也查看了python的代码,应该说我实现的C++版本应该是大差不离的,以下是我生成的局部目标图 image image

但是现在遇到的问题是,程序运行的结果与期望的结果不符,我测试的时候用到是一张“小猫”图像和一张“小狗”图像,但是:

  1. 小猫和小狗在经过文本与图像融合后,得分并没有差的很开 我使用了默认的“a dog”, “a cat”提示词,从数值上勉强可以区分,但是不理想 image

  2. 在我加入“person”之后的提示词,得分竟然高过了猫和狗 我使用了官方推荐的“a photo of dog”, “a photo of cat”提示词, image

TinyQi avatar Aug 14 '23 12:08 TinyQi

  1. 没有差的很开

我也遇到同样的问题,还没解决 下面是提供预训练模型的github提供的示例,它的运行结果貌似没有问题,可以跟它对比一下 https://github.com/Lednik7/CLIP-ONNX/blob/main/examples/readme_example.ipynb

AIDajiangtang avatar Aug 25 '23 01:08 AIDajiangtang

楼主好,我这边按照python的代码尝试了复现,目前遇到了一些问题,跟你分享一下,希望楼主分享一下你的建议:

目前我做到的程度,主要是跟python端的代码比(automatic_mask_generator.py):

1. 在python端和C++端使用同样的输入图像(我保存了c++程序的中间图像,作为python那边准备进行CLIP图像编码的输入图)

2. 在经过一定的预处理后,C++端的图像指针内容与python中图像数组的值是一样的

3. 同样的文本token,经过CLIP文本模型编码后,在python端和c++端结果是一样的

输入图像我也查看了python的代码,应该说我实现的C++版本应该是大差不离的,以下是我生成的局部目标图 image image

但是现在遇到的问题是,程序运行的结果与期望的结果不符,我测试的时候用到是一张“小猫”图像和一张“小狗”图像,但是:

1. 小猫和小狗在经过文本与图像融合后,得分并没有差的很开
   我使用了默认的“a dog”, “a cat”提示词,从数值上勉强可以区分,但是不理想
   ![image](https://private-user-images.githubusercontent.com/28993936/260446276-762e2cfb-9366-4334-8113-1b1114355cbd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTM1OTU0MDcsIm5iZiI6MTcxMzU5NTEwNywicGF0aCI6Ii8yODk5MzkzNi8yNjA0NDYyNzYtNzYyZTJjZmItOTM2Ni00MzM0LTgxMTMtMWIxMTE0MzU1Y2JkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA0MjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNDIwVDA2MzgyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg4ZWJkYjZkMDY5YjRjOTg1N2U5ZTk1NGJlZmYxYzg5MjA0M2NiYzAwZmZkMzNhNzg0ZTE2YTAyYzgyOTA5MmEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.9eskDAJ2T0_KkJNy2Vv77MFh5DQ19-HFT1Sk5rvqfpQ)

2. 在我加入“person”之后的提示词,得分竟然高过了猫和狗
   我使用了官方推荐的“a photo of dog”, “a photo of cat”提示词,
   ![image](https://private-user-images.githubusercontent.com/28993936/260446090-78c928d4-0214-4efb-be7b-f44166368cb0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTM1OTU0MDcsIm5iZiI6MTcxMzU5NTEwNywicGF0aCI6Ii8yODk5MzkzNi8yNjA0NDYwOTAtNzhjOTI4ZDQtMDIxNC00ZWZiLWJlN2ItZjQ0MTY2MzY4Y2IwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA0MjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNDIwVDA2MzgyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE3Zjg5MTc4NzUyNTQxNzgzZjVhZjFjZmJkYzhiNDEzN2EzNjc3MTU0YTFmYzNmOGQ0MjQxODlhYTM4NzcxNjMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.T3QfERUL8vc2gL-MCBcn455wlKF425CrLb46jREkIGg)

你好,我使用c++tensorrt部署了CLIP模型,出现了和你一样的情况,请问你解决了吗

bailanguanjun avatar Apr 20 '24 09:04 bailanguanjun

  1. 没有差的很开

我也遇到同样的问题,还没解决 下面是提供预训练模型的github提供的示例,它的运行结果貌似没有问题,可以跟它对比一下 https://github.com/Lednik7/CLIP-ONNX/blob/main/examples/readme_example.ipynb

看了下这个代码,好像是把 输出的余弦相似度*100 再做了softmax

bailanguanjun avatar Apr 21 '24 03:04 bailanguanjun