mxnet-ssd

GitHub
763 335 中等 1 次阅读 1个月前MIT图像
AI 解读 由 AI 自动生成,仅供参考

mxnet-ssd 是一个基于 MXNet 深度学习框架实现的单发多框目标检测(SSD)开源项目。它旨在通过单一神经网络高效地完成物体的定位与分类任务,解决了传统检测方法速度慢或精度不足的痛点,实现了速度与准确性的良好平衡。

该项目非常适合计算机视觉领域的研究人员和开发者使用,特别是那些希望复现经典 SSD 算法、进行模型训练评估,或需要在 MXNet 生态中部署目标检测应用的技术人员。虽然官方已建议新用户迁移至功能更丰富的 Gluon-CV 库,但 mxnet-ssd 作为经典的复现版本,依然具有重要的参考价值和实用性。

其技术亮点在于完美兼容原版 Caffe 模型,并提供了便捷的模型转换工具,确保检测结果与原始版本几乎一致。此外,项目针对 MXNet 特性进行了深度优化:支持从 ResNet、Inception 等主流分类网络快速构建检测模型;利用后端多线程引擎显著提升了多 GPU 环境下的训练与推理速度;还集成了 MobileNet 预训练模型以满足移动端对“超快”速度的需求。项目同时提供 Docker 支持和 TensorBoard 可视化功能,进一步降低了环境配置与实验监控的门槛。

使用场景

某电商物流团队正致力于升级其自动化分拣系统,需要实时识别传送带上不同尺寸和角度的包裹及标签。

没有 mxnet-ssd 时

  • 检测流程繁琐低效:团队需依赖多阶段检测框架(如 Faster R-CNN),先提取候选区域再分类,导致单张图片处理耗时过长,无法满足高速流水线的实时性要求。
  • 多尺度目标漏检严重:面对传送带上远近不一、大小差异巨大的包裹,传统单尺度模型难以兼顾,经常漏检远处的小件货物或截断近处的大件。
  • 部署与迁移成本高:原有基于 Caffe 的 SSD 模型虽精度尚可,但难以利用现代多 GPU 集群进行加速,且缺乏灵活的预训练模型(如 MobileNet),在边缘设备上部署极其困难。
  • 训练监控盲区:缺乏直观的验证集 mAP 实时监控手段,开发人员只能在训练结束后评估结果,调优周期漫长且盲目。

使用 mxnet-ssd 后

  • 实现端到端极速检测:利用 mxnet-ssd 的单次前向传播特性,结合其 C++ 记录迭代器和多线程后端,在 TITAN X 显卡上实现了高达 95 FPS 的处理速度,完美匹配流水线节拍。
  • 全尺寸目标精准覆盖:通过内置的多尺度特征图机制,模型能同时精准定位从细小标签到大型箱体等各类目标,显著降低了漏检率。
  • 灵活部署与性能跃升:团队直接调用提供的 MobileNet 预训练模型,在保证 72.5% mAP 的前提下实现了“超快”推理,轻松将算法移植到低算力边缘网关;同时利用现成的 Caffe 模型转换器,无缝迁移了原有资产。
  • 可视化训练调优:借助集成的 TensorBoard 支持和训练过程中的 mAP 实时监控,工程师能即时调整超参数,将模型收敛时间缩短了 40%。

mxnet-ssd 通过统一的单次检测框架和高效的 MXNet 后端,成功将复杂的工业级物体检测任务转化为高精度、低延迟的实时生产力。

运行环境要求

操作系统
  • Linux
  • Windows
GPU
  • 训练强烈建议使用 NVIDIA GPU (如 TITAN X),需安装 CUDA (文中示例为 v5.1 或 CUDA 9) 和可选的 cuDNN
  • CPU 训练速度极慢不推荐
内存

未说明 (文中提及 VGG16 模型 batch-size 32 训练约占用 4.6GB 显存)

依赖
notes该项目已弃用,作者建议迁移至 Gluon-CV。官方提供基于 Docker 的预构建镜像(仅支持 Linux),包含所有依赖及 TensorBoard 支持。若不使用 Docker,需手动编译 MXNet 并开启 CUDA 支持。Windows 用户需注意部分功能(如 Docker、TensorBoard)可能仅支持 Linux。
python未说明 (需支持 mxnet-python api)
mxnet>=1.1.0
opencv-python (cv2)
matplotlib
numpy
mxnet-ssd hero image

