只检测人,目标检测

原标题:ECCV 2018丨YOLO遇上OpenPose,近200FPS的高帧数多少人态度检查和测试

一.修改源代码

cfg/coco.data

classes= 1     #修改成1
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

 原因:在coco.c中定义的价签,人为第①个,所以改为1.

examples/detector.c

void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename, float thresh)函数中
draw_detections(im, l.w*l.h*l.n, thresh, boxes, probs, names, alphabet, 1); //最后一个参数修改成1。line=481
void run_detector(int argc, char **argv)//该函数中,倒数第三行.line=542
int classes = option_find_int(options, "classes", 1);//最后一个参数修改成1

 

1 YOLO

立异点: 端到端练习及预计 + 改善区域建议框式目的检查和测试框架 +
实时指标检查和测试

图片 1

显示器帧数检查和测试

率先说下 CADisplayLink
概念,官方文书档案中有详尽的辨析,那边简单的盘整下。
CADisplayLink:显示器刷新时开始展览接触

采纳 CADisplayLink
的本性和显示屏一秒刷新60遍的定义,就能够运用1秒内刷新次数判断显示屏帧数

要点一:

    /// NSRunLoopCommonModes 会自动同步所有common模式下的数据
    [_link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];

要点二:

   if (_lastTime == 0) {
        _lastTime = link.timestamp;
        return;
    }

    _count++;
    /// 获取的秒,计算时间差,判断是否是1秒内的数据,通过 _count 来计算,正常情况下,count为60
    NSTimeInterval delta = link.timestamp - _lastTime;

    if (delta < 1) return;

    /// 单位时间内的计数次数,就是fps
    float fps = _count / delta;

    /// 数据初始化
    _count = 0;
    _lastTime = link.timestamp;

重中之重代码逻辑来源YYFPSLabel只检测人,目标检测。,万分感激。

伊瓢 发自 凹非寺

二.重复编写翻译和测试

1.双重编写翻译

make clean
make

2.测试

./darknet detect cfg/yolo.cfg yolo.weights data/person.jpg

1.1 创新点

(1) 改正了区域建议框式检查和测试框架:
汉兰达CNN体系均要求扭转建议框,在提出框上进行归类与回归,但提议框之间有重合,那会拉动许多重复工作。YOLO将全图划分为SXS的格子,各类格子负责基本在该格子的靶子检查和测试,选用贰次性预测全体格子所含指标的bbox、定地点信度以及全数类型可能率向量来将题目一遍性消除(one-shot)。

在高帧数下,怎么着兑现人体姿态检查和测试?

.结果

图片 2

 

1.2 Inference过程

YOLO互连网结构由2四个卷积层与三个全连接层构成,网络入口为448×448(v2为416×416),图片进入网络先经过resize,网络的输出结果为五个张量,维度为:
\[S * S * (B * 5 + C)\]
中间,S为划分网格数,B为种种网格负责指标个数,C为品种个数。该表达式含义为:

(1)
各样小格会对应B个边界框,边界框的宽高范围为全图,表示以该小格为主导寻找物体的分界框地方。

(2) 每一个边界框对应四个分值,代表该处是还是不是有实体及固定准确度:\[P(object)*IoU_{pred}^{truth}\]

(3) 每种小格会对应C个票房价值值,找出最差不离率对应的档次\(P(Class |
object)\),并以为小格中涵盖该物体只怕该物体的一片段。

上边这条刷屏的twitter视频给出了答案。

1.3 分格思想贯彻格局

直接猜疑的题材是:分格思想在代码实现中到底怎么体现的吗?
在yolov1的yolo.cfg文件中:

[net]
batch=1
subdivisions=1
height=448
width=448
channels=3
momentum=0.9
decay=0.0005
saturation=1.5
exposure=1.5
hue=.1

conv24 。。。

[local]
size=3
stride=1
pad=1
filters=256
activation=leaky
[dropout]
probability=.5
[connected]
output= 1715
activation=linear

[detection]
classes=20
coords=4
rescore=1
side=7
num=3
softmax=0
sqrt=1
jitter=.2

object_scale=1
noobject_scale=.5
class_scale=1
coord_scale=5

最终三个全连接层输出特征个数为1715,而detction层将该1715的特征向量整个为三个,\(side * side * ((coodrds + rescore) * num +
classes)\)的张量。其中,\(side *
side\)即为原图中\(S *
S\)的小格。为何side地点的输出会对应到原图中型小型格的岗位吗?因为陶冶进度中会使用对应地方的GT监督互联网没有,测试进度中种种小格自然对应原图小格上指标的检测。

那是当年ECCV上的一篇名为《Pose Proposal
Networks》的故事集,小编是日本柯尼卡美能达公司的関井大気(Taiki
SEKII),结合了2018年CVP奥迪Q5上的YOLO和CMU的OpenPose,创建出的新办法,能够落到实处高帧数录制中的多个人态度检测。

展望处理进度数据的归一化

在练习yolo前供给先准备数据,在那之中有一步为:

python voc_label.py

中有个convert函数

def convert(size, box):
    dw = 1./(size[0])
    dh = 1./(size[1])
    x = (box[0] + box[1])/2.0 - 1
    y = (box[2] + box[3])/2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)

GT边界框转换为(xc, yc, w, h)的意味方法,wc, yc, w,
h被归一化到0~1之间。
再看损失函数
参见博文

