1. 程式人生 > 其它 >imagenet 資料集讀取資料速度記錄

imagenet 資料集讀取資料速度記錄

技術標籤:神經網路技術

電腦配置是固態硬碟,i7cpu,不進行計算,只讀資料,不做資料增廣,只做resize

目錄:
1,最初級版

1,最初級版

DataLoader(train_dataset, batch_size=16, shuffle=True,
                              num_workers=0, pin_memory=True, drop_last=True, )

2020-12-23 11:20:06
0
2020-12-23 11:21:53
10000
讀取了一萬張圖片花費時間107秒,採用的程式是最直接的pytorch的data loader結構,
全部圖片大約130W張,讀取全部資料預計花費13000秒,除以3600即是3.61小時。

將batch size從16變為256看是否有關係?

DataLoader(train_dataset, batch_size=256, shuffle=True,
                              num_workers=0, pin_memory=True, drop_last=True, )

2020-12-23 11:26:53
0
2020-12-23 11:28:40
10240

也是107秒,沒任何關係

worker數量調為4

2020-12-23 11:30:30
0
2020-12-23 11:31:14
10240

花費44秒,全部讀完 130W /10000 *44 /3600=1.59小時
速度大約快了一倍

worker 8

2020-12-23 11:36:04
0
2020-12-23 11:36:45
10240
41秒,沒怎麼快 1.48 小時

感覺那個key每次生成一個keylist會很慢,將其加到記憶體試試

self.keys=list(self.truth.keys())

    def __len__(self):
        return len(self.keys)

    # 返回的box為xmin,ymin,xmax,ymax絕對座標,影象為未白化的float32影象
    def __getitem__(self, index):
        img_path = self.keys[index]
train_loader = DataLoader(train_dataset, batch_size=256, shuffle=True,
                              num_workers=4, pin_memory=True, drop_last=True, )

2020-12-23 11:45:51
0
2020-12-23 11:46:11
10240

花費20秒,這個讀全部圖片大約花費54分鐘

3,這一次使用lmdb來加速

train_loader = DataLoader(train_dataset, batch_size=256, shuffle=True,
                              num_workers=0, pin_memory=True, drop_last=True, )

2020-12-23 14:46:37
0
2020-12-23 14:47:19
10240

花費40秒,大約1.48小時讀完

workers調成4報錯。。但是就算調成4的話,快一倍多一點,也就是小於但接近20秒,似乎提升不大。

改進

看教程https://www.cnblogs.com/jiangkejie/p/13192518.html
似乎要修改下,修改後
2020-12-23 14:58:15
0
2020-12-23 14:58:59
10240
沒啥卵用啊,44秒,還慢了。而且workers 4就報錯。

再改進

2020-12-23 15:04:22
env
env
env
env
0

2020-12-23 15:04:37
10240

把env放到類的外面,變成全域性變數,就可以4worker了,速度為15秒,快了一丟丟。

2020-12-23 15:11:24
10240

2020-12-23 15:11:35
20480

2020-12-23 15:11:50
30720

129024
2020-12-23 15:13:49

15*320/3600 =0.54 這次大約半小時就可以讀完全部資料。就這樣吧

2020-12-23 15:21:04
env
env
env
env
0
2020-12-23 15:21:20
10240

2020-12-23 15:21:32
20480

2020-12-23 15:21:59
43008

殘差網路訓練了118個epoch,因此我們需要訓練至少118*0.5小時,也即是59小時。
放棄!