1. 项目简介
本项目基于PicoDet实现对无人机视角的VisDrone数据集进行目标检测并实现在ncnn中的推理。
1.1 PicoDet简介
PicoDet是百度新推出的轻量级目标检测网络,对anchor-free策略在轻量型目标检测模型中的应用进行了探索,通过对backbone、neck、标签分配策略以及训练方法等诸多优化,在精度-效率上取得了更好的均衡。
PicoDet-S仅需0.99M参数即可取得30.6%mAP,比YOLOX-Nano高4.8%同时推理延迟降低55%,比NanoDet指标高7.1%;
当输入尺寸为320时,在移动端ARM CPU上可以达到123FPS处理速度,推理框架为PaddleLite时,推理速度可达150FPS。
PicoDet-M仅需2.15M参数即可取得34.3%mAP指标;
PicoDet-L仅需3.3M参数即可取得40.9%mAP,比YOLOv5s高3.7%mAP,推理速度快44%。
与其他轻量级检测网络对比如下:
论文:https://arxiv.org/abs/2111.00902
代码:https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.3/configs/picodet
1.2 VisDrone数据介绍
配备摄像机的无人机或通用无人机具有广泛的应用,包括农业,航空摄影,快速交付和监视等。
VisDrone数据集是由天津大学等团队开源的一个大型无人机视角的数据集,官方提供的数据中训练集是6471、验证集是548,一共提供了以下11个类,分别是:'pedestrian', 'people', 'bicycle', 'car', 'van','truck', 'tricycle', 'awning-tricycle', 'bus', 'motor', 'others',其中others是非有效目标区域,本项目中予以忽略;
数据集主页:http://aiskyeye.com/challenge/object-detection/
数据集标注展示:
2. PicoDet算法介绍
官方的讲解非常详细,PPT参考如下;
2.1 PicoDet的算法特色
2.2 PicoDet的backbone
2.3 PicoDet的算法结构
2.4 SimOTA的特点
2.5 其他优化策略
3. 数据准备
PaddleDetection默认的是coco格式,而VisDrone有自己的标注格式,因此需要转换;
3.1 解压数据集
In [1]
!mkdir work/data
!unzip -oq data/data115729/VisDrone2019-DET-train.zip -d work/data
!unzip -oq data/data115729/VisDrone2019-DET-val.zip -d work/data
3.2 转换数据格式为Coco格式
In [2]
import json
import os
import cv2
import numpy as np
from PIL import Image
import shutil
class Vis2COCO:
def __init__(self, save_path, train_ratio, category_list, is_mode="train"):
self.category_list = category_list
self.images = []
self.annotations = []
self.categories = []
self.img_id = 0
self.ann_id = 0
self.is_mode = is_mode
self.train_ratio = train_ratio
self.save_path = save_path
if not os.path.exists(self.save_path):
os.makedirs(self.save_path)
def to_coco(self, anno_dir, img_dir):
self._init_categories()
img_list = os.listdir(img_dir)
for img_name in img_list:
anno_path = os.path.join(anno_dir, img_name.replace(os.path.splitext(img_name)[-1], '.txt'))
if not os.path.isfile(anno_path):
print('File is not exist!', a