我的AI之路(47)--使用自己的数据集训练EfficientDet

对比实验系列:Efficientdet环境配置及训练个人数据集 可以通过下方链接下载Efficientdet源码。 阅读详情

       训练用的服务器的芯片一般都是X86架构的,所以可以直接从hub.docker.com上拉个安装了pytorch的镜像下来作为训练用的环境,省去了很多安装步骤,例如拉取pytorch/pytorch:1.2-cuda10.0-cudnn7-devel(注意一般不要使用runtime镜像,runtime镜像里面只安装了最小的支持环境,很多工具都没安装,devel镜像一般是比较全面的):

       docker pull pytorch/pytorch:1.2-cuda10.0-cudnn7-devel

然后创建容器:  
       nvidia-docker run -it --ipc=host --name pytorch1.2-efficientdet -v /home/xsrt/AI/work_pytorch:/workspace -p 8190:8190 pytorch/pytorch:1.2-cuda10.0-cudnn7-devel  bash

设置对中文字符集的支持:

      vi ~/.bashrc
      export LANG="C.UTF-8"

重启容器并再次连到容器,然后在容器内安装工具和支持包:

      apt-get update
      apt-get install vim

      apt-get install libglib2.0-dev libsm6 libxrender1 libxext6

       pip install cython matplotlib opencv-python

安装cocoapi:

      git clone https://github.com/cocodataset/cocoapi.git
      cd cocoapi/PythonAPI 
      make
      python setup.py install --user

在容器里下载源码(github上有多个EfficientDet的实习代码,最初试用了star最多的https://github.com/toandaominh1997/EfficientDet.Pytorch,但是发现训练时很多时候不能收敛,loss值稀奇古怪的震荡甚至爆炸(非常大的值,大到超10亿以上,夸张吧),感觉代码实现有问题,看了下里面的comments,有人遇到了同样的问题,有人推荐使用signatrix这个稳定的版本,于是改用下面的代码,果然很好,使用d0/d1级别模型训练过程中,loss值稳定下降,没有出现toandaominh1997那个版本的奇怪的震荡和爆炸):

       git clone https://github.com/signatrix/efficientdet.git

但是使用这个版本后发现它只支持d0/d1级(对应的backbone网络EfficientNet是b0/b1)的模型,对2-7级别不支持,此外对更强悍的adv-efficientnet也不支持,改成其他级别训练时会报错(错误在后面贴出来),而且它每次装载预训练模型总是远程从国外网上加载,会很慢,train.py里的某些参数也不全,使用起来不灵活,例如模型训练中途中断后没有可以resume的机制,为了解决这些比较严重的问题,我花了几天时间琢磨并修改了它的源码,把这些问题逐一解决了,并且使用修改后代码进行了训练,现在非常稳定好用,可以使用b0-b7或adv b0-b8任一级别的backbone模型进行训练,我的代码提交在 https://github.com/arnoldfychen/efficientdet,国内的gitee上有同步了的镜像版本https://gitee.com/arnoldfychen,一般来说使用gitee速度远比github快。

下载源码:

      git clone https://gitee.com/arnoldfychen/efficientdet.git

继续安装支持包:

      cd efficientdet

      pip install -r requirements.txt

将自己的coco数据集和网上下载的预训练模型放到相应位置(../EfficientDet/pretrained_models里存放了从https://github.com/lukemelas/EfficientNet-PyTorch/releases下载的全部预训练模型):

      ln -s /workspace/CenterNet/data data        #把你自己的数据集拷贝或者链接到efficientdet目录下
      cp -r ../EfficientDet/pretrained_models .     #把下载好了的预训练模型拷贝到efficientdet目录下

下面根据自己的GPU环境和数据集等情况对源码做修改:

1)可能需要对train.py里下列设置和参数根据实际情况和需要做修改:

    os.environ['CUDA_VISIBLE_DEVICES']='3,4,5,6'

    parser.add_argument("--image_size", type=int, default=512, help="The common width and height for all images")
    parser.add_argument("--batch_size", type=int, default=3, help="The number of images per batch")
    parser.add_argument("--num_epochs", type=int, default=300)
    parser.add_argument("--test_interval", type=int, default=1, help="Number of epoches between testing phases")
    parser.add_argument("--data_path", type=str, default="data/coco", help="the root folder of dataset")
    parser.add_argument("--saved_path", type=str, default="trained_models")
    parser.add_argument("--save_interval", type=int, default=10, help="Number of epoches between two operations for saving weights")
    parser.add_argument('--backbone_network', default='efficientnet-b7', type=str,
                    help='efficientdet-[b0, b1, ..]')
    parser.add_argument('--remote_loading', default=False, type=bool,
                    help='if this option is enabled, it will download and load the backbone weights from https://github.com/lukemelas/EfficientNet-PyTorch/releases,'+ \
                          'otherwise,load the weights locally from ./pretrained_models')
    parser.add_argument('--advprop', default=True, type=bool,
                    help='if this option is enabled, the adv_efficientnet_b* backbone will be used instead of efficientnet_b*')
    

2) src/config.py里的COCO_CLASSES=['fire']

