最近每天打开微信看到10个公众号里面差不多有11个都在各种玩赚chatGPT,每个都在说是各种大好风口,哎,看得眼睛都是累的。
今天下午无意间看到Meta发布了一款号称能分割一切的CV大模型,CV圈也开始卷起来,今年各种大模型要爆发了感觉。
吃瓜群众满怀好奇,点开了解一下。
官方论文在这里,感兴趣可以自行阅读。




官方同时也开源了项目,地址在这里,如下所示:

可以看到:才开源了一天的时间就已经有6k的star量了,后续增长感觉会更猛的!

官方也给出来了数据集地址,在这里,如下所示:

有需要的话可以自行下载使用即可。
当然了这么精彩的技术自然不会少的了技术博客的介绍,官方的技术博客在这里。
为了能让大家第一时间上手体验,这里官方也是开放出来了Demo地址,在这里,如下所示:

上传一张我本地的图片,用的就是上一篇博客摔倒检测的数据集,如下:

我添加了一个box,瞬间就给我分割出来了,如下:

随着光标的移动,模型给出来的响应也是很快的:




甚至还可以一键cutout所有的子对象如下:



很强大了已经。
官方这里也提供了很多实例图片,简单看下:

选择小狗试试吧:


添加box对指定区域直接分割:

再来一张:

效果如下:

指定区域分割:

最后再来试一下:

效果如下:

感兴趣的话都可以自己玩玩体验一下。
当然了如果想要自己安装使用也是可以的,官方同样给了安装说明如下:
先安装一些基础依赖
pip install opencv-python pycocotools matplotlib onnxruntime onnx
安装SAM
方法一:
pip install git+https://github.com/facebookresearch/segment-anything.git
方法二:
git clone git@github.com:facebookresearch/segment-anything.git
cd segment-anything; pip install -e .
模型库在这里,需要的自行下载即可。
使用方法也很简单如下:
#from a given prompt:
from segment_anything import build_sam, SamPredictor
predictor = SamPredictor(build_sam(checkpoint="</path/to/model.pth>"))
predictor.set_image(<your_image>)
masks, _, _ = predictor.predict(<input_prompts>)
或者也可以如下使用:
#generate masks for an entire image:
from segment_anything import build_sam, SamAutomaticMaskGenerator
mask_generator = SamAutomaticMaskGenerator(build_sam(checkpoint="</path/to/model.pth>"))
masks = mask_generator_generate(<your_image>)
当然了,mask也可以通过命令行生成,如下:
python scripts/amg.py --checkpoint <path/to/sam/checkpoint> --input <image_or_folder> --output <output_directory>
关于两种不同的调用计算方式,官方也都给出来了详细的demo样例如下:
automatic_mask_generator_example
想要导出onnx格式的话也是可以的,如下:
python scripts/export_onnx_model.py --checkpoint <path/to/checkpoint> --output <path/to/output>
这里一共提供了H、L、B三种不同size的模型,如下:
ViT-H SAM model
ViT-L SAM model
ViT-B SAM model
三种不同模型体积如下:

