【图像抠图】【深度学习】Ubuntu18.04下GFM官方代码Pytorch实现

news/2024/4/27 9:54:58/文章来源:https://blog.csdn.net/yangyu0515/article/details/129546741

【图像抠图】【深度学习】Ubuntu18.04下GFM官方代码Pytorch实现

提示:最近开始在【图像抠图】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。


文章目录

  • 【图像抠图】【深度学习】Ubuntu18.04下GFM官方代码Pytorch实现
  • 前言
  • 数据集说明
    • 1.AM-2k【自然动物】
    • 2.BG-20k【背景】
  • GFM模型运行
    • 下载源码并安装环境
    • 下载数据集
    • 训练AM-2k
    • 测试AM-2k
    • 测试个人数据集
  • 总结


前言

GFM是由悉尼大学的Li J, Zhang J等人在《Bridging Composite and Real: Towards End-to-end Deep Image Matting [IJCV-2022]》【论文地址】一文中提出的模型,研究了语义和细节对图像抠图的不同作用,并将任务分解为两个并行的子任务:高级语义分割和低级细节抠图。
在详细解析GFM网络之前,首要任务是搭建GFM【Pytorch-demo地址】所需的运行环境,并模型完成训练和测试工作,展开后续工作才有意义。


数据集说明

1.AM-2k【自然动物】

AM-2k包含来自 20 个类别的 2,000 张高分辨率自然动物图像以及手动标记的 alpha 遮罩。
百度云链接【提取码:29r1】:

2.BG-20k【背景】

BG-20k包含 20,000 张排除显着物体的高分辨率背景图像,可用于帮助生成高质量的合成数据。
百度云链接【提取码:dffp】:


GFM模型运行

用docker搭建Ubuntu18.04的朋友查看这里

下载源码并安装环境

在Ubuntu18.04环境下装anaconda环境,方便搭建专用于PointNet模型的虚拟环境。
【Pytorch-教程】

# 创建虚拟环境
conda create -n gfm python=3.7.7
# 查看新环境是否安装成功
conda env list
# 激活环境
conda activate gfm
# 下载githup源代码到合适文件夹,并cd到代码文件夹内
git clone https://github.com/JizhiziLi/GFM.git
cd GFM
# 通过清华源,下载所需的第三方包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# 分别安装pytorch和torchvision
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
# 查看所有安装的包
pip list
conda list

最终的安装的所有包。

检查torch版,已经安装torch-gpu版本

# 查看pytorch版本
import torch
print(torch.__version__)
# 查看cuda版本
print(torch.version.cuda)
# 查看cuda是否可用
print(torch.cuda.is_available())
# 查看可用cuda数量
print(torch.cuda.device_count())

下载数据集

下载以下五个数据集(本人放置在Documents/目录下,方便学习其他模型共用数据集)
【AM-2k,提取码:29r1】
【BG-20k,提取码:dffp】
【MS COCO/train ,提取码:gi5l 】
【am2k_fg_denoise】
【bg20k_train_denoise】

# 看情况挨个或者全部一起移动到Documents/目录下
sudo mv am2k_fg_denoise.zip /root/Documents/
sudo mv *.zip /root/Documents/
cd /root/Documents/


解压五个数据集

# 看情况挨个或者全部一起解压文件
sudo unzip am2k_fg_denoise.zip
ls *.zip | xargs -n1 unzip

AM-2k数据集结构

BG-20k数据集结构

MS COCO/train数据集结构


这和分别是AM-2k和BG-20k的噪声训练图片,根据上图,是要对应加入到和train目录下的。
am2k_fg_denoise移动到AM-2k/train目录下并重命名为fg_denoise:


bg20k_train_denoise移动到BG-20k/目录下并重命名为train_denoise:
在这里插入图片描述
设置"GFM/core/config.py"

训练AM-2k

