如何衡量目标检测算法的优劣

目标检测(object detection)问题相对于一般AI分类问题更加复杂,不仅检测出目标,输出目标的类别,还要定位出目标的位置。分类问题中的简单accuray指标已经不能反映出目标检测问题结果的准确度,而mAP (Mean Average Precision)就是被用来衡量目标检测算法优劣的常用指标。
要理解什么是mAP,需要先澄清什么是Precision(查准率)和Recall(查全率)。

Precision和Recall

定义

查准率和查全率是在信息检索、Web搜索等应用中经常出现的性能度量指标,在机器学习中,也可以用来度量“预测结果中有多少比例是用户感兴趣的”。对于二分类问题,可将样例根据其真实类别与预测类别的组合划分为:

阅读全文 »

定义

在模型预测阶段,我们先为图像生成多个锚框,并为这些锚框一一预测类别和偏移量。随后,我们根据锚框及其预测偏移量得到预测边界框。当锚框数量较多时,同一个目标上可能会输出较多相似的预测边界框。了使结果更加简洁,我们可以移除相似的预测边界框。常用的方法叫作非极大值抑制(non-maximum suppression,NMS)。

计算流程

非极大值抑制的流程如下:

  • 根据置信度得分进行排序
  • 选择置信度最高的比边界框添加到最终输出列表中,将其从边界框列表中删除
  • 计算所有边界框的面积
  • 计算置信度最高的边界框与其它候选框的IoU。
  • 删除IoU大于阈值的边界框
  • 重复上述过程,直至边界框列表为空。
    阅读全文 »

Docker on WSL

配置好了WLS后,最近慢慢的把以前在虚拟机上开发的项目都移到了WSL上,一切都像在原生的ubuntu下一样,只有一个用到docker的项目遇到了波折: 由于WSL 还不支持linux kernel的一些特性,在WSL下可以安装docker,但是 docker engine 的运行会有问题。Github和微软的feedback页面上有不少人都提出过这个问题 [1] [2] [3],但是WSL团队都没什么正面回答。能找到的就是WSL的PM、大帅哥Jack Hammons在Microsoft Build 2017上的回答提问时的一段话。

阅读全文 »

Windows subsystem for Linux

昨天晚上俄罗斯世界杯开踢了,看起来足球世界还是没怎么变,梅罗仍然统治世界,沙特仍然被欧洲球队打穿,中国队仍然四年一度的缺席……但是技术的世界却是日新月异,连微软都拥抱开源了,Windows subsystem for Linux (WSL) 简直是在赤裸裸的勾引程序员扔掉Mac投奔Windows。

既有Windows的桌面和Office套件,又可以方便的使用Linux的工具链,这样的生活不要太美好!当然前期坑是少不了的,经过两年时间的改进,wsl团队解决了不少问题(比如本文将提到的文件权限问题),个人觉得已经可以入坑了。当前时间节点18年6月,版本windows 10 1803, build 17134。

WSL的介绍和安装请看下这里:

加入到新团队后一直着手于建立统一的标准软件流程,现有的项目因为不同BU的影响,不仅流程各不相同,使用的工具也是五花八门,所以从年初制定KPI时,不仅是制定标准的软件流程,软件开发工具的统一也是一项重要内容。经过各种讨论评估,最终决定使用JIRA和Bitbucket,后续还会有Bamboo和Confluence的加入,最终凑齐Atlasssian全家桶, 完成软件开发从需求管理、任务管理、测试管理、代码管理、缺陷管理、持续集成、文档管理的全流程覆盖。

经过漫长的与sourcing和IT部门的扯皮,终于采购了JIRA和Bitbucket。然后由于IT部门的不作为,所有安装、配置、管理、维护都是自己动手,项目开发的任务之外又承担了配置管理员的角色,虽然这个我这个二把刀管理员搞出来的配置非常不专业,但是因为是自己的心血,还是很有必要记录一下的。

阅读全文 »

简介

头脑风暴是经常被使用的词汇,大众或多或少都知道这种讨论解决问题的方法,但是即使是在专业的项目管理者手中,头脑风暴也是经常被误用的一个工具。人们经常认为自己是在进行头脑风暴,但其实他们只是在进行讨论而已,真正的头脑风暴是一个正式的过程。在参加了很多各种各样的、或好或坏的头脑风暴后,觉得有必要做些总结。

头脑风暴(Brainstorming)在维基百科的定义:一种为激发创造力、强化思考力而设计出来的一种方法。此法是美国BBDO(Batten, Bcroton, Durstine and Osborn)广告公司创始人亚历克斯‧奥斯本(Alex F. Osborn)于1938年首创的。

头脑风暴作为一种群体决策工具在PMBOK的多个管理过程中被推荐使用,比如:项目整合管理,范围管理,时间管理,成本管理,质量管理,风险管理等。

头脑风暴主要目标大量收集解决问题的灵感和方案。为了最大限度的激发团队的创造力和思考力,过程中提倡自由发言、畅所欲言、发散思考,鼓励互相启发和激励,禁止评论和批评。

阅读全文 »

截取文件名和后缀

编写Shell脚本的过程中,经常会和文件名和文件路径打交道。如果用户输入了一个文件的全名(可能包含绝对路径和文件后缀),如何得到文件的路径名,文件名,文件后缀这些信息呢。Shell脚本拥有强大的字符串处理能力,如果把文件名当做字符串,我们不难使用cut或sed这样的工具得到我们想要的结果。

1
2
3
4
5
6
7
$fullfile=/the/path/foo.txt
$fullname=$(basename $fullfile)
$dir=$(dirname $fullfile)
$filename=$(echo $fullname | cut -d . -f1)
$extension=$(echo $fullname | cut -d . -f2)
$ echo $dir , $fullname , $filename , $extension
/the/path , foo.txt , foo , txt

这里使用basename命令可以直接得到包含后缀的文件名,而dirname命令可以得到路径名,然后就能简单的用cut截取文件名和后缀名。

阅读全文 »

万万没想到,有一天也会沦落到在一台4G内存的Win7笔记本上搞linux编程,还我的16核Z600……好吧,抱怨也是没有用的,和销售人员一样型号的13寸笔记本,标志着我的coding生涯从此全面进入虚拟机和SSH时代。

先不说外接键盘、鼠标、显示器的酸爽,作为开发编译环境的虚拟机就是个问题。放在某个server上,锁在大楼的某处,感觉蛮牢。直到一次急等着release一个feature时怎么也连不上,跑去一看,那台server已经被人大卸八块了……幸好最后装上还能用,着实惊出一身冷汗。这件事提醒我真的需要好好考虑怎么将开发环境管理好,减少重新配置环境的开销和风险,甚至为整个团队构建更高效的开发和测试环境,提高团队效率……

解放生产力的共产主义理想先不说,说起虚拟机的设置、部署和迁移,vagrant是鼎鼎大名了。按照官网的描述,vagrant是用于创建和配置轻量级、可复用、跨平台的开发环境的工具。

阅读全文 »

Sed - 1: 基本概念
Sed - 2: 常用功能
Sed - 3: 高级功能

Sed常用命令列表如下:

  命令   功能
a| 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c| 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用”"续行
i| 在当前行之前插入文本。多行时除最后一行外,每行末尾需用”"续行
d 删除行
h 把模式空间里的内容复制到暂存缓冲区
H 把模式空间里的内容追加到暂存缓冲区
g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
q 结束或退出sed
r 从文件中读取输入行
! 对所选行以外的所有行应用命令
s 用一个字符串替换另一个
g 在行内进行全局替换
w 将所选的行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符替换为另一字符(不能对正则表达式使用y命令)
阅读全文 »