无人机夜间道路两边摊贩检测数据集
无人机:DJI MAVIC 3
数据:原始图片+XML标签
总内存大小:758M(188张)
图片分辨率:4K
采集高度:40m
采集角度:30°~90°
采集时间:2025.07
类别:流动摊贩
应用场景:用于城管执法、占道经营、摊贩整顿、交通安全等低空目标检测等领域
🚁 无人机夜间摊贩检测数据集(DJI Mavic 3)
| 项目 | 内容说明 |
|---|---|
| 数据集名称 | 无人机夜间道路两边摊贩目标识别数据集 |
| 采集设备 | DJI Mavic 3 无人机 |
| 数据类型 | 原始图像(JPG/PNG) +PASCAL VOC 格式 XML 标签 |
| 总图像数量 | 188 张 |
| 总数据大小 | 758 MB |
| 图像分辨率 | 4K(3840 × 2160 或 4096 × 2160),高清晰度 |
| 采集高度 | 约40 米(低空航拍) |
| 拍摄角度 | 30° ~ 90°(含斜视与垂直俯视),模拟真实执法视角 |
| 采集时间 | 2025年7月(夏季,夜间) |
| 光照条件 | 夜间场景(含路灯、摊位照明、车灯等复杂光源,部分图像存在低照度、眩光) |
| 目标类别 | 1 类:流动摊贩(包括小吃车、地摊、移动售货车、遮阳棚等占道经营设施) |
| 标注格式 | ✅PASCAL VOC XML • 每张图对应一个 .xml文件• 包含 <object>、<bndbox>等标准字段 |
| 典型目标特征 | - 小目标密集分布 - 背景复杂(道路、车辆、行人、树木) - 夜间低对比度 - 部分目标被遮挡 |
| 应用场景 | • 城管智能巡查 • 占道经营自动识别 • 夜间摊贩治理 • 低空交通安全监控 • 无人机AI执法系统 |
| 适用模型任务 | 目标检测(Object Detection) |
| 推荐模型 | YOLOv5/v8, Faster R-CNN, RT-DETR(需将 XML 转为 YOLO 或 COCO 格式) |
🔧 格式转换建议(XML → YOLO)
若需用于 YOLO 训练,可使用以下脚本转换:
# voc2yolo.pyimportxml.etree.ElementTreeasETimportosdefconvert_bbox(size,box):dw=1.0/size[0]dh=1.0/size[1]x=(box[0]+box[1])/2.0y=(box[2]+box[3])/2.0w=box[1]-box[0]h=box[3]-box[2]return(x*dw,y*dh,w*dw,h*dh)defparse_xml(xml_path,img_width=3840,img_height=2160):tree=ET.parse(xml_path)root=tree.getroot()lines=[]forobjinroot.iter('object'):cls='vendor'# 单一类别xmlbox=obj.find('bndbox')b=(float(xmlbox.find('xmin').text),float(xmlbox.find('xmax').text),float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))bb=convert_bbox((img_width,img_height),b)lines.append(f"0{bb[0]:.6f}{bb[1]:.6f}{bb[2]:.6f}{bb[3]:.6f}")returnlines⚠️ 数据集局限性
| 问题 | 说明 |
|---|---|
| 样本量小 | 仅 188 张,需数据增强(mosaic、亮度扰动、旋转) |
| 单类别 | 仅“流动摊贩”,无法区分摊贩类型 |
| 夜间挑战 | 低照度、反光、运动模糊可能影响模型鲁棒性 |
✅ 推荐训练策略
- 数据增强:
- 随机亮度/对比度调整(模拟不同夜间光照)
- 添加高斯噪声
- Mosaic 增强(提升小目标检测能力)
- 输入尺寸:YOLO 训练时设
imgsz=1280以保留 4K 图像细节; - 预训练模型:使用在夜间场景(如 FLIR)上微调的权重初始化。
🛰️总结:该数据集是城市治理智能化的稀缺资源,聚焦夜间低空摊贩识别,虽规模较小,但具有真实执法价值。适用于构建轻量化、高精度的无人机AI巡查系统。
以下是基于您提供的“无人机夜间道路两边摊贩目标识别数据集”(188张4K图像 + PASCAL VOC XML标签)构建YOLOv8 目标检测系统的完整方案,包含数据转换、模型训练、推理部署全流程代码。
🧩 一、项目目标
- 将VOC XML 标签转换为YOLO 格式
- 使用YOLOv8n训练单类别(
vendor)检测模型 - 支持高分辨率(4K)图像推理
- 适用于城管无人机夜间巡查
🔧 二、环境准备
pipinstallultralytics opencv-python lxml tqdm numpy matplotlib pillow✅ 推荐:Python 3.8+,TensorFlow/PyTorch 已由
ultralytics自动安装
📁 三、目录结构
night_vendor_yolo/ ├── dataset/ │ ├── images/ # 原始 4K 图像(.jpg) │ └── labels/ # 转换后的 YOLO .txt 标签 ├── voc2yolo.py # XML → YOLO 转换脚本 ├── split_dataset.py # 划分 train/val ├── data.yaml # YOLO 配置文件 ├── train.py # 训练脚本 └── detect_image.py # 单图推理🔄 四、步骤1:XML → YOLO 格式转换
脚本:voc2yolo.py
# voc2yolo.pyimportosimportxml.etree.ElementTreeasETfrompathlibimportPath# 配置路径IMG_DIR="dataset/images"XML_DIR="dataset/annotations"# 原始 XML 所在目录LABEL_DIR="dataset/labels"os.makedirs(LABEL_DIR,exist_ok=True)# 获取所有图像尺寸(假设所有图为 3840x2160)IMG_WIDTH=3840IMG_HEIGHT=2160defconvert_bbox(size,box):dw=1.0/size[0]dh=1.0/size[1]x=(box[0]+box[1])/2.0y=(box[2]+box[3])/2.0w=box[1]-box[0]h=box[3]-box[2]return(x*dw,y*dh,w*dw,h*dh)forxml_fileinPath(XML_DIR).glob("*.xml"):tree=ET.parse(xml_file)root=tree.getroot()label_file=os.path.join(LABEL_DIR,xml_file.stem+".txt")withopen(label_file,"w")asf:forobjinroot.iter("object"):# 仅一类:vendor → class_id = 0cls_id=0xmlbox=obj.find("bndbox")b=(float(xmlbox.find("xmin").text),float(xmlbox.find("xmax").text),float(xmlbox.find("ymin").text),float(xmlbox.find("ymax").text))bb=convert_bbox((IMG_WIDTH,IMG_HEIGHT),b)f.write(f"{cls_id}{bb[0]:.6f}{bb[1]:.6f}{bb[2]:.6f}{bb[3]:.6f}\n")print("✅ XML → YOLO 转换完成!")💡 运行前请将原始图像放入
dataset/images/,XML 放入dataset/annotations/
✂️ 五、步骤2:划分训练集与验证集
脚本:split_dataset.py
# split_dataset.pyimportosimportrandomimportshutilfrompathlibimportPath random.seed(42)images=list(Path("dataset/images").glob("*.jpg"))random.shuffle(images)n=len(images)n_train=int(n*0.8)# 150 train, 38 valtrain_imgs=images[:n_train]val_imgs=images[n_train:]# 创建子目录forsplitin["train","val"]:os.makedirs(f"dataset/images/{split}",exist_ok=True)os.makedirs(f"dataset/labels/{split}",exist_ok=True)# 移动文件forimgintrain_imgs:shutil.move(str(img),f"dataset/images/train/{img.name}")lbl=Path("dataset/labels")/(img.stem+".txt")iflbl.exists():shutil.move(str(lbl),f"dataset/labels/train/{lbl.name}")forimginval_imgs:shutil.move(str(img),f"dataset/images/val/{img.name}")lbl=Path("dataset/labels")/(img.stem+".txt")iflbl.exists():shutil.move(str(lbl),f"dataset/labels/val/{lbl.name}")print("✅ 数据集已划分为 train/val")📄 六、步骤3:创建data.yaml
# data.yamlpath:./datasettrain:images/trainval:images/valnc:1names:['vendor']🚀 七、步骤4:训练 YOLOv8 模型
脚本:train.py
# train.pyfromultralyticsimportYOLO# 加载预训练模型model=YOLO('yolov8n.pt')# 可换为 yolov8s.pt 提升精度# 开始训练(针对小样本 + 夜间场景优化)results=model.train(data='data.yaml',epochs=100,imgsz=1280,# 保持高分辨率(原图4K → 缩放到1280)batch=4,# 小 batch(因图像大)name='night_vendor_yolov8n',device=0,patience=25,hsv_h=0.01,hsv_s=0.5,hsv_v=0.8,# 增强亮度变化(模拟夜间光照)degrees=10.0,translate=0.1,scale=0.2,mosaic=0.8,flipud=0.0,fliplr=0.5)print("✅ 训练完成!模型保存在 runs/detect/night_vendor_yolov8n/")⚠️注意:
batch=4:因 4K 图像显存占用高;imgsz=1280:平衡细节保留与 GPU 显存;hsv_v=0.8:增强亮度扰动,提升夜间鲁棒性。
🔍 八、步骤5:单图推理(4K 支持)
脚本:detect_image.py
# detect_image.pyfromultralyticsimportYOLOimportcv2# 加载最佳模型model=YOLO('runs/detect/night_vendor_yolov8n/weights/best.pt')defdetect_4k_image(image_path,output_path="result.jpg"):# YOLOv8 自动处理高分辨率输入results=model(image_path,imgsz=1280,# 推理尺寸conf=0.3,# 置信度阈值(夜间可适当降低)iou=0.45)# 保存带框图像annotated=results[0].plot()cv2.imwrite(output_path,annotated)print(f"✅ 检测结果保存至{output_path}")# 使用示例if__name__=="__main__":detect_4k_image("test_night.jpg","vendor_detected.jpg")📹 九、(可选)视频/摄像头实时检测
# detect_video.pyfromultralyticsimportYOLOimportcv2 model=YOLO('runs/detect/night_vendor_yolov8n/weights/best.pt')cap=cv2.VideoCapture("night_drone.mp4")# 或 0(摄像头)whileTrue:ret,frame=cap.read()ifnotret:breakresults=model(frame,imgsz=1280,conf=0.3)annotated=results[0].plot()cv2.imshow("Vendor Detection",annotated)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()📊 十、预期性能(188张小样本)
| 指标 | 预期值 | 说明 |
|---|---|---|
| mAP@0.5 | ≥ 0.75 | 夜间小目标挑战大 |
| Recall | ≥ 0.70 | 部分遮挡摊贩可能漏检 |
| 推理速度 | ~15 FPS(RTX 3060, 1280×1280) |
💡提升建议:
- 使用Mosaic 增强缓解样本少问题;
- 微调置信度阈值(
conf=0.2~0.4);- 后期可加入红外图像(若可用)提升夜间效果。
📥 获取完整项目包
回复“打包”,我将为你提供:
✅ 完整代码(含voc2yolo.py,train.py,detect_image.py)
✅data.yaml和目录模板
✅ 数据增强配置建议
✅ 模型导出脚本(ONNX/TensorRT)用于无人机端部署
🛰️总结:
本系统专为城管夜间无人机巡查设计,利用 YOLOv8 在小样本、高分辨率、复杂夜间场景下实现流动摊贩自动识别,助力智慧城市建设与非现场执法。