python數據增強和轉換

數據增強和轉換

  • 固定轉換
  • 隨機轉換
  • 概率控制的轉換

固定轉換

  • 邊緣補充像素(Pad)
  • 尺寸變換(Resize)
  • 中心截取(CenterCrop)
  • 頂角及中心截取(FiveCrop)
  • 尺灰度變換(GrayScale)

概率控制的轉換

  • 隨機垂直翻轉(RandomVerticalFlip)
  • 隨機應用(RandomApply)
# -*- coding: utf-8 -*-
from PIL import Image
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import torch
import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = 'tight'
orig_img = Image.open('images.jpg')
torch.manual_seed(0)def plot(imgs, title, with_orig=True, row_title=None, **imshow_kwargs):if not isinstance(imgs[0], list):imgs = [imgs]num_rows = len(imgs)num_cols = len(imgs[0]) + with_origfig, axs = plt.subplots(nrows=num_rows, ncols=num_cols, squeeze=False)plt.title(title)for row_idx, row in enumerate(imgs):row = [orig_img] + row if with_orig else rowfor col_idx, img in enumerate(row):ax = axs[row_idx, col_idx]ax.imshow(np.asarray(img), **imshow_kwargs)ax.set(xticklabels=[], yticklabels=[], xticks=[], yticks=[])if with_orig:axs[0, 0].set(title='Original image')axs[0, 0].title.set_size(8)if row_title is not None:for row_idx in range(num_rows):axs[row_idx, 0].set(ylabel=row_title[row_idx])plt.tight_layout()# 邊緣補充
padded_imgs = [T.Pad(padding=padding)(orig_img) for padding in (3, 10, 30, 50)]
plot(padded_imgs, "T.pad")# 尺寸變換
resized_imgs = [T.Resize(size=size)(orig_img) for size in (30, 50, 100, orig_img.size)]
plot(resized_imgs, title='Resize')# 中心截取
center_crops = [T.CenterCrop(size=size)(orig_img) for size in (30, 50, 100, orig_img.size)]
plot(center_crops, title='CenterCrop')# 四角及中間截取
(top_left, top_right, bottom_left, bottom_right, center) = T.FiveCrop(size=(100, 100))(orig_img)
plot([top_left, top_right, bottom_left, bottom_right, center], title='FiveCrop')# 灰度變換
gray_img = T.Grayscale()(orig_img)
plot([gray_img], cmap='gray', title='Grayscale')# 顏色抖動轉換
jitter = T.ColorJitter(brightness=.5, hue=.3)
jitted_imgs = [jitter(orig_img) for _ in range(4)]
plot(jitted_imgs, title='ColorJitter')# 高斯模糊
blurrer = T.GaussianBlur(kernel_size=(5, 9), sigma=(0.1, 5))
blurred_imgs = [blurrer(orig_img) for _ in range(4)]
plot(blurred_imgs, title='GaussianBlur')# 隨機透視變換
perspective_transformer = T.RandomPerspective(distortion_scale=0.6, p=1.0)
perspective_imgs = [perspective_transformer(orig_img) for _ in range(4)]
plot(perspective_imgs, title='RandomPerspective')# 隨機旋轉
rotater = T.RandomRotation(degrees=(0, 180))
rotated_imgs = [rotater(orig_img) for _ in range(4)]
plot(rotated_imgs, title='RandomRotation')# 隨機仿射變換
affine_transfomer = T.RandomAffine(degrees=(30, 70), translate=(0.1, 0.3), scale=(0.5, 0.75))
affine_imgs = [affine_transfomer(orig_img) for _ in range(4)]
plot(affine_imgs, title='RandomAffine')# 彈性變換
elastic_transformer = T.ElasticTransform(alpha=250.0)
transformed_imgs = [elastic_transformer(orig_img) for _ in range(2)]
plot(transformed_imgs, title='ElasticTransform')# 隨機裁剪
cropper = T.RandomCrop(size=(128, 128))
crops = [cropper(orig_img) for _ in range(4)]
plot(crops, title='RandomCrop')# 隨機縮放裁剪
resize_cropper = T.RandomResizedCrop(size=(32, 32))
resized_crops = [resize_cropper(orig_img) for _ in range(4)]
plot(resized_crops, title='RandomResizedCrop')# 隨機顏色翻轉
inverter = T.RandomInvert()
invertered_imgs = [inverter(orig_img) for _ in range(4)]
plot(invertered_imgs, title='RandomInvert')# 隨機海報化
posterizer = T.RandomPosterize(bits=2)
posterized_imgs = [posterizer(orig_img) for _ in range(4)]
plot(posterized_imgs, title='RandomPosterize')# 隨機調節銳利度
sharpness_adjuster = T.RandomAdjustSharpness(sharpness_factor=2)
sharpened_imgs = [sharpness_adjuster(orig_img) for _ in range(4)]
plot(sharpened_imgs, title='RandomAdjustSharpness')# 隨機調節對比度
autocontraster = T.RandomAutocontrast()
autocontrasted_imgs = [autocontraster(orig_img) for _ in range(4)]
plot(autocontrasted_imgs, title='RandomAutocontrast')# 隨機直方圖均衡
equalizer = T.RandomEqualize()
equalized_imgs = [equalizer(orig_img) for _ in range(4)]
plot(equalized_imgs, title='RandomEqualize')augmenter = T.RandAugment()
imgs = [augmenter(orig_img) for _ in range(4)]
plot(imgs, title='RandAugment')# 隨機垂直翻轉
hflipper = T.RandomHorizontalFlip(p=0.5)
transformed_imgs = [hflipper(orig_img) for _ in range(4)]
plot(transformed_imgs, title='RandomHorizontalFlip')# 隨機水平翻轉
vflipper = T.RandomVerticalFlip(p=0.5)
transformed_imgs = [vflipper(orig_img) for _ in range(4)]
plot(transformed_imgs, title='RandomVerticalFlip')# 隨機應用
applier = T.RandomApply(transforms=[T.RandomCrop(size=(64, 64))], p=0.5)
transformed_imgs = [applier(orig_img) for _ in range(4)]
plot(transformed_imgs, title='RandomApply')plt.show()

