为了更好的探究baseline,我在Autodl服务器上构建环境,重新训练baseline。我的主要工作可总结为以下两点:
- 构建可以运行baseline的代码环境
- 替换了预训练模型,更换resnet18为efficientnet_b0
实验环境
服务器:RTX 2080 Ti * 1卡
pytorch版本:1.10.0(建议版本在1.7.0以上,timm用到SiLU函数在1.7.0以上可以使用)
实验代码
大部分代码使用baseline,少部分因为出现bug需要进行更改。我遇到的bug是
Traceback (most recent call last): File "/root/miniconda3/lib/python3.8/site-packages/urllib3/connection.py", line 169, in _new_conn conn = connection.create_connection( File "/root/miniconda3/lib/python3.8/site-packages/urllib3/util/connection.py", line 96, in create_connection raise err File "/root/miniconda3/lib/python3.8/site-packages/urllib3/util/connection.py", line 86, in create_connection sock.connect(sa) socket.timeout: timed out
出现这个bug的原因在baseline中代码
model = timm.create_model('efficientnet_b0', pretrained=True, num_classes=2)#这里我更换了预训练的模型,源代码是resnet18,但可能有相同的问题
因为pretained=true,需要加载预训练的权重,该权重会从Hugging Face的服务器上下载,而autodl提供的服务器位于境内,会产生网络问题无法连接到 Hugging Face服务器,导致出现timed out的错误。
我的解决方法参考了如下两个链解预训练模型的使用torchvision.model和timm_import torchvision.models-CSDN博客
Pytorch修改预训练模型的方法汇总_预训练模型改变通道数-CSDN博客
在第一篇博客中,我采用了torch源的方法,使用如下代码获取下载权重的链接tong
import timm
model = timm.create_model('efficientnet_b0', pretrained=False, num_classes=2)
print(model.default_cfg)
#得到一个网址:https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b0_ra-3dd342df.pth
下载这个预训练模型后,使用如下方式调用
model = timm.create_model('efficientnet_b0', pretrained=False)
model.load_state_dict(torch.load('/root/efficientnet_b0_ra-3dd342df.pth'))#load后的路径是pth的位置
model.fc=nn.Linear(2,1280)#更改全连接层为二分类
训练和测试
在batch_size=8,epoch= 1的情况下进行了训练,最后得到如下分数
下一步计划
- 使用数据增强的手段进一步提升模型的表现
- 测试其它预训练模型的表现结果