yatengLG / ISAT_with_segment_anything

Labeling tool with SAM(segment anything model),supports SAM, SAM2, sam-hq, MobileSAM EdgeSAM etc.交互式半自动图像标注工具
https://www.yatenglg.cn/isat/
Other
1.29k stars 136 forks source link

能否支持client-server模式 Can it support the client-server mode? #204

Closed yellowYuga closed 1 month ago

yellowYuga commented 2 months ago

感谢这个非常棒的工具。 请问能否支持client-server模式,本地提供工具与图片点击的prompt的坐标点,由服务器完成模型的推理运算,因为很多标注人员没有gpu这样比较符合实际情况。 顺便问一下,如果不能支持的话有无相关的支持计划?

Thank you for this excellent tool.

I would like to ask if it can support the client-server mode. The local side provides the tool and the coordinate points of the image click prompt, and the server completes the model's reasoning and computing, because many annotators do not have GPUs, which is more in line with the actual situation.

By the way, if it cannot be supported, is there any related support plan?

yatengLG commented 2 months ago

现在三不支持的,有计划推出client-server的版本,但是需要等我有时间才会更新T.T,毕竟工作量还是蛮大的。

软件实际上在没有gpu的电脑上也不会卡顿,只要用小模型,比如mobile-sam和sam-hq-tiny。

hua1024 commented 1 month ago

蹲一下后续,我之前在服务器试过,走flask-api的方式,但是每次post图片和prompt过去,都要重新img encode一次,导致win平台使用起来要等挺久的,没想到好的解决办法

yatengLG commented 1 month ago

蹲一下后续,我之前在服务器试过,走flask-api的方式,但是每次post图片和prompt过去,都要重新img encode一次,导致win平台使用起来要等挺久的,没想到好的解决办法

经过近期的尝试,最终决定不推出client-server的版本,主要原因有几点:

  1. 原先计划将sam的encode部分放到服务端,decode放到客户端。本地图片上传到服务器进行encode,返回编码后的特征,然后在客户端进行交互以及decode。但现在加入了sam2的视频分割功能,sam2初始化需要将所有图片进行init_state,这需要将所有图片都上传到服务器一次,这个等待时间会超长,并且视频分割的计算也需要放到服务器进行计算。这样的处理逻辑会很割裂。
  2. 如果将客户端只保留显示和交互的功能,数据、计算均放到服务端进行,可以解决上面的问题。但又和isat的设计初衷不一致。

如果你需要client-server模式且只用图片标注的话,延迟问题可以通过以下方式解决:

  1. 服务端只负责encode
  2. 客户端负责交互prompt和decode(这部分计算量超小,cpu完全没有卡顿感的)
  3. 做一个特征缓存,每次切换图片,查看图片是否存在特征缓存,如果存在,则可以直接在客户端进行prompt以及decode;如果不存在,将图片post到服务端,进行encode,返回图片特征。 这样可以有效解决卡顿问题,ISAT现在也使用了这种方式,详细代码可见https://github.com/yatengLG/ISAT_with_segment_anything/blob/2d5b268f077103d66c5b5fb16a74866a7e9e5ceb/ISAT/widgets/mainwindow.py#L71