国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Pytorch 實現數據集自定義讀取

Pytorch 實現數據集自定義讀取

2020-04-14 10:26_寒潭雁影 Python

今天小編就為大家分享一篇Pytorch 實現數據集自定義讀取,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

以讀取VOC2012語義分割數據集為例,具體見代碼注釋:

VocDataset.py

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from PIL import Image
import torch
import torch.utils.data as data
import numpy as np
import os
import torchvision
import torchvision.transforms as transforms
import time
 
#VOC數據集分類對應顏色標簽
VOC_COLORMAP = [[0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0],
        [0, 0, 128], [128, 0, 128], [0, 128, 128], [128, 128, 128],
        [64, 0, 0], [192, 0, 0], [64, 128, 0], [192, 128, 0],
        [64, 0, 128], [192, 0, 128], [64, 128, 128], [192, 128, 128],
        [0, 64, 0], [128, 64, 0], [0, 192, 0], [128, 192, 0],
        [0, 64, 128]]
 
#顏色標簽空間轉到序號標簽空間,就他媽這里浪費巨量的時間,這里還他媽的有問題
def voc_label_indices(colormap, colormap2label):
  """Assign label indices for Pascal VOC2012 Dataset."""
  idx = ((colormap[:, :, 2] * 256 + colormap[ :, :,1]) * 256+ colormap[:, :,0])
  #out = np.empty(idx.shape, dtype = np.int64)
  out = colormap2label[idx]
  out=out.astype(np.int64)#數據類型轉換
  end = time.time()
  return out
 
class MyDataset(data.Dataset):#創建自定義的數據讀取類
  def __init__(self, root, is_train, crop_size=(320,480)):
    self.rgb_mean =(0.485, 0.456, 0.406)
    self.rgb_std = (0.229, 0.224, 0.225)
    self.root=root
    self.crop_size=crop_size
    images = []#創建空列表存文件名稱
    txt_fname = '%s/ImageSets/Segmentation/%s' % (root, 'train.txt' if is_train else 'val.txt')
    with open(txt_fname, 'r') as f:
      self.images = f.read().split()
    #數據名稱整理
    self.files = []
    for name in self.images:
      img_file = os.path.join(self.root, "JPEGImages/%s.jpg" % name)
      label_file = os.path.join(self.root, "SegmentationClass/%s.png" % name)
      self.files.append({
        "img": img_file,
        "label": label_file,
        "name": name
      })
    self.colormap2label = np.zeros(256**3)
    #整個循環的意思就是將顏色標簽映射為單通道的數組索引
    for i, cm in enumerate(VOC_COLORMAP):
      self.colormap2label[(cm[2] * 256 + cm[1]) * 256 + cm[0]] = i
  #按照索引讀取每個元素的具體內容
  def __getitem__(self, index):
    
    datafiles = self.files[index]
    name = datafiles["name"]
    image = Image.open(datafiles["img"])
    label = Image.open(datafiles["label"]).convert('RGB')#打開的是PNG格式的圖片要轉到rgb的格式下,不然結果會比較要命
    #以圖像中心為中心截取固定大小圖像,小于固定大小的圖像則自動填0
    imgCenterCrop = transforms.Compose([
       transforms.CenterCrop(self.crop_size),
       transforms.ToTensor(),
       transforms.Normalize(self.rgb_mean, self.rgb_std),#圖像數據正則化
     ])
    labelCenterCrop = transforms.CenterCrop(self.crop_size)
    cropImage=imgCenterCrop(image)
    croplabel=labelCenterCrop(label)
    croplabel=torch.from_numpy(np.array(croplabel)).long()#把標簽數據類型轉為torch
    
    #將顏色標簽圖轉為序號標簽圖
    mylabel=voc_label_indices(croplabel, self.colormap2label)
    
    return cropImage,mylabel
  #返回圖像數據長度
  def __len__(self):
    return len(self.files)

Train.py

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import matplotlib.pyplot as plt
import torch.utils.data as data
import torchvision.transforms as transforms
import numpy as np
 
from PIL import Image
from VocDataset import MyDataset
 
#VOC數據集分類對應顏色標簽
VOC_COLORMAP = [[0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0],
        [0, 0, 128], [128, 0, 128], [0, 128, 128], [128, 128, 128],
        [64, 0, 0], [192, 0, 0], [64, 128, 0], [192, 128, 0],
        [64, 0, 128], [192, 0, 128], [64, 128, 128], [192, 128, 128],
        [0, 64, 0], [128, 64, 0], [0, 192, 0], [128, 192, 0],
        [0, 64, 128]]
 
root='../data/VOCdevkit/VOC2012'
train_data=MyDataset(root,True)
trainloader = data.DataLoader(train_data, 4)
 
#從數據集中拿出一個批次的數據
for i, data in enumerate(trainloader):
  getimgs, labels= data
  img = transforms.ToPILImage()(getimgs[0])
 
  labels = labels.numpy()#tensor轉numpy
  labels=labels[0]#獲得批次標簽集中的一張標簽圖像
  labels = labels.transpose((1,0))#數組維度切換,將第1維換到第0維,第0維換到第1維
 
  ##將單通道索引標簽圖片映射回顏色標簽圖片
  newIm= Image.new('RGB', (480, 320))#創建一張與標簽大小相同的圖片,用以顯示標簽所對應的顏色
  for i in range(0, 480):
    for j in range(0, 320):
      sele=labels[i][j]#取得坐標點對應像素的值
      newIm.putpixel((i, j), (int(VOC_COLORMAP[sele][0]), int(VOC_COLORMAP[sele][1]), int(VOC_COLORMAP[sele][2])))
 
  #顯示圖像和標簽
  plt.figure("image")
  ax1 = plt.subplot(1,2,1)
  ax2 = plt.subplot(1,2,2)
  plt.sca(ax1)
  plt.imshow(img)
  plt.sca(ax2)
  plt.imshow(newIm)
  plt.show()

以上這篇Pytorch 實現數據集自定義讀取就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/weixinhum/article/details/86232734

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 色噜噜狠狠狠综合曰曰曰88av | 国产露脸国语对白在线 | 黄色免费av| 激情婷婷 | 中文字幕视频在线 | 中国一级黄色毛片视频 | 天天干天天操天天干 | 91精品区 | 91精品国产高清一区二区三区 | 91观看 | 亚洲三级在线免费观看 | ts人妖另类精品视频系列 | 韩国精品免费视频 | 亚洲片国产一区一级在线观看 | 超碰国产在线 | 国产一区二区视频在线观看 | 婷婷激情五月 | 欧美一级片| 欧美一区二区视频免费观看 | 日韩在线一区二区三区免费视频 | 中文字幕亚洲欧美日韩在线不卡 | 中文字幕日本一区二区 | 中文字幕成人av | 色av网| chengrenzaixian | 成人免费网视频 | 日韩高清国产一区在线 | 国产黄大片 | 久草久 | 欧美精品久久久久 | 国产欧美日韩在线观看 | av电影一区二区 | 亚洲色吧 | 一区二区三区高清不卡 | 成人午夜视频网 | 在线国产视频观看 | 特级淫片日本高清视频免费 | 日韩电影免费在线观看 | 最好看的2019年中文在线观看 | 日韩成人在线播放 | 精品国产欧美一区二区三区成人 |