Exemple #1
0
def create_model(pretrained=True, architecture="resnet34", is_train=True):

    if architecture == "resnet18":
        if pretrained:
            model = torchvision.models.resnet18(pretrained=pretrained)
            model.fc = torch.nn.Linear(512 * 1, NUM_CATEGORY)
        else:
            model = torchvision.models.resnet18(pretrained=pretrained, num_classes=NUM_CATEGORY)
        model.avgpool = torch.nn.AdaptiveAvgPool2d(1)
    elif architecture == "resnet34":
        if pretrained:
            model = torchvision.models.resnet34(pretrained=pretrained)
            model.fc = torch.nn.Linear(512 * 1, NUM_CATEGORY)
        else:
            model = torchvision.models.resnet34(pretrained=pretrained, num_classes=NUM_CATEGORY)
        model.avgpool = torch.nn.AdaptiveAvgPool2d(1)
    elif architecture == "resnet50":
        if pretrained:
            model = torchvision.models.resnet50(pretrained=pretrained)
            model.fc = torch.nn.Linear(512 * 4, NUM_CATEGORY)
        else:
            model = torchvision.models.resnet50(pretrained=pretrained, num_classes=NUM_CATEGORY)
        model.avgpool = torch.nn.AdaptiveAvgPool2d(1)
    elif architecture == "mobilenetv2":
        model = MobileNetV2.MobileNetV2(n_class=NUM_CATEGORY, input_size=IMG_HEIGHT)
    elif architecture == "se_resnet50":
        if pretrained:
            model = great_networks.se_resnet50(pretrained=pretrained)
            model.last_linear = torch.nn.Linear(512 * 4, NUM_CATEGORY)
        else:
            model = great_networks.se_resnet50(num_classes=NUM_CATEGORY, pretrained=None)
        model.avg_pool = torch.nn.AdaptiveAvgPool2d(1)
    elif architecture == "se_resnext50":
        if pretrained:
            model = great_networks.se_resnext50_32x4d(pretrained=pretrained)
            model.last_linear = torch.nn.Linear(512 * 4, NUM_CATEGORY)
        else:
            model = great_networks.se_resnext50_32x4d(num_classes=NUM_CATEGORY, pretrained=None)
        model.avg_pool = torch.nn.AdaptiveAvgPool2d(1)
    elif architecture == "original":
        model = network.ResNet(network.BasicBlock, [3, 4, 6, 3], num_classes=NUM_CATEGORY)
    else:
        raise ValueError()

    model.to(DEVICE)

    if is_train:
        model.train()
    else:
        model.eval()

    return model
Exemple #2
0
def block_mobilenet(pretrained=False,
                    bit_nmb=8,
                    block_size=32,
                    num_classes=1000):
    block_model = BlockMobileNetV2(block_size, n_class=num_classes)
    if pretrained:
        model = MobileNetV2.MobileNetV2()
        model = torch.nn.DataParallel(model).cuda()
        model.load_state_dict(
            torch.load(
                '../MobileNet-V2-Pytorch/mobilenetv2_Top1_71.806_Top2_90.410.pth.tar'
            ))
        block_model = torch.nn.DataParallel(block_model).cuda()
        eng = DSConvEngine(block_size, bit_nmb)
        block_model = eng(model, block_model)

    return block_model
Exemple #3
0
                                           batch_size=config.batch_size,
                                           shuffle=True,
                                           num_workers=config.workers,
                                           pin_memory=True)
eval_loader = torch.utils.data.DataLoader(dataset=eval_set,
                                          batch_size=config.batch_size,
                                          shuffle=True,
                                          num_workers=config.workers,
                                          pin_memory=True)

# create model
# create model
if config.model == 'MobileNet':
    model = MobileNet.MobileNet()
elif config.model == 'MobileNetV2':
    model = MobileNetV2.MobileNetV2()
else:
    print('selece currect model')
    exit(0)
model = torch.nn.DataParallel(model)
model = model.to(device)