快速开始

SSD:单次多框目标检测器

SSD 是一种使用单一网络进行目标检测的统一框架。

您可以使用该代码来训练、评估和测试目标检测任务。

免责声明

这是对基于 Caffe 的原始 SSD 的重新实现。官方仓库可在 这里 找到。arXiv 论文可在此查阅 这里

本示例旨在复现这一优秀的检测器,同时充分利用 MXNet 的卓越特性。

  • 该模型与 Caffe 版本完全兼容。
  • 现已提供从 Caffe 转换模型的工具!
  • 结果几乎与原始版本相同。然而,由于实现细节的不同,结果可能会略有差异。

新内容

  • 此仓库现已弃用,我正在迁移到最新的 Gluon-CV,它更加用户友好,并且正在开发更多算法。此仓库将不再积极维护,但您仍可继续使用 MXNet 1.1.0(可能为 1.2.0)版本。
  • 现在,此仓库内部已与官方 MXNet 后端的数据同步。大多数情况下,pip install mxnet 也可用于此仓库。
  • 现提供 MobileNet 预训练模型。
  • 增加了多个训练好的模型。
  • 提供了一种更简单的方式,可以从主流分类网络(ResNet、Inception 等)中构建网络,并附有指南
  • 根据 Caffe 版本更新至最新版本,mAP 提升了 5%。
  • 使用基于后端多线程引擎的 C++ 记录迭代器,在多 GPU 环境下实现了巨大的速度提升。
  • 在训练过程中监控验证 mAP。
  • 更多网络符号正在开发和测试中。
  • 额外的算子现在位于 mxnet/src/operator/contrib 中,符号也已修改。请使用 Release-v0.2-beta 来加载旧模型。
  • 为该仓库增加了 Docker 支持,预构建并包含所有软件包和依赖项。(仅限 Linux)
  • 增加了 TensorBoard 支持,使研究更加便捷。(仅限 Linux)

演示结果

demo1 demo2 demo3

mAP

模型 训练数据 测试数据 mAP 备注
VGG16_reduced 300x300 VOC07+12 trainval VOC07 test 77.8 快速
VGG16_reduced 512x512 VOC07+12 trainval VOC07 test 79.9 慢速
Inception-v3 512x512 VOC07+12 trainval VOC07 test 78.9 最快
Resnet-50 512x512 VOC07+12 trainval VOC07 test 79.1 快速
MobileNet 512x512 VOC07+12 trainval VOC07 test 72.5 超快速
MobileNet 608x608 VOC07+12 trainval VOC07 test 74.7 超快速
  • 更多内容即将添加

速度

模型 GPU CUDNN 批量大小 FPS*
VGG16_reduced 300x300 TITAN X(Maxwell) v5.1 16 95
VGG16_reduced 300x300 TITAN X(Maxwell) v5.1 8 95
VGG16_reduced 300x300 TITAN X(Maxwell) v5.1 1 64
VGG16_reduced 300x300 TITAN X(Maxwell) N/A 8 36
VGG16_reduced 300x300 TITAN X(Maxwell) N/A 1 28

*仅计算前向传播时间,不包括数据加载和绘图。

开始使用

  • 选项 #1 - 使用 'Docker' 安装。如果您不熟悉这项技术,下方有一个 'Docker' 部分。 您可以获取最新镜像:
docker pull daviddocker78/mxnet-ssd:gpu_0.12.0_cuda9
  • 您需要 Python 模块:cv2matplotlibnumpy。 如果您使用 MXNet 的 Python API,您可能已经安装了这些模块。 您可以通过 pip 或包管理器(如 apt-get)安装它们:
sudo apt-get install python-opencv python-matplotlib python-numpy
  • 克隆此仓库:
