项目实践 | 从零开始边缘部署轻量化人脸检测模型——训练篇(二)

简介: 项目实践 | 从零开始边缘部署轻量化人脸检测模型——训练篇(二)

4损失函数


损失函数作者选择使用的依旧是SSD的Smooth L1 Loss以及Cross Entropy Loss,其中Smooth L1 Loss用于边界框的回归,而Cross Entropy Loss则用于分类。

image.png

具体pytorch实现如下:

class MultiboxLoss(nn.Module):
    def __init__(self, priors, neg_pos_ratio,
                 center_variance, size_variance, device):
        """Implement SSD Multibox Loss.
        Basically, Multibox loss combines classification loss
         and Smooth L1 regression loss.
        """
        super(MultiboxLoss, self).__init__()
        self.neg_pos_ratio = neg_pos_ratio
        self.center_variance = center_variance
        self.size_variance = size_variance
        self.priors = priors
        self.priors.to(device)
    def forward(self, confidence, predicted_locations, labels, gt_locations):
        """Compute classification loss and smooth l1 loss.
        Args:
            confidence (batch_size, num_priors, num_classes): class predictions.
            locations (batch_size, num_priors, 4): predicted locations.
            labels (batch_size, num_priors): real labels of all the priors.
            boxes (batch_size, num_priors, 4): real boxes corresponding all the priors.
        """
        num_classes = confidence.size(2)
        with torch.no_grad():
            # derived from cross_entropy=sum(log(p))
            loss = -F.log_softmax(confidence, dim=2)[:, :, 0]
            mask = box_utils.hard_negative_mining(loss, labels, self.neg_pos_ratio)
        confidence = confidence[mask, :]
        # 分类损失函数
        classification_loss = F.cross_entropy(confidence.reshape(-1, num_classes), labels[mask], reduction='sum')
        pos_mask = labels > 0
        predicted_locations = predicted_locations[pos_mask, :].reshape(-1, 4)
        gt_locations = gt_locations[pos_mask, :].reshape(-1, 4)
        # 边界框回归损失函数
        smooth_l1_loss = F.smooth_l1_loss(predicted_locations, gt_locations, reduction='sum')  # smooth_l1_loss
        # smooth_l1_loss = F.mse_loss(predicted_locations, gt_locations, reduction='sum')  #l2 loss
        num_pos = gt_locations.size(0)
        return smooth_l1_loss / num_pos, classification_loss / num_pos


5结果预测


输入为:

image.png

输出为:

image.png

输入为:

输出为:


6模型转换


由于部署使用的是Tengine边缘推理框架,由于pytorch输出的模型无法直接转换到tmfile模型下,因此还是选择使用onnx中间件的形式进行过度,具体实现代码如下:

model_path = "models/pretrained/version-RFB-320.pth"
net = create_Mb_Tiny_RFB_fd(len(class_names), is_test=True)
net.load(model_path)
net.eval()
net.to("cuda")
model_name = model_path.split("/")[-1].split(".")[0]
model_path = f"models/onnx/{model_name}.onnx"
dummy_input = torch.randn(1, 3, 240, 320).to("cuda")
# dummy_input = torch.randn(1, 3, 480, 640).to("cuda") #if input size is 640*480
torch.onnx.export(net, dummy_input, model_path, verbose=False, input_names=['input'], output_names=['scores', 'boxes'])

得到onnx模型后便可以进行Tengine模型的转换和部署,该部分将在下一篇文章继续讨论。


7参考


[1].https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB

[2].https://github.com/onnx/onnx

