项目地址:https://gitee.com/windandwine/YOLO_v1_tensorflow 转载请注明出处
采用tensorflow(python)实现 YOLO v1目标检测算法,可对图片,包含图片的文件夹、摄像头和视频进行对如下20个类物体的检测。
{"aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"}
在项目下yolo.py文件中,main方法含有四种检测方式,注释掉其他三种即可。
if __name__ == '__main__':
yolo = Yolo()
# 图片检测
yolo.image_detector('test/sample/person.jpg', 'test/result/person.jpg', 'test/result/person.txt')
# 多图检测
# yolo.multi_img_detector('test/sample', 'test/result')
# # 摄像头检测
# yolo.camera_detector('test/result/camera.mp4')
# # 视频检测
# yolo.vedio_detector('test/sample/india_street.mp4', 'test/result/india_street.mp4')
其中除camera_detector只有保存文件一个参数,其他三个方法都需要加载文件和保存文件两个参数。
如果你要下载百度网盘的权重,请点击这里这里,密码1y19。
如果你要下载谷歌云的权重,请点击这里这里
如果你要查看论文,请点击这里
YOLO将图片分成S×S的网格,每个单元格检测中心点在该网格的目标,每个单元格会生成B个以其为中心的锚点框(anchor box),anchor box有四个参数(x,y,w,h),分别是中心坐标和宽高,每个anchor box有一个置信度(confidence score),某个anchor box的置信度如下 $$ \color{red}{C=P(Object)\times IoU} $$ 第1项为框内含有目标的概率,记为P(object),包含目标时P(object)=1,没有目标(背景)时P(object)=0。
第2项为候选框的准确度,用anchor box和ground truth(实际框)的**交并比(IoU)**来表示。
$$ \color{red}{IoU(R,R')=\frac{R\cap R'}{R\cup R'}} $$
左上角为原点(0, 0),坐标数值如下图。anchor box参数x,y的单位是一个网格的长度宽度而不是像素,w,h为相对原图的大小,取值[0,1]。
最终输出包含5个元素[x,y,w,h,C]。
任务需要预测n种的物体。每个单元的anchor box内存在目标时,是某个类别($class_i$)的条件概率为$P(class_i|Object)$。不管一个单元格预测了多少个anchor boxes,只输出一组类别概率。 $$ \left[\begin{array}{c} P(class_1|Object)\\ P(class_2|Object)\\ \vdots\\ P(class_n|Object)\\ \end{array}\right] $$
每个单元格需要输出 B×5+n个参数,总体需要输出S²×(B×5+C)大小的张量。
对于PASAL VOC数据,共有20个类别(n=20),将图片分割成7×7(S=7),如果每个单元格预测2个anchor box(B=2),最终的张量大小为 $$ 7\times 7 \times30 (2\times5+20)=7\times 7 \times30 $$
特征提取网络参考GoogleNet模型,包含24个卷积层和2个全连接层,采用Leaky ReLU作为激活函数,最后一层为线性激活。(也可以替换为VGG-16,代码里就是VGG16)。
最后输出7×7×30的张量,一个点的深度为30,如下
使用非极大值抑制。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。