Commit b43e8408 authored by yuhai's avatar yuhai
Browse files

Update README.md

parent d1ab6ab9
# Segment Anything
## 模型介绍
SAM是23年4月发布的先进图像分割模型。SAM分为图像编码器和快速提示编码器/掩码解码器,可以重用相同的image embedding图像嵌入(并摊销其成本)与不同的提示。给定image embedding图像嵌入,提示编码器和掩码解码器可以在web浏览器中预测掩码。为了使SAM实现模糊感知,设计它来预测单个提示的多个掩码,从而使SAM能够自然地处理模糊性。通过SAM模型,创建了一个包含1B个掩模和11M张图像的分段任意模型(SAM)和相应的数据集(SA-1B),以促进对计算机视觉基础模型的研究。
数据集标注问题,分为3个阶段。
1.SAM辅助人工标注
最开始的SAM使用coco数据集训练,当有了一定的标注数据集之后,会用新的标注数据重新训练,数据集多起来以后,会增加模型的复杂程度,比如把ViT-B换成ViT-H。
SAM模型会做出分割来辅助人工标注。由于模型不断精确,标注时间也在降低.
2.SAM半自动标注
这一阶段在于增加模型的多样性,标注次突出的物体。首先让模型标注一部分,然后人工标注没有被模型标注的部分。大部分都被模型标出来了,剩下的是更难分割的物体。
3.全自动标注
经过第一阶段,训练集多了,模型准确率有所提升,也有了mask的多样性。
第2阶段解决了提示信息有歧义情况下的预测。
现在,给模型提示32x32的grid,每个点都要对有效目标预测一系列的mask.
然后用IOU阈值选择confident masks. 最后用NMS滤掉多余的mask.
# SAM
## 论文
Segment Anything
- https://scontent-sin6-4.xx.fbcdn.net/v/t39.2365-6/10000000_900554171201033_1602411987825904100_n.pdf?_nc_cat=100&ccb=1-7&_nc_sid=3c67a6&_nc_ohc=3lEwwwRVaDkAX_j-2jP&_nc_ht=scontent-sin6-4.xx&oh=00_AfA1Y7gU67MmSiOb3vgzM2eTEzqZ92zTbbbQx8A-bTD5iw&oe=652C3227
## 模型结构
......@@ -35,15 +19,12 @@ SAM模型会做出分割来辅助人工标注。由于模型不断精确,标
解码器设计如图所示。使用两个转置卷积层将更新的图像嵌入放大4倍(现在相对于输入图像缩小了4倍)。将更新的输出token嵌入传递给一个小的3层MLP,它输出一个与扩展的图像嵌入的通道维度匹配的向量。最后,使用扩展的图像嵌入和MLP的输出进行空间点乘,预测出一个掩码。Transformer使用256的嵌入维度。在64×64图像嵌入的交叉注视层中,查询、键和值通道维度为128。所有注意力层都使用8个头。用于放大输出图像嵌入的转置卷积是2×2,步幅2,输出通道维度为64和32,并具有GELU激活。它们通过层归一化来分隔。
## 数据集
本项目的测试数据集为项目同级目录下的datasets文件夹,里面具有测试样例。
完整数据集可在[这里](https://ai.facebook.com/datasets/segment-anything-downloads/)进行下载
## 算法原理
## Segment Anything掩码生成
注:官网提供了生成掩码的预训练权重和生成掩码的脚本(没有提供训练脚本)。
SAM分为图像编码器和快速提示编码器/掩码解码器,可以重用相同的image embedding图像嵌入(并摊销其成本)与不同的提示。给定image embedding图像嵌入,提示编码器和掩码解码器可以在web浏览器中预测掩码。为了使SAM实现模糊感知,设计它来预测单个提示的多个掩码,从而使SAM能够自然地处理模糊性。
### 环境配置
## 环境配置
### Docker(方法一)
[光源](https://www.sourcefind.cn/#/service-list)拉取镜像
```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.10.0-centos7.6-dtk-22.10-py39-latest
......@@ -52,9 +33,33 @@ docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.10.0-centos7.6-dtk
```
pip install opencv-python pycocotools matplotlib onnxruntime onnx
```
### Anaconda(方法二)
直接使用pip install的方式安装
```
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 .
```
## 数据集
数据集名称:SA-1B Dataset
完整数据集可在[这里](https://ai.facebook.com/datasets/segment-anything-downloads/)进行下载
项目中用于试验训练的迷你数据集见./notebooks/images
### 掩码生成指令
## 微调
官网提供了生成掩码的预训练权重和生成掩码的脚本,没有提供训练脚本,但可使用第三方提供的示例脚本微调
如果您有兴趣,参考[这里](https://github.com/luca-medeiros/lightning-sam/blob/main/lightning_sam/train.py)
###单机单卡
```
git clone https://github.com/luca-medeiros/lightning-sam.git
cd lightning-sam
pip install .
cd lightning-sam
python train.py
```
### 推理
```
python scripts/amg.py --checkpoint <path/to/checkpoint> --model-type <model_type> --input <image_or_folder> --output <path/to/output>
```
......@@ -67,15 +72,21 @@ python scripts/amg.py --checkpoint <path/to/checkpoint> --model-type <model_type
<image_or_folder> 代表输入图片或者文件夹的路径
<path/to/output> 代表分割结果保存路径
### 掩码生成结果
掩码生成的部分结果在同级目录outputs中可以查看
### result
掩码生成的部分结果在同级目录outputs中可以查看,结果示例如下
![](./ouputs/000000524456/0.png)
官方提供demo可在[这里](https://segment-anything.com/demo)试用
## 参考
## 应用场景
### 算法类别
视觉算法:图像分割
### 热点应用行业
SAM算法能智能抠图,可以用于识别图像和视频中的物体,具有广泛的通用性。SAM作为开源且更通用AI系统的强大组件,赋能工业、煤矿、医学影像、安防监控等多场景。
热点应用行业:能源、医疗、网安
## 源码仓库及问题反馈
https://developer.hpccube.com/codes/modelzoo/sam_pytorch
## 参考资料
https://github.com/facebookresearch/segment-anything
https://github.com/luca-medeiros/lightning-sam/blob/main/lightning_sam(第三方SAM微调)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment