使用 YOLO 做些好玩的事情

资源

源码

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也是个问题。

实测结果图

自带图

使用 YOLO 做些好玩的事情_第1张图片
dog等

其他任选

简单场景

西安国际汽车展charming于2017年摄于西安国际汽车展
西电花季开放日

中等复杂

盆栽(potted plant)都可以, 当然花瓶是没有的


charms于2017年4月4日摄于青龙寺

复杂场景

注意下图中的包和伞都能检测出来:


人群密集的樱花祭

还有这个图,不是偶然


人群密集的樱花祭

恶劣环境

下面的环境有点恶劣,不过还不错,虽然漏了个车和路灯


xidianbeimen.png

失败例子

哈哈,画的画果然还是不行,难道画技太差,哈哈:

charming@ 原创画作

训练

预训练

准备训练样

使用darknet训练要求训练样本中,每个样本的名字以类名命名,这样darknet就知道当前图片属于哪一类,如对于 cifar10 数据集,含10类(labels.txt):

airplane
automobile
bird
cat
deer
dog
frog
horse
ship
truck

其训练样本名称示例如下:

使用 YOLO 做些好玩的事情_第2张图片
cifar训练样本示例

准备配置文件

使用 YOLO 做些好玩的事情_第3张图片
cifar10工程目录示意

微调

  • 详细步骤参考:how-to-train-to-detect-your-custom-objects

准备训练样本

训练样本标签文件信息如下:

    
    
...

对应于:

<类别标签数字> <物体中心水平方向坐标/宽度> <物体中心垂直方向坐标/高度> <物体区域宽度> <物体区域高度>

如对于 VOC2012中的一幅飞机的图像,对应的训练样本标签信息如下:

0 0.578 0.474474474474 0.744 0.588588588589

其中,0 表示类别,0.578 0.474474474474 为中心坐标,0.744 0.588588588589 分别为宽度和高度,如下图所示:

使用 YOLO 做些好玩的事情_第4张图片
训练样本标签图解

训练配置

learning_rate=0.0001
max_batches = 3 # 训练代数 epoches
policy=steps
steps=1,2,3 # 每训练step,保存一次
scales=10,.1,.1

*final.weights

开始微调训练

你可能感兴趣的:(使用 YOLO 做些好玩的事情)