小白能很快学会但可能不太好理解的AI切图——segment_anything

898 阅读4分钟

前言

夭寿了,公司要搞人工智能,首先试点的就是segment_anything,要将AI切图集成到我们现有的服务上去。作为一名nodejs开发,除了在网上CV过几段python代码,这玩意我是毛都没接触过啊,时间紧迫,也由不得学没学过了,只能硬着头皮上了。

这篇文章只会简单介绍如何使用,因为具体的逻辑我还没完全搞清楚,这段时间会集中精力去折腾几天,等大概搞清楚怎么回事了再来好好讲讲,可以关注一下等等后文。

什么是segment_anything

segment_anything(下面简称segment),号称能够智能分割出任何图片,且分割细度准得一批,包含了1100万张训练集,最重要的是免费,开源,简直赛博菩萨(不是那种菩萨)。然后,这是官网,这是代码

环境准备

这里很关键,这个服务的某些依赖对python版本是有要求的,如果是小白到一定程度的话,建议使用3.9.13版本,因为我是用这个版本跑起来的,之前的3.10版本执行失败了。

关于下载python,我是在windows应用商店搜索下载的,我曾经下载安装包自己安装过,但总会有莫名其妙的问题,执行python命令没有反应,在这里建议有条件进商店的小白尽量不要自己折腾。

image.png

代码下载:

git clone git@github.com:facebookresearch/segment-anything.git
cd segment-anything; pip install -e .

注意第二行最后面有个 “.” ,别漏了。

安装依赖

pip install opencv-python pycocotools matplotlib onnxruntime onnx

如果安装完了发现依赖还是没有,建议使用:

python -m pip install opencv-python pycocotools matplotlib onnxruntime onnx

下载模型包:

建议使用第一个默认版本

编辑器我这里默认你用的是vscode了,因为我用的是这个

这时你打开大概是这样的

image.png

当然,你没有explorer.py文件

手动创建一个,把下面这段代码复制进去

import numpy as np
import cv2
from segment_anything import sam_model_registry, SamPredictor

# checkpoint = "sam_vit_b_01ec64.pth"
checkpoint = "notebooks/sam_vit_h_4b8939.pth"
model_type = "vit_h"
sam = sam_model_registry[model_type](checkpoint=checkpoint)
sam.to(device='cuda')
predictor = SamPredictor(sam)


image_name = "图片文件名"

image = cv2.imread('notebooks/images/' + image_name)
predictor.set_image(image)
image_embedding = predictor.get_image_embedding().cpu().numpy()
np.save(image_name + ".npy", image_embedding)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

你也没有yarn.lock文件,这个文件你可以理解为在应用启动的时候创建的,在当前目录打开命令行,执行

cd demo
npm install --g yarn

如果你连npm也没有,建议找篇文章安装一下node环境

前面提到的模型文件下载好之后放在这个文件夹下面

image.png

点开文件夹下面的 ipynb 文件,编辑器会提示让你安装个什么插件,装就是了

安装完之后上面会有一栏这个,点全部运行

image.png

如果遇到"XX模块没有"之类的报错,用 pip install 或者 python -m pip install安装就好了

如果装上了依赖依然报错,就在里面添加以下代码执行一下

import os
os.sys.executable

看看当前系统使用的python地址和你安装的地址是不是同一个

image.png

如果遇到 未使用 touch 模块的报错,查看一下当前用的torch版本是否是CUDA版本

import os
import torch

os.sys.executable
torch.__version__

image.png

在这里又涉及到你的CUDA版本号的问题了,如何知道你的CUDA版本号应该选择多少呢?

打开你的英伟达控制面板(什么你连显卡面板都没有?去英伟达官网自己下)

image.png

什么你连显卡都没有?或者说你用的是A卡?CUDA支持使用CPU运行,但是程序的代码得改,我看看有多少人没有N卡还想跑AI的,再考虑出个教程。

我这里提示的是 12.1.112 ,所以去到 pytouch官网选择对应的版本安装,这里注意pip3如果不能用的话,还是用 pip 或者 python -m pip

image.png

CUDA官网安装CUDA

image.png

之前的ipynb文件执行完成后,会在notebooks文件夹下生成两个onnx文件,复制到demo/model文件夹下

image.png

启动

将你希望切割的图片放在notebooks/images文件夹下,将图片完整名字(如:back.png)替换掉image_name中的名字,在命令行中执行:

python .\explorer.py

执行完成后会在项目根目录下生成一个 npy文件,将图片文件和npy文件放入 demo/src/assets/data 目录下, 修改src/App.tsx文件,替换第21~23行的内容,改为你图片、npy和onnx文件的名字,如:

const IMAGE_PATH = "/assets/data/back.png";
const IMAGE_EMBEDDING = "/assets/data/back.png.npy";
const MODEL_DIR = "/model/sam_onnx_quantized_example.onnx";

修改完成后,命令行进入demo文件夹下,执行:

yarn && yarn start

你就可以在localhost:8080看到被裁剪的图片了

image.png