3)src/dataset.py里的:

     def num_classes(self):
        #return 80
        return 1

4)根据情况修改test_dataset.py:

    parser.add_argument("--image_size", type=int, default=512, help="The common width and height for all images")
    parser.add_argument("--data_path", type=str, default="data/coco", help="the root folder of dataset")
    parser.add_argument("--cls_threshold", type=float, default=0.5)
    parser.add_argument("--nms_threshold", type=float, default=0.5)
    parser.add_argument("--pretrained_model", type=str, default="trained_models/fire/signatrix_efficientdet_coco_latest.pth")
    parser.add_argument("--output", type=str, default="predictions")

5)根据情况修改mAP_evaluation.py:

    if __name__ == '__main__':
    efficientdet = torch.load("trained_models/fire/signatrix_efficientdet_coco_latest.pth").module
    efficientdet.cuda()
    dataset_val = CocoDataset("data/coco", set='val2017',
                              transform=transforms.Compose([Normalizer(), Resizer()]))
    evaluate_coco(dataset_val, efficientdet)

然后就可以执行下面的命令进行训练:

     python -u train.py      

训练结束后,执行下面的命令进行测试和mAP值评估(最后一次生成的best模型和latest模型都可以试验一下看哪个效果更好):

    python -u test_dataset.py

    python -u mAP_evaluation.py

附:

1. 使用https://github.com/signatrix/efficientdet 这个代码,如果backbone不是efficientnet-b0或efficientnet-b1,会报下面的错误之一:

#b2-3
Caught RuntimeError in replica 0 on device 0.
Original Traceback (most recent call last):
  File "/opt/conda/lib/python3.6/site-packages/torch/nn/parallel/parallel_apply.py", line 60, in _worker
    output = module(*input, **kwargs)
  File "/opt/conda/lib/python3.6/site-packages/torch/nn/modules/module.py", line 547, in __call__
    result = self.forward(*input, **kwargs)
  File "/workspace/efficientdet/src/model.py", line 259, in forward
    p3 = self.conv3(c3)
  File "/opt/conda/lib/python3.6/site-packages/torch/nn/modules/module.py", line 547, in __call__
    result = self.forward(*input, **kwargs)
  File "/opt/conda/lib/python3.6/site-packages/torch/nn/modules/conv.py", line 343, in forward
    return self.conv2d_forward(input, self.weight)
  File "/opt/conda/lib/python3.6/site-packages/torch/nn/modules/conv.py", line 340, in conv2d_forward
    self.padding, self.dilation, self.groups)
RuntimeError: Given groups=1, weight of size 64 40 1 1, expected input[3, 48, 64, 64] to have 40 channels, but got 48 channels instead

#b4
RuntimeError: Given groups=1, weight of size 64 40 1 1, expected input[3, 56, 64, 64] to have 40 channels, but got 56 channels instead

