文章目录

  • 说明一下generator_encoder.py
  • 说明一下projector.py
  • encoder_with_projector.py
  • 尝试在generate_encoder的基础上进行修改
  • 尝试不给generate_encoder 指定program
  • 尝试不对w进行优化,而是直接合成图像
  • 正确操作

baseline file = projector.py

说明一下generator_encoder.py

给定数据集,和seed,用预训练好的encoder提取w, 然后生成图像。
运行命令如下: python generate_encoder.py --outdir=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main/generate_encoder_rotation_camera3 --encoder=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main1/train_encoder1/checkpoints/network-snapshot-000240.pkl --trunc=0.7 --seeds=5 --network=/home/joselyn/workspace/0419-course/stylenerf_pkl/ffhq_256.pkl --render-program="rotation_camera3:/home/joselyn/workspace/0419-course/my_images/aframes_256"

说明一下projector.py

命令如下:python projector.py --network=/home/joselyn/workspace/0419-course/stylenerf_pkl/ffhq_256.pkl --target=/home/joselyn/workspace/0419-course/my_images/test_img1024.png --outdir=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main/projector_s2 --seed=2 --num-steps=1000

encoder_with_projector.py

修改命令如下:python encoder_with_projector.py --network=/home/joselyn/workspace/0419-course/stylenerf_pkl/ffhq_256.pkl --encoder=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main/train_encoder_1GPU/checkpoints/network-snapshot-000900.pkl --target=/home/joselyn/workspace/0419-course/my_images/test_img1024.png --outdir=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main/encoder_with_projector/s2 --seed=2 --num-steps=1000

这里将输出路径调整为在文件名称之下

开始漫长的debug测试之路

encoder_with_projector.py line 206

encoder_with_projector.py line 215

encoder_with_projector.py line 66
对比, generate_encoder.py 中的img 和encoder_with_projector.py 中的target : 简直就是一模一样。


运行成功,结果过于恐怖

换一个测试样本python encoder_with_projector.py --network=/home/joselyn/workspace/0419-course/stylenerf_pkl/ffhq_256.pkl --encoder=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main/train_encoder_1GPU/checkpoints/network-snapshot-000900.pkl --target=/home/joselyn/workspace/0419-course/my_images/aframes_256/test_img2.png --outdir=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main/encoder_with_projector/s1 --seed=1 --num-steps=500
结果仍然是恐怖的

核对,w是否一致?
encoder出来的w如下:

执行w_samples = w_samples[:, :1, :].cpu().numpy().astype(np.float32) # [N, 1, C]如下:(这就是师兄说的全连接层)

mapping出来的w如下:

执行 w_samples = w_samples[:, :1, :].cpu().numpy().astype(np.float32) # [N, 1, C] 后如下:

尝试在generate_encoder的基础上进行修改

 # 考虑在这里对ws进行优化from projector_w import projectdevice = torch.device('cuda')num_steps = 100projected_w_steps = project(self.generator,target=torch.tensor(kwargs['img'].transpose([2, 0, 1]), device=device),# pylint: disable=not-callablenum_steps=num_steps,device=device,verbose=True,ws = ws)ws = projected_w_steps[-1]  # 取最后一个作为结果。

这里会改动到renderer.py 感觉会对程序的其他部分运行造成影响,所以,还是不选择这么做。

尝试不给generate_encoder 指定program

给定数据集,和seed,用预训练好的encoder提取w, 然后生成图像。
运行命令如下: python generate_encoder.py --outdir=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main/generate_encoder_rotation_camera3 --encoder=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main1/train_encoder1/checkpoints/network-snapshot-000240.pkl --trunc=0.7 --seeds=5 --network=/home/joselyn/workspace/0419-course/stylenerf_pkl/ffhq_256.pkl --render-program=":/home/joselyn/workspace/0419-course/my_images/aframes_256"

运行报错,程序会调用 render_program .

尝试不对w进行优化,而是直接合成图像

