飞桨PaddleHub项目实践心得——奔跑在粒子中

写在前面

把人生中第一篇博文献给了百度飞桨,不得不说21天零基础入门是一个良心课程,视频教学结合notebook代码实现,可以结合自己的实际情况调整学习的节奏。之前也报名过一些YOLOv3的论文讲解直播课程,但都因为自己基础不扎实以及总觉得自己和老师不在一个频道导致最终学习效果并不好,但是飞桨这边提供的学习资料确实讲的非常详细,使得我在短暂的时间内能对一个经典的目标检测框架有了基本的了解,希望以后可以在不断加深学习中继续进步。

PaddleHub 项目

回到这次的主题是paddlehub,有点像是相机中的傻瓜相机,给人一种一键运行的感觉,即使是对模型本身不太理解也影响不大。这次也是由于接近毕设的ddl精力有限,只能参考之前一些大佬的成果做一些简单的东西,但是paddlehub本身提供的模型已经十分丰富, 感兴趣的可以直接去官网看看:https://www.paddlepaddle.org.cn/hub。 比如我一眼就看到一个文本分析模型,用这个模型做一个疫情期间twitter的发文数据的情感分析应该挺有趣,但考虑到短时间内可能做人像抠图会比较现实一些,只能把nlp放到未来探索。除此之外cv的模型也可以实现一些证件照生成、背景自动虚化、视频防抖等功能。

这次我的项目做的主要是从一个奔跑的视频中将人像抠出来,放到另一个粒子飞舞的视频中去,形成人物在粒子中奔跑的效果。听起来颇为简单,但是对于小白的我还是费了一番功夫。

项目的Baidu AIstudio项目链接为:https://aistudio.baidu.com/aistudio/projectdetail/777622。
Github 项目开源链接:https://github.com/FangLyu/PaddleHub-running-in-sky。
(好,这也是第一次开源自己的项目)

结果

先用两个动图说明得到的结果:
原视频是这样的:(视频原先就是慢动作的效果)

【一直上传失败,以后再补】
抠图并合成处理后是下面这样:
【一直上传失败,以后再补】
可能是在海外往国内服务器上传比较慢,一直都是失败。
具体的视频可以参考百度网盘链接:
https://pan.baidu.com/s/14uMsExiAQZrW-y40fjddBw,提取码:42dt。
视频的素材下载自 https://www.motionelements.com/

实现思路

实现过程按照以下步骤进行:

  1. 采用OpenCV库读取视频为各帧图像;
  2. 借助PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg)实现一键抠图,提取人像;
  3. 将抠出来的人像与粒子背景根据透明度进行叠加,合成新的图片;
  4. 将合成图片按照顺序制作成视频。

具体的代码可以直接打开Github的链接,在这里就不再重复了。下面主要还是说一些在使用paddlehub过程中的一些心得。

PaddleHub使用心得

这次使用PaddleHub中的图像分割模型是deeplabv3p_xception65_humanseg,但是从头到尾我并不知道这个模型的框架结构,依然能够实现模型的功能,因为抠图的过程在整个项目中只有一行代码,十分简单明了。但是在使用的时候依然踩了一些坑。

  1. paddlehub的版本要与时俱进
    由于无论是paddlepaddle还是paddlehub,其版本都在不断迭代更新,每一次更新必有更新的道理。当我想要实现这个项目的时候,第一时间是去找了Aistudio上有关人像抠图的项目,但是直接运行就会报错。原因是Aistudio服务器上的paddlehub版本是1.6,项目中要求的版本是1.7,而当前最新的版本是1.8.2。最终的解决办法是在AIStudio上手动指定最新的1.8.2的版本进行安装。紧接着就发现抠出来的人像并没有像开源项目中显示的那样直接保存在默认文件夹下,对应下一个注意点。
  2. 要查看最新的官方文档
    在paddlehub的版本更新过程中,一些模型的使用方法或者参数进行了调整,比如这次我使用的图像分割模型,假如不指定最后的visualization和output_dir两个参数,抠好的图像不会进行保存,这是与老版本调用过程的不同之处,也是参考老项目的代码时容易出错的地方。当遇到这种情况时,要及时查看最新的官方文档:https://www.paddlepaddle.org.cn/hubdetail?name=deeplabv3p_xception65_humanseg&en_category=ImageSegmentation。或者在notebook中直接使用"?"+函数名查看函数的使用方法。

一些遗憾

这次项目中还有一些功能没能来得及尝试,比如运行项目时我采用CPU运行,但是paddlehub可以使用GPU进行计算,需要在参数中设置use_gpu=True, 并在环境变量中指定CUDA_VISIBLE_DEVICES环境变量,我采用的方法是在notebook中运行下面代码:

 ! export CUDA_VISIBLE_DEVICES=0 

然而失败了,错误显示环境变量设置不正确,蠢蠢的我暂时没有找到解决方案。

除此之外,这个项目中采用的是paddlehub的API调用方法,而paddlehub也能使用命令行直接调用,并且还能进行服务部署,这些强大的功能都还没来得及尝试。

你可能感兴趣的:(深度学习)