#b5
RuntimeError: Given groups=1, weight of size 64 40 1 1, expected input[3, 64, 64, 64] to have 40 channels, but got 64 channels instead

#b6
RuntimeError: Given groups=1, weight of size 64 40 1 1, expected input[3, 72, 64, 64] to have 40 channels, but got 72 channels instead

#b7
RuntimeError: Given groups=1, weight of size 64 40 1 1, expected input[3, 80, 64, 64] to have 40 channels, but got 80 channels instead  

原因是里面有网络层的out-input之间的shape对不上,使用我修改过的代码:https://gitee.com/arnoldfychen/efficientdet即可。

2.如果发生out of memory 错误,根据你的GPU的内存大小调小batch_size参数。

 

pytorch版efficientdet训练自己的数据集(zylo) 本例用的数据集是 BIWI Walking Pedestrians dataset,首先将视频按帧转换成图像序列,然后用labelme标注,保存为json数据格式文件。ctrl+c,此时logs目录最下面的pth为total loss最小的模型。除此之外还要注意数据集要放在datasets目录下。测试结果的图片保存在test文件夹下。之后数据集要转换成coco格式,参考。 阅读详情

相关推荐

2024真实AI能力进阶路线图:从业务问题出发的实战学习指南

人工智能(AI)已从技术概念演进为组织级生产力基础设施,其核心价值不在于模型复杂度或工具炫技,而在于精准解决业务问题的能力。理解AI的本质是构建‘业务理解→数据探查→工具调用→结果解读→价值包装’的闭环能力栈,而非孤立掌握Python、prompt工程或大模型微调等单一技能。尤其在制造业预测性维护、金融风控、智能客服等高频落地场景中,80%的项目成败取决于数据质量、业务指标对齐与工程化部署能力,而非算法先进性。因此,面向从业者的能力进阶,必须以真实业务问题为起点,建立正向反馈回路,并通过可验证的最小可行产出

weixin_33730836的博客 348

EfficientDet训练自己的数据集

EfficientDet复现

qq_20373723的博客 2746

AI产业黑洞效应:资源集中下的工程化落地指南

人工智能已从概念验证阶段迈入深度产业融合期,其核心演进逻辑不再是技术单点突破,而是模型、数据、场景与工程四层能力的系统性咬合。所谓‘AI黑洞’,实指算力成本收敛、数据飞轮增益、工程化隐性壁垒和场景知识深度绑定四大结构性力量共同形成的高密度演化态——它不意味着泡沫破裂,而标志着行业进入低逃逸门槛、高能量转化效率的成熟阶段。对制造业、金融、医疗等垂直领域而言,关键不在是否采用AI,而在能否在真实产线中实现API调用量持续增长、720小时无故障运行、客户主动扩容等硬指标。本文以工业质检为切口,揭示轻量模型分区检测

chuanggangbo5551的博客 548

Efficientdet的复现+训练自己的数据集

efficientnet在工业检测展现出了极其强大的检测效果,与yolov3和yolov5为同一竞争赛道,曾连续霸版6个月以上,而已efficientnet为基础的其他改进模型在工业检测上也表征出适用性。官方源码的框架是基于tensortflow的,且复现的精度远远不及论文提及的精度。zylo117改进的pytorch代码在更容易复现,也更容易学习。复现源码:Yet-Another-EfficientDet-Pytorch/tutorial/train_logo.ipynb at master · zylo

chenhaogu的博客 6870

AI自由职业项目实战:从需求翻译到工业级交付

AI自由职业不是调参或跑通模型,而是将模糊业务需求转化为可量化、可部署、可验证的工程闭环。其核心在于需求翻译能力——把客户一句‘识别螺丝松动’,精准拆解为数据采集路径、边缘部署约束、误报成本测算等硬性指标。这要求从业者兼具领域知识嵌入、工程鲁棒性兜底与商业价值显性化三层能力,尤其在工业检测、医疗影像、产线质检等强约束场景中,模型轻量化、物理真实增强、实时推理优化等技术价值直接决定项目成败。本文聚焦freelancing in ai/ml的真实战场,覆盖需求确认、脏数据治理、模型选型红线、嵌入式部署及验收卡点

