美文网首页
图像张量化的几种方式对比

图像张量化的几种方式对比

作者: gaoshine | 来源:发表于2021-08-28 10:30 被阅读0次

深度学习中,图像在送入模型之前一般要做张量话处理,下面分析几种张量化的特点.

一般图片打开后,需要根据情况做一些变换:

  • 通道的顺序
    通过CV打开的图片,为BGR格式, 顺序为: h,w,c.
    PIL打开的图片,为RGB格式, 顺序也是: h,w,c.
    通过pytorch打开的,比较特殊,为c,h,w.

  • 归一化处理
    归一化处理最简单的方式就是 /255.0 变成0-1之间浮点数.
    也可以根据需要做均值化处理,或者变成-1-1之间数值.

  • 张量化处理
    根据模型对张量的要求,使用类似:arr = arr.transpose(2, 0, 1).reshape([1, 3, 224, 224])的numpy函数做变换.最后变换成: batch,chanel,weight,height.

我的测试代码:

from PIL import Image
import torchvision.transforms as T
import numpy as np
import cv2

# 
def load_data_tensor(path):
    trans = T.Compose([T.Resize(224), T.CenterCrop(224), T.ToTensor()])
    img = Image.open(path)
    img_tensor = trans(img).unsqueeze(0)
    return np.array(img_tensor)

def load_data_numpy(path):
    image = Image.open(path).convert('RGB')
    image = image.resize([224, 224])
    arr = np.array(image).astype(np.float32) / 255.0
    #arr = arr * 2.0 - 1.0
    arr = arr.transpose(2, 0, 1).reshape([1, 3, 224, 224])
    return  arr

def load_data_cv(path):
    image = cv2.imread(path)
    image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    image = cv2.resize(image,(224, 224))
    arr = np.array(image).astype(np.float32) / 255.0
    #arr = arr * 2.0 - 1.0
    arr = arr.transpose(2, 0, 1).reshape([1, 3, 224, 224])
    return  arr



r0 = load_data_tensor('test_photo.jpg')
print(r0[0][0])
print('-'*50)
r1 = load_data_numpy('test_photo.jpg')
print(r1[0][0])
r2 = load_data_cv('test_photo.jpg')


image = cv2.imread('test_photo.jpg')
cv2.imshow('raw:',image)


rr0 = r0[0].transpose(1, 2, 0)
rr0 = cv2.cvtColor(rr0,cv2.COLOR_RGB2BGR)
cv2.imshow('tensor:',rr0)
rr1 = r1[0].transpose(1, 2, 0)
rr1 = cv2.cvtColor(rr1,cv2.COLOR_RGB2BGR)
cv2.imshow('numpy:',rr1)
rr2 = r2[0].transpose(1, 2, 0)
rr2 = cv2.cvtColor(rr2,cv2.COLOR_RGB2BGR)
cv2.imshow('cv:',rr2)

cv2.waitKey(0)

Screen Shot 2021-08-28 at 09.58.56.png

我测试了三种模式:

  • load_data_tensor pytorch张量模式
  • load_data_numpy PIL的numpy模式
  • load_data_cv opencv的cv模式

调用后再复原顺序,可视化显示出来作比对:

  • tensor模式使用了自动crop功能,图片没有变形
  • numpy模式,逻辑清晰,比较好做进一步处理
  • cv模式不知什么原因,图像比较其他的丢失了一些细节.

相关文章

  • 图像张量化的几种方式对比

    深度学习中,图像在送入模型之前一般要做张量话处理,下面分析几种张量化的特点. 一般图片打开后,需要根据情况做一些变...

  • OpenCV 图像遍历与颜色缩减

    图像处理的基础是对图像每一个像素点的遍历,即图像扫描。在本节中,将介绍几种不同的图像遍历方式,为了对比不同方法的效...

  • iOS原生与JS交互

    iOS原生与JS交互的几种方式对比

  • 第一章、简介

    1.1 什么是图像 我们首先不考虑“什么是图像”,而是考虑“有什么样的图像”。图像有以下几种不同的方式产生,如图1...

  • 数字图像处理中的基础概念

    上图就是一张数字图像。一张图像在计算机中有以下一些概念。 1.采样,量化,灰度 我们眼睛所能看到的物理世界中的图像...

  • Level TOP

    Summary LevelTOP可调整图像对比度,亮度,灰度,黑电平,颜色范围,量化,不透明度等。另请参阅Luma...

  • 几种进程退出方式的对比

    一、汇总 linux中进程退出分为正常退出和异常退出两种。 1、正常退出 在main函数中执行return 调用e...

  • 工业相机的图像质量

    工业图像处理领域的图像质量 对于资深摄影师来说,好的图像质量意味着一张有锐度,高亮度,高对比度的图像。在工业图像处...

  • iOS Demo合集:照片墙、图像对比、图像的放大镜、图像裁剪、

    照片墙照片墙git地址 图像对比图像对比git地址 图像的放大镜图像的放大镜git地址 图像裁剪图像裁剪git地址...

  • JS Related

    JS几种数组遍历方式以及性能分析对比 javascript中in和hasOwnProperty区别

网友评论

      本文标题:图像张量化的几种方式对比

      本文链接:https://www.haomeiwen.com/subject/mtlbiltx.html