# 在GFM目录下执行命令,设置sh文件执行权限
chmod +x scripts/train/*
# 源码提供了五种不同训练
# Train on the ORI-Track
./scripts/train/train_ori.sh			# 1
./scripts/train/train_ori_easier.sh		# 2
# Train on the COMP-Track
./scripts/train/train_hd_rssn.sh		# 3
./scripts/train/train_hd_rssn_easier.sh	# 4
./scripts/train/train_coco.sh			# 5

关于几种训练方式区别和用途,博主会在学习研究了论文和代码之后再作出自己的讲解。
这里以train_ori.sh为例,train_ori.sh文件内容

batchsizePerGPU=32
GPUNum=1
batchsize=`expr $batchsizePerGPU \* $GPUNum`
backbone='r34'
rosta='TT'
bg_choice='original'
fg_generate='closed_form'
nEpochs=5
lr=0.00001
threads=8
nickname=gfm_ori_track
python core/train.py \--logname=$nickname \--backbone=$backbone \--rosta=$rosta \--batchSize=$batchsize \--nEpochs=$nEpochs \--lr=$lr \--threads=$threads \--bg_choice=$bg_choice \--fg_generate=$fg_generate \--model_save_dir=models/trained/$nickname/ \


使用docker可能出现的错误"ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm)"表示共享内存不够了。

# 查看磁盘
df -h


博主容器的shared memory默认只有64MB。但训练程序中,DataLoader设置的threads(线程,也经常写作workers)数目比较多,该程序中为8,这些workers通过共享内存进行协作,导致默认的共享内存不够用。
解决方法:

  1. 将threads数量降低,例如设置threads=0;
  2. 将容器的共享内存加大,可通过–ipc=host或–shm-size进行设置。【推荐

注:windows系统下的docker操作比较操蛋,不能更改容器的设置(有知道的朋友欢迎在评论区指导),只有创建容器时才能设置,为了保存容器的内容,因此建议曲线救国,先将容器制作成镜像,再用镜像重新新建容器。
【docker常用指令】

# 制作镜像
docker commit container_id image_name:tag
# eg: docker commit 2c60bf255adb deeplearn:1.0
# 创建容器(gpu版本)
docker run -it --shm-size 8g --gpus all --name container_name -p 5900:5900 -p 22:22 -d image_name:tag
# eg: docker run -it --shm-size 8g --gpus all --name Pytorch_for_ImageMatting_ubu18 -p 5900:5900 -p 22:22 -d deeplearn:1.0

重新新建容器后查看磁盘可以看到shared memory已经修改成了8g:

开始训练:

训练的详细数据保存在logs/train_logs/目录下的日志文件中:

源码作者只保存最后一次的模型权重(博主epoch仅设为5,方便讲解):

测试AM-2k

博主这里使用源码作者提供的预训练权重(Train on the ORI-Track )作为测试

# 在GFM目录下执行命令,设置sh文件执行权限
chmod +x scripts/test/*
# 测试
./scripts/test/test_dataset.sh

预训练模型的权重与test_dataset.sh的配置要对应
test_dataset.sh文件内容

backbone='r34'
rosta='TT'
model_path='models/pretrained/gfm_r34_tt.pth'
dataset_choice='AM_2K'
test_choice='HYBRID'
pred_choice=3
test_result_dir='results/am2k_gfm_r34_tt/'
nickname='am2k_gfm_r34_tt'
python core/test.py \--cuda \--backbone=$backbone \--rosta=$rosta \--model_path=$model_path \--test_choice=$test_choice \--dataset_choice=$dataset_choice \--pred_choice=$pred_choice \--test_result_dir=$test_result_dir \--logname=$nickname \

开始测试:

测试的详细数据保存在logs/test_logs/目录下的日志文件中,这里还得自己创建test_logs目录:

测试结果:

测试个人数据集

博主这里还是使用源码作者提供的预训练权重(Train on the ORI-Track )作为测试。

# 测试
./scripts/test/test_samples.sh

预训练模型的权重与test_samples.sh的配置要对应
test_samples.sh文件内容

backbone='r34'
rosta='TT'
model_path='models/pretrained/gfm_r34_tt.pth'
dataset_choice='SAMPLES'
test_choice='HYBRID'
pred_choice=3
python core/test.py \--cuda \--backbone=$backbone \--rosta=$rosta \--model_path=$model_path \--test_choice=$test_choice \--dataset_choice=$dataset_choice \--pred_choice=$pred_choice \

将自己的数据集保存在samples/original/目录下,执行命令生成目标的alpha和彩色图。


总结

尽可能简单、详细的介绍GFM的安装流程以及解决了安装过程中可能存在的问题。后续会根据自己学到的知识结合个人理解讲解GFM的原理和代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103231.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu更新软件下载更新与移除

目录 一、更新软件源 二、下载与安装软件 三、如何移除软件 四、Ubuntu商店下载软件 一、更新软件源 更新Ubuntu软件源的操作步骤,更新软件源的目的就是,将在Ubuntu官网的软件源更改到本地,也就是国内的软件源,这样的话下载安…

HTML+CSS+JS 学习笔记(三)———Javascript(下)

🌱博客主页:大寄一场. 🌱系列专栏:前端 🌱往期回顾:HTMLCSSJS 学习笔记(三)———Javascript(上) 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 目录 JavaScrip…

ES6 新特性的let--const 解构赋值--模板字符串--对象相关新特性--箭头函数--综合代码示例

目录 ES6 新特性 ES6 基本介绍 ES6 是什么? let 声明变量 演示 let 的基本使用 注意事项和使用细节 代码演示 : const 声明常量/只读变量 应用实例 注意事项和使用细节 解构赋值 基本介绍 应用实例-数组解构 应用实例-对象解构 模板字符串 基本介绍 应用实例…

一文带你学会如何写一份糟糕透顶的简历

我们每个人几乎都会面对找工作这件事,而找工作或者说求职首先就是要写一份简历。今天狗哥将以一个不同的视角带你写一份无与伦比,糟糕透顶的求职简历,说实话,其实几年前,我就是这么写的。 目录 1. 文件名 2. 基本信…

OpenAI ChatGPT 能取代多少程序员的工作?导致失业吗?

阅读原文:https://bysocket.com/openai-chatgpt-vs-developer/ ChatGPT 能取代多少程序员的工作?导致我们程序员失业吗?这是一个很好的话题,我这里分享下: 一、ChatGPT 是什么?有什么作用 ChatGPT是一种…

关于 OpenShift(OKD) 网络 Service、Routes的一些笔记

写在前面 参加考试,分享一些学习 OpenShift 的笔记博文内容为 OpenShift 网络相关组件 Service、Routes 很浅的一些认识学习环境为 openshift v3 的版本,有些旧这里如果专门学习 openshift ,建议学习 v4 版本理解不足小伙伴帮忙指正 傍晚时分…

开源 AI 辅助编程工具 AutoDev 现已上架 Jetbrains 插件市场

我们非常高兴地宣布 AutoDev v0.2.0 的发布!AutoDev 是一款强大的 AI 辅助编程工具,可以与 Jetbrains 系列 IDE 无缝集成(VS Code 支持正在开发中)。通过与需求管理系统(如 Github Issue 等)直接对接&#…

Vue收集表单数据学习笔记

收集表单数据 v-model双向数据绑定,收集的是input框的value,单选按钮不存在value,就像代码中的男女选项,即使绑定性别v-model“sex”,控制台依然不能接收性别的值,因为没有value值,&#xff0c…

欧几里得算法、扩展欧几里得算法(特解、应用、通解)

文章目录 1. 欧几里得算法(也叫辗转相除法)1.1 直接上模拟1.2 几何理解1.3 用代数方法证明 g c d ( a , b ) g c d ( b , a % b ) gcd(a, b) gcd(b, a \% b) gcd(a,b)gcd(b,a%b)1.3.1 左推右: g c d ( a , b ) g c d ( b , a % b ) gcd(a…

Handbook of MusicPsychology 音乐心理学手册 ( 多纳德·霍杰斯 Donald.A.Hodges) 笔记

由两个以上的音组成的结合音,除了该声波的波形,人耳会另外脑补出不存在的波形 频率相距较远的一些音与频率相距较近的一些音,前者累加的响度比后者要大 除了泛音部分,音的起声部分也是音色辨别的关键 音高、响度、音色、时值&a…

LINUX的系统管理与维护命令

文章目录 一、LINUX的系统管理与维护命令总结 一、LINUX的系统管理与维护命令 - Linux ls命令:显示指定工作目录下的内容 Linux pwd命令:显示当前工作目录 Linux cd命令:切换工作目录 Linux date命令:显示或设置系统时间 Linux su命令:切换用户 Linux clear命令:清除屏幕 Li…

Java编程设计语言-集合类

API(application programming interface)是JDK的重要组成部分,API提供了Java程序与运行它的系统软件(Java虚拟机)之间的接口,可以帮助开发者方便、快捷地开发Java程序 集合在程序设计中是一种重要的是数据结构,Java中提…

Semantic Kernel 知多少 | 开启面向 AI 编程新篇章

在 ChatGPT 火热的当下, 即使没有上手亲自体验,想必也对 ChatGPT 的强大略有耳闻。当一些人在对 ChatGPT 犹犹豫豫之时,一些敏锐的企业主和开发者们已经急不可耐地开展基于 ChatGPT 模型 AI 应用的落地探索。 因此,可以明确预见的是&#xf…

Java+Angular开发的医院信息管理系统源码,系统部署于云端,支持多租户

云HIS系统源码,采用云端SaaS服务的方式提供 基于云计算技术的B/S架构的云HIS系统源码,采用云端SaaS服务的方式提供,使用用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、…

系统分析师之软件工程(十二)

目录 一、 软件开发生命周期 1.1 开发阶段工作细分 二、软件开发模型 2.1 瀑布模型 2.2 原型模型 2.3 增量模型与螺旋模型 2.4 V模型 2.5 喷泉模型 2.6 快速应用开发模型RAD 2.7 构件主装模型 2.8 统一过程 2.9 敏捷方法 三、逆向工程 四、净室软件工程 一、 软件…

斯坦福| ChatGPT用于生成式搜索引擎的可行性

文|智商掉了一地 随着 ChatGPT 在文本生成领域迈出了重要一步,Bing 浏览器也接入了聊天机器人功能,因此如何保证 Bing Chat 等搜索引擎结果的精确率和真实性也成为了搜索领域的热门话题之一。 当我们使用搜索引擎时,往往希望搜索结…

电子阅读器市场角力,AI成为关键变量

配图来自Canva可画 近年来,随着国家“书香型社会”建设政策的出台,公众的阅读需求正在逐年增加,各类读书产品和读书活动,也如同雨后春笋般涌现,人们的阅读体验日益得到丰富。比如,昨天世界读书日举行的“不…

更简单的存取Bean方式-@Bean方法注解

1.Bean方法存储 类注解是添加在某个类上的,那么方法注解是添加在某个方法前的 public class UserBeans {Beanpublic User user1(){User user new User();user.setUid(001);user.setUname("zhangsan");user.setAge(19);user.setPassword("123123");retur…

【分布式搜索引擎ES01】

分布式搜索引擎ES 分布式搜索引擎ES1.elasticsearch概念1.1.ES起源1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引 1.3.es的一些概念1.3.1.文档和字段1.3.2.索引和映射1.3.3.mysql与elasticsearch 1.4.1安装es、kibana、IK分词器1.4.2扩展词词典与停用词词典 2.索引库操作2.1.mappi…

Springcloud连接nacos集群,nacos地址配置为nginx,报错:requst nacos server failed

先说下版本: Spring cloud: Hoxton.SR12 spring.cloud.alibaba: 2.2.9.RELEASE spring.boot: 2.3.12.RELEASE Linux Centos7 nacos-server:2.1.0 nginx: 1.20.2 环境说明: nacos正常搭建三个集…