# load
model.load_state_dict(torch.load(config.model + '.pt'))

# test
model.eval()
correct = 0
total = 0
for i, (input, target) in enumerate(train_loader):
    input, target = input.to(device), target.to(device)
from tensorflow.keras.applications.mobilenet_v2 import preprocess_input]


import pandas as pd
import numpy as np
import cv2
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MultiLabelBinarizer

INP = 224
BATCHSIZE = 128

# --------------  MobileNetV2 ------------
model_mobileNetV2 = MobileNetV2(include_top=False,
                        weights='imagenet',
                        input_tensor=None,
                        input_shape = (INP,INP,3),
                        )


model_mobileNetV2.trainable = False
    
keras_input = Input(shape=(INP, INP, 3), name = 'image_input')
    
#Add the fully-connected layers 
output_mobileNetV2 = model_mobileNetV2(keras_input)
x = Flatten()(output_mobileNetV2)
x = Dense(4096, activation='relu', name='fc1')(x)
prediction = Dense(num_classes, activation='sigmoid', name='predictions')(x)
    
pretrained_model_mobile = Model(inputs=keras_input, outputs=prediction)   
Exemple #5
0
    def __init__(self,
                 backbone="mobilenetv2",
                 num_classes=2,
                 pretrained_backbone=None):
        super(UNet, self).__init__()
        if backbone == 'mobilenetv2':
            alpha = 1.0
            expansion = 6
            self.backbone = MobileNetV2.MobileNetV2(alpha=alpha,
                                                    expansion=expansion,
                                                    num_classes=None)
            self._run_backbone = self._run_backbone_mobilenetv2
            # Stage 1
            channel1 = MobileNetV2._make_divisible(int(96 * alpha), 8)
            block_unit = MobileNetV2.InvertedResidual(2 * channel1, channel1,
                                                      1, expansion)
            self.decoder1 = DecoderBlock(self.backbone.last_channel, channel1,
                                         block_unit)
            # Stage 2
            channel2 = MobileNetV2._make_divisible(int(32 * alpha), 8)
            block_unit = MobileNetV2.InvertedResidual(2 * channel2, channel2,
                                                      1, expansion)
            self.decoder2 = DecoderBlock(channel1, channel2, block_unit)
            # Stage 3
            channel3 = MobileNetV2._make_divisible(int(24 * alpha), 8)
            block_unit = MobileNetV2.InvertedResidual(2 * channel3, channel3,
                                                      1, expansion)
            self.decoder3 = DecoderBlock(channel2, channel3, block_unit)
            # Stage 4
            channel4 = MobileNetV2._make_divisible(int(16 * alpha), 8)
            block_unit = MobileNetV2.InvertedResidual(2 * channel4, channel4,
                                                      1, expansion)
            self.decoder4 = DecoderBlock(channel3, channel4, block_unit)

        elif 'resnet' in backbone:
            if backbone == 'resnet18':
                n_layers = 18
            elif backbone == 'resnet34':
                n_layers = 34
            elif backbone == 'resnet50':
                n_layers = 50
            elif backbone == 'resnet101':
                n_layers = 101
            else:
                raise NotImplementedError
            filters = 64
            self.backbone = ResNet.get_resnet(n_layers, num_classes=None)
            self._run_backbone = self._run_backbone_resnet
            block = ResNet.BasicBlock if (
                n_layers == 18 or n_layers == 34) else ResNet.Bottleneck
            # Stage 1
            last_channel = 8 * filters if (n_layers == 18
                                           or n_layers == 34) else 32 * filters
            channel1 = 4 * filters if (n_layers == 18
                                       or n_layers == 34) else 16 * filters
            downsample = nn.Sequential(ResNet.conv1x1(2 * channel1, channel1),
                                       nn.BatchNorm2d(channel1))
            block_unit = block(2 * channel1, int(channel1 / block.expansion),
                               1, downsample)
            self.decoder1 = DecoderBlock(last_channel, channel1, block_unit)
            # Stage 2
            channel2 = 2 * filters if (n_layers == 18
                                       or n_layers == 34) else 8 * filters
            downsample = nn.Sequential(ResNet.conv1x1(2 * channel2, channel2),
                                       nn.BatchNorm2d(channel2))
            block_unit = block(2 * channel2, int(channel2 / block.expansion),
                               1, downsample)
            self.decoder2 = DecoderBlock(channel1, channel2, block_unit)
            # Stage 3
            channel3 = filters if (n_layers == 18
                                   or n_layers == 34) else 4 * filters
            downsample = nn.Sequential(ResNet.conv1x1(2 * channel3, channel3),
                                       nn.BatchNorm2d(channel3))
            block_unit = block(2 * channel3, int(channel3 / block.expansion),
                               1, downsample)
            self.decoder3 = DecoderBlock(channel2, channel3, block_unit)
            # Stage 4
            channel4 = filters
            downsample = nn.Sequential(ResNet.conv1x1(2 * channel4, channel4),
                                       nn.BatchNorm2d(channel4))
            block_unit = block(2 * channel4, int(channel4 / block.expansion),
                               1, downsample)
            self.decoder4 = DecoderBlock(channel3, channel4, block_unit)

        else:
            raise NotImplementedError

        self.conv_last = nn.Sequential(
            nn.Conv2d(channel4, 3, kernel_size=3, padding=1),
            nn.Conv2d(3, num_classes, kernel_size=3, padding=1),
        )

        # Initialize
        self._init_weights()
        if pretrained_backbone is not None:
            self.backbone._load_pretrained_model(pretrained_backbone)