rec_ws,rec_cm = Encoder(target)  # zjsynth_image = G.synthesis(rec_ws, noise_mode='const')synth_image = (synth_image['img'] + 1) * (255 / 2)synth_image = synth_image.permute(0, 2, 3, 1).clamp(0, 255).to(torch.uint8)[0].cpu().numpy()PIL.Image.fromarray(synth_image, 'RGB').save(f'{outdir}/proj.png')


其结果依旧是错误的。

更换文件:python projector_encoder.py --network=/home/joselyn/workspace/0419-course/stylenerf_pkl/ffhq_256.pkl --encoder=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main/train_encoder_1GPU/checkpoints/network-snapshot-000900.pkl --target=/home/joselyn/workspace/0419-course/my_images/aframes_256/test_img.png --outdir=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main/projector_encoder/s1 --seed=1 --num-steps=500
结果依旧是错误的。

正确操作

原理是因为图像的处理范围不对。
加上target = target/ 127.5 - 1 所有的输出都正常了。

接下来的问题是:
训练过程中,损失没有下降。

方案一 :保留噪音
新建文档projector_encoder_v2.py
命令如下:python projector_encoder_V2.py --network=/home/joselyn/workspace/0419-course/stylenerf_pkl/ffhq_256.pkl --encoder=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main/train_encoder_1GPU/checkpoints/network-snapshot-000900.pkl --target=/home/joselyn/workspace/0419-course/my_images/aframes_256/test_img1.png --outdir=/home/joselyn/workspace/0419-course/logs/StyleNeRF-main/projector_encoder_V2/img1 --num-steps=50

结果:
损失可以逼近0,但是效果却不好:接近全白或者全黑。

方案2:尝试去掉噪音或者减少噪音。
结果:和方案1相同。

方案3: 更换损失函数recon_l2_loss = F.mse_loss(target_images, synth_images)
结果:无效

方案4: 固定camera_metrices
synth_images = G2(styles=ws, noise_mode='const', **kwargs) 替换为synth_images = G.get_final_output(styles=ws, camera_matrices=rec_camera_matrices)

结果,还是一眼难尽啊。

方案5: 取消手动的学习率更新
注释掉以下内容。

#        t = step / num_steps# w_noise_scale = w_std * initial_noise_factor * max(0.0, 1.0 - t / noise_ramp_length) ** 2# lr_ramp = min(1.0, (1.0 - t) / lr_rampdown_length)# lr_ramp = 0.5 - 0.5 * np.cos(lr_ramp * np.pi)# lr_ramp = lr_ramp * min(1.0, t / lr_rampup_length)# lr = initial_learning_rate * lr_ramp# for param_group in optimizer.param_groups:#     param_group['lr'] = lr



越发像恐怖片了

放弃,不研究了。