weixin_33755649的博客 444

边缘AI工程实战:从物理约束到稳定部署的五道生死关

边缘AI并非简单将云端模型轻量化部署,而是面向算力受限、功耗严苛、环境多变的真实硬件场景,对人工智能全链路进行重构的技术实践。其核心原理在于协同优化模型结构、内存带宽、热设计、实时调度与固件韧性,在物理定律约束下达成确定性性能。技术价值体现在降低端侧延迟抖动、提升三年无故障运行率、保障数据本地化处理安全。典型应用场景覆盖工业质检、农业物联网、电力巡检等无人值守现场。本文聚焦Jetson Orin Nano、RK3588、ESP32-S3等主流平台,深入解析模型量化感知训练、ION零拷贝内存、RT-Linux

2348

EfficientDet迁移学习终极指南:5个小数据集快速训练技巧

Yet-Another-EfficientDet-Pytorch是一个基于PyTorch的EfficientDet官方实现重构项目,提供了实时SOTA性能和预训练权重,特别适合小数据集场景下的目标检测任务。本文将分享5个实用技巧,帮助你在有限数据条件下快速实现高精度模型训练。 ## 📊 为什么选择EfficientDet进行迁移学习? EfficientDet作为Google提出的高效目标检

gitblog_00620的博客 792

EfficientDet

代码还没全,这个网络不快: https://github.com/Michael-Jing/EfficientDet-pytorch https://github.com/kentaroy47/efficientdet.pytorch

jacke121的专栏 5715

5分钟快速上手AutoML:从零部署EfficientDet目标检测模型

想要快速掌握Google Brain AutoML项目中的EfficientDet模型部署吗?🤔 本文为你提供一个完整的快速入门指南,让你在5分钟内学会如何安装、配置和运行这个强大的目标检测系统。 AutoML项目提供了EfficientDet系列模型,这是一个基于神经架构搜索(NAS)优化的目标检测框架,在COCO数据集上达到了55.1mAP的state-of-the-art性能,同时计算量

gitblog_00829的博客 925

植物气孔检测:深度迁移学习在小目标识别中的实践

气孔检测属于生物图像中小目标检测的典型任务,其核心挑战在于微尺度(10–30μm)、低对比度与形态多变。传统目标检测模型因尺度敏感性弱、边界定位粗略及计算冗余,难以满足植物表型分析对精度与实时性的双重要求。深度迁移学习通过复用ImageNet预训练的语义先验,结合特征解耦、域自适应微调与物理感知数据增强,显著提升小目标识别鲁棒性。该技术已广泛应用于作物抗旱性评估、光合效率建模及田间便携式表型设备开发,尤其适配水稻、拟南芥等多物种显微图像分析场景。

weixin_27310417的博客 85

EfficientDet-master.zip

EfficientDet项目代码,包含efficientdet预训练模型、训练好的模型。包含efficientnet-b0_weights_tf_dim_ordering_tf_kernels_autoaugment_notop.h5、efficientdet-d0.h5等,可训练、可测试。

从零到一:基于PyTorch版EfficientDet的工业缺陷检测实战

本文详细介绍了如何从零开始使用PyTorch版EfficientDet进行工业缺陷检测的实战指南。内容包括环境搭建、数据集准备、模型训练与调优、以及部署优化等关键步骤,帮助开发者快速掌握EfficientDet在工业质检中的应用,提升检测效率和精度。

weixin_30379531的博客 567

efficientdet-pytorch:这是一个有效det-pytorch的源码,可以用于训练自己的模型

