位置: IT常识 - 正文

yolov5使用知识蒸馏(yolov5l)

编辑:rootadmin
yolov5使用知识蒸馏

推荐整理分享yolov5使用知识蒸馏(yolov5l),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yolov5讲解,yolov5作用,yolo 使用,yolov5m,yolov5l,yolov5m,yolov5的使用,yolov5的使用,内容如对您有帮助,希望把文章链接给更多的朋友!

提示:本文采用的蒸馏方式为 Distilling Object Detectors with Fine-grained Feature Imitation 这篇文章

文章目录前言一、Distilling Object Detectors with Fine-grained Feature Imitation 论文介绍1.创新点2.内容介绍1. Fine-Gained区域提取2. loss 损失值二、yolov5 添加知识蒸馏1.部分代码展示总结前言

提示:这里可以添加本文要记录的大概内容:

本文介绍的论文《Distilling Object Detectors with Fine-grained Feature Imitation》即是基于 Fine-grained Feature Imitation 技术的目标检测知识蒸馏方法。该方法将 Fine-grained Feature Imitation 应用于学生模型的中间层,以捕捉更丰富的特征信息。通过在训练过程中引入目标检测任务的监督信号,Fine-grained Feature Imitation 技术可以更好地保留复杂模型中的细节特征,从而提高了轻量级模型的性能。

提示:以下是本篇文章正文内容,下面案例可供参考

一、Distilling Object Detectors with Fine-grained Feature Imitation 论文介绍

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

1.创新点

Fine-grained Feature Imitation 技术可以概括为以下三个步骤:

yolov5使用知识蒸馏(yolov5l)

利用复杂模型的中间层作为特征提取器,并用它提取学生模型的中间层的特征。

利用 Fine-grained Feature Imitation 技术对特征进行蒸馏,使学生模型能够学习到更丰富的特征信息。

在训练过程中引入目标检测任务的监督信号,以更好地保留复杂模型中的细节特征。

其核心思想是 teacher 网络中需要传递给 student 网络的应该是有效信息,而非无效的 background 信息。

2.内容介绍1. Fine-Gained区域提取

上图中的红色和绿色边界框是在相应位置上的锚框。红色 anchor 表示与 gt 的边界框重叠最大,绿色 anchor 表示附近的物体样本。蒸馏时并不是对所有的anchor蒸馏,而是对gt框附近的anchor进行蒸馏,对于backbone输出的特征图,假设尺度为H X W, 网络中使用的anchor数量为K, 具体执行步骤如下:

对于给定的特征图,生成H X W X K 个anchor, 并计算与gt anchor的IOU值m,计算最大的IOU值 M = max(m), 引入参数阈值因子Ψ, 计算过滤阈值F = M x Ψ, 利用F进行IOU过滤,这里只保留大于F的部分,计算之后得到一个mask, 尺度为H X W.2. loss 损失值

损失函数部分由两块组成,一块为Fine-grained Feature Imitation 损失,另一块为目标检测的分类和回归损失,

论文中展示了实验的对比结果,原论文是基于Faster Rcnn算法进行蒸馏,因此本文选择基于yolov5算法进行蒸馏。

二、yolov5 添加知识蒸馏1.部分代码展示

调整gt anchors转换为相对于原图的位置

