电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Python圖像讀寫方法對比

瀏覽:4日期:2022-07-05 13:46:12

1 實(shí)驗(yàn)標(biāo)準(zhǔn)

因?yàn)橛?xùn)練使用的框架是Pytorch,因此讀取的實(shí)驗(yàn)標(biāo)準(zhǔn)如下:

1、讀取分辨率都為1920x1080的5張圖片(png格式一張,jpg格式四張)并保存到數(shù)組。

2、將讀取的數(shù)組轉(zhuǎn)換為維度順序?yàn)镃xHxW的Pytorch張量,并保存到顯存中(我使用GPU訓(xùn)練),其中三個通道的順序?yàn)镽GB。

3、記錄各個方法在以上操作中所耗費(fèi)的時間。因?yàn)閜ng格式的圖片大小差不多是質(zhì)量有微小差異的jpg格式的10倍,所以數(shù)據(jù)集通常不會用png來保存,就不比較這兩種格式的讀取時間差異了。

寫入的實(shí)驗(yàn)標(biāo)準(zhǔn)如下:

1、將5張1920x1080的5張圖像對應(yīng)的Pytorch張量轉(zhuǎn)換為對應(yīng)方法可使用的數(shù)據(jù)類型數(shù)組。

2、以jpg格式保存五張圖片。

3、記錄各個方法保存圖片所耗費(fèi)的時間。

2 實(shí)驗(yàn)情況

2.1 cv2

因?yàn)橛蠫PU,所以cv2讀取圖片有兩種方式:

1、先把圖片都讀取為一個numpy數(shù)組,再轉(zhuǎn)換成保存在GPU中的pytorch張量。

2、初始化一個保存在GPU中的pytorch張量,然后將每張圖直接復(fù)制進(jìn)這個張量中。

第一種方式實(shí)驗(yàn)代碼如下:

import os, torchimport cv2 as cv import numpy as np from time import time read_path = ’D:test’write_path = ’D:testwrite’ # cv2讀取 1start_t = time()imgs = np.zeros([5, 1080, 1920, 3])for img, i in zip(os.listdir(read_path), range(5)): img = cv.imread(filename=os.path.join(read_path, img)) imgs[i] = img imgs = torch.tensor(imgs).to(’cuda’)[...,[2,1,0]].permute([0,3,1,2])/255 print(’cv2 讀取時間1:’, time() - start_t) # cv2保存start_t = time()imgs = (imgs.permute([0,2,3,1])[...,[2,1,0]]*255).cpu().numpy()for i in range(imgs.shape[0]): cv.imwrite(write_path + str(i) + ’.jpg’, imgs[i])print(’cv2 保存時間:’, time() - start_t)

 實(shí)驗(yàn)結(jié)果:

cv2 讀取時間1: 0.39693760871887207cv2 保存時間: 0.3560612201690674

第二種方式實(shí)驗(yàn)代碼如下:

import os, torchimport cv2 as cv import numpy as np from time import time read_path = ’D:test’write_path = ’D:testwrite’ # cv2讀取 2start_t = time()imgs = torch.zeros([5, 1080, 1920, 3], device=’cuda’)for img, i in zip(os.listdir(read_path), range(5)): img = torch.tensor(cv.imread(filename=os.path.join(read_path, img)), device=’cuda’) imgs[i] = img imgs = imgs[...,[2,1,0]].permute([0,3,1,2])/255 print(’cv2 讀取時間2:’, time() - start_t) # cv2保存start_t = time()imgs = (imgs.permute([0,2,3,1])[...,[2,1,0]]*255).cpu().numpy()for i in range(imgs.shape[0]): cv.imwrite(write_path + str(i) + ’.jpg’, imgs[i])print(’cv2 保存時間:’, time() - start_t)

實(shí)驗(yàn)結(jié)果:

cv2 讀取時間2: 0.23636841773986816cv2 保存時間: 0.3066873550415039

2.2 matplotlib

同樣兩種讀取方式,第一種代碼如下:

import os, torch import numpy as npimport matplotlib.pyplot as plt from time import time read_path = ’D:test’write_path = ’D:testwrite’ # matplotlib 讀取 1start_t = time()imgs = np.zeros([5, 1080, 1920, 3])for img, i in zip(os.listdir(read_path), range(5)): img = plt.imread(os.path.join(read_path, img)) imgs[i] = img imgs = torch.tensor(imgs).to(’cuda’).permute([0,3,1,2])/255 print(’matplotlib 讀取時間1:’, time() - start_t) # matplotlib 保存start_t = time()imgs = (imgs.permute([0,2,3,1])).cpu().numpy()for i in range(imgs.shape[0]): plt.imsave(write_path + str(i) + ’.jpg’, imgs[i])print(’matplotlib 保存時間:’, time() - start_t)

實(shí)驗(yàn)結(jié)果:

matplotlib 讀取時間1: 0.45380306243896484matplotlib 保存時間: 0.768944263458252

第二種方式實(shí)驗(yàn)代碼:

import os, torch import numpy as npimport matplotlib.pyplot as plt from time import time read_path = ’D:test’write_path = ’D:testwrite’ # matplotlib 讀取 2start_t = time()imgs = torch.zeros([5, 1080, 1920, 3], device=’cuda’)for img, i in zip(os.listdir(read_path), range(5)): img = torch.tensor(plt.imread(os.path.join(read_path, img)), device=’cuda’) imgs[i] = img imgs = imgs.permute([0,3,1,2])/255 print(’matplotlib 讀取時間2:’, time() - start_t) # matplotlib 保存start_t = time()imgs = (imgs.permute([0,2,3,1])).cpu().numpy()for i in range(imgs.shape[0]): plt.imsave(write_path + str(i) + ’.jpg’, imgs[i])print(’matplotlib 保存時間:’, time() - start_t)

