日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SppNet 多尺度训练

發布時間:2025/4/16 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SppNet 多尺度训练 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SppNet 多尺度訓練

?

原理網上非常多了,這里不再贅述。

感覺我看了很多博客,對我幫助較大的兩個是:

https://blog.csdn.net/qq_42052229/article/details/90446073

https://zhuanlan.zhihu.com/p/42732128

?

使用過程中的重點總結:

?

1、網絡目的確實是解決input的圖像size大小不同的問題

但是:

訓練的時候,我們需要一個batch一個batch的訓練,這每一個batch的維度是相同的,意味著,這一個batch內的圖像input size是相同的,才能訓練。除非我們一張一張的訓練,這樣就會帶來其他的很多問題。

所以在訓練的時候,往往采用幾種不同尺度的size的input,對同一個網絡分別進行訓練。

而測試時候,因為一般是一張一張的,所以可以任意size的圖像input。

?

2、使用自適應卷積一樣可以。

?

3、代碼拆解,不一定要按照網上人家的來,最后全連接數量自己可以任意調整。

?

4、例子pytorch:

多尺度訓練:不同尺度size分別跑一個epoch

if __name__ == '__main__':train_loader_350, test_loader_350 = load(350)train_loader_400, test_loader_400 = load(400)train_loader_450, test_loader_450 = load(450)train_loader_500, test_loader_500 = load(500)train_loaders = [train_loader_350, train_loader_400, train_loader_450, train_loader_500]test_loaders = [test_loader_350, test_loader_400, test_loader_450, test_loader_500]model = SPPNet().to(device)optimizer = optim.Adam(model.parameters(), lr=0.0001, betas=(0.9, 0.99))criterion = nn.CrossEntropyLoss()for epoch in range(1, EPOCH + 1):for train_loader, test_loader in zip(train_loaders, test_loaders):train(model, device, train_loader, criterion, optimizer, epoch)test(model, device, test_loader, criterion, epoch)torch.save(model, save_path)

resnet+sppnet,或者 自適應卷積

import torch from torch import nn from torchvision import models import torch.nn.functional as F import os, math from torch.nn.modules.pooling import AdaptiveAvgPool2d, AdaptiveMaxPool2dclass ResNet(nn.Module):def __init__(self, layers=18, num_class=2, pretrained=True):super(ResNet, self).__init__()if layers == 18:self.resnet = models.resnet18(pretrained=pretrained)elif layers == 34:self.resnet = models.resnet34(pretrained=pretrained)elif layers == 50:self.resnet = models.resnet50(pretrained=pretrained)elif layers == 101:self.resnet = models.resnet101(pretrained=pretrained)elif layers == 152:self.resnet = models.resnet152(pretrained=pretrained)else:raise ValueError('layers should be 18, 34, 50, 101.')self.num_class = num_classif layers in [18, 34]:self.fc = nn.Linear(512, num_class)if layers in [50, 101, 152]:self.fc = nn.Linear(512 * 4, num_class)def conv_base(self, x):x = self.resnet.conv1(x)x = self.resnet.bn1(x)x = self.resnet.relu(x)x = self.resnet.maxpool(x)layer1 = self.resnet.layer1(x)layer2 = self.resnet.layer2(layer1)layer3 = self.resnet.layer3(layer2)layer4 = self.resnet.layer4(layer3)return layer1, layer2, layer3, layer4def forward(self, x):layer1, layer2, layer3, layer4 = self.conv_base(x)x = self.resnet.avgpool(layer4)x = x.view(x.size(0), -1)x = self.fc(x)return xclass SPPNet(nn.Module):def __init__(self, backbone=101, num_class=2, pool_size=(1, 2, 6), pretrained=True):# Only resnet is supported in this versionsuper(SPPNet, self).__init__()if backbone in [18, 34, 50, 101, 152]:self.resnet = ResNet(backbone, num_class, pretrained)else:raise ValueError('Resnet{} is not supported yet.'.format(backbone))if backbone in [18, 34]:self.c = 512if backbone in [50, 101, 152]:self.c = 2048self.spp = SpatialPyramidPool2D(out_side=pool_size)num_features = self.c * (pool_size[0] ** 2 + pool_size[1] ** 2 + pool_size[2] ** 2)self.classifier = nn.Linear(num_features, num_class)def forward(self, x):_, _, _, x = self.resnet.conv_base(x)x = self.spp(x)x = self.classifier(x)return xclass SpatialPyramidPool2D(nn.Module):"""Args:out_side (tuple): Length of side in the pooling results of each pyramid layer.Inputs:- `input`: the input Tensor to invert ([batch, channel, width, height])"""def __init__(self, out_side):super(SpatialPyramidPool2D, self).__init__()self.out_side = out_sidedef forward(self, x):# batch_size, c, h, w = x.size()out = Nonefor n in self.out_side: # w_r, h_r = map(lambda s: math.ceil(s / n), x.size()[2:]) # Receptive Field Size # s_w, s_h = map(lambda s: math.floor(s / n), x.size()[2:]) # Stride # max_pool = nn.MaxPool2d(kernel_size=(w_r, h_r), stride=(s_w, s_h))max_pool = AdaptiveMaxPool2d(output_size=(n, n))y = max_pool(x)if out is None:out = y.view(y.size()[0], -1)else:out = torch.cat((out, y.view(y.size()[0], -1)), 1)return out

