Segment-Anything-CPP
Segment-Anything-CPP copied to clipboard
有没有使用的demo啊
感谢作者的共享,但是我想问问有没有demo啊
尤其是CLIP的输入时如何构造的,以及你们公众号分享的4个模型,分别是哪几个有点困惑
您好,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”最相似的图像编码就是最终分割结果。
感谢作者的热心回复,请问,
- 我看您的代码中有一个Tokenlizer类,这个类中直接返回了一个数组(看起来是"a diagram", "a dog", "a cat"的token),那么如果我是其他的英文单词的话,怎么转换成这个token数组呢?
- 在您提到的“点prompt生成的mask再送入CLIP”中,mask是指通过裁剪的小图,还是裁剪后二值图,还是mask原图啊
感谢作者的热心回复,请问,
- 我看您的代码中有一个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 这就相当于字典
- 在您提到的“点prompt生成的mask再送入CLIP”中,mask是指通过裁剪的小图,还是裁剪后二值图,还是mask原图啊 根据生成的Mask在原图上裁剪,如果模型支持动态大小就不需要Resize图像,如果模型仅支持固定大小,则需要先Resize
感谢作者的热心回复,请问,
- 我看您的代码中有一个Tokenlizer类,这个类中直接返回了一个数组(看起来是"a diagram", "a dog", "a cat"的token),那么如果我是其他的英文单词的话,怎么转换成这个token数组呢?
- 在您提到的“点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++我这边正在进行中
好的,再次感谢作者的无私贡献。谢谢您。我先根据您的指导,尝试在C++下实现这个功能
好的,再次感谢作者的无私贡献。谢谢您。我先根据您的指导,尝试在C++下实现这个功能
那太好了,我这边就等着你的实现了
好的,再次感谢作者的无私贡献。谢谢您。我先根据您的指导,尝试在C++下实现这个功能
那太好了,我这边就等着你的实现了
哈哈哈,我这边挺菜的,不一定搞的定呢
楼主好,我这边按照python的代码尝试了复现,目前遇到了一些问题,跟你分享一下,希望楼主分享一下你的建议:
目前我做到的程度,主要是跟python端的代码比(automatic_mask_generator.py):
- 在python端和C++端使用同样的输入图像(我保存了c++程序的中间图像,作为python那边准备进行CLIP图像编码的输入图)
- 在经过一定的预处理后,C++端的图像指针内容与python中图像数组的值是一样的
- 同样的文本token,经过CLIP文本模型编码后,在python端和c++端结果是一样的
输入图像我也查看了python的代码,应该说我实现的C++版本应该是大差不离的,以下是我生成的局部目标图
但是现在遇到的问题是,程序运行的结果与期望的结果不符,我测试的时候用到是一张“小猫”图像和一张“小狗”图像,但是:
-
小猫和小狗在经过文本与图像融合后,得分并没有差的很开 我使用了默认的“a dog”, “a cat”提示词,从数值上勉强可以区分,但是不理想
-
在我加入“person”之后的提示词,得分竟然高过了猫和狗 我使用了官方推荐的“a photo of dog”, “a photo of cat”提示词,
- 没有差的很开
我也遇到同样的问题,还没解决 下面是提供预训练模型的github提供的示例,它的运行结果貌似没有问题,可以跟它对比一下 https://github.com/Lednik7/CLIP-ONNX/blob/main/examples/readme_example.ipynb
楼主好,我这边按照python的代码尝试了复现,目前遇到了一些问题,跟你分享一下,希望楼主分享一下你的建议:
目前我做到的程度,主要是跟python端的代码比(automatic_mask_generator.py):
1. 在python端和C++端使用同样的输入图像(我保存了c++程序的中间图像,作为python那边准备进行CLIP图像编码的输入图) 2. 在经过一定的预处理后,C++端的图像指针内容与python中图像数组的值是一样的 3. 同样的文本token,经过CLIP文本模型编码后,在python端和c++端结果是一样的输入图像我也查看了python的代码,应该说我实现的C++版本应该是大差不离的,以下是我生成的局部目标图
![]()
但是现在遇到的问题是,程序运行的结果与期望的结果不符,我测试的时候用到是一张“小猫”图像和一张“小狗”图像,但是:
1. 小猫和小狗在经过文本与图像融合后,得分并没有差的很开 我使用了默认的“a dog”, “a cat”提示词,从数值上勉强可以区分,但是不理想  2. 在我加入“person”之后的提示词,得分竟然高过了猫和狗 我使用了官方推荐的“a photo of dog”, “a photo of cat”提示词, 
你好,我使用c++tensorrt部署了CLIP模型,出现了和你一样的情况,请问你解决了吗
- 没有差的很开
我也遇到同样的问题,还没解决 下面是提供预训练模型的github提供的示例,它的运行结果貌似没有问题,可以跟它对比一下 https://github.com/Lednik7/CLIP-ONNX/blob/main/examples/readme_example.ipynb
看了下这个代码,好像是把 输出的余弦相似度*100 再做了softmax