【编码实现】结合encoder和projector对w进行优化(projector_encoder.py)相关推荐

  1. 解决Ubuntu16.04视频编码出现Unknown encoder 'libx264'问题

    解决Ubuntu16.04视频编码出现Unknown encoder 'libx264'问题 一.问题原因分析 二.下载xlib264库 三.重新编译安装ffmpeg 四.修改配置文件 这个破问题真的 ...

  2. 数据处理与特征工程:One-Hot Encoder独热编码、Label Encoder标签编码、Binary Encoder二进制编码

    目录 一  OneHotEncoder独热编码 1.1 OneHotEncoder独热编码原理 2.1. 为什么要独热编码OneHotEncoder? 2.3 独热编码优缺点 2.4 什么情况下(不) ...

  3. (投影:Projector)Unity Projector 投影器原理以及优化

    很久很久以前,做过一个离线Mesh切割方式的Decay效果Unity3D中的贴花效果 适合场景景观布置,批次合并等,但运行时性能较差,这次我们来玩玩运行时投影器. 先上成平图 测试效果图, 图中的裤子 ...

  4. 用Zend Encoder加密PHP文件和PHP 优化配置

    在发布一个你写好的PHP程序时,你是不是担心自已辛苦写出来的成果会被别人占为已有呢?其实我们可以用Zend Encoder为我们的PHP文件加上一层保护壳. 软件版本:2.0.1 软件大小:10.2M ...

  5. PHP加密方法-用Zend Encoder加密PHP文件和PHP 优化配置(PHP文件加密)

    在发布一个你写好的PHP程序时,你是不是担心自已辛苦写出来的成果会被别人占为已有呢?其实我们可以用Zend Encoder为我们的PHP文件加上一层保护壳. 软件版本:2.0.1 软件大小:10.2M ...

  6. 汉字的首拼音字母生成

    生成助记码(取汉字的第一个字母) SET NOCOUNT ON GO IF EXISTS(SELECT name    FROM   sysobjects    WHERE  name = N'hzp ...

  7. 嵌入式监控【v4l2采集->vpu编码->live555推流】

    嵌入式监控[v4l2采集->vpu编码->live555推流] 文章目录 嵌入式监控[v4l2采集->vpu编码->live555推流] 介绍 数据流图 一.v4l2 1.1 ...

  8. 嵌入式监控【v4l2采集-vpu编码-live555推流】

    嵌入式监控[v4l2采集->vpu编码->live555推流] 文章目录 嵌入式监控[v4l2采集->vpu编码->live555推流] 介绍 数据流图 一.v4l2 1.1 ...

  9. encoder decoder模型_如何突破Decoder性能瓶颈?揭秘FasterTransformer的原理与应用

    位来 发自 凹非寺 量子位 报道 | 公众号 QbitAI 4月9日,英伟达x量子位分享了一期nlp线上课程,来自NVIDIA的GPU计算专家.FasterTransformer 2.0开发者之一的薛 ...

  10. python3字符编码str_聊聊Python 3 的字符串:str 和 bytes 的区别

    Python2的字符串有两种:str 和 unicode,Python3的字符串也有两种:str 和 bytes.Python2 的 str 相当于 Python3 的bytes,而unicode相当 ...

最新文章

  1. 蚂蚁金服提新概率图模型GLN,正确率提升8.2%,具备可解释性 | NeurIPS 2019
  2. org.apache.log4j.Logger详解
  3. 电脑硬件学习(主板,CPU,内存,硬盘,显卡)
  4. Cracking the coding interview--Q1.7
  5. Spring Boot 2.4版本前后的分组配置变化及对多环境配置结构的影响
  6. 希尔排序及C语言实现
  7. Spring+Quartz 集群
  8. 中国大学MOOC 计算机组成原理第5章 测试(上)
  9. webservice和socket服务的区别
  10. display:block的注意
  11. 数据结构四——散列表(上)
  12. 字符串大写转小写库函数_PHP程序无需使用库函数即可将字符串转换为大写
  13. 论文阅读:Pyramidal Feature Shrinking for Salient Object Detection
  14. 机器学习(7)——Logistic回归(从疝气病症预测病马的死亡率)
  15. cisco端口排错步骤
  16. 【天光学术】休闲体育论文:中小学学生羽毛球运动员心理训练方法研究
  17. 防火墙OPNsense安装
  18. 数据聚合技术Aggregation
  19. 租房需要注意些什么?
  20. android 新闻功能列表,news: 用Android基本技术实现的新闻App

热门文章

  1. 华为理工女,8年熬出头......
  2. 推荐一款文献管理工具 Zotero |附使用教程和学习路径
  3. 计算机省技能竞赛总结,2014技能大赛总结:技能大赛个人总结
  4. 推荐一款轻量级的支持Markdown的团队知识分享开源软件
  5. php求圆的周长面积,圆的周长怎么算?面积公式
  6. 太阳系(Python)
  7. MADlib——基于SQL的数据挖掘解决方案(24)——分类之决策树
  8. linux网卡时断时续,网卡不稳定的罪魁祸首
  9. 撤回/修改已经发送的Outlook邮件
  10. XML/HTML/CSS/JS之间的区别和联系