2024春招面试题MobileNetV3 实战:植物幼苗分类,写给即将正在找工作的Python攻城狮

本文介绍了如何使用MobileNetV3进行植物幼苗分类,强调其在网络结构、特点及在ImageNet上的表现。通过PyTorch实现模型,并应用数据增强技术Cutout和Mixup提升性能。项目结构清晰,包含数据预处理、模型训练和测试。适合Python开发者和面试者参考。
摘要由CSDN通过智能技术生成

先看一下V3的网络结构,V3版本有两个,一个是Large 和 Small,分别适用于不同的场景。网路结构如下:

image-20220205210432432

上表为具体的参数设置,其中bneck是网络的基本结构。SE代表是否使用通道注意力机制。NL代表激活函数的类型,包括HS(h-swish),RE(ReLU)。NBN 代表没有BN操作。s 是stride的意思,网络使用卷积stride操作进行降采样,没有使用pooling操作。

MobileNetV3 的特点:

  1. 继承V1的深度可分离卷积和V2的具有线性瓶颈的残差结构。

  2. 使用NetAdapt算法获得卷积核和通道的最佳数量。

  3. 使用了一种新的激活函数h-swish(x)代替Relu6,其公式:xRelu6(x + 3)/6。

  4. 引入SE通道注意力结构,使用了Relu6(x + 3)/6来近似SE模块中的sigmoid。

  5. 模型分为Large和Small,在ImageNet 分类任务中和V2相比,Large正确率上升了 3.2%,计算延时还降低了 20%。

MobileNetV3代码实现(pytorch):

https://wanghao.blog.csdn.net/article/details/121607296

数据增强Cutout和Mixup

===========================================================================

为了提高成绩我在代码中加入Cutout和Mixup这两种增强方式。实现这两种增强需要安装torchtoolbox。安装命令:

pip install torchtoolbox

Cutout实现,在transforms中。

from torchtoolbox.transform import Cutout

数据预处理

transform = transforms.Compose([

transforms.Resize((224, 224)),

Cutout(),

transforms.ToTensor(),

transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])

])

Mixup实现,在train方法中。需要导入包:from torchtoolbox.tools import mixup_data, mixup_criterion

for batch_idx, (data, target) in enumerate(train_loader):

data, target = data.to(device, non_blocking=True), target.to(device, non_blocking=True)

data, labels_a, labels_b, lam = mixup_data(data, target, alpha)

optimizer.zero_grad()

output = model(data)

loss = mixup_criterion(criterion, output, labels_a, labels_b, lam)

loss.backward()

optimizer.ste

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值