使用sam微调自己的分割数据集(prompt_encoder为mask)

1. 前言

最近在进行图像分割的过程中想尝试一下sam的效果,发现网上大部分的微调都是基于point和bbox的教程参考,mask的教程很少,所以特此写文章记录一下自己的过程

2.开始微调sam

2.1定义dataset和dataload

1.需要注意的地方时sam要读取的数据格式为rgb的格式 ,我是使用cv2读取的图像要进行转换
2.batch_size需要设置为1(很重要)不然会报错,具体请看RuntimeError when using batch size > 1

 image = cv2.imread(f'xx.png')
 image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
2.2 定义模型,学习率和损失函数
# model init
model_type = 'vit_b'
checkpoint = 'sam_vit_b_01ec64.pth'
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
sam = sam_model_registry[model_type](checkpoint)
sam.to(device)
sam.train()
predictor = SamPredictor(sam)
print(f"finished loading sam")

# optimizer and scheduler
num_epochs = opt.epochs
lr = 1e-4
momentum = 0.937
weight_decay = 5e-4
optimizer = torch.optim.AdamW(sam.mask_decoder.parameters(), lr=lr, weight_decay=weight_decay)
BCEseg = nn.BCELoss().to(device)
2.3 将image和label转换为相应的格式

通过image_encoder 获得图像特征暂时发现有三种不同的方式

2.3.1当 输入是经过transformer和dataload出来的tensor数据,获得image特征

在prompt_encoder的定义中 self.mask_input_size = (4 * image_embedding_size[0], 4 * image_embedding_size[1])大小为256*256,所以在要提前进行resize

predictor =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值