YOLO旋转检测模型简化

YOLO模型作为单阶段目标检测方法的代表,其已经应用在多个领域。

模型缩减

但要想将其部署到单片机上,其模型的大小需要受到极大的限制,而采用剪枝的方式模型体积下降效果有限,因此我们直接修改网络结构,将其进行删减,如下:

# Parameters
nc: 2 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo12n-obb.yaml' will call yolo12-obb.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.25, 0.25, 256] # summary: 287 layers, 2,673,955 parameters, 2,673,939 gradients, 6.9 GFLOPs
# YOLO12n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2   0
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 2, C3k2, [256, False, 0.25]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
# YOLO12n head
head:
  - [-1, 1, Conv, [256, 3, 2]]
  - [[4], 1, OBB, [nc, 1]] # Detect(P3, P4, P5)

这是原来的模型结果:

在这里插入图片描述

这是简化后的模型的结果:

在这里插入图片描述

尽管从精度角度来看,其检测效果下降了许多(大概30%),但其模型大小也由原本的32MB下降到了700KB,这等程度的模型体积下降幅度还是深得我心的,毕竟我的这个项目场景对精度的要求并没有很高。

格式转换为TFLite

我们将模型进行缩减后,得到了pt文件,随后我们需要将其进行量化,同时转换为tflite格式,这里需要注意的是,我们的模型要部署到STM32单片机上,我在部署时,发现Flash足够了,但RAM却一直溢出,这是内存不足,即模型在运行推理时的产生了很多特征图,这超出了内存限制,这里采用将图像大小缩减的方式进行推理,由原本的640转换为160,随后再进行烧录,就OK了

from ultralytics import YOLO
# 加载一个模型,路径为 YOLO 模型的 .pt 文件
model = YOLO(r"best.pt")
# 导出模型,设置多种参数
model.export(
    imgsz=160,
    format="tflite",
    int8=True,
    batch=1,
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭祥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值