# 如果您没有 git,请根据您的系统通过 apt 或 homebrew/yum 安装
sudo apt-get install git
# 切换到您希望克隆此仓库的目录
cd ~
git clone --recursive https://github.com/zhreshold/mxnet-ssd.git
# 确保使用 --recursive 进行克隆
# 如果未正确完成或您使用的是下载的仓库,请通过以下命令拉取所有子模块:
# git submodule update --recursive --init
cd mxnet-ssd/mxnet
  • (如果您已安装官方 MXNet,则跳过此步骤。)编译 MXNet:cd /path/to/mxnet-ssd/mxnet。按照官方说明 这里 进行操作。
# 对于 Ubuntu/Debian
cp make/config.mk ./config.mk
# 如有必要进行修改

请记住,如果想进行训练,务必启用 CUDA,因为 CPU 训练速度极其缓慢。使用 CUDNN 是可选的,但强烈推荐。

尝试演示

# 切换到 /path/to/mxnet-ssd
python demo.py --gpu 0
# 尝试示例:
python demo.py --epoch 0 --images ./data/demo/dog.jpg --thresh 0.5
python demo.py --cpu --network resnet50 --data-shape 512
# 第一次运行时需等待库加载
  • 查看 python demo.py --help 以获取更多选项。

训练模型

本示例仅涵盖 Pascal VOC 数据集上的训练。其他数据集应可通过在 dataset/imdb.py 中创建 Imdb 类的子类来轻松支持。 有关详细信息,请参阅 dataset/pascal_voc.py 示例。

  • 下载转换后的预训练 vgg16_reduced 模型 此处,并将 .param.json 文件默认解压到 model/ 目录。
  • 下载 PASCAL VOC 数据集,如果您已有则可跳过此步骤。
cd /path/to/where_you_store_datasets/
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar

# 解压数据。
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
  • 我们将使用 VOC2007/2012 中的 trainval 数据集作为通用策略。 建议的目录结构是将 VOC2007VOC2012 目录存储在同一个 VOCdevkit 文件夹中。
  • 然后默认将 VOCdevkit 文件夹链接到 data/VOCdevkit
ln -s /path/to/VOCdevkit /path/to/this_example/data/VOCdevkit

使用硬链接而不是复制可以节省一些磁盘空间。

  • 创建打包的二进制文件以加快训练速度:
# cd /path/to/mxnet-ssd
bash tools/prepare_pascal.sh
# 或者如果你使用的是 Windows
python tools/prepare_dataset.py --dataset pascal --year 2007,2012 --set trainval --target ./data/train.lst
python tools/prepare_dataset.py --dataset pascal --year 2007 --set test --target ./data/val.lst --shuffle False
  • 开始训练:
python train.py
  • 默认情况下,此示例将使用 batch-size=32learning_rate=0.004。如果你有不同的配置,可能需要稍微调整这些参数。可以运行 python train.py --help 查看更多训练选项。例如,如果你有 4 张 GPU 卡,可以这样设置:
# 注意:多 GPU 的最佳训练参数组合尚未完全确定
python train.py --gpus 0,1,2,3 --batch-size 128 --lr 0.001
  • 内存占用:MXNet 非常节省内存,在 VGG16_reduced 模型上使用 batch-size 32 进行训练时,不使用 CUDNN(conv1_x 和 conv2_x 固定)的情况下,大约占用 4684MB。

评估训练好的模型

使用以下命令:

# cd /path/to/mxnet-ssd
python evaluate.py --gpus 0,1 --batch-size 128 --epoch 0

将模型转换为部署模式

这一步骤会移除所有损失层,并添加一个用于合并结果和非极大值抑制的层。当无法加载 Python 符号文件时非常有用。

# cd /path/to/mxnet-ssd
python deploy.py --num-class 20
# 然后你可以使用新模型运行演示,而无需加载 Python 符号文件
python demo.py --prefix model/ssd_300_deploy --epoch 0 --deploy

转换 Caffe 模型

Caffe 到 MXNet 的转换工具位于 /path/to/mxnet-ssd/tools/caffe_converter

该工具经过特别修改,以处理 Caffe-SSD 中的自定义层。使用方法如下:

cd /path/to/mxnet-ssd/tools/caffe_converter
make
python convert_model.py deploy.prototxt name_of_pretrained_caffe_model.caffemodel ssd_converted
# 你可以使用这个转换后的模型以部署模式运行,而无需加载 Python 符号文件
python demo.py --prefix ssd_converted --epoch 1 --deploy

