最近需要把caffe上的resnet101網(wǎng)絡(luò)模型遷移到pytorch上楞遏,caffe上顯存還夠使,一到pytorch上就不夠用了首昔,即使是resnet50也不夠用寡喝。
- 顯卡:11G的1080ti
- batch_size:1
- image_size:480
兩天各種調(diào)試,最終還是在網(wǎng)絡(luò)層代碼中發(fā)現(xiàn)了問(wèn)題:
很明顯的planes=2056
應(yīng)該是planes=256
!
這個(gè)錯(cuò)誤很低級(jí)沙廉。
模型大小
- 修改之前拘荡,
pytorch
上resnet50模型大小
- 修改之前,
pytorch
上resnet101模型大小
- 修改之后撬陵,
pytorch
上resnet50模型大小
- 修改之后珊皿,
pytorch
上resnet101模型大小
- 遷移前,
caffe
上resnet101模型大小
顯存消耗
- 修改之前巨税,
pytorch
上resnet50顯存消耗
超出顯存大小 - 修改之前蟋定,
pytorch
上resnet101顯存消耗
超出顯存大小 - 修改之后,
pytorch
上resnet50顯存消耗
- 修改之后草添,
pytorch
上resnet101顯存消耗
ModuleList和Sequential區(qū)別
網(wǎng)上很多人寫(xiě)了二者區(qū)別驶兜,我就說(shuō)下自己的感受吧,先看代碼:
def __init__(self):
layers5 = []
for i in range(0, 3):
layers5.append(Bottleneck2(inplanes=2048, planes=512))
self.layer5 = nn.Sequential(*layers5)
def forward(self, x):
x = self.layer5(x)
def __init__(self):
self.fiveth_stage = nn.ModuleList()
for i in range(0, 3):
self.fiveth_stage.append(Bottleneck2(inplanes=2048, planes=512))
def forward(self, x):
for layer in self.fiveth_stage:
x = layer(x)
很明顯Sequential會(huì)對(duì)其里面的每個(gè)操作自動(dòng)forward,而ModuleLis只是封裝的list抄淑,需要遍歷list前向傳播.