實(shí)驗(yàn)結(jié)果:

matplotlib 讀取時間2: 0.2044532299041748matplotlib 保存時間: 0.4737534523010254

需要注意的是,matplotlib讀取png格式圖片獲取的數(shù)組的數(shù)值是在[0,1][0,1]范圍內(nèi)的浮點(diǎn)數(shù),而jpg格式圖片卻是在[0,255][0,255]范圍內(nèi)的整數(shù)。所以如果數(shù)據(jù)集內(nèi)圖片格式不一致,要注意先轉(zhuǎn)換為一致再讀取,否則數(shù)據(jù)集的預(yù)處理就麻煩了。

2.3 PIL

PIL的讀取與寫入并不能直接使用pytorch張量或numpy數(shù)組,要先轉(zhuǎn)換為Image類型,所以很麻煩,時間復(fù)雜度上肯定也是占下風(fēng)的,就不實(shí)驗(yàn)了。

2.4 torchvision

torchvision提供了直接從pytorch張量保存圖片的功能,和上面讀取最快的matplotlib的方法結(jié)合,代碼如下:

import os, torch import matplotlib.pyplot as plt from time import time from torchvision import utils read_path = ’D:test’write_path = ’D:testwrite’ # matplotlib 讀取 2start_t = time()imgs = torch.zeros([5, 1080, 1920, 3], device=’cuda’)for img, i in zip(os.listdir(read_path), range(5)): img = torch.tensor(plt.imread(os.path.join(read_path, img)), device=’cuda’) imgs[i] = img imgs = imgs.permute([0,3,1,2])/255 print(’matplotlib 讀取時間2:’, time() - start_t) # torchvision 保存start_t = time() for i in range(imgs.shape[0]): utils.save_image(imgs[i], write_path + str(i) + ’.jpg’)print(’torchvision 保存時間:’, time() - start_t)

實(shí)驗(yàn)結(jié)果:

matplotlib 讀取時間2: 0.15358829498291016torchvision 保存時間: 0.14760661125183105

可以看出這兩個是最快的讀寫方法。另外,要讓圖片的讀寫盡量不影響訓(xùn)練進(jìn)程,我們還可以讓這兩個過程與訓(xùn)練并行。另外,utils.save_image可以將多張圖片拼接成一張來保存,具體使用方法如下:

utils.save_image(tensor = imgs, # 要保存的多張圖片張量 shape = [n, C, H, W] fp = ’test.jpg’, # 保存路徑 nrow = 5, # 多圖拼接時,每行所占的圖片數(shù) padding = 1, # 多圖拼接時,每張圖之間的間距 normalize = True, # 是否進(jìn)行規(guī)范化,通常輸出圖像用tanh,所以要用規(guī)范化 range = (-1,1)) # 規(guī)范化的范圍

以上就是Python圖像讀寫方法對比的詳細(xì)內(nèi)容,更多關(guān)于python 圖像讀寫的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 短信群发平台_群发短信软件_短信营销-讯鸽科技 | 吊篮式|移动式冷热冲击试验箱-二槽冷热冲击试验箱-广东科宝 | 一技任务网_有一技之长,就来技术任务网 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 飞飞影视_热门电影在线观看_影视大全 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 通信天线厂家_室分八木天线_对数周期天线_天线加工厂_林创天线源头厂家 | 诸城网站建设-网络推广-网站优化-阿里巴巴托管-诸城恒泰互联 | 无水硫酸铝,硫酸铝厂家-淄博双赢新材料科技有限公司 | 金属抛光机-磁悬浮抛光机-磁力研磨机-磁力清洗机 - 苏州冠古科技 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 丹佛斯压力传感器,WISE温度传感器,WISE压力开关,丹佛斯温度开关-上海力笙工业设备有限公司 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 广州展览设计公司_展台设计搭建_展位设计装修公司-众派展览装饰 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | 汕头市盛大文化传播有限公司,www.11400.cc | 全国国际化学校_国际高中招生_一站式升学择校服务-国际学校网 | 高压负荷开关-苏州雷尔沃电器有限公司 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 书法培训-高考书法艺考培训班-山东艺霖书法培训凭实力挺进央美 | 深圳律师咨询_深圳律师事务所_华荣【免费在线法律咨询】网 | 面粉仓_储酒罐_不锈钢储酒罐厂家-泰安鑫佳机械制造有限公司 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 仿清水混凝土_清水混凝土装修_施工_修饰_保护剂_修补_清水混凝土修复-德州忠岭建筑装饰工程 | 热回收盐水机组-反应釜冷水机组-高低温冷水机组-北京蓝海神骏科技有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 光照全温振荡器(智能型)-恒隆仪器 | 蜘蛛车-登高车-高空作业平台-高空作业车-曲臂剪叉式升降机租赁-重庆海克斯公司 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 螺杆真空泵_耐腐蚀螺杆真空泵_水环真空泵_真空机组_烟台真空泵-烟台斯凯威真空 | 日本SMC气缸接头-速度控制阀-日本三菱伺服电机-苏州禾力自动化科技有限公司 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 双吸泵,双吸泵厂家,OS双吸泵-山东博二泵业有限公司 | 环境模拟实验室_液体-气体控温机_气体控温箱_无锡双润冷却科技有限公司 | 金属管浮子流量计_金属转子流量计厂家-淮安润中仪表科技有限公司 |