上周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上提了点建议,但后续还得花时间去改,这里就先完整地写一遍流程。
该包的主页在这里,所需要的环境和安装命令也写得很明确,但这里再赘述一边吧:
|
|
非常建议用以上命令,在新建的conda环境中安装,会省心不少。
除此之外,该包是基于QT进行二次开发,自然也需要安装PyQt5,这个就简单了:
|
|
以上命令皆操作于,conda新建的环境:
|
|
没错,本次所有代码的python版本都是基于3.10,如果有差异可以邮件和我交流。
安装进度十分缓慢,这是因为主算法segment anything涉及的包比较多,新环境下载需要时间,另外,如果下载缓慢可以切换清华源,亲测清华镜像下载很快。
如果使用代理,那就应该不需要我说更多了。
本地运行代码
安装的东西基本都在上个章节做好了,除了还有一个segment anything的参数文件,这个在运行本章介绍的代码以后,会自动下载,主要也是napari作者在代码中设置的。
在以上内容安装好了以后,运行以下代码即可运行SAM的UI程序:
|
|
在首次运行该代码以后,如前文所述,会自动下载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
的函数,将:
|
|
这代码修改成,自己想要的内容就行了,记得修改,if not
判断,这里由于笔者没有修改需求,也就没有动源代码。当然如果实在代码水平有限,可以邮件和我交流。
使用
到了这里,应该就没什么问题了,界面运行起来napari_segment_anything主页介绍的一样,详细的使用还需要笔者进一步摸索,但大概的逻辑是明白的。比如导入图片:
操作上我也是跟着github主页的视频,随便点了几下,没啥问题:
如有更详细的操作指南,各位读者读完以后,可以和我交流交流。
end
颠覆性的cv大模型,这天终于到了,和传统的面向对象分割相比,似乎这种操作和工作方式,更被看好,我们且拭目以待。