1. 论Conv2d()里的padding和Conv2d()前padding的区别及重要性。

    小生建议,尽量少用Conv2d()里的填充方式,换成自定义填充方式(强烈建议)。

    小生为何这样建议呢,是因为小生以前就常使用Conv2d()里的padding方式,觉得这样使用简单、不麻烦(O(∩_∩)O哈哈~ 感觉当时好憨哟!)。可是在某一次实验中,得到的效果图在边缘位置十分不理想,我想啊想,想啊想,图像边缘位置我只做过零填充,当时就引起了我的注意,然后通过做对比实验,发现问题还真是由零填充导致的,太开心了(*^▽^*),实验又有突破了。这次不在卷积时做零填充,换成卷积前做重复填充。什么是重复填充了?就是复制边缘的像素来填充。

  Conv2d()里的padding,采用的是零填充,即在图像像素周围填充零像素点,这样做的坏处是很可能在边缘处产生伪影。还有一点就是Pytorch中Conv2d()卷积,当卷积核的尺寸是偶数时,不好做‘same’方式卷积,因为Conv2d()在填充时,上边缘与下边缘填充数是一样的,很难改变。

  Conv2d()前的padding,可以根据自己的需求填充,目前有四种填充方式,① 零填充;② 常数填充;③ 镜像填充;④ 重复填充;这种方式比较灵活,也很简单,客观可以根据自己的需求来选择使用,四种填充方式,可查看小生的另一篇博文。

  小生就不多言了,上案列,客官请下观~~。

2. 例子

2.1 Conv2d()零填充

2.1.1 Code

  小生在这里给了代码片段,这里就是想告诉客官怎么做卷积的填充。

# 读取图片
image1_path = "./fusion_datasets/lytro-01-A.jpg"
image1 = Image.open(image1_path) # 归一化处理和转为tensor
input_transform = transforms.Compose([
transforms.Grayscale(1),
transforms.ToTensor(),
]) image1_tensor = input_transform(image1).unsqueeze(0) # 卷积
conv2 = nn.Conv2d(1, 3, 8,padding = 4)
image1_conv = conv2(image1_pad)

2.1.2 结果显示

  客官勿怪,此图是我的实验,过程中的图,还没做到最好的效果,O(∩_∩)O哈哈~,有点不好意思了,捂脸(*/ω\*)!客官请看边缘处,是不是很多白点,这都是零填充导致的效果不好,将这张图和自定义填充之边缘填充的图对照。

2.2 自定义填充之边缘复制填充

2.2.1 Code

    小生在这里给了代码片段,这里就是想告诉客官怎么做卷积前的填充。

# 读取图片
image1_path = "./fusion_datasets/lytro-01-A.jpg"
image1 = Image.open(image1_path) # 归一化处理和转为tensor
input_transform = transforms.Compose([
transforms.Grayscale(1),
transforms.ToTensor(),
]) image1_tensor = input_transform(image1).unsqueeze(0) # 自定义填充之边缘复制填充
ReplicationPad = nn.ReplicationPad2d(padding=(3, 4, 3, 4))
image1_pad = ReplicationPad(image1_tensor) # 卷积
conv2 = nn.Conv2d(1, 3, 8)
image1_conv = conv2(image1_pad)

2.2.2 结果显示

  此图与上图对照,边缘的白点基本没有了,嘿嘿(*^▽^*),好开心(*^▽^*)!

3. 总结

  努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

  如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)!

最新文章

  1. 理解storm的ACKER机制原理
  2. 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能
  3. map 与 unordered_map
  4. Account Team使用说明
  5. ocp 1Z0-051 23-70题解析
  6. SurfaceFlinger服务概述和学习计划
  7. UVA - 11572 Unique Snowflakes
  8. 用U盘与移动硬盘制作WIN7启动盘(亲自实践)
  9. C# socket编程实践
  10. U-Boot 内核 (一)
  11. sphinx的安装
  12. Objective-C简介
  13. SSH配置免密登录
  14. Django Rest Framework源码剖析(一)-----认证
  15. selenium玩转svg操作
  16. yii2 restful api --app接口编程
  17. Java时间操作常用api
  18. C# AutoMapper 了解一下
  19. 单元测试——隔离神器:mockito
  20. DAY2-Flask项目

热门文章

  1. 【Java】封装、继承、多态
  2. python高级特性之封包与解包
  3. L21 Momentum RMSProp等优化方法
  4. stand up meeting 1/20/2016
  5. 一篇文章快速搞懂Redis的慢查询分析
  6. Cucumber(4)——jenkins的集成
  7. srt字幕翻译
  8. MVC-过滤器-权限认证
  9. Redis分布式锁的正确姿势
  10. python机器学习的常用算法