綜合案例

# -*- coding: utf-8 -*-
import os
import cv2 as cv
import torch
from torch.utils.data import Dataset, DataLoader
import numpy as np
from torchvision import transforms
from torch.nn import Sequentialtransform = Sequential(  # 生成一個一系列的操作transforms.GaussianBlur(kernel_size=(5, 9), sigma=(0.1, 5)),transforms.RandomVerticalFlip(p=0.5),transforms.RandomHorizontalFlip(p=0.2)
)class MyDataset(Dataset):def __init__(self):root_data = "dataset"self.file_name_list = []for root, dirs, files in os.walk(root_data):for file_i in files:file_i_full_path = os.path.join(root, file_i)self.file_name_list.append(file_i_full_path)def __len__(self):return len(self.file_name_list)def __getitem__(self, item):file_i_loc = self.file_name_list[item]image_i = cv.imread(file_i_loc)image_i = cv.resize(image_i, dsize=(256, 256))image_i = np.transpose(image_i, (2, 0, 1))image_i_tensor = torch.from_numpy(image_i)image_i_tensor = transform(image_i_tensor)file_i_loc_info = file_i_loc.split('\\')file_i_loc_info[0] = new_rootnew_file_i_loc = os.path.join(file_i_loc_info[0], file_i_loc_info[1], file_i_loc_info[2])return image_i_tensor, new_file_i_locif __name__ == '__main__':new_root = 'my_new_dataset'my_dataset = MyDataset()dataloader = DataLoader(my_dataset)for x_i, loc_i in dataloader:x_i=x_i.view(3,256,256)loc_info = loc_i[0].split('\\')file_dir = os.path.join(loc_info[0], loc_info[1])print(file_dir)if os.path.isdir(file_dir):passelse:os.makedirs(file_dir)image = transforms.ToPILImage()(x_i)image.save(loc_i[0])

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73575.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu下UEFI安全啟動安裝Nvdia驅動

