遥感图像小目标检测实战:手把手教你用FFCA-YOLO在AI-TOD数据集上复现论文结果
遥感图像小目标检测实战手把手教你用FFCA-YOLO在AI-TOD数据集上复现论文结果当你在处理遥感图像时是否经常遇到那些小到几乎看不清的目标这些目标可能只有十几个像素大小却承载着重要的信息。FFCA-YOLO作为TGRS 2024的最新研究成果专门针对这一挑战提出了创新解决方案。本文将带你从零开始一步步复现论文中的实验结果让你不仅能理解算法的精髓更能将其应用到实际项目中。1. 环境配置与数据准备复现任何深度学习研究的第一步都是搭建合适的环境。对于FFCA-YOLO来说我们需要特别注意几个关键依赖项的版本兼容性。首先创建一个新的conda环境conda create -n ffca_yolo python3.8 conda activate ffca_yolo安装PyTorch时建议使用与论文实验环境匹配的版本pip install torch1.12.1cu113 torchvision0.13.1cu113 --extra-index-url https://download.pytorch.org/whl/cu113接下来安装其他依赖项pip install opencv-python numpy tqdm matplotlib seaborn pandasAI-TOD数据集准备需要特别注意以下几点从官方渠道下载数据集约15GB解压后目录结构应为AI-TOD/ ├── annotations/ │ ├── train.json │ ├── val.json │ └── test.json ├── images/ │ ├── train/ │ ├── val/ │ └── test/注意AI-TOD中的目标平均大小仅12.8像素是典型的小目标检测挑战。数据集包含8个类别共700,621个标注实例。2. 模型代码获取与修改从GitHub克隆官方代码库git clone https://github.com/yemu1138178251/FFCA-YOLO cd FFCA-YOLOFFCA-YOLO基于YOLOv5m进行改进主要新增了三个关键模块模块名称功能描述实现位置FEM特征增强模块models/common.pyFFM特征融合模块models/common.pySCAM空间上下文感知模块models/common.py关键修改点在models/yolo.py中注册新模块修改models/yolov5m.yaml配置文件添加模块连接方式调整NWD损失权重原始论文使用0.5 NWD 0.5 CIOU# 在loss.py中添加NWD计算 def wasserstein_distance(box1, box2): 计算两个边界框之间的Wasserstein距离 center1 box1[:, :2] box1[:, 2:] / 2 center2 box2[:, :2] box2[:, 2:] / 2 wh1 box1[:, 2:] wh2 box2[:, 2:] return torch.sqrt(torch.sum((center1 - center2)**2, dim1) torch.sum((wh1 - wh2)**2, dim1) / 4)3. 训练策略与参数调优论文中的训练参数设置如下基础训练配置优化器SGD初始学习率0.01动量0.937权重衰减0.0005Batch size32训练轮次300针对小目标检测我们推荐以下调整学习率调度lr0: 0.01 lrf: 0.2 warmup_epochs: 5 warmup_momentum: 0.8数据增强Mosaic增强概率1.0小目标复制粘贴增强随机HSV增强损失权重调整loss_weights { box: 0.5, # NWD cls: 1.0, obj: 1.0, iou: 0.5 # CIOU }提示AI-TOD数据集目标极小建议将输入分辨率从640x640提升至1024x1024这需要相应调整显存配置。4. 结果验证与可视化训练完成后使用以下命令评估模型性能python val.py --data AI-TOD.yaml --weights runs/train/exp/weights/best.pt --img 1024关键指标对比模型mAP0.5参数量(M)推理速度(ms)YOLOv5m42.121.215.2FFCA-YOLO53.723.818.6L-FFCA-YOLO51.212.412.3可视化检测结果时特别注意小目标的召回情况import cv2 from models.experimental import attempt_load model attempt_load(best.pt) img cv2.imread(test.jpg) results model(img) # 绘制小目标检测框面积32x32 for box in results[boxes]: if (box[2]-box[0])*(box[3]-box[1]) 1024: cv2.rectangle(img, (box[0], box[1]), (box[2], box[3]), (0,255,0), 2)在实际项目中我们发现FFCA-YOLO对密集小目标的检测效果提升明显但在处理超大分辨率图像时如16000x16000需要采用分块检测策略。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2462124.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!