使用QEMU搭建嵌入式固件模拟环境:从静态分析到动态调试
1. 项目概述为什么我们需要一个“虚拟的”固件环境如果你和我一样经常需要分析路由器、摄像头、智能家居设备这些嵌入式设备的固件那你肯定遇到过这样的困境手头没有对应的硬件设备或者不敢在真机上直接运行来路不明的固件怕它“变砖”或者引发安全问题。这时候一个能够模拟设备运行环境的“沙盒”就显得至关重要。QEMU这个强大的开源机器模拟器和虚拟器就是我们搭建这个“沙盒”的核心工具。它不仅能模拟常见的x86、ARM架构还能模拟MIPS、PowerPC等嵌入式领域常见的CPU让我们可以在自己的电脑上安全、可控地运行和调试那些为特定硬件编译的固件。简单来说这个项目的目标就是利用QEMU在你的个人电脑宿主机上构建一个能够启动、运行并分析目标设备固件的完整虚拟环境。这不仅仅是“装个虚拟机”那么简单它涉及到架构匹配、网络配置、文件系统提取与挂载、调试接口打通等一系列步骤。对于安全研究员、逆向工程师、嵌入式开发者和固件爱好者而言这是一项基础且核心的技能。通过它你可以静态分析用binwalk等工具拆包结合动态分析在QEMU里实际运行深入理解固件的行为挖掘潜在漏洞或者进行定制化开发。2. 核心思路与工具选型不止于QEMU搭建一个可用的固件模拟环境思路可以概括为“识别-提取-模拟-交互”。整个流程的核心是QEMU但它需要一系列工具的配合才能发挥最大效用。2.1 核心工具链解析QEMUQuick EMUlator项目的基石。它有两种主要模式系统模式模拟整个计算机系统包括CPU、内存、各种外设如网络卡、串口。这是我们运行完整固件镜像如firmware.bin时最常用的模式。例如qemu-system-arm用于模拟ARM架构的机器。用户模式仅模拟CPU指令集用于运行单个跨架构的可执行文件。这在动态分析固件中提取出的单个程序如/bin/busybox时非常有用。例如qemu-arm-static。选择理由开源、免费、支持架构极其广泛社区活跃是业界的标准工具。Binwalk固件分析的“瑞士军刀”。它的核心功能是识别和提取嵌入在固件文件中的各种文件系统、压缩包、可执行文件等。作用绝大多数厂商发布的固件都是一个“大杂烩”镜像里面包含了内核、文件系统、引导程序等。Binwalk能帮你自动识别这些结构通过文件签名、熵分析并将其中的文件系统如SquashFS、JFFS2、UBIFS提取出来。这是我们获取根文件系统rootfs的关键一步。选择理由自动化程度高支持格式多是固件分析入门必学工具。配套工具集file命令初步判断文件类型。strings命令提取文件中的可打印字符串常能发现关键信息如IP、密码、调试命令。hexdump/xxd命令以十六进制查看文件内容。firmware-mod-kit(FMK)一个工具包包含unsquashfs、unmkfs.jffs2等用于解压特定文件系统的工具有时比Binwalk更可靠。网络工具brctl,tunctl用于在宿主机和QEMU虚拟机之间搭建虚拟网络使虚拟机能够上网或与宿主机通信。2.2 环境搭建的两种典型路径根据固件类型和目标我们的搭建路径主要分为两类完整系统模拟针对提供了完整内核vmlinux或zImage和文件系统镜像的固件。我们的目标是让QEMU加载这个内核并挂载提取出的文件系统模拟设备上电启动的全过程。这最接近真实环境。用户态程序模拟有时我们只关心固件中的某个特定程序如一个Web服务后台httpd。我们可以使用QEMU的用户模式配合chroot在提取出的文件系统环境中运行这个单一程序进行行为分析和调试。这种方式更轻量启动更快。本次我们将重点放在第一种也是最复杂、最通用的“完整系统模拟”上。3. 实操准备从获取固件到提取文件系统让我们以一个假设的、基于ARM架构的路由器固件firmware_v1.0.bin为例从头开始操作。3.1 宿主机环境与工具安装首先确保你的宿主机以Ubuntu 22.04为例已安装必要的工具。# 更新软件包列表 sudo apt update # 安装QEMU系统模式和用户模式 sudo apt install qemu-system-arm qemu-system-mips qemu-system-ppc qemu-user-static -y # 安装Binwalk及其依赖 sudo apt install binwalk -y # 安装其他有用的工具 sudo apt install file strings xxd git build-essential libssl-dev -y # 安装网络桥接工具如果需要更复杂的网络 sudo apt install bridge-utils uml-utilities -y # 可选安装firmware-mod-kit git clone https://github.com/rampageX/firmware-mod-kit.git cd firmware-mod-kit sudo ./setup.sh3.2 固件初步分析与文件系统提取拿到固件后不要急于扔给QEMU。第一步永远是静态分析。# 1. 使用file命令进行初步判断 file firmware_v1.0.bin # 可能的输出firmware_v1.0.bin: u-boot legacy uImage, MIPS Linux-2.6.36, Linux/ARM, OS Kernel Image, lzma compressed, 0x80000000 # 2. 使用strings搜索关键信息 strings firmware_v1.0.bin | grep -i root\|pass\|admin\|linux\|kernel # 可能会发现默认密码、内核版本等。 # 3. 使用Binwalk进行深度扫描和提取 binwalk firmware_v1.0.binBinwalk的输出至关重要它可能如下所示DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 uImage header, header size: 64 bytes, header CRC: 0x12345678, created: 2022-01-01 00:00:00, image size: 2097152 bytes, Data Address: 0x80008000, Entry Point: 0x80008000, data CRC: 0x9ABCDEF0, OS: Linux, CPU: ARM, image type: OS Kernel Image, compression type: lzma, image name: Linux-3.10.14 64 0x40 LZMA compressed data, properties: 0x5D, dictionary size: 33554432 bytes, uncompressed size: 5242880 bytes 2097216 0x200040 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 15204312 bytes, 3530 inodes, blocksize: 131072 bytes, created: 2022-01-01 00:00:00从输出中我们可以解读出0x0位置是一个U-Boot镜像头后面跟着LZMA压缩的内核vmlinux或zImage。0x200040位置开始是一个Squashfs文件系统这很可能就是设备的根文件系统rootfs。现在我们让Binwalk自动提取所有识别出的内容binwalk -e firmware_v1.0.bin执行后会生成一个_firmware_v1.0.bin.extracted目录。进入该目录你可能会发现类似40内核和200040.squashfs文件系统的子目录。200040.squashfs目录里应该就是解压后的根文件系统。注意Binwalk的自动提取有时会失败尤其是面对非标准或加密的固件。如果squashfs目录为空或提取失败我们需要手动处理。# 手动提取Squashfs文件系统 dd iffirmware_v1.0.bin ofrootfs.squashfs bs1 skip$((0x200040)) count15204312 # 使用unsquashfs解压 sudo unsquashfs -d rootfs rootfs.squashfs如果遇到加密固件网络热词中提到的“固件加密”Binwalk可能无法识别。这时需要先研究加密方式或寻找解密工具这超出了基础环境搭建的范围属于逆向工程的高级课题。4. 构建可启动的QEMU镜像现在我们有了内核可能还需要从固件中进一步分离和根文件系统。接下来需要为QEMU准备一个它可以引导的虚拟磁盘镜像并把根文件系统放进去。4.1 创建虚拟磁盘并放入根文件系统我们创建一个格式为ext2的虚拟磁盘镜像大小根据rootfs调整例如256MB。# 1. 创建一个256MB的空白磁盘镜像 qemu-img create -f raw disk.img 256M # 2. 将其格式化为ext4文件系统需要先挂载到一个回环设备 sudo mkfs.ext4 -F disk.img # 3. 创建一个临时挂载点并将镜像挂载上去 mkdir -p /tmp/mnt sudo mount -o loop disk.img /tmp/mnt # 4. 将我们提取出的rootfs全部复制到镜像中 sudo cp -rf rootfs/* /tmp/mnt/ # 5. 重要确保/dev目录下有必要的设备节点。QEMU需要它们。 sudo mkdir -p /tmp/mnt/dev sudo mknod /tmp/mnt/dev/console c 5 1 sudo mknod /tmp/mnt/dev/null c 1 3 sudo mknod /tmp/mnt/dev/zero c 1 5 sudo mknod /tmp/mnt/dev/tty c 5 0 sudo mknod /tmp/mnt/dev/tty0 c 4 0 # 6. 卸载镜像 sudo umount /tmp/mnt现在disk.img就是一个包含了完整根文件系统的虚拟硬盘。4.2 分离内核并确定启动参数我们需要从固件中把内核镜像分离出来。根据Binwalk的结果内核从0x40开始大小是2097152 - 64 2097088字节即0x200040 - 0x40。dd iffirmware_v1.0.bin ofvmlinuz bs1 skip64 count2097088 file vmlinuz # 确认输出是Linux kernel ARM boot executable zImage (little-endian)接下来是最关键的一步确定QEMU的启动命令。这需要知道机器类型固件是为哪款开发板或SoC编译的常见的有vexpress-a9(ARM),virt(通用ARM),malta(MIPS)等。如果strings固件时发现了类似“MACH_TYPE_”的字符串可以据此搜索。对于未知固件vexpress-a9或virt是一个不错的通用起点。内核启动参数最重要的是告诉内核根文件系统在哪里。我们使用上一步创建的disk.img作为root设备。一个典型的ARMvexpress-a9板子的启动命令如下qemu-system-arm \ -M vexpress-a9 \ # 指定机器类型 -m 256M \ # 分配256MB内存 -kernel vmlinuz \ # 指定内核镜像 -dtb vexpress-v2p-ca9.dtb \ # 设备树文件某些板子需要可从QEMU安装目录找或编译 -append root/dev/mmcblk0 rw consolettyAMA0 \ # 内核参数根设备读写模式控制台 -drive filedisk.img,ifsd,formatraw \ # 将disk.img作为SD卡挂载 -nographic \ # 不使用图形界面直接输出到当前终端 -net nic -net user \ # 简单的用户模式网络NAT -serial mon:stdio # 将串口和监视器重定向到标准输入输出-append参数root/dev/mmcblk0指定根文件系统在第一个SD卡对应-drive ifsd。如果使用-drive ifvirtio这里可能要改成root/dev/vda。-nographic和-serial mon:stdio对于服务器环境或没有GUI的SSH连接这是最常用的组合将所有输出内核日志、系统控制台打印到当前终端。5. 网络配置与调试技巧让虚拟机具备网络能力对于分析网络服务固件至关重要。5.1 用户模式网络NAT最简单的网络上述命令中的-net nic -net user就是。虚拟机可以访问外网宿主机可以通过端口转发访问虚拟机的服务。-net user,hostfwdtcp::2222-:22这个参数将宿主机的2222端口转发到虚拟机的22端口SSH这样你就可以从宿主机ssh -p 2222 rootlocalhost登录到虚拟机。5.2 桥接网络TAP这需要更多设置但能让虚拟机和宿主机处于同一局域网段像一台真实设备。# 宿主机上创建TAP设备并配置需要root权限 sudo ip tuntap add tap0 mode tap sudo ip addr add 192.168.123.1/24 dev tap0 sudo ip link set tap0 up # 启动QEMU时使用TAP设备 qemu-system-arm \ -M vexpress-a9 \ -m 256M \ -kernel vmlinuz \ -append root/dev/mmcblk0 rw consolettyAMA0 ip192.168.123.100::192.168.123.1:255.255.255.0 \ -drive filedisk.img,ifsd,formatraw \ -nographic \ -net nic,modellan9118 \ -net tap,ifnametap0,scriptno,downscriptno在虚拟机内你需要手动或用脚本配置IP为192.168.123.100。桥接网络更复杂但适合需要多虚拟机交互或模拟特定网络拓扑的场景。5.3 内核恐慌与调试第一次启动失败遇到“Kernel panic”非常正常。这是最考验耐心的环节。检查控制台输出仔细阅读-nographic模式下的内核启动日志。错误信息会明确指出问题例如VFS: Cannot open root device “/dev/mmcblk0”根设备指定错误。尝试/dev/vda,/dev/sda或者检查disk.img是否成功挂载。Please append a correct “root” boot option同上。Failed to execute /init根文件系统里的/init或/sbin/init程序有问题。可能是架构不匹配比如用ARM QEMU运行了MIPS的程序或者文件系统损坏。使用-initrd临时绕过如果挂载根文件系统总是失败可以先用一个极简的initramfs启动再手动挂载disk.img进行调试。# 创建一个简单的init脚本 echo -e #!/bin/sh\nmount -t proc proc /proc\nmount -t sysfs sysfs /sys\n/bin/sh init chmod x init find . | cpio -H newc -o | gzip initrd.gz qemu-system-arm -M vexpress-a9 -m 256M -kernel vmlinuz -initrd initrd.gz -append consolettyAMA0 -nographic启动后你就在一个最小Shell里了可以尝试手动mount你的disk.img检查里面的内容。调整机器类型和内存尝试不同的-M参数如virt和-m大小如512M。6. 常见问题排查与经验实录这里记录了几个我踩过多次的坑和对应的解决方案。6.1 固件提取与文件系统问题问题现象可能原因排查与解决思路Binwalk扫描无结果或提取失败1. 固件加密或压缩。2. 非标准文件头。3. Binwalk签名数据库过时。1. 用hexdump -C查看文件头尾搜索已知魔术字如squashfs,jffs2。2. 尝试binwalk -Me递归提取或binwalk --dd.*暴力提取。3. 使用firmware-mod-kit中的extract-firmware.sh脚本尝试。4. 更新Binwalksudo binwalk -u。提取出的文件系统不完整或乱码1. 文件系统本身损坏。2. 提取偏移量或大小计算错误。3. 使用了错误的解压工具。1. 用dd命令根据Binwalk给出的精确偏移和大小手动提取。2. 尝试不同的文件系统解压工具如unsquashfs,jefferson(for JFFS2),ubireader(for UBI)。3. 在QEMU中挂载时使用-drive formatraw,filexxx并尝试不同的接口(ifide,ifsd,ifvirtio)。内核无法识别根文件系统格式内核编译时未包含对应文件系统驱动。1. 在QEMU启动参数中尝试rootfstypeext4或squashfs等明确指定类型。2. 如果文件系统是只读的如squashfs确保-append中有ro参数。6.2 QEMU启动与运行问题问题现象可能原因排查与解决思路启动后立即Kernel panic提示找不到根设备1.root参数指定的设备名错误。2. 虚拟磁盘未正确附加或格式不被支持。1. 根据-drive的if类型确定设备名ifsd-/dev/mmcblk0;ifide-/dev/sda;ifvirtio-/dev/vda。2. 使用-drive filedisk.img,formatraw,ifvirtio和root/dev/vda组合成功率较高。3. 在内核启动早期按任意键进入U-Boot或内核命令行用lsblk或cat /proc/partitions查看识别到的块设备。启动后卡住无响应或反复重启1. 内核与机器类型不匹配。2. 内存不足。3. 缺少必要的设备树DTB。1. 更换-M参数对于ARMvirt通用性最好但可能缺少某些外设驱动vexpress-a9很稳定。2. 增加-m参数到512M或1G。3. 对于需要DTB的板子确保-dtb参数指向正确的.dtb文件。可以尝试从编译该内核的源码中获取或使用QEMU自带的通常在/usr/share/qemu/。4. 尝试在-append中加入init/bin/sh跳过初始化脚本直接进入shell。网络无法连接1. 用户模式网络配置问题。2. 虚拟机内未配置网络或服务未启动。3. 桥接网络配置错误。1. 在QEMU内运行ifconfig -a查看网卡和IP。用户模式下通常是10.0.2.15。2. 检查宿主机防火墙是否阻止了转发。3. 对于桥接确保宿主机tap0接口是UP状态且虚拟机内配置了同网段IP。4.一个关键技巧在-append中直接传递IP参数如ip10.0.2.15::10.0.2.2:255.255.255.0可以避免依赖虚拟机内的DHCP或初始化脚本。串口无输出或输入无响应控制台设备指定错误。1. 确保-append中的console参数与-serial指向的设备匹配。对于vexpress-a9通常是ttyAMA0对于virt可能是tty0或ttyAMA0。尝试consoletty0 consolettyAMA0。2. 尝试去掉-nographic使用-serial vc和-serial stdio组合来分离图形和控制台。6.3 性能与使用技巧加速对于x86_64固件可以使用-enable-kvm来启用硬件虚拟化加速性能飞跃。对于ARM/MIPS可以尝试-cpu host如果宿主机CPU支持或指定更快的CPU模型如-cpu cortex-a57。调试神器GDBQEMU内置了GDB服务器是动态调试固件中内核或程序的利器。qemu-system-arm -M virt -kernel vmlinuz ... -S -s-S表示启动时暂停CPU-s是-gdb tcp::1234的简写。然后在另一个终端用gdb-multiarch vmlinuz再target remote localhost:1234连接就可以进行源码级调试了。文件共享使用virtio-9p文件系统共享宿主机目录到虚拟机方便传递文件和分析日志。# 启动QEMU时添加 -fsdev local,idfs1,path/path/on/host,security_modelmapped \ -device virtio-9p-pci,fsdevfs1,mount_taghostshare # 在虚拟机内挂载 mount -t 9p -o transvirtio hostshare /mnt镜像管理使用qcow2格式的镜像可以节省空间并支持快照。qemu-img convert -f raw -O qcow2 disk.img disk.qcow2 qemu-img snapshot -c snapshot1 disk.qcow2 # 创建快照搭建QEMU固件模拟环境是一个迭代和试错的过程。没有一套参数能通吃所有固件。核心在于耐心阅读内核输出信息并灵活调整启动参数。每次成功启动一个“黑盒”固件都像解开一个谜题这种成就感正是驱动我们不断探索的动力。当你熟悉了这套流程后甚至可以编写自动化脚本来批量尝试不同的机器类型、内核参数和驱动组合从而快速定位能让特定固件跑起来的正确配置。