def make_gt_boxes(gt_boxes, max_num_box, batch, img_size): new_gt_boxes = [] for i in range(batch): # 获取第i个batch的所有真实框 boxes = gt_boxes[gt_boxes[:, 0] == i] # 真实框的个数 num_boxes = boxes.size(0) if num_boxes < max_num_box: gt_boxes_padding = torch.zeros([max_num_box, gt_boxes.size(1)], dtype=torch.float) gt_boxes_padding[:num_boxes, :] = boxes else: gt_boxes_padding = boxes[:max_num_box] new_gt_boxes.append(gt_boxes_padding.unsqueeze(0)) new_gt_boxes = torch.cat(new_gt_boxes) # transfer [x, y, w, h] to [x1, y1, x2, y2] new_gt_boxes_aim = torch.zeros(size=new_gt_boxes.size()) new_gt_boxes_aim[:, :, 2] = (new_gt_boxes[:, :, 2] - 0.5 * new_gt_boxes[:, :, 4]) * img_size[1] new_gt_boxes_aim[:, :, 3] = (new_gt_boxes[:, :, 3] - 0.5 * new_gt_boxes[:, :, 5]) * img_size[0] new_gt_boxes_aim[:, :, 4] = (new_gt_boxes[:, :, 2] + 0.5 * new_gt_boxes[:, :, 4]) * img_size[1] new_gt_boxes_aim[:, :, 5] = (new_gt_boxes[:, :, 3] + 0.5 * new_gt_boxes[:, :, 5]) * img_size[0] return new_gt_boxes_aim

计算掩码 mask

def getMask(batch_size, gt_boxes, img_size, feat, anchors, max_num_box, device): # [b, K, 4] gt_boxes = make_gt_boxes(gt_boxes, max_num_box, batch_size, img_size) # 原图相对于当前特征图的步长 feat_stride = img_size[0] / feat.size(2) anchors = torch.from_numpy(generate_anchors(feat_stride, anchors)) feat = feat.cpu() height, width = feat.size(2), feat.size(3) feat_height, feat_width = feat.size(2), feat.size(3) shift_x = np.arange(0, feat_width) * feat_stride shift_y = np.arange(0, feat_height) * feat_stride shift_x, shift_y = np.meshgrid(shift_x, shift_y) shifts = torch.from_numpy(np.vstack((shift_x.ravel(), shift_y.ravel(), shift_x.ravel(), shift_y.ravel())).transpose()) shifts = shifts.contiguous().type_as(feat).float() # num of anchors [3] A = anchors.size(0) K = shifts.size(0) anchors = anchors.type_as(gt_boxes) # all_anchors [K, A, 4] all_anchors = anchors.view(1, A, 4) + shifts.view(K, 1, 4) all_anchors = all_anchors.view(K * A, 4) # compute iou [all_anchors, gt_boxes] IOU_map = bbox_overlaps_batch(all_anchors, gt_boxes, img_size).view(batch_size, height, width, A, gt_boxes.shape[1]) mask_batch = [] for i in range(batch_size): max_iou, _ = torch.max(IOU_map[i].view(height * width * A, gt_boxes.shape[1]), dim=0) mask_per_im = torch.zeros([height, width], dtype=torch.int64).to(device) for k in range(gt_boxes.shape[1]): if torch.sum(gt_boxes[i][k]) == 0: break max_iou_per_gt = max_iou[k] * 0.5 mask_per_gt = torch.sum(IOU_map[i][:, :, :, k] > max_iou_per_gt, dim=2) mask_per_im += mask_per_gt.to(device) mask_batch.append(mask_per_im) return mask_batch

计算imitation损失

def compute_mask_loss(mask_batch, student_feature, teacher_feature, imitation_loss_weight): mask_list = [] for mask in mask_batch: mask = (mask > 0).float().unsqueeze(0) mask_list.append(mask) # [batch, height, widt mask_batch = torch.stack(mask_list, dim=0) norms = mask_batch.sum() * 2 mask_batch_s = mask_batch.unsqueeze(4) no = student_feature.size(-1) bs, na, height, width, _ = mask_batch_s.shape mask_batch_no = mask_batch_s.expand((bs, na, height, width, no)) sup_loss = (torch.pow(teacher_feature - student_feature, 2) * mask_batch_no).sum() / norms sup_loss = sup_loss * imitation_loss_weight return sup_loss总结

完整代码请查看GitHub,麻烦动动小手点亮一下star https://github.com/xing-bing

本文链接地址:https://www.jiuchutong.com/zhishi/298957.html 转载请保留说明!

