资源
源码
GitHub 上搜索 YOLO
可以找到很多平台的包,如: Tensorflow
, pyTorch
等等;本文使用 darknet
原因:方便把玩。请参考如下页面安装测试:
- YOLO : YOLO: Real-Time Object Detection
资料
- YOLO源码详解(五)- YOLO中的7*7个grid和RPN中的9个anchors
- 论文提要“You Only Look Once: Unified, Real-Time Object Detection”
YOLO局限性
由于YOLO具有极强的空间限制,它限制了模型在邻近物体上的预测,如果两个物体出现在同一个cell中,模型只能预测一个物体,所以在小物体检测上会出问题。另外模型对训练数据中不包含的物体或具有异常长宽比的物体扩展不是太好。loss函数对大小bbox采取相同的error也是个问题。
实测结果图
自带图
其他任选
简单场景
中等复杂
盆栽(potted plant)都可以, 当然花瓶是没有的
复杂场景
注意下图中的包和伞都能检测出来:
还有这个图,不是偶然
恶劣环境
下面的环境有点恶劣,不过还不错,虽然漏了个车和路灯
失败例子
哈哈,画的画果然还是不行,难道画技太差,哈哈:
训练
预训练
准备训练样
使用darknet训练要求训练样本中,每个样本的名字以类名命名,这样darknet就知道当前图片属于哪一类,如对于 cifar10 数据集,含10类(labels.txt):
airplane
automobile
bird
cat
deer
dog
frog
horse
ship
truck
其训练样本名称示例如下:
准备配置文件
微调
准备训练样本
训练样本标签文件信息如下:
<object-class> <x> <y> <width> <height>
<object-class> <x> <y> <width> <height>
...
对应于:
<类别标签数字> <物体中心水平方向坐标/宽度> <物体中心垂直方向坐标/高度> <物体区域宽度> <物体区域高度>
如对于 VOC2012
中的一幅飞机的图像,对应的训练样本标签信息如下:
0 0.578 0.474474474474 0.744 0.588588588589
其中,0
表示类别,0.578 0.474474474474
为中心坐标,0.744 0.588588588589
分别为宽度和高度,如下图所示:
训练配置
learning_rate=0.0001
max_batches = 3 # 训练代数 epoches
policy=steps
steps=1,2,3 # 每训练step,保存一次
scales=10,.1,.1
*final.weights