train_imgs = [s for s in all_imgs if s['imageset'] == 'train']
val_imgs = [s for s in all_imgs if s['imageset'] == 'val']

print('Num train samples {}'.format(len(train_imgs)))
print('Num val samples {}'.format(len(val_imgs)))

data_gen_train = generators.get_anchor_gt(train_imgs, C, shuffle_net.get_img_output_length, mode='train')
data_gen_val = generators.get_anchor_gt(val_imgs, C, shuffle_net.get_img_output_length, mode='val')

img_input = layers.Input(shape=(None, None, 3))
roi_input = layers.Input(shape=(None, 4))

# define the base network, here is ShuffleNet
# shared_layers = shuffle_net.shuffle_net(img_input)
# shared_layers = shuffle_net.nn_base(img_input)
shared_layers = MobileNetV2.nn_base(img_input)

# define the RPN, built on the base layers
num_anchors = len(C.anchor_box_scales) * len(C.anchor_box_ratios)
rpn = MobileNetV2.rpn(shared_layers, num_anchors)

classifier = MobileNetV2.classifier(shared_layers, roi_input, C.num_rois, nb_classes=len(classes_count))

# define model
model_rpn = Model(img_input, rpn[:2])
model_classifier = Model([img_input, roi_input], classifier)

if C.model_path is not None:
    print('Load weight from ' + C.model_path)
    model_rpn.load_weights(C.model_path, by_name=True)
    model_classifier.load_weights(C.model_path, by_name=True)
Exemple #7
0
            correct += pred.eq(target.view_as(pred)).sum().item()

    test_loss /= len(test_loader.dataset)
    print(
        '\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
            test_loss, correct, len(test_loader.dataset),
            100. * correct / len(test_loader.dataset)))


if __name__ == "__main__":

    epochs = 50
    use_cuda = True
    device = torch.device("cuda" if use_cuda else "cpu")

    model = MobileNetV2.MobileNetV2(width_mult=1, n_class=5005).to(device)
    save_model = True
    optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

    # load params
    pretrained_dict = torch.load('mobilenetv2_1.0-f2a8633.pth.tar')

    # 获取当前网络的dict
    net_state_dict = model.state_dict()
    # print(net_state_dict)
    # 剔除不匹配的权值参数
    pretrained_dict_1 = {
        k: v
        for k, v in pretrained_dict.items()
        if k in net_state_dict and "classifier" not in k
    }