上一篇:CSS实现文字颜色渐变(css实现文字颜色渐变)

下一篇:解决云服务器远程登录SSH显示-bash-4.2问题和解决方法(云服务器远程端口)

  • 邮件群发营销在新春佳节怎样运用(邮件群发功能有什么作用)

    邮件群发营销在新春佳节怎样运用(邮件群发功能有什么作用)

  • 魅蓝3s能把app装进内存卡吗(魅蓝把软件)

    魅蓝3s能把app装进内存卡吗(魅蓝把软件)

  • 苹果11如何区分国行(苹果11如何区分大陆版和港版)

    苹果11如何区分国行(苹果11如何区分大陆版和港版)

  • 录音m4a是什么意思(录音m4a和mp3的区别)

    录音m4a是什么意思(录音m4a和mp3的区别)

  • 不小心退群了并删除了如何恢复(不小心退群了并删除了如何恢复微信)

    不小心退群了并删除了如何恢复(不小心退群了并删除了如何恢复微信)

  • 大数据云计算是什么意思(大数据云计算是研究什么的)

    大数据云计算是什么意思(大数据云计算是研究什么的)

  • 耳机放回充电仓会自动关机吗(耳机放回充电仓还是不断开)

    耳机放回充电仓会自动关机吗(耳机放回充电仓还是不断开)

  • 抖音连续点赞会限流吗(抖音连续点赞会影响流量吗)

    抖音连续点赞会限流吗(抖音连续点赞会影响流量吗)

  • word文档怎么让字竖着居中(word文档怎么让文字竖排)

    word文档怎么让字竖着居中(word文档怎么让文字竖排)

  • excel的状态栏具有什么作用(excel中的状态栏)

    excel的状态栏具有什么作用(excel中的状态栏)

  • 无线键盘按什么键激活(无线键盘按什么键连接蓝牙)

    无线键盘按什么键激活(无线键盘按什么键连接蓝牙)

  • 微信uwp和for windows有什么区别(微信uwp和for windows)

    微信uwp和for windows有什么区别(微信uwp和for windows)

  • 华为手机电筒不亮了也用不了怎么办(华为手机电筒不见了怎么办)

    华为手机电筒不亮了也用不了怎么办(华为手机电筒不见了怎么办)

  • 实际存储数据的对象是(实际存储在数据库中的表是什么)

    实际存储数据的对象是(实际存储在数据库中的表是什么)

  • 微信定位到聊天位置什么意思(微信定位到聊天位置怎么用)

    微信定位到聊天位置什么意思(微信定位到聊天位置怎么用)

  • 手机上便签怎么导出(手机上便签怎么修改)

    手机上便签怎么导出(手机上便签怎么修改)

  • artal00x什么型号

    artal00x什么型号

  • airpods怎么连接ipad(airpods怎么连接iPod)

    airpods怎么连接ipad(airpods怎么连接iPod)

  • iphone8需要贴膜么(iphone8用贴膜吗)

    iphone8需要贴膜么(iphone8用贴膜吗)

  • 微信怎么设置一直忙线(微信怎么设置一个人语音通话免打扰)

    微信怎么设置一直忙线(微信怎么设置一个人语音通话免打扰)

  • 苹果aqqstroe无法连接(苹果aqq无法登录)

    苹果aqqstroe无法连接(苹果aqq无法登录)

  • 苹果手机怎么没声音了显示耳机(苹果手机怎么没有通话记录)

    苹果手机怎么没声音了显示耳机(苹果手机怎么没有通话记录)

  • 苹果手机自拍杆按了没反应怎么办(苹果手机自拍杆按键成了调音量)

    苹果手机自拍杆按了没反应怎么办(苹果手机自拍杆按键成了调音量)

  • 为什么苹果手机相册加载不出来(为什么苹果手机信号不好 怎么解决)

    为什么苹果手机相册加载不出来(为什么苹果手机信号不好 怎么解决)

  • 小米灯遥控器设置方法(小米电灯遥控器)

    小米灯遥控器设置方法(小米电灯遥控器)

  • 魔法阵无线充电器怎么用(魔法阵无线充电器没有接收器怎么办)

    魔法阵无线充电器怎么用(魔法阵无线充电器没有接收器怎么办)

  • 苹果macOS Catalina 10.15正式版值得升级吗 macOS Catalina 10.15正式版体验评测(苹果macos catalina10.15.7)

    苹果macOS Catalina 10.15正式版值得升级吗 macOS Catalina 10.15正式版体验评测(苹果macos catalina10.15.7)

  • 了解AntV/x6(了解的反义词)

    了解AntV/x6(了解的反义词)

  • 金融企业 税
  • 老板的报销分录怎么写
  • 生产车间的办公用品费计入
  • 出口关税的计算基数
  • 全资子公司合并报表是权益法还是成本法
  • 个人开的专票也能抵扣吗
  • 股东向公司借款需要股东会决议吗
  • 招标代理专家费由谁支付
  • 收到采购商品
  • 材料入库时实收什么意思
  • 固定资产处理申请
  • 个人所得税申报方式选哪个比较好
  • 增值税税负低如何解释
  • 土地增值税按什么面积征收
  • 怎么通过合并弥补亏损,使得利益最大化?
  • 企业重组 资产重组
  • 企业购进固定资产进项税如何抵扣
  • 企业资产利润率计算公式
  • 利润的三个计算口径
  • 人力资源劳务外包服务开票
  • 企业内部领用产品会计处理
  • win11 应用商店
  • 开红字发票后再开蓝字发票应如何入账?
  • 代理进口合同如何签署
  • 交房产税要带身份证嘛
  • 非盈利组织稳定吗
  • sudo命令无法执行
  • 商贸企业销售会计分录
  • 应收账款怎么做分录
  • php yii框架
  • 同业代付融资
  • ipad air3发布会价格
  • 违反发票管理规定2次公告内容
  • 关联方利息支出标准比例
  • 股权收购印花税填哪里
  • 经验模态分解和变分模态分解
  • 免征和抵扣税额的区别
  • 财政补助结转会计处理
  • 织梦系统如何更换网站内容
  • 【MongoDB for Java】Java操作MongoDB数据库
  • 医用耗材税率是多少
  • 建筑工程分包案例
  • 个人所得税专项扣除2023最新政策
  • 收到的加盟费要交税吗
  • 库存商品转出
  • 税率变更协议怎么写
  • 企业流动资产周转率低说明什么
  • 所得税核定征收的政策
  • 非广告公司可以开广告费发票吗?
  • 税务局多扣的税可以退吗
  • 支付临时工人的报酬属于工资薪金概算吗
  • 从个人处借款的会计分录
  • 培训费属于什么应税项目
  • 存货账面价值入哪个科目
  • 有借必有贷借贷必相等的记账规则适用于
  • 非货币性资产交换的会计处理
  • 仲裁是什么意思举个例子
  • 新建企业应如何建账
  • 项目期间费用包括哪些费用
  • mysql5.5.62安装配置教程
  • winxp系统打不开
  • 自定义设置微信来电铃声
  • win10蓝屏怎么修复系统
  • 数据中心为什么要建在山洞里
  • system idle process是什么进程(CPU的空闲率)
  • 无windows什么意思
  • scheduler.exe - scheduler是什么进程 有何作用
  • win8语音助手怎么关闭
  • 电脑迅雷影音在哪个文件夹
  • python作业题目
  • python操作word文档替换文字
  • jquery制作左导航特效
  • 安卓手机管家
  • python类中的函数必须加self吗
  • php jquery教程
  • python中文分词库
  • 个人所得税小孩上大学可以扣除吗
  • 揭牌仪式揭牌时的音乐
  • 中国的消费税是什么
  • 企业的财务是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设