基于Resnet18模型的猫狗预测

我要开发同款
匿名用户2024年07月31日
33阅读
所属分类aiPytorch
开源地址https://modelscope.cn/models/XCsunny/cats_vs_dogs
授权协议Apache License 2.0

作品详情

该模型基于Pytorch框架,Resnet模型,6000张猫狗训练图片,2000张猫狗验证图片训练而成的猫狗二分类模型,训练图片已上传至魔搭数据集--《猫狗分类图片数据集》
模型共用10个Epoch, 准确率达到: 98.45%
Epoch 1/10, Loss: 0.20265997878890088
Epoch 2/10, Loss: 0.13546315805510956
Epoch 3/10, Loss: 0.11217681157026202
Epoch 4/10, Loss: 0.1097535806797207
Epoch 5/10, Loss: 0.10935504358271732
Epoch 6/10, Loss: 0.0952360593525574
Epoch 7/10, Loss: 0.09554296578875089
Epoch 8/10, Loss: 0.08706574823875773
Epoch 9/10, Loss: 0.0826349301422213
Epoch 10/10, Loss: 0.07863278850229417
Validation Accuracy: 98.45%
模型测试网站:http://8.137.35.67/
服务器采用阿里云ECS服务器:1CPU,2G内存+Ubuntu+Gunicorn+Nginx,Web端采用Flask程序编写实现
关于模型问题可以加QQ咨询:122405553
模型设计部分代码如下:
###### BasicBlock 类的具体实现      
    expansion = 1
    def __init__(self, in_channels, out_channels, stride=1, downsample=None):
        super(BasicBlock, self).__init__()
        self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1, bias=False)
        self.bn1 = nn.BatchNorm2d(out_channels)
        self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=False)
        self.bn2 = nn.BatchNorm2d(out_channels)
        self.downsample = downsample
        self.stride = stride

    def forward(self, x):
        identity = x

        out = self.conv1(x)
        out = self.bn1(out)
        out = F.relu(out)

        out = self.conv2(out)
        out = self.bn2(out)

        if self.downsample is not None:
            identity = self.downsample(x)

        out += identity
        out = F.relu(out)

        return out

##### ResNet 类的具体实现
    def __init__(self, block, layers, num_classes=1000):
        super(ResNet, self).__init__()
        self.in_channels = 64
        self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False)
        self.bn1 = nn.BatchNorm2d(64)
        self.relu = nn.ReLU(inplace=True)
        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
        self.layer1 = self._make_layer(block, 64, layers[0])
        self.layer2 = self._make_layer(block, 128, layers[1], stride=2)
        self.layer3 = self._make_layer(block, 256, layers[2], stride=2)
        self.layer4 = self._make_layer(block, 512, layers[3], stride=2)
        self.avgpool = nn.AdaptiveAvgPool2d((1, 1))
        self.fc = nn.Linear(512 * block.expansion, num_classes)

    def _make_layer(self, block, out_channels, blocks, stride=1):
        downsample = None
        if stride != 1 or self.in_channels != out_channels * block.expansion:
            downsample = nn.Sequential(
                nn.Conv2d(self.in_channels, out_channels * block.expansion, kernel_size=1, stride=stride, bias=False),
                nn.BatchNorm2d(out_channels * block.expansion),
            )

        layers = []
        layers.append(block(self.in_channels, out_channels, stride, downsample))
        self.in_channels = out_channels * block.expansion
        for _ in range(1, blocks):
            layers.append(block(self.in_channels, out_channels))

        return nn.Sequential(*layers)

    def forward(self, x):
        x = self.conv1(x)
        x = self.bn1(x)
        x = self.relu(x)
        x = self.maxpool(x)
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        x = self.layer4(x)
        x = self.avgpool(x)
        x = torch.flatten(x, 1)
        x = self.fc(x)
        return x

Clone with HTTP

 git clone https://www.modelscope.cn/XCsunny/cats_vs_dogs.git
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论