相关新闻

Python数据处理实战:从原始数据到结构化输出的完整流程

Python数据处理实战:从原始数据到结构化输出的完整流程

在技术领域,我们经常需要处理来自不同来源的数据,例如网络爬虫抓取的信息、用户输入的内容或第三方API返回的JSON。这些数据往往包含不完整的字段、杂乱的格式或需要进一步处理的结构。虽然输入材料提到了动漫新番的信息,但作为技术博客&…

2026/7/31 8:23:40 阅读更多 →
现代C++核心特性解析:从C++11到C++20的高效编程指南

现代C++核心特性解析:从C++11到C++20的高效编程指南

1. 从“C with Classes”到现代C:为什么你需要重新认识这门语言 如果你和我一样,是从C98/03那个时代摸爬滚打过来的“老程序员”,看到“现代C”这个词,心里可能会五味杂陈。我们习惯了手动管理内存,用 new 和 delet…

2026/7/31 8:23:40 阅读更多 →
Arduino开发工具链解析:从图形化编程到专业IDE的进阶指南

Arduino开发工具链解析:从图形化编程到专业IDE的进阶指南

1. 项目概述:Arduino软件生态的双轨制 如果你刚接触Arduino,面对琳琅满目的开发板和各种传感器,可能会感到一丝迷茫:我该用什么软件来写代码、控制硬件呢?这正是我们今天要聊的核心——Arduino的软件工具链。简单来说&…

