自从transformer应用到cv领域以后,对图片的分割需求便越加重了,但是图像分割说起来容易,实际操作起来还是有很多地方不懂(主要还是code能力太弱)。

我们知道,对张量的处理一般又两种,一种是view/reshape这样的,先将数据按行展开,再按照指定形状排列数据;另一种是permute/transpose这种,是把数据按照维度进行变化,也就是把数据排列的先后顺序转换一下(后面具体介绍)。所以分割图片就用到了两者的结合

实验:

原图:

1:我们先看直接reshape的结果:将原图片切割为8份

完全没法看好吧!

原因就是上面说的,reshape是把整张图片按行(这里是按照通道数3,实际上也确实应该把通道数调到最后,按照通道展开,原因后面介绍)展开。

2:我们看一下正确的做法:

 

可以看到分割的很完美!

接下来解释一下原因:

1:通道数必须放到最后一个维度:首先,我们知道再张量数据是连续的情况下,其数据是按行展开排序的,也就是按照张量最后一个维度展开排序,所以,对于一个三通道的RGB图像(3,H, W)它本来是按照宽度展开的,但这样在分割的时候就存在问题了,因为,分割一张图片,应该是三个通道一起分割,故,我们第一步应该把通道数调到最后一个维度(这里因为是用cv2打开的图片,通道数已经在最后一维 ,所以不用再单独转换,但如果需要转换的话,注意,不可以用reshape或者view,只能用permute/或者transpose)

2:宽和高的分割必须先在自己的维度分割,即对于一组(B,C,H, W)的图片,在把C转换到最后一维后为(B,H,W,C),分割(此时用reshape)应该先按照(B,H/H分割size,H分割size,W/W分割size,W分割size,C)展开,然后再用permute,或者tanspose转化为(B,H/H分割size,W/W分割size,H分割size,W分割size,C),最后,再用contiguous().view转化为(B,(H/H分割size)*(W/W分割size),H分割size,W分割size,C),解释如下:

张量的维度,实际上表述数据的方向和排列顺序,越靠后的维度越先排列,所以,对于(B, H W, C),如果只是进行reshape或者view的话,他始终是会先把宽W排完之后再排高,所以,为了要把图片分成一份一份的,那么就必须让宽和高交替出现,也就是要改变数据的排列顺序,这正是permute和transpose的作用,它们相当于在保持现有数据在内存中顺序的基础上,改变数据的排列顺序,这里(B,H/H分割size,H分割size,W/W分割size,W分割size,C)H/H分割size,H分割size都代表高;W/W分割size,W分割size都代表宽,也就是(B,高,高,宽,宽,C),将H分割size和W/W分割size转换以后则为(B,高,宽,高,宽,C )

pytorch图片分割原理相关推荐

  1. 【Pytorch神经网络理论篇】 33 基于图片内容处理的机器视觉:目标检测+图片分割+非极大值抑制+Mask R-CNN模型

    基于图片内容的处理任务,主要包括目标检测.图片分割两大任务. 1 目标检测 目标检测任务的精度相对较高,主要是以检测框的方式,找出图片中目标物体所在的位置.目标检测任务的模型运算量相对较小,速度相对较 ...

  2. Pytorch学习 - Task5 PyTorch卷积层原理和使用

    Pytorch学习 - Task5 PyTorch卷积层原理和使用 1. 卷积层 (1)介绍 (torch.nn下的) 1) class torch.nn.Conv1d() 一维卷积层 2) clas ...

  3. [开源]基于WPF实现的Gif图片分割器,提取GIf图片中的每一帧

    [开源]基于WPF实现的Gif图片分割器,提取GIf图片中的每一帧 原文:[开源]基于WPF实现的Gif图片分割器,提取GIf图片中的每一帧 不知不觉又半个月没有更新博客了,今天终于抽出点时间,来分享 ...

  4. python九宫格图片的原理~

    原理 1.用Python制作的九宫格图像生成器包装exe文件,用户无需部署安装Python的开发环境,即可在当地运行该程序,快速生成九宫格图像. 2.用PIL库不断画小区域,切下来存储成新的小图片. ...

  5. WPF 把图片分割成两份自动翻页 WpfFlipPageControl:CtrlBook 书控件

    原文:WPF 把图片分割成两份自动翻页 WpfFlipPageControl:CtrlBook 书控件 版权声明:本文为博主原创文章,需要转载尽管转载. https://blog.csdn.net/z ...

  6. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )

    文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...

  7. 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )

    文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...

  8. 视频分解图片原理;图片合成视频原理

    (1)加载视频 (2)读取视频信息 (3)解码视频,拿到单帧信息 帧率:视频每秒钟展示多少张图片:帧率高我们看到的图片才是连续的:帧率低我们看到的图片就相当于非连续的: 宽度:高度 接下来是视频保存成 ...

  9. 学习记录1-python图片分割transforms方法

    python 图片分割 import os from PIL import Image Image.MAX_IMAGE_PIXELS = Nonedef splitimage(src, rownum, ...

最新文章

  1. 基于Golang的CLI 命令行程序开发
  2. C#语言编程之抽象类与接口的比较
  3. 计算机mac地址里面0,如何查计算机MAC地址
  4. php中什么时候用传值,php中传值与传引用的区别。什么时候传值什么时候传引用?...
  5. mysql 从库可以写入吗_mysql主从库配置读写分离以及备份
  6. python画多边形_python – 使用matplotlib更有效地绘制多边形
  7. DOM操作 append prependTo after before
  8. JAVA开发第一步——JDK 安装
  9. ora-04098 触发器无效且未通过重新验证
  10. vuejs 开发中踩到的坑
  11. 基于Flutter的勘测定界txt和Shapefile格式转换工具
  12. Opencv求轮廓的中心点坐标
  13. java计算机毕业设计体检系统源码+系统+数据库+lw文档
  14. 学习笔记(14):C++编程FFMpeg(QT5+OpenCV)实战--实时美颜直播推流-打开rtmp推流输出并从文件读取音视频帧...
  15. 关于投资有哪些不得不读的书籍?
  16. 2048网页版html项目报告,jQuery编写网页版2048小游戏
  17. python单片机自动浇花_【应用教程】Micro:bit自动浇花系统
  18. Substrate 基础 -- 教程(Tutorials)
  19. signature=a95d3b624ea7b2de0432eee0b4f584d9,Braves mourn Hank Aaron
  20. 在线视频ais_王牌如何从在线ais演变而来

热门文章

  1. vue 高德地图 不同区域显示不同颜色_联测科技丨高德地图不仅仅是拿来导航的...
  2. CHINA-PUB 网上书店购书优惠券
  3. Arduino开发实例-DIY空气粉尘密度检测仪
  4. 毕业论文管理系统的设计与实现
  5. AniamtexActionScript3.0游戏复刻记录
  6. wma转mp3怎么弄_wma格式怎么转换mp3?用音频转换软件转换文件原来这么简单
  7. Android shell 下 busybox,clear,tcpdump、、众多命令的移植
  8. Windows Server 2016搭建AD子域
  9. shopnc 实现手机、邮箱、用户名登录
  10. pro e打开服务器文件,EPRO 文件扩展名: 它是什么以及如何打开它?