pytorch+u2net实现天空分割

2023-11-10 14:10

本文主要是介绍pytorch+u2net实现天空分割,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、效果展示

(图片来源网络,如有侵权请联系删除)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对于天空和前景边界明显的场景,分割效果较好。如果边界不明显或者物体、衣物和场景天空类似,则可能效果不好。
如果期望达到更好的效果,除了对模型进一步训练外。还可以在获取到label图片后,进一步做处理。

二、摘要

用到的技术如下:

1、模型训练。使用pytorch版的u2net网络(https://gitee.com/throni0/U-2-Net)。

2、模型推理。使用onnxruntime,进行模型推理。模型训练中需要保存为onnx格式,或者训练完成后,将pytorch模型转换为onnx模型文件。

3、图像操作。使用Pillow,简单方便。

环境的配置,可自行查找资料。

三、模型训练

3.1 数据集

训练用的数据集,从网上找到了一些飞机分割的数据集,符合需求。又用ps做了一部分数据集。

在这里插入图片描述

将数据集放入项目中,运行u2net_train.py即可。

3.2 训练中断处理

一般训练需要很长时间,中途如果意外中断,或者希望调整参数,不得不停下。只需要稍微修改一下u2net_train.py即可。

# 载入模型结构
if model_name == 'u2net':net = U2NET(3, 1)elif model_name == 'u2netp':net = U2NETP(3, 1)# 改为如下:
path_checkpoint = '之前已经训练好的模型文件'
resume = True   # 从头开始训练,将其设为False即可
if model_name == 'u2net':net = U2NET(3, 1)if resume:checkpoint = torch.load(path_checkpoint)net.load_state_dict(checkpoint)
elif model_name == 'u2netp':net = U2NETP(3, 1)

3.3 模型转换

将训练生成的pth文件,转换为onnx运行文件。

model = U2NET(3, 1)pthfile = '训练生成的pth文件'
model.load_state_dict(torch.load(pthfile, map_location='cpu'))
model.eval()img_input = torch.autograd.Variable(torch.randn(1, 3, 320, 320))   # 输入的图片类型,batch_size:1,图片张量纬度(3, 320, 320)
input_names = ["sky"]
output_names = ["output"]
torch.onnx.export(model, img_input, "./saved_models/sky/sky14.onnx", verbose=True, input_names=input_names, output_names=output_names, opset_version=11, training=False)

四、推理

推理使用onnxruntime

session = onnxruntime.InferenceSession("转换的onnx文件")
input_name = session.get_inputs()[0].name
label_name = session.get_outputs()[0].nameimg_name_list = ['需要处理的图片']
image = Image.open(img_name_list[0])
w, h = image.size
dataset = SalObjDataset(img_name_list=img_name_list,lbl_name_list=[],transform=transforms.Compose([RescaleT(320), ToTensorLab(flag=0)])
)
data_loader = DataLoader(dataset,batch_size=1,shuffle=False,num_workers=1
)
im = list(data_loader)[0]['image']
inputs_test = im
inputs_test = inputs_test.type(torch.FloatTensor)
with torch.no_grad():inputs_test = Variable(inputs_test)
res = session.run([label_name], {input_name: inputs_test.numpy().astype(np.float32)})
result = torch.from_numpy(res[0])
pred = result[:, 0, :, :]
pred = normPRED(pred)
pred = pred.squeeze()
predict_np = pred.cpu().data.numpy()
im = Image.fromarray(predict_np * 255).convert('RGB')
im = im.resize((w, h), resample=Image.BILINEAR)
im.show()

其他

这里给出资源,包括数据集、已经训练好的onnx模型、onnxruntime推理脚本,配置环境后可直接运行。如果你对结果不满意,也可以使用数据集,对模型继续进行训练。

资源路径:pytorch+u2net实现天空分割,可用于替换天空变天效果

第二版:pytorch+u2net实现天空分割(二)

主业前端程序猿一枚。图片处理方面,作为业余爱好。如有错误,请各位大佬轻喷,谢谢!!😂

更多其他功能,可以扫下方二维码:
在这里插入图片描述

这篇关于pytorch+u2net实现天空分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383142

相关文章

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环