2026/7/31 8:23:40 阅读更多 →

最新新闻

Transformer在工业预测中的回归模型优化实践

Transformer在工业预测中的回归模型优化实践

1. 项目背景与核心价值 在工业预测和金融分析领域,数据回归预测一直是个经典难题。传统的时间序列预测方法(如ARIMA、Prophet)在处理非线性关系时表现乏力,而常规的LSTM神经网络又存在长期依赖捕捉不足的问题。Transformer架构凭借…

2026/7/31 9:05:56 阅读更多 →
Linux C++系统编程入门:从核心概念到实战应用

Linux C++系统编程入门:从核心概念到实战应用

1. 项目概述:为什么要在Linux上搞C系统编程?如果你是一个C开发者,并且你的工作环境是Linux,那么“系统编程”这四个字,对你来说可能既熟悉又陌生。熟悉的是,你每天都在和Linux打交道,用着它的命…

2026/7/31 9:05:56 阅读更多 →
工业互联网服务平台发展提速:2026-2032年复合增长率达12.2%

工业互联网服务平台发展提速:2026-2032年复合增长率达12.2%

作为深耕产业数字化30年的分析师,我可以明确告诉所有制造企业CEO、市场负责人和投资人:当下工业互联网服务平台早已不是PPT里的概念风口,而是能直接落地降本提效、重构制造业核心竞争力的确定性赛道。所有核心数据均严格对齐QYResearch官方发…

