Featured image of post SAM:Segment Anything使用记录

SAM:Segment Anything使用记录

基于napari实现,segment anything本地部署,为SAM二次开发做准备

上周facebook发布了,语义分割大模型,是继NLP大模型ChatGPT发布以来,语义分割领域的一个重大突破,标志深度学习领域大模型,几乎已经是未来应用大趋势。刚看到论文的时候,笔者其实是很激动澎湃的,心情久久无法平静。目前segment anything源码和模型参数已经发布在github上,动手能力不错的朋友,其实应该已经把代码跑起来了,但也仅仅是跑代码。这个模型的革命性在于,可以以无样本、低样本触发学习,它的作用应该不仅仅是简单分割,在官网尝试了官方的简单demo以后,发现其在遥感领域大有可为,于是接着探索了一阵,发现了napari的科学图形显示库,那么两者结合,将能够完成一些非常震撼的操作,可以想象到,该模型的应用将极大改变传统遥感生产模式。

为了吃到这个螃蟹,笔者从github上搜索了许多,基于sam二次开发的gui和一些脚本,最终通过实验,成功将segment anything部署到本地使用,并充分体验了算法的强大,接下来讲讲如何部署该算法到本地使用。

下面这段介绍是使用ChatGPT生成:napari 是一个基于 Python 的交互式图像浏览器,它允许你轻松地可视化大型图像数据、三维数据和其他类型的数据,同时还提供了一些简单的交互功能,比如缩放、平移、旋转、选取和标记等。napari 具有可扩展性,因此用户可以添加自己的图层和插件,从而使其更加灵活和强大。它还具有良好的性能和内存管理能力,可以处理非常大的数据集。napari 是一个开源项目,其源代码可在 GitHub 上获得。它使用了许多其他的 Python 库,包括 NumPy、PyQt5、VisPy 和 SciPy 等。

不得不说ChatGPT极大解放双手,一些代码和包的解释和使用,它能很准确的给出来,省了很多码字时间。

但是,虽然介绍了这个包,其实这里并不需要单独安装,因为该包的作者在短短四天时间内,已经开发好了,基于Segment anything开发的UI界面,这才是本文的重点。

napari-segment-anything包

JoOkuma大佬把napari和SAM界面化,极大省了我和ChatGPT交流的时间(我构建UI界面通常是利用ChatGPT聊出来的,因为PyQt5函数我不是很熟),但是大佬codes写完了,readme写的却很少,我也在issue上提了点建议,但后续还得花时间去改,这里就先完整地写一遍流程。

该包的主页在这里,所需要的环境和安装命令也写得很明确,但这里再赘述一边吧:

1
pip install napari-segment-anything

非常建议用以上命令,在新建的conda环境中安装,会省心不少。

除此之外,该包是基于QT进行二次开发,自然也需要安装PyQt5,这个就简单了:

1
pip install pyqt5

以上命令皆操作于,conda新建的环境:

1
conda create -n Sam python=3.10

没错,本次所有代码的python版本都是基于3.10,如果有差异可以邮件和我交流。

安装进度十分缓慢,这是因为主算法segment anything涉及的包比较多,新环境下载需要时间,另外,如果下载缓慢可以切换清华源,亲测清华镜像下载很快。

如果使用代理,那就应该不需要我说更多了。

本地运行代码

安装的东西基本都在上个章节做好了,除了还有一个segment anything的参数文件,这个在运行本章介绍的代码以后,会自动下载,主要也是napari作者在代码中设置的。

在以上内容安装好了以后,运行以下代码即可运行SAM的UI程序:

1
2
3
4
5
6
7
from napari_segment_anything import SAMWidget
import napari

viewer = napari.Viewer()
sam_widget = SAMWidget(viewer)
viewer.window.add_dock_widget(sam_widget, name="name", area="right")
napari.run()

在首次运行该代码以后,如前文所述,会自动下载segment anything的pth参数文件:

Downloading https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth to C:\Users\User.cache\napari-segment-anything\sam_vit_h_4b8939.pth … Download progress: 5.1% (124.1/2445.7 MB)

等到下载完,就可以流畅运行该界面了。当然,如果提前下载好了该参数文件,可以进入napari_segment_anything源代码中修改该路径。找到conda虚拟环境中该文件夹,通过修改utils.py文件中get_weights_path的函数,将:

1
2
3
4
    weight_path = cache_dir / weight_url.split("/")[-1]

    # Download the weights if they don't exist
    if not weight_path.exists():

这代码修改成,自己想要的内容就行了,记得修改,if not判断,这里由于笔者没有修改需求,也就没有动源代码。当然如果实在代码水平有限,可以邮件和我交流。

使用

到了这里,应该就没什么问题了,界面运行起来napari_segment_anything主页介绍的一样,详细的使用还需要笔者进一步摸索,但大概的逻辑是明白的。比如导入图片:

操作上我也是跟着github主页的视频,随便点了几下,没啥问题:

如有更详细的操作指南,各位读者读完以后,可以和我交流交流。

end

颠覆性的cv大模型,这天终于到了,和传统的面向对象分割相比,似乎这种操作和工作方式,更被看好,我们且拭目以待。

Author by Jerrychoices
Built with Hugo
主题 StackJimmy 设计

本站访客数人次 总访问量 本文阅读量