虽然不能保证每次转换都能成功,但至少目前效果不错。

旧版模型

由于引入了新的网络构建接口,旧版模型的权重名称存在不一致的问题。你仍然可以通过将符号文件重命名为 legacy_xxx.py 并使用 python train/demo.py --network legacy_xxx 来加载之前的模型。例如:

python demo.py --network 'legacy_vgg16_ssd_300.py' --prefix model/ssd_300 --epoch 0

Docker

首先确保已安装 docker。要在 Nvidia GPU 上运行,还需要安装 nvidia-docker 插件。

docker pull daviddocker78/mxnet-ssd:gpu_0.12.0_cuda9

如果你希望自行构建镜像,可以在本仓库的 docker 文件夹中找到 Dockerfile。

  • 运行容器实例:
nvidia-docker run -it --rm myImageName:tag

现在你可以在容器中执行与本地安装 MXNet 相同的操作。更多信息请参阅 指南

TensorBoard

  • 社区为将 TensorBoard 集成到 MXNet 中做出了很大努力。如果你选择使用 Docker,预构建的镜像中已经包含了 TensorBoard。否则,请按照 此处 的说明进行安装。
  • 在训练过程中,若想将训练损失曲线、各类别验证 AP 以及验证 ROC 曲线保存到 TensorBoard,可以指定:
python train.py --gpus 0,1,2,3 --batch-size 128 --lr 0.001 --tensorboard True
  • 如果还想保存各层的分布情况(实际上是它们的方差),可以指定:
python train.py --gpus 0,1,2,3 --batch-size 128 --lr 0.001 --tensorboard True --monitor 40
  • 使用 Docker 进行可视化:TensorBoard 的界面随着时间不断变化。为了获得最佳体验,建议下载最新的 TensorFlow Docker 镜像:
# 从 Docker Hub 下载预构建的镜像
docker pull tensorflow/tensorflow:1.4.0-devel-gpu
# 运行容器并使用 `-p` 标志打开端口。将存储日志的卷挂载到容器内的目录。
nvidia-docker run -it --rm -p 0.0.0.0:6006:6006 -v /my/full/experiment/path:/res tensorflow/tensorflow:1.4.0-devel-gpu
cd /res
tensorboard --logdir=.

如果不想使用 Docker,可以直接运行最后一行命令。现在 TensorBoard 正在加载你的实验事件数据。在浏览器中访问 0.0.0.0:6006,你就能看到 TensorBoard 界面了!

TensorBoard 可视化

loss AP ROC

版本历史

v0.7-alpha2017/10/31
v0.62017/06/26
v0.5-beta2017/03/28
v0.2-alpha2017/03/23
v0.2-beta2017/01/18

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架

PaddleOCR

PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。

74.9k|★★★☆☆|今天
语言模型图像开发框架

tesseract

Tesseract 是一款历史悠久且备受推崇的开源光学字符识别(OCR)引擎,最初由惠普实验室开发,后由 Google 维护,目前由全球社区共同贡献。它的核心功能是将图片中的文字转化为可编辑、可搜索的文本数据,有效解决了从扫描件、照片或 PDF 文档中提取文字信息的难题,是数字化归档和信息自动化的重要基础工具。 在技术层面,Tesseract 展现了强大的适应能力。从版本 4 开始,它引入了基于长短期记忆网络(LSTM)的神经网络 OCR 引擎,显著提升了行识别的准确率;同时,为了兼顾旧有需求,它依然支持传统的字符模式识别引擎。Tesseract 原生支持 UTF-8 编码,开箱即用即可识别超过 100 种语言,并兼容 PNG、JPEG、TIFF 等多种常见图像格式。输出方面,它灵活支持纯文本、hOCR、PDF、TSV 等多种格式,方便后续数据处理。 Tesseract 主要面向开发者、研究人员以及需要构建文档处理流程的企业用户。由于它本身是一个命令行工具和库(libtesseract),不包含图形用户界面(GUI),因此最适合具备一定编程能力的技术人员集成到自动化脚本或应用程序中

73.3k|★★☆☆☆|3天前
开发框架图像