code源地址:

https://github.com/mmmmmmiracle/SPPNet/blob/master/multi.py

https://github.com/stanleykao72/Deepfake-Detector/blob/934749da71ae31f6e689f2ca2e015cd3e2d5c50a/py_utils/DL/sppnet/models/classifier.py

?

總結

以上是生活随笔為你收集整理的SppNet 多尺度训练的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人在线免费播放 | 成人mv在线观看 | 欧美大片高清免费观看 | 国产盗摄一区二区 | 国产黄色录相 | 免费在线观看黄色 | 日韩午夜伦| 免费荫蒂添的好舒服视频 | 亚洲爽爽网 | 午夜痒痒网 | 国产主播av在线 | 波多野结衣一本 | 91香蕉一区二区三区在线观看 | 欧美精品亚洲 | 1024精品一区二区三区日韩 | 亚洲h视频| 欧美色视频在线 | 亚洲国产精品国自产拍久久 | 亚洲av综合av一区二区三区 | 欧美性爱视频久久 | 美女扒开腿免费视频 | 一二三四av | 精品伦理一区二区 | 色淫湿视频| 国产成人精品亚洲精品色欲 | 国产精品麻豆一区二区三区 | www.欧美一区二区三区 | 在线免费观看视频a | 少妇日皮视频 | 男女深夜福利 | 蜜臀网在线 | 久久五月视频 | 成人小视频在线免费观看 | 制服 丝袜 激情 欧洲 亚洲 | 亚洲8888| 欧美日韩一区二区在线观看 | 色小说在线观看 | 日韩乱码在线观看 | 欧美日本黄色 | 懂色av成人一区二区三区 | 五十路在线 | 亚洲一区二区观看播放 | 国产精品中文字幕在线 | 激情欧美一区二区三区精品 | 日韩伦理在线视频 | 1024视频在线 | 少妇第一次交换又紧又爽 | 成年人在线免费观看网站 | 一本一本久久a久久精品综合麻豆 | 性欧美hd调教 | 欧美小视频在线 | 日韩在线不卡一区 | 成人精品在线观看视频 | 午夜啊啊啊 | 国产真实生活伦对白 | 国产黄视频在线观看 | 色黄网站在线观看 | 超碰一区 | 久久久免费av| 不卡视频在线观看 | 亚洲乱码国产乱码精品天美传媒 | 欧美怡红院视频一区二区三区 | 久久久久国产精品国产 | 国产精品免费一区二区三区 | 茄子爱啪啪 | 欧美午夜视频在线观看 | 91麻豆精品久久久久蜜臀 | 污片免费看 | 午夜一区在线观看 | 亚洲成人精品一区二区三区 | 久久亚洲网 | 青青草日韩 | 玉米地疯狂的吸允她的奶视频 | 人妻色综合网站 | 少妇又色又紧又黄又刺激免费 | 丝袜黄色片 | 婷婷一区二区三区四区 | 生活片一级片 | 777亚洲 | 亚洲大乳| av解说在线观看 | 99激情视频 | 成人日韩视频 | 欧美性猛交xxxx乱大交俱乐部 | 国产日韩激情 | 日韩干| 神马午夜在线 | 国产激情综合 | 国产精品久久久无码一区 | 中文字幕免费在线看线人动作大片 | 91天堂在线 | 51妺嘿嘿午夜福利 | 日韩女女同性aa女同 | 一区二区三区免费观看视频 | 国产精品蜜 | 国产美女主播在线 | 美女羞羞动态图 | 国产精品麻豆一区二区 | 91色视频在线观看 |