前言
本文为9月1日目标检测学习笔记——通用物体检测,分为四个章节:
- YOLO v1;
- YOLO v2;
- YOLO v3;
- 物体检测实战。
一、YOLO v1
- 图像被分成 s×s 个格子;
- 包含 GT 物体中心的格子负责检测相应的物体;
- 每个格子预测 B 个检测框及其置信度,以及 C 个类别概率;
- bbox 信息 (x, y, w, h) 为物体的中心位置相对格子位置的偏移、宽度和高度,均被归一化;
- 置信度反映是否包含物体以及包含物体情况下的准确度。
-
网络结构:
- 小卷积:1×1 和 3×3;
- FC 输出为:S×S×(B×5+C).
-
损失函数:
- Loss 函数:均方和误差;
- 坐标误差、IoU 误差和分类误差。
二、YOLO v2
-
改进:
-
引入 Anchor box:
- 预测 bbox 的偏移;
- 输入尺度:416;
- max pooling 下采样。
-
输出层:卷积层代替全连接层;
-
联合使用 coco 和 imagenet 物体分类标注数据;
-
取消了 dropout,均使用 Batch Normalization;
-
高分辨率分类器;
-
Anchor boxes;
-
细粒度特征:
- 添加 pass through layer,把浅层特征图连接到深层特征图。
-
Multi-scale Training:
- 每隔几次迭代后,微调网络的输入尺寸。
-
主干网络: Darknet-19:
- 卷积:3×3;
- global average pooling。
三、YOLO v3
- 改进:
- 多尺度预测(类 FPN);
- 更好的分类器:binary cross-entropy loss;
四、物体检测实战
- 场景:
1、COCO 数据集
- annotation数据格式:
2、YOLO v3 环境搭建
- DarkNet 特性:
- C语言实现;
- 支持 CPU 与 GPU(CUDA/cuDNN);
- 轻量、灵活,适合用来研究底层;
- 与 Caffe 的实现存在相似的地方。
(1)、配置文件
- Makefile.cfg:
GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
DEBUG=0
(2)、训练
- yolov3.cfg:
batch=64
subdivisions=16
width=608
height=608
channels=3
- coco.data:
classes= 80
train = /home/pjreddie/data/coco/trainvalno5k.txt
valid = coco_testdev
#valid = data/coco_val_5k.list
names = data/coco.names
backup = /home/pjreddie/backup/
eval=coco