2026/7/31 9:05:56 阅读更多 →
“金融拥军”的样本——建行广东省茂名市分行:戎归桑梓育新苗

“金融拥军”的样本——建行广东省茂名市分行:戎归桑梓育新苗

清晨六点,广东省茂名高州沙田镇的薄雾还未散尽,潘伟华已经站在广东弘地农业开发有限公司(以下简称“弘地农业”)的种苗培育车间里,看着一排排嫩绿的圣女果种苗在恒温恒湿的环境中舒展新叶。这些优质种苗不仅要供应本地…

2026/7/31 9:05:56 阅读更多 →
工厂越忙越不赚钱?毁掉利润的从来不是订单少,是低效内耗

工厂越忙越不赚钱?毁掉利润的从来不是订单少,是低效内耗

很多中小工厂都逃不开一个扎心怪圈:车间机器不停转、员工天天加班、订单排得满满当当,看似生意红火,月底对账却发现利润微薄,甚至忙完白干、倒贴成本。不少老板把问题归咎于原材料涨价、订单单价低、市场内卷。但深耕制造行业就会…

2026/7/31 9:05:56 阅读更多 →
SVPWM五段式与七段式Simulink建模:从原理到代码生成的电机控制实战

SVPWM五段式与七段式Simulink建模:从原理到代码生成的电机控制实战

1. 项目概述:从SPWM到SVPWM,我们到底在追求什么?如果你正在做电机控制、三相逆变器或者新能源并网,那么“SVPWM”这个词你一定不陌生。它全称是“空间矢量脉宽调制”,听起来有点玄乎,但说白了,它…

2026/7/31 9:04:56 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