簡介 眾所周知,Ubuntu默認使用Nouveau開源驅動,其性能受限,因此我們需要安裝Nvidia專用驅動。 安裝專用驅動的一般方法非常簡單,只需要sudo ubuntu-drivers devices && sudo ubuntu-drivers autoinstall即可&#xff0c…

05_循環結構三目運算符

目錄 一、雙重for循環 練習 二、break關鍵字 三、continue 關鍵字 練習 四、三元運算 / 三目運算 一、雙重for循環 外層循環 循環一次,,,內層循環 循環一圈!!! 循環里嵌套循環: for(var…

數據結構初階-二叉樹鏈式

目錄 1.概念與結構 2.二叉數鏈式的實現 2.1遍歷規則 2.2申請內存空間 2.3手動構建一棵二叉樹 2.4二叉樹結點的個數 2.5二叉樹葉子結點的個數 2.6二叉樹第K層結點個數 2.7二叉樹的高度 2.8二叉樹中查找值為x的結點 2.9二叉樹的銷毀 3.層序遍歷 3.1概念 3.2層序遍歷…

鴻蒙HarmonyOS NEXT之無感監聽

鴻蒙中存在一些無感監聽,這些監聽經過系統API封裝使用很簡單,但是對實際業務開發中有很重要,例如埋點業務、數據統計、行為上報、切面攔截等。 Navigation的頁面切換 在鴻蒙中Navigation被用來作為路由棧進行頁面跳轉,如果你想知…

批量處理word里面表格的空白行

1,隨便打開一個word文檔。 2,按下Alt F11 VBA編輯器,在左側的「工程資源管理器」窗口中找到Normal 項目,右鍵選擇插入->模塊。 彈出一下彈窗 3,輸入一下代碼 代碼: Sub RemoveEmptyTableRows()Dim tbl As TableDim row As R…

3ds Max 2026 新功能全面解析

一、視口性能與交互體驗升級 1. Hydra 2.0 視口渲染引擎 3ds Max 2026 引入了 Hydra 2.0,大幅優化了視口渲染性能,尤其是在處理復雜場景和高質量實時預覽時,流暢度提升顯著。 支持USD(通用場景描述)格式&#xff0c…

JVM垃圾回收筆記02-垃圾回收器

文章目錄 前言1.串行(Serial 收集器/Serial Old 收集器)Serial 收集器Serial Old 收集器相關參數-XX:UseSerialGC 2.吞吐量優先(Parallel Scavenge 收集器/Parallel Old 收集器)Parallel Scavenge 收集器Parallel Old 收集器相關參數-XX:UseParallelGC ~ -XX:UseParallelOldGC-…

圖解AUTOSAR_SWS_UDPNetworkManagement

AUTOSAR UDP 網絡管理 (UdpNm) 技術詳解 基于 AUTOSAR 規范的 UDP 網絡管理模塊可視化指南 目錄 AUTOSAR UDP 網絡管理 (UdpNm) 技術詳解 目錄1. 概述2. UdpNm 狀態機 2.1 狀態機概述2.2 主要狀態說明2.3 狀態轉換機制2.4 并行狀態3. UdpNm 架構設計 3.1 架構概述3.2 接口設計3…

android 圖形開發的技能學習路線

需要以下幾個方面的知識: OpenGL ES的基礎和高級應用圖形渲染管線的工作原理3D數學(矩陣、向量、四元數)著色器編程(GLSL)libGDX框架的使用和定制性能優化和內存管理跨平臺渲染技術 接下來,考慮如何結構化…

使用AI一步一步實現若依(26)

功能26:新增一個新員工培訓頁面 功能25:角色管理 功能24:菜單管理 功能23:從后端獲取路由/菜單數據 功能22:用戶管理 功能21:使用axios發送請求 功能20:使用分頁插件 功能19:集成My…

vue響應式原理剖析

一、什么是響應式? 我們先來看一下響應式意味著什么?我們來看一段代碼: m有一個初始化的值,有一段代碼使用了這個值; 那么在m有一個新的值時,這段代碼可以自動重新執行; let m = 20 console.log(m) console.log(m * 2)m = 40上面的這樣一種可以自動響應數據變量的代碼機…

無人機航電系統電池技術解析!

1. 常用電池類型 鋰聚合物電池(LiPo) 特點:高能量密度、輕量化、放電效率高,是目前主流選擇。 缺點:對過充/過放敏感,需嚴格管理,存在輕微膨脹或起火風險。 鋰離子電池(Li-ion…

ubuntu下終端打不開的排查思路和解決方法

問題現象描述:ubuntu開機后系統桌面顯示正常,其他圖形化的app也都能打開無異常,唯獨只有terminal終端打不開,無論是鼠標點擊終端軟件,還是ctrlaltt,還是altF2后輸入gnome-terminal后按回車,這三…

Maven入門

1、簡介 Apache Maven是一個項目管理及自動構建工具,由Apache軟件基金會所提供。基于項目對象模型(縮寫:POM)概念,Maven利用一個中央信息片斷能管理一個項目的構建、報告和文檔等步驟。 2、作用 1)依賴導…

Rk3588,Opencv讀取Gmsl相機,Rga yuv422轉換rgb (降低CPU使用率)

RK3588, 使用OpenCv 讀取 gmsl 相機,獲得yuv422格式圖像, 使用 rga 轉換 rgb 圖像。減少cpu占用率. 查看相機信息 v4l2-ctl --all -d /dev/cam0 , 查看自己相機分辨率,輸出格式等信息,對應修改后續代碼測試… Driver Info:Driver name : rkcifCard type : rkc…

鴻蒙相機開發實戰:從設備適配到性能調優 —— 我的 ArkTS 錄像功能落地手記(API 15)

引言:為什么我要寫這份開發指南? 作為一名老技術,最近特別喜歡研究鴻蒙相機功能,而且目前已經更新到API15了,那么咱們更要好好研究一下。而且從手持云臺到車載記錄儀,每個項目都面臨獨特挑戰:車…

【NLP 49、提示工程 prompt engineering】

目錄 一、基本介紹 語言模型生成文本的基本特點 提示工程 prompt engineering 提示工程的優勢 使用注意事項 ① 安全問題 ② 可信度問題 ③ 時效性與專業性 二、應用場景 能 ≠ 適合 應用場景 —— 百科知識 應用場景 —— 寫文案 應用場景 —— 解釋 / 編寫…

數字轉換(c++)

【題目描述】 如果一個數 xx 的約數和 yy (不包括他本身)比他本身小,那么 xx 可以變成 yy ,yy 也可以變成 xx 。例如 44 可以變為 33 ,11 可以變為 77 。限定所有數字變換在不超過 nn 的正整數范圍內進行,…

如何同步fork的更新

當你fork了一個代碼倉庫后,要將其與原始源碼保持同步,可以按照以下步驟進行操作: 1. 添加原始倉庫作為遠程源 在本地命令行中,進入到你fork后的代碼倉庫目錄,然后使用以下命令添加原始倉庫(通常稱為upstr…

CentOS系統下安裝tesseract-ocr5.x版本

CentOS系統下安裝tesseract-ocr5.x版本 安裝依賴包: yum update -y yum install autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel yum install automake libtool bzip2 -y手動編譯安裝GCC(因系統默認安裝的GCC版本比較…