可以根据自己的兴趣自由使用即可。
今天就简单到这里了,后面找时间在仔细看看吧!
这个问题在这里已经有了答案:Rubymetaclassconfusion(4个答案)关闭7年前。我对Ruby对象模型不太了解。首先,Ruby中的一切都是Class的实例吗??这些都产生true:pObject.instance_of?(Class)pClass.instance_of?(Class)pModule.instance_of?(Class)pBasicObject.instance_of?(Class)classHello;endpHello.instance_of?(Class)我不太明白这怎么可能,如果Object是Class的父类(superclass),它怎么可能都
给定一个Ruby数组字符串,其中一些项目在引号中包含逗号:my_string.inspect#=>"\"hey,you\",21"我怎样才能得到一个数组:["hey,you","21"] 最佳答案 Ruby标准CSV库的.parse_csv就是这样做的。require'csv'"\"hey,you\",21".parse_csv#=>["hey,you","21"] 关于ruby-用逗号将字符串分割成数组,除非逗号在引号内,我们在StackOverflow上找到一个类似的问题:
一、什么是web项目ui自动化测试?通过测试工具模拟人为操控浏览器,使软件按照测试人员的预定计划自动执行测试的一种方式,可以完成许多手工测试无法完成或者不易实现的繁琐工作。正确使用自动化测试,可以更全面的对软件进行测试,从而提高软件质量进而缩短迭代周期。二、构建测试用例的“九部曲”(一)创建流程包划分功能模块日常测试活动中,都会根据功能模块进行拆分,所以在设计器中我们可以通过创建流程包的方式来拆分需要测试的功能模块,如下图中操作创建一个电脑流程包并且取名为对应的功能模块名称,如果有多个功能模块就创建多个对应的流程包,实在RPA设计器有易用的图形可视化界面,方便管理较多的功能模块。(二)在流程包
我有这样的字符串'some-dasd\dasd-dasdas\dasdas-dasd-das\dsad'。我需要通过两个不同的符号'\'和'-'将字符串拆分为数组,所以我想得到数组['some','dasd','dasd','dasdas','dasdas','dasd','das','dsad']。最好的方法是什么? 最佳答案 "ome-dasd\dasd-dasdas\dasdas-dasd-das\dsad".split(/\\|-/)应该可以解决问题。 关于ruby-由两个不同的
考虑到在Ruby编程语言中一切都被称为对象,我有把握地假设向方法传递参数是通过引用完成的。然而,下面这个小例子让我感到困惑:$string="String"defchanger(s)s=1endchanger($string)puts$string.classString=>nil如您所见,原始对象未被修改,我想知道原因,以及如何实现所需的行为,即。获取方法以实际更改其参数引用的对象。 最佳答案 Ruby的工作方式是按值传递和按引用传递的组合。事实上,Ruby使用引用传递值。您可以在以下线程中阅读更多内容:Passbyreferen
我需要一个正则表达式来用逗号和/或空格分隔字符串,但忽略带连字符的单词——最好的方法是什么?所以,例如——我想要这个……"foobar,zap-foo,baz".split(/[\s]+/)返回["foo","bar","zap-foo","baz"]但是当我这样做时,它包括像这样的逗号......["foo","bar,","zap-foo,","baz"] 最佳答案 "foobar,zap-foo,baz".split(/[\s,]+/) 关于ruby-正则表达式用逗号和空格分割字符
ruby中的一切都是对象吗?这是否包括Fixnum? 最佳答案 取决于您所说的“一切”是什么意思。Fixnum是,正如其他人所展示的那样。类也是,作为类Class的实例。方法、运算符和block不是,但可以由对象(Proc)包装。简单的赋值不是,也不能。while之类的语句也不是也不能。评论显然也属于后者。大多数真正重要的东西,即您希望操纵的东西,都是对象(或者可以包装在对象中)。 关于ruby-ruby中的一切都是对象吗?,我们在StackOverflow上找到一个类似的问题:
因此brewupdate将zlib从1.2.7更新到1.2.8。是的。后来我注意到运行bundle时出现问题。我得到了zlib的LoadError。ErrorloadingRubyGemsplugin"/Users/michael/.rvm/gems/ruby-2.0.0-p0@global/gems/rubygems-bundler-1.1.1/lib/rubygems_plugin.rb":dlopen(/Users/michael/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/x86_64-darwin12.3.0/zlib.bundle,9)
如果觉得文章还行,能点个赞嘛?您的点赞是我更新的动力!!目录SAM的demo源码使用结合SAM,进行人机交互ui使用的案例介绍:最近新发现的,可以利用这个模型,进行一个简单的UI使用,效果如下:labelimg结合SAM实现半自动标注软件SAM的demo源码使用首先说明这个链接里面的代码是关于demo的,目前还不能训练。原仓库https://github.com/facebookresearch/segment-anything我们都知道在CV领域比较重要的处理图像的几个方向有:识别,测量(标定),三维物体重建等。识别是最基础也是最重要的,那么分割在识别里面更是重中之重,所以这个大模型分割真的
我培训了网络以获取数据。一旦我运行:查看概率图plt.imshow(prob[1],cmap='hot',interpolation='nearest')plt.show()这是概率图Object1:我如何从概率图中获取固体分割(甚至考虑属于类概率较低的点)?谢谢看答案有几种方法可以获取可靠的细分。一种是使用一种聚类算法来定义感兴趣的区域。也许是一个简单的阈值截止pthreshold)其次是密度填充算法将适合您的需求。