高帧数,无压力

1.4 YOLO缺点

1)
对小物体及临近特征检查和测试效果差:当一个小格中出现多于七个小物体恐怕多少个小格中出现五个不等物体时效果欠佳。原因:B表示每一种小格预测边界框数,而YOLO暗中认可可格子里富有边界框为同品种物体。

(2) 图片进入网络前会先进行resize为448 x 448,下跌检查和测试速度(it takes about
10ms in 25ms),假使直接陶冶对应尺寸会有加快空间。

(3) 基础网络总括量较大,yolov2使用darknet-19实行加快。

图片 3

1.5 实验结论

(1) 速度更快(实时):yolo(24 convs) -> 45 fps,fast_yolo(9 convs)
-> 150 fps

(2)
全图为限制开展检查和测试(而非在提议框内检查和测试),带来更大的context新闻,使得相对于法斯特-KugaCNN误检率更低,但定位精度欠佳。

图片 4

1.6 YOLO损失函数

Yolo损失函数的精晓学习于潜伏在代码中
** Loss = \(λcoord\) *
坐标预测误差(1) + 含object的box confidence预测误差 (2)+ $λnoobj $*
不含object的box confidence预测误差(3) + 各样格子中项目预测误差(4) **
\[=\]
图片 5

(1) 整个损失函数针对边界框损失(图中1, 2,
3部分)与格子(4局地)主体展开座谈。

(2)
部分1为界线框地方与大小的损失函数,式中对宽高都进展开根是为着利用大小差距相比大的边际框差异减小。例如,多个一样将3个100×100的目的与二个10×10的目的都预测大了拾贰个像素,预测框为110
x 110与20 x
20。显著第贰种景况大家还是能够失道接受,但第两种景况相当于把边界框预测大了一倍,但只要不利用根号函数,那么损失相同,都为200。但把宽高都平添根号时:
\[(sqrt(20) – sqrt(10))^2 =
3.43\]
\[(sqrt(110) – sqrt(100))^2 =
0.48\]
赫赫有名,对小框预测偏差11个像素带来了更高的损失。通过扩张根号,使得预测相同偏差与更小的框产生更大的损失。但依据YOLOv2的试验注脚,还有更好的不二法门消除那几个题材。

(3) 若有实体落入边界框中,则统计预测边界框含有实体的置信度\(C_{i}\)和实在物体与境界框IoU\(\widehat{C_{i}}\)的损失,大家盼望两差值越小损失越低。

(4) 若没有任何物体中央落入边界框中,则\(\widehat{C_{i}}\)为0,此时咱们盼望预测含有物体的置信度\(C_{i}\)越小越好。然则,大多数边际框都没有实体,积少成多,造成loss的第三有的与第六有的的不平衡,由此,作才在loss的三局地扩充权重\(\lambda_{nobj} = 0.5\) 。

(5)
对于每种格子而言,小编设计只可以分包同种物体。若格子中带有物体,大家期望愿意预测正确的项指标票房价值越接近于1越好,而错误类其他可能率越接近于0越好。loss第五有的中,若\(\widehat{p_{i}(c)}\)中c为科学类别,则值为1,若非正确种类,则值为0。
参照译文
参考潜伏在代码中

而任何艺术,比如NIPS 2017 的AE(Associative embedding)、ICCV
2017的安德拉MPE(Regional multi-person pose estimation)、CVP中华V2017的PAF(Realtime multi-person 2D pose estimation using part affinity
田野(field)s),都心有余而力不足落到实处高帧数特别是100上述帧数录制的态度检查和测试。

2 YOLOv2

yolov1基础上的存在延续,新的基本功互联网,多规格陶冶,全卷积互连网,法斯特er-EnclaveCNN的anchor机制,越来越多的教练技巧等等立异使得yolov2进程与精度都大幅度进步,创新效果如下图:
图片 6

图片 7

2.1 BatchNorm

Batchnorm是二零一六年之清朝边相比盛行的磨练技巧,在每一层之后参预BN层能够将全部batch数据归一化到均值为0,方差为1的上空中,即将有所层数据规范化,防止梯度消失与梯度爆炸,如:
\[0.9^{30} = 0.04\]
进入BN层操练之后效果正是互连网没有更快,并且职能更好。YOLOv2在投入BN层之后mAP上升2%。
关于BN作用

在COCO数据集上也不虚,比较谷歌(Google)PersonLab能在更高帧数下运转。

2.2 预练习尺寸

yolov1也在Image-Net预训练模型上拓展fine-tune,不过预磨炼时网络入口为224
x 224,而fine-tune时为448 x
448,那会带来预陶冶网络与事实上练习互连网识别图像尺寸的不合作。yolov2直接使用448
x
448的互联网入口进行预练习,然后在检测任务上拓展陶冶,效果获得3.7%的晋级。

图片 8

2.3 更细网络划分

yolov2为了提高小物体格检查测效果,收缩互联网中pooling层数目,使末段特征图尺寸更大,如输入为416
x 416,则输出为13 x 13 x 125,当中13 x
13为最终特征图,即原图分格的个数,125为每一个格子中的边界框构成(5 x
(classes +
5))。供给小心的是,特征图尺寸取决于原图尺寸,但特征图尺寸必须为奇数,以此保存中间有叁个职位能旁观原图主题处的对象。