网站开发实用吗,企业网站如何建设报告,食品包装设计价格,免费动态图片素材网站1. 前言
抠图是图像编辑的基础功能之一#xff0c;在抠图的基础上可以发展出很多有意思的玩法和特效。比如一键更换背景、一键任务卡通化、一键人物素描化等。正是因为这些有意思的玩法。
最近也是对此模型背后的网络很感兴趣#xff0c;收集数据训练了人脸素描化模型…1. 前言
抠图是图像编辑的基础功能之一在抠图的基础上可以发展出很多有意思的玩法和特效。比如一键更换背景、一键任务卡通化、一键人物素描化等。正是因为这些有意思的玩法。
最近也是对此模型背后的网络很感兴趣收集数据训练了人脸素描化模型尽管受限于数据集只能在人脸图片上转换成功但自己仍然玩的不亦乐乎。不仅乐于玩模型的有意思的效果更乐在训练模型过程中以及遇到问题解决问题过程中对模型理解的不断加深。
最近对一键扣图模型从头训练了一遍并在训练过程中持续测试了不同阶段模型的表现看着模型一点点的收敛抠图效果慢慢变好。
此处记录下训练过程以及训练的效果。也可以对后来者有一个参考。
提前说一声模型训练很耗时 2. 代码 数据 环境准备
2.1 代码
代码是U-2-Net的开源代码可以从Github下载https://github.com/NathanUA/U-2-Net。这个模型本来是做显著性检测的但是当成一键扣图模型也很好玩。
需要注意的地方是如果是安装的最新的Pytorch获取loss值的时候需要将loss.data[0] 修改为loss.data.item()。
笔者在训练过程中曾尝试修改Loss函数为其他的比如改成BCE和SSIM的加权参考U-2-Net作者的文章BASNet未见明显提升。也曾修改输出通道训练其他模型暂无好玩的结果就当是积累经验了。
2.2 数据
数据集我们就用论文中提到的DUTS数据集已经分好了训练集和测试集。网上搜一下直接下载即可。
当然也可以用自己的数据集按照DUTS的格式重新组织下数据集即可。
然后在训练代码里面把数据读取部分的路径更换为自己准备的数据的路径。
2.3 机器
然后基于Anaconda安装训练所需的Python环境创建虚拟环境安装pytorch, torchvision, skimage, opencv等等直接pip install或者conda install即可。不多说。
另外多卡的话代码还需要有一些细微的改动在构建模型之后将代码 if torch.cuda.is_available():net.cuda()修改为 if torch.cuda.is_available():net.cuda()net nn.DataParallel(net)3. 训练与测试
3.1 模型训练
以上代码、数据、机器和运行环境都已经准备好之后就可以开始训练了。多卡训练的命令大概长下面这样 CUDA_VISIBLE_DEVICES0,1,2,3 nohup python3 -u u2net_train.py log_train.log 然后tail命令查看日志文件log_train.log如果看到下面这样的输出说明跑起来了 再用命令watch -n 1 nvidia-smi查看GPU的情况可以看到四张卡都被充分利用起来了。 模型训练将近一周达到了接近论文的效果。
另外由于中间保存过多为了节省空间笔者删掉了太多前期模型以下展示的前期效果是另外一次训练的前期模型的效果。
3.2 各阶段模型测试
笔者微调测试代码结构把测试转移到了Jupyter里这样画图看效果更加直观。
笔者测试模型的时候每张图都会画出三个图黑色背景的抠图结果、模型输出的Mask或称Alpha原图。这样对比来看结果一目了然。这里每张图都展示了四个阶段模型的测试效果。显然以下图片都不在训练集里面。
四个阶段对比着看能更加直观地感受到模型的收敛过程。
从以下四个阶段的对比图可以看出随着训练的进行 前景逐渐变亮背景逐渐变暗即前景收敛于1背景收敛于0。前两幅图之间的对比最为明显。 前景的轮廓从模糊到清晰细锐轮廓处的不确定区域越来越少。 注意指缝和发梢部分的Mask的变化细节越来越清晰。 下面这幅图请注意这个卡通人物背后背的那个是蜗牛还是啥的东西的轮廓的细化过程。以及其嘴角的一撮小胡子。这个图美中不足的是两脚之间的背景没有被识别出来。 下面这张图值得关注的应该就是其发梢的抠图细化过程、腰部的亮度变化过程。还有就是其手中的衣服了对于要不要把一副也给抠出来模型看起来也很纠结啊。 这个图最引人瞩目的莫过于这位美女在风中凌乱的发丝这不是难为模型吗说实话如果不是看到Mask里胸前多出的东西我都没注意到这个东西衣服的胸结还是啥。 这大概就是训练了五天左右的效果模型仍然在缓慢的收敛中故事仍然在继续......
直到我实在是受不了越来越慢的收敛速度等不及训练其他魔改的模型终止了训练任务......
本着报喜不报忧的原则下面再放几张测试效果还不错的图片效果不怎么样的就不拿出来献丑了。 上面的抠图效果还是有待提高比如头发等边缘处还是可见部分背景未分离。前几天刚转发了动物抠图的新论文边缘和毛发的抠图效果很赞。其单开一条支路专门做轮廓边缘处的抠图的思路值得参考。