Efficientdet:可扩展且高效的对象目标检测模型在Pytorch当中的实现 目录 性能情况 训练数据集 权值文件名称 测试数据集 输入图片大小 行动计划0.5:0.95 2017年COCO火车 COCO-Val2017 512x512 33.1 2017年COCO火车 COCO-Val2017 640x640 38.8 2017年COCO火车 COCO-Val2017 768x768 42.1 2017年COCO火车 COCO-Val2017 896x896 45.6 2017年COCO火车 COCO-Val2017 1024x1024 48.8 2017年COCO火车 COCO-Val2017 1280x1280 50.2 2017年COCO火车 COCO-Val2017 1408x1408 50.7 2017年COCO培

Qwen2.5-VL-7B-Instruct-NVFP4部署实战:TensorRT-LLM LLM API多模态推理完全指南

Qwen2.5-VL-7B-Instruct-NVFP4 是 NVIDIA 基于阿里 Qwen2.5-VL-7B-Instruct 官方量化发布的多模态大模型:它使用 NVFP4 4比特量化技术,支持图文多模态输入,可直接通过 TensorRT-LLM 的 LLM API 部署推理。本文将带你从零跑通部署流程,理解量化配置、文件结构、运行参数与合规要点。 ## 一、模型速览:这是一个什么模型?

gitblog_01177的博客 338

视觉SLAM十四讲--第13讲 实践:设计SLAM系统(最详细的代码调试运行步骤)

最详细的代码调试运行避坑说明,也包含了我自己对代码的理解,如有理解错误的地方,欢迎指正交流。

记录和分享 1万+

Unity Animancer插件(一)基本使用

Animancer是什么?资源商店主页我们来通过Animancer实现一个最基本的动画播放效果。首先创建一个脚本,编写如下代码 很容易理解,就是在时播放一个指定的动画片段。接下来为角色添加、和刚刚编写的,并为字段赋值 接下来运行游戏就可以看到效果了 此时角色身上的组件可以看到当前动画的各项参数 下面我们来实现通过按键控制角色在于之间转换。新创建一个脚本。在代码中监听Y轴上的输入。然后根据监听到的数值判断角色状态,并播放相应的动画 给对应字段赋值后,启动游戏看下效果 下面来实现一个开枪效果。在默认状态下,角色

夜槿笙歌的博客 1万+

抖音下载器 3 分钟快速上手:批量保存无水印视频

想把某博主主页 30 个作品、再加一条视频里的原声音乐完整存到本地?手工复制粘贴、逐个下载、整理文件夹,半小时起步。开源项目 douyin-downloader 用一份 YAML 配置批量完成这些需求,无水印、可去重、自动重试,把 1 小时的活压到 20 分钟以内。 ## 初次上手:3 分钟完成第一次下载 1. 克隆仓库并安装依赖 ```bash git clone https://gitc

gitblog_01136的博客 346

Docker入门教程:在腾讯云轻量服务器上部署你的第一个容器化应用 (2025)

还在为“在我电脑上明明是好的”而烦恼?本篇Docker入门教程,用通俗易懂的比喻解释镜像、容器的核心概念,并手把手带你在腾讯云轻量服务器上,从运行Nginx到编写Dockerfile打包自己的Python应用,轻松掌握容器化部署。

Clownseven的博客 2085

EfficientDet复合缩放与BiFPN原理解析:面向边缘部署的目标检测工程实践

目标检测是计算机视觉落地最广泛的技术方向之一,其核心挑战在于平衡精度、速度、内存与功耗等多维约束。复合缩放(Compound Scaling)作为一种系统级模型优化方法,通过协同调整网络深度、宽度与输入分辨率,突破了传统单维度缩放的瓶颈;而加权双向特征金字塔(BiFPN)则从特征融合机制入手,显著提升小目标检测能力与跨尺度信息传递效率。这两项关键技术使EfficientDet成为工业级边缘AI部署的典型范式,广泛应用于智能安防、车载DMS、电力巡检及工业质检等对实时性与鲁棒性要求严苛的场景。本文深入剖析其设

