前言
这篇文章介绍了一种名为EdgeYOLO的高效、低复杂度且无锚点(anchor-free)的实时目标检测器,它基于最先进的YOLO框架,并能在边缘计算平台上实时运行。主要贡献包括:
-
设计了一个无锚点的目标检测器,能在边缘设备上实时运行,并在MS COCO2017数据集上达到50.6%的AP精度。
-
提出了一种更强大的数据增强方法,确保了训练数据的数量和有效性。
-
使用可重新参数化的结构来减少推理时间。
-
设计了一种损失函数,提高了对小目标的检测精度。
文章还详细介绍了EdgeYOLO的关键技术,包括增强的数据增强方法、轻量级解耦头(Lite-Decoupled Head)、分阶段损失函数(Staged Loss Function)以及针对小目标检测的优化。
总的来说,这篇文章提出了一种适用于边缘计算设备的高效实时目标检测器EdgeYOLO,通过一系列创新技术提高了小目标的检测精度,并在保持实时性的同时减少了模型的复杂度。未来的工作将进一步提高小目标的检测精度,并探索更高效的优化方法。
一、项目下载
git clone https://github.com/LSH9832/edgeyolo.git cd edgeyolo
二、环境配置
创建专属环境
conda create -n EdgeYOLO python=3.9
激活环境
conda activate EdgeYOLO
安装 Pytorch 环境
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "torch-1.13.0+cu116-cp39-cp39-win_amd64.whl"
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "torchvision-0.14.0+cu116-cp39-cp39-win_amd64.whl"
安装相关库
pip install -r requirements.txt
三、代码测试
python detect.py --weights ./weights/edgeyolo_coco.pth --source ./TestVideo/test.avi --fp16
四、使用自己的数据集进行训练
目前支持COCO、YOLO、VOC、VisDrone、DOTA五种格式的数据集
在这里我使用VOC格式的数据集。
数据库来源:gazebo中标准锥桶路障,纯手工标记,VOC格式,适用于需要在gazebo仿真环境中检验自动驾驶算法。
数据集划分
按照比例进行划分训练集、验证集、测试集。
# -*- coding:utf-8 -*-
# @author: 牧锦程
# @微信公众号: AI算法与电子竞赛
# @Email: m21z50c71@163.com
# @VX:fylaicai
import os
import random
from tqdm import tqdm
train_val_percent = 0.9 # 训练集和验证集的总比例
train_percent = 0.8 # 训练集占总比例的比例
Annotations_file_path = 'JPEGImages'
txt_save_path = 'ImageSets/Main'
total_xml = os.listdir(Annotations_file_path)
if not os.path.exists(txt_save_path):
os.makedirs(txt_save_path, exist_ok=True)
num = len(total_xml)
list = range(num)
tv = int(num * train_val_percent)
tr = int(tv * train_percent)
train_val = random.sample(list, tv)
train = random.sample(train_val, tr)
f_train_val = open(f'./{txt_save_path}/trainval.txt', 'w')
f_test = open(f'./{txt_save_path}/test.txt', 'w')