segment anything model(SAM)是Meta于2023年4月5日发布的分割基础模型。SAM 允许分割任何对象而无需微调。
可以在这里尝试SAM模型的效果。
分割效果这么好,都忍不住想用SAM来做场景的语义分割,realtime与否先放在一边,能不能用SAM来做语义分割。
一张图片是可以的,但是多张连续图片序列或视频,就会出现颜色频繁变化的问题,因为它的颜色不代表语义,颜色是随机的。SAM只有分块功能,并没有判断类别的功能。
想让连续的图片序列中语义保持连续,就出现了SAM-Track.
github地址
可以实现某一个目标的分割+跟踪,也可以跟踪第一帧里分割出来的anything.
不想在本地配置的同学们可以直接线上运行,
SAMTrack.ipynb
好处是cuda版本这些的都不用在意,直接就能运行。
缺点是隔一段时间就要全部重新运行,而且上传速度慢。
input可以选video, 也可以选image sequence.
上传之后,点segment everything for 1st frame(跟踪第一帧),
然后start tracking. 就可以坐等处理好的image sequence masks和mp4.
如果是本地配置,也可以按照SAMTrack.ipynb里的顺序执行,但是可能会出现问题。
python app.py
这时候会出现一个127.0.0.1的链接,进入连接就会出现上面的webUI,
但是当点segment everything for 1st frame时报错,
case 1:
NVIDIA driver too old
这是pytorch+cudatookit和本机的cuda不匹配的原因,本机只能用cuda11.X,
那么去pytorch官网找到匹配11.X的版本。
case 2:
ValueError: Unknown scheme for proxy URL URL(‘socks://127.0.0.1:10801/’)
你是否手动设置了network proxy?改为自动。
case 3:
OSError: We couldn’t connect to ‘https://huggingface.co’ to load this file
网络问题,把文件下载下来本地解决。
从报错内容得知路径为bert-base-uncased,
那么从这个站点下载需要的文件。
bert-base-uncased
下载这几个,
例如放在新建的bert_base文件夹,在Segment-and-Track-Anything/bert_base.
根据报错位置修改路径,比如
修改Segment-and-Track-Anything/src/groundingdino/groundingdino/util/ge
t_tokenlizer.py
#tokenizer = AutoTokenizer.from_pretrained(text_encoder_type)
tokenizer = AutoTokenizer.from_pretrained("Segment-and-Track-Anything/bert_base") #上面的文件放在新建的bert_base文件夹
#return BertModel.from_pretrained(text_encoder_type)
return BertModel.from_pretrained("Segment-and-Track-Anything/bert_base")
case 4:
Unable to load weights from pytorch checkpoint file
安装的pytorch版本和要求的不一致,
ipynb中的版本是torch 2.1.0+cu121, 试试看>=2.0。