weixin_30439067的博客 636

别再买模块了!手把手教你用FT232RL-REEL芯片,从零设计一个USB转串口电路板

本文详细介绍了如何使用FT232RL-REEL芯片从零设计USB转串口电路板,涵盖核心器件选型、原理图设计、PCB布局布线及焊接调试等关键步骤。通过实战案例和性能对比,展示自制电路板在成本、性能和可靠性上的优势,特别适合硬件爱好者和工程师参考。

weixin_30561425的博客 433

ISOLAR Autosar BSW 配置 之 Com

Autosar ISOLAR Bsw Configuration 之 Com

qq_42262743的博客 453

谷歌AI公开新一代“目标检测”系统

雷锋网3月19日消息,谷歌大脑及AI团队,在本周发布了一个叫EfficientDet(高效检测)的人工智能系统。 这个系统,实现较少的计算,获得更高效的检测目标。 该系统的创建者表示,与YOLO或AmoebaNet等其他流行的检测模型相比,该系统与CPU或者GPU一起使用时,还能实现更快的性能。 在进行另一项与目标检测相关的任务时,EfficientDet也取得了优异的性能。利用PASCAL...

chaihuimin的专栏 349

【我的Android进阶之旅】解决android应用使用android:persistent属性带来的系统Launcher应用必须重启设备才生效的问题,大幅度提升开发效率

一、问题描述 我们在开发系统级别应用,比如Launcher桌面的时候,会发现有个问题:每次Launcher修改完代码,重新编译之后,安装到android设备上之后,必须重启才会生效。否则就是使用了之前的Launcher版本的内容。而每次重启设备得一分钟左右,太慢了,太影响效率了! 1.1 痛点 每次更新完代码,重新安装之后,必须重启设备才会生效。效率太TM低了! 二、分析问题 经过一轮代码排查,最终发现是因为src\main\AndroidManifest.xml文件中,定义application使用了an

字节卷动 1713

Monk AI轻量级车辆与停车区域检测实战

轻量级目标检测是面向边缘设备、低代码交付和快速验证的计算机视觉关键技术,其核心在于平衡精度、速度与工程落地成本。Monk AI 作为高度封装的 PyTorch 流水线工具,通过自动化的数据增强策略、自适应 Anchor 聚类和双标签协同训练(如 Car and Pool Detector),显著降低目标检测的技术门槛。它不追求通用场景 SOTA,而聚焦结构化空间下的实例识别与区域理解,在停车场、园区出入口等俯视监控场景中实现高召回、低误检的业务可用结果。结合 TensorRT 加速与 Docker 封装,可

weixin_30568591的博客 668

环形平滑标签(Circular Smooth Label, CSL)技术详解

环形平滑标签(CSL)是一种优化算法,旨在解决旋转目标检测中角度预测的边界问题。通过将角度回归转化为分类任务,并利用窗口函数平滑标签分布,CSL有效处理了角度周期性的梯度突变问题。其核心原理包括角度离散化和平滑标签编码,通过高斯、矩形、三角等窗口函数生成概率分布。CSL在技术实现上涉及标签转换流程、模型结构调整和损失函数优化,显著提升了检测精度和稳定性。在DOTA数据集上的实验表明,CSL在mAP和角度误差方面优于传统方法。应用场景包括遥感图像分析、自动驾驶和工业质检,部署时需注意旋转NMS编译和ONNX导

浩瀚之水的专栏 640

【WRF安装(2025)】服务器移植 WRF 安装环境

【WRF安装(2025)】服务器移植 WRF 安装环境

WW、forever的博客 106
上一篇: 我的AI之路(46)--在Xavier上的自制dock镜像内安装支持部署EfficientDet和CenterNet模型以及mmdetection序列模型的环境
下一篇: Ubuntu里设置docker容器内的服务随开机自动启动
Arnold-FY-Chen
博客等级 码龄19年 925粉丝 204原创
评论 21
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Arnold-FY-Chen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值