【手摸手学ModelArts】一键抠图,轻松上手!
❝大家好,我是Copy攻城狮!最近很多小伙伴都叫我胡琦老师了,源于上周末有幸去到广东省机电学院进行分享交流,不过我内心还是挺惭愧的,没有核心竞争力只会复制粘贴,真心怕带偏在座的诸位!今天想和大家分享基于ModelArts如何快速跑通一键抠图模型。
❞
目的
-
掌握ModelArts脚本分享
-
基于ModelArts跑通PaddleHub
-
熟悉常用的指令
脚本分享
以我在机电学院“普惠AI,拥抱未来”华为AI技术讲座中分享的案例为例:
- https://console.huaweicloud.com/modelarts/?region=cn-north-4#/notebook/loading?share-url-b64=
+ aHR0cHM6Ly9tbC1ub3RlYm9vay5vYnMuY24tbm9ydGgtNC5teWh1YXdlaWNsb3VkLmNvbTo0NDMvaW1hZ2VfdG9fdmlkZW8uaXB5bmI=
+ https://ml-notebook.obs.cn-north-4.myhuaweicloud.com:443/image_to_video.ipynb
我们看到的白色部分(上面链接 + 的部分)是一个固定的地址,您可以理解为华为云专为ModelArts提供的一个API,region
参数是实例所在区域如cn-north-4#/notebook/loading
就是北京四的notebook加载服务
,share-url-b64
参数跟的是 Base64 编码之后的链接,我们可以通过Base64 解码就能获取到真实的URL地址。
import base64
test_str = 'aHR0cHM6Ly9tbC1ub3RlYm9vay5vYnMuY24tbm9ydGgtNC5teWh1YXdlaWNsb3VkLmNvbTo0NDMvaW1hZ2VfdG9fdmlkZW8uaXB5bmI='
# 解码
decode_str = base64.decodebytes(test_str.encode('utf8'))
print(decode_str.decode()) # 默认以utf8解码,结果是可访问的 .ipynb 文件
print('\n')
url_str = 'https://ml-notebook.obs.cn-north-4.myhuaweicloud.com:443/image_to_video.ipynb'
# 编码
encode_str = base64.encodebytes(test_str.encode('utf8'))
print(encode_str.decode()) # 默认以utf8编码
print('\n')
print('https://console.huaweicloud.com/modelarts/?region=cn-north-4#/notebook/loading?share-url-b64='+ encode_str.decode())
因此,本次实践的一键跑通链接为:
跑通PaddleHub
PaddleHub 此处就不多作介绍,您百度“深度学习”出来的就是它,什么原因大家懂的都懂。一般来说,封装得越完整,使用的时候就有特别多的坑,因为您可能没法再自定义;好在 PaddleHub 在封装额时候也考虑到了从本地加载模型。如果直接调用hub.load
会把文件下载到home/user
下,而在 Jupyter Notebook 中,我们不一定有写入权限。
我们使用是GPU 环境下的 Pytorch1.0.0
。因此在跑脚本前需要先「切换到GPU环境」。
-
安装依赖
# !pip install --upgrade pip
!pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
!pip install paddlehub -i https://mirror.baidu.com/pypi/simple
-
下载模型
!wget https://bj.bcebos.com/paddlehub/paddlehub_dev/deeplabv3p_xception65_humanseg.tar.gz
!tar zvxf deeplabv3p_xception65_humanseg.tar.gz
-
下载示例图片
!mkdir inputs
!wget -c https://user-gold-cdn.xitu.io/2020/2/18/170542edf2b3ec95?imageView2/0/w/1280/h/960/format/webp/ignore-error/1 -O inputs/1.jpg
!wget -c https://user-gold-cdn.xitu.io/2020/2/18/170542edf3428052?imageView2/0/w/1280/h/960/format/webp/ignore-error/1 -O inputs/2.jpg
!wget -c https://user-gold-cdn.xitu.io/2020/2/18/170542eea1782693?imageView2/0/w/1280/h/960/format/webp/ignore-error/1 -O inputs/3.jpg
!wget -c https://img-blog.csdnimg.cn/20200310211256715.jpg -O inputs/4.jpg
-
一键抠图
# 1、导入模块
import os
import paddlehub as hub
# 2、加载模型
humanseg = hub.Module(directory='deeplabv3p_xception65_humanseg')
# 3、获取文件列表
# 图片文件的目录
path = 'inputs/'
# 获取目录下的文件
files = os.listdir(path)
# 用来装图片的
imgs = []
shows = []
# 拼接图片路径
for i in files:
print(i)
if i.lower().endswith(('jpg','png','jpeg','bmp')):
imgs.append(path + i)
#抠图
results = humanseg.segmentation(data={'image':imgs},visualization=True, output_dir='outputs')
一顿操作之后,我们发现图片的背景已经被扣掉了,是不是很简单?
实操脚本分享
目前ModelArts Jupyter中暂时还没有一键分享的按钮,当然我计划很久了,Copy 的汉化插件虽然上线了,但一键分享的功能还没有实现。思路很简单:用户输入.ipynb
文件路径--> Base64 编码-->拼接前缀-->生成链接和二维码。
暂时只能手工生成喽!
首先,我将编辑好的.ipynb
文件上传到OBS,这里可以使用 Moxing
import moxing as mox
mox.file.copy('humanseg.ipynb', 'obs://huqi88/humanseg.ipynb')
如果还想生成二维码的话,需要安装qrcode
。
!pip install qrcode
接着就是实现代码,默认OBS桶在北京四且公开可读。
from PIL import Image
import base64
import qrcode
url_str = 'https://huqi88.obs.cn-north-4.myhuaweicloud.com:443/humanseg.ipynb'
# 编码
encode_str = base64.urlsafe_b64encode(url_str.encode('utf8'))
print(encode_str.decode()) # 默认以utf8编码
data = 'https://console.huaweicloud.com/modelarts/?region=cn-north-4#/notebook/loading?share-url-b64='+ encode_str.decode()
print(data)
img = qrcode.make(data)
with open('qrcode.png', 'wb') as f:
img.save(f)
display(Image.open('qrcode.png'))
总结
通过此次实现,掌握了在ModelArts中使用PaddlePaddle 内置模型的技巧,似乎打开了新世界的大门。此外,彻底掌握了基于ModelArts分享.ipynb
脚本的“奥秘”! 当然,ModelArts 将上线工程分享的功能,让我们尽情期待吧!
如果您想了解更多关于 ModelArts, 欢迎关注公众号: 「ModelArts开发者社区」!
如果您想了解更多关于 AI 开发,欢迎访问 huaweicloud.ai!
- 点赞
- 收藏
- 关注作者
评论(0)