IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> pytorch+u2net实现天空分割 -> 正文阅读

[人工智能]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].name

img_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实现天空分割,可用于替换天空变天效果

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

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

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-22 13:32:41  更:2021-08-22 13:33:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/1 12:44:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码