相关文章
|
传感器 机器人 物联网
传感器类型分类
传感器类型分类
1546 21
|
移动开发 Java 测试技术
iOS的App模块化编程的框架实现方案——BeeHive
BeeHive是用于iOS的App模块化编程的框架实现方案,吸收了Spring框架Service的理念来实现模块间的API耦合。
iOS的App模块化编程的框架实现方案——BeeHive
|
7月前
|
缓存 NoSQL Java
高并发系统性能优化全链路实战:端到端榨干系统性能,百万 QPS 零卡顿
本文系统阐述高并发系统端到端全链路性能优化方法,涵盖接入层(HTTP/3、CDN、LVS)、网关层(Spring Cloud Gateway调优)、服务层(JDK21虚拟线程、线程池、Undertow、Protobuf)、缓存层(多级缓存、Caffeine、Redis)、数据库(索引/SQL/事务/连接池)及OS硬件层优化,并强调压测定位、避坑指南与闭环迭代。
1029 3
|
7月前
|
人工智能 弹性计算 数据可视化
玩转OpenClaw!阿里云OpenClaw一键部署方案,三步拥有超级AI助理!
OpenClaw是可私有部署的AI数字员工框架,支持自然语言驱动文件处理、日程管理、跨平台操作与多模型协同。阿里云提供5种一键部署方案(轻量服务器/无影云电脑/ECS等),全程可视化,无需代码,3步即可拥有专属超级AI助理!
906 7
|
人工智能 vr&ar 图形学
谷歌DeepMind联手牛津推出Bolt3D:AI秒速3D建模革命!单GPU仅需6秒生成3D场景
牛津大学与谷歌联合推出的Bolt3D技术,能在单个GPU上仅用6.25秒从单张或多张图像生成高质量3D场景,基于高斯溅射和几何多视角扩散模型,为游戏、VR/AR等领域带来革命性突破。
873 2
谷歌DeepMind联手牛津推出Bolt3D:AI秒速3D建模革命!单GPU仅需6秒生成3D场景
|
机器学习/深度学习
YOLOv11改进策略【Conv和Transformer】| CVPR-2024 Single-Head Self-Attention 单头自注意力
YOLOv11改进策略【Conv和Transformer】| CVPR-2024 Single-Head Self-Attention 单头自注意力
647 7
YOLOv11改进策略【Conv和Transformer】| CVPR-2024 Single-Head Self-Attention 单头自注意力
|
机器学习/深度学习 人工智能 弹性计算
阿里云《AI 剧本生成与动画创作》解决方案深度评测
阿里云《AI 剧本生成与动画创作》解决方案深度评测
799 7
|
编译器 C# 开发者
C# 9.0 新特性解析
C# 9.0 是微软在2020年11月随.NET 5.0发布的重大更新,带来了一系列新特性和改进,如记录类型、初始化器增强、顶级语句、模式匹配增强、目标类型的新表达式、属性模式和空值处理操作符等,旨在提升开发效率和代码可读性。本文将详细介绍这些新特性,并提供代码示例和常见问题解答。
517 7
C# 9.0 新特性解析
|
存储 边缘计算 自然语言处理
25 个值得关注的检索增强生成 (RAG) 模型和框架
大型语言模型(LLM)如GPT-4在自然语言处理(NLP)领域展现了卓越能力,但也存在知识截止、静态知识库和内存限制等局限。检索增强生成(RAG)通过集成检索机制,允许LLM动态访问和整合外部数据源,提高了生成响应的准确性、相关性和时效性。本文深入探讨了25种先进的RAG变体,每种变体都旨在优化检索和生成过程的特定方面,涵盖成本限制、实时交互和多模态数据集成等问题,展示了RAG在提升NLP能力方面的多功能性和潜力。
1559 4
25 个值得关注的检索增强生成 (RAG) 模型和框架
|
搜索推荐 数据挖掘 API
淘宝天猫商品评论数据接口丨淘宝 API 实时接口指南
淘宝天猫商品评论数据接口(Taobao.item_review)提供全面的评论信息,包括文字、图片、视频评论、评分、追评等,支持实时更新和高效筛选。用户可基于此接口进行数据分析,支持情感分析、用户画像构建等,同时确保数据使用的合规性和安全性。使用步骤包括注册开发者账号、创建应用获取 API 密钥、发送 API 请求并解析返回数据。适用于电商商家、市场分析人员和消费者。
1771 3

热门文章

最新文章