YOLO(you only look once)算法学习之一 --感谢Andrew NG

感觉这个YOLO确实比较难以理解,不过相比于它的难度和它实现的效果,且等我一步一步看来。

沿着吴恩达老师(Andrew NG)讲述的deeplearnig.ai 第四课第三周,学习了YOLO。在看课后的编程作业时,明显感觉到比前三课难度大了许多,数据维度也在增大,不那么好抽象了。在编程作业中,Andrew希望我们编写一个:

def yolo_filter_boxes(box_confidence, boxes, box_class_probs, threshold = .6):  函数,函数的目的输入卷积层得出的结果[(19,19,5,85)5个box,85个结果输出(Pc ,nx,ny,nh,nw C....)]  输出经过过滤的 scores boxes  classes。这里面有两个函数比较难以理解:

K.argmax()

K.max()

为了弄清楚这两个函数,费了老劲(主要是本人抽象能力比较弱)。用最简单的办法试一下:

----PS:本人python 刚踏入幼儿园水平,是因为deep learning才看的python,属于边看边学型,所以代码实现能力有限,凑合来吧。


# -*- coding: utf-8 -*-
"""
Created on Sun May  5 12:20:10 2019

@author: vector
"""

import tensorflow as tf
from keras import backend as K
import numpy as np



val=[[[[5.04125023e+00,-1.55785904e+01,-2.83200192e+00,1.96928768e+01
,-3.13663197e+00,-7.55511236e+00,-7.56947041e+00,1.68209515e+01
,4.24713326e+00,-1.73990345e+00,-8.02500725e+00]
,[-3.97544205e-01,5.84666138e+01,2.26980362e+01,-3.68667173e+00
,-3.42852020e+01,4.19570580e+01,6.23606062e+00,-4.06026334e-01
,4.94794655e+01,-4.14354591e+01,-5.21470165e+00]
,[-1.59435570e+00,2.87918067e+00,6.97675562e+00,-1.02331047e+01
,3.69723463e+00,-5.36165237e+00,3.06172371e+00,-7.46842909e+00
,1.05866039e+00,5.80035448e+00,-5.70412731e+00]
,[-6.07453575e+01,-1.58057213e-01,1.69328403e+01,-1.89812946e+00
,-1.12865686e+01,-3.09778538e+01,4.63516884e+01,-5.54098549e+01
,3.23947334e+01,-9.87750435e+00,-2.55073757e+01]
,[3.83861423e+00,-3.73326480e-01,-1.12178767e+00,-8.69525528e+00
,2.09492946e+00,-2.90940237e+00,-2.77298522e+00,-1.78553924e-01
,-9.54881763e+00,-4.89566326e-01,7.15371561e+00]]

,[[2.37346630e+01,6.39543200e+00,-4.79997009e-01,6.98317671e+00
,2.68681812e+01,1.57998219e+01,-2.43497372e+01,-8.66569519e-01
,1.96555519e+01,1.27166605e+01,-1.09769678e+01]
,[3.55523109e+00,-1.10269909e+01,8.89009118e-01,-2.63719082e+01
,2.80364609e+01,2.01359196e+01,-1.16721034e+00,2.83176541e+00
,-1.15777194e+00,-7.74709165e-01,-6.97088337e+00]
,[1.11202073e+00,1.33960485e+00,1.67786407e+01,3.19417458e+01
,-1.87390079e+01,-1.28125868e+01,5.41886902e+01,-1.97010250e+01
,2.26919060e+01,-1.62617474e+01,-2.29646912e+01]
,[-1.30969572e+01,-2.68153214e+00,1.63889465e+01,2.68970180e+00
,-2.24134421e+00,3.16389060e+00,1.15998805e+00,-7.24269867e+00
,1.16527643e+01,-4.63365269e+00,1.90438156e+01]
,[6.91472816e+00,1.26290333e+00,2.40646410e+00,-6.08163309e+00
,2.24761057e+00,-6.32344544e-01,5.60427964e-01,2.90417790e+00
,3.80413353e-01,4.47263336e+00,4.31219101e+00]]

,[[-2.07209740e+01,-1.53750029e+01,1.12822876e+01,3.41177607e+00
,-8.95454025e+00,1.72850533e+01,-1.60413857e+01,7.60373163e+00
,-6.47383404e+00,7.64738655e+00,8.38921547e+00]
,[-5.61594367e-02,-2.48626590e-01,-1.46071911e-01,2.81346124e-03
,9.46395099e-03,-1.57495424e-01,-3.74893725e-01,-1.01817161e-01
,-4.33096364e-02,-2.71697491e-01,-5.05830884e-01]
,[1.73684769e+01,-2.08111115e+01,7.54064083e+00,4.46772051e+00
,-1.50484838e+01,8.60333025e-01,-2.39661484e+01,1.18190193e+01
,1.04184322e+01,8.18679047e+00,-2.79239025e+01]
,[1.55397549e+01,-1.90847416e+01,-1.40840273e+01,-3.81190276e+00
,1.17639446e+01,3.60579658e+00,-9.11996245e-01,3.40716004e+00
,9.17149544e+00,-1.69823322e+01,-2.83458977e+01]
,[-1.19119275e+00,4.20388222e+00,1.43751729e+00,-2.58818936e+00
,1.90074384e-01,-1.22966540e+00,4.47744243e-02,4.19983387e+00
,1.60232770e+00,-4.03793526e+00,-2.58208901e-01]]]


,[[[1.96710300e+01,1.17161436e+01,-2.35525074e+01,4.17030334e+00
,2.09850502e+01,2.89506569e+01,1.80171547e+01,2.36297283e+01
,-3.96317363e+00,-1.19662218e+01,-2.62648602e+01]
,[-1.14955854e+01,1.57079756e+00,4.28006592e+01,-5.16599197e+01
,8.50690079e+00,2.16089230e+01,6.02525663e+00,-1.46009564e+00
,7.26338339e+00,3.29429674e+00,-1.51601963e+01]
,[-8.97694945e-01,4.19165182e+00,-6.56841946e+00,3.20276213e+00
,-1.15381062e+00,1.97713971e-01,4.60636520e+00,7.52330542e-01
,8.33813548e-01,-1.18621886e+00,-5.69566107e+00]
,[-2.06250802e-01,-8.91634962e-04,-3.05281132e-01,1.17659137e-01
,9.40008238e-02,1.36603147e-01,-2.35116109e-01,-3.46515477e-01
,-1.76979974e-01,1.24432564e-01,-4.60214019e-02]
,[-9.41025543e+00,1.52416229e+01,-9.35743141e+00,2.69685650e+01
,4.43464947e+00,4.81867447e+01,-9.24991035e+00,-1.42591352e+01
,-8.14727974e+00,1.01019669e+01,8.86563492e+00]]

,[[-5.09003410e+01,-3.76450539e+01,-2.21333981e+01,-2.75225067e+01
,-1.99855576e+01,-9.40422821e+00,5.67903671e+01,3.04312897e+01
,-2.77850494e+01,1.88180428e+01,1.33691587e+01]
,[-1.50023270e+00,-6.46772742e-01,-3.85412186e-01,3.47907811e-01
,-2.22449040e+00,2.12644982e+00,-4.19680500e+00,1.32434642e+00
,3.24526238e+00,-2.74255943e+00,2.38636994e+00]
,[-1.18518581e+01,5.57672596e+00,-2.37459040e+00,3.74675202e+00
,1.94876218e+00,-4.54361725e+00,-5.38826752e+00,-2.85545564e+00
,-1.11464310e+01,-9.55333591e-01,-3.83397676e-02]
,[7.20380068e+00,6.06124783e+00,1.24401407e+01,-6.58630562e+00
,-4.10402966e+00,7.59333551e-01,4.70386267e+00,1.38817501e+01
,1.25197601e+01,3.79731321e+00,4.73498964e+00]
,[1.16111934e+00,-4.13413582e+01,5.32278791e-02,2.93668308e+01
,1.48746223e+01,5.21803246e+01,7.16327333e+00,3.23787689e+01
,1.40236406e+01,-5.57535591e+01,2.01420174e+01]]

,[[7.81352901e+00,-4.42444658e+00,-2.08735294e+01,7.59663916e+00
,2.79104018e+00,2.13582668e+01,-9.38902283e+00,-3.56018448e+01
,-4.32748566e+01,1.32438202e+01,2.20540977e+00]
,[5.58020639e+00,1.95107803e+01,-1.55471635e+00,-1.20795083e+00
,-1.20346212e+01,-2.07770958e+01,-1.66141262e+01,9.63930321e+00
,3.25263824e+01,-1.10200334e+00,5.95154166e-01]
,[-3.34334373e+01,-2.65619826e+00,-1.00303555e+01,8.44537449e+00
,-1.47457230e+00,2.25491390e+01,1.21496725e+01,-2.63257694e+01
,-4.25015297e+01,-1.06732969e+01,-2.65293541e+01]
,[9.73656654e+00,1.29949865e+01,1.60275781e+00,1.23203402e+01
,-1.18484707e+01,-1.14177389e+01,1.18655605e+01,-8.45927715e+00
,-1.04357843e+01,4.89846849e+00,1.63930435e+01]
,[-2.21856842e+01,6.53589582e+00,-3.55185928e+01,-9.80981159e+00
,-1.63172131e+01,-1.36991148e+01,7.81823492e+00,1.93721695e+01
,-9.91354084e+00,-8.12210846e+00,-1.56606331e+01]]]


,[[[7.24413109e+00,7.08943987e+00,-5.95546246e+00,7.11061764e+00
,-1.73289239e+00,-6.12135839e+00,4.75878429e+00,-4.57469606e+00
,2.25500941e+00,-4.50222826e+00,6.56421065e-01]
,[6.99728680e+00,-8.18200207e+00,-7.41292906e+00,-3.72546692e+01
,3.24772873e+01,-1.02897263e+01,1.92108040e+01,5.67521238e+00
,-1.64799137e+01,7.88737917e+00,-6.93934631e+00]
,[-3.06169748e+00,2.09851265e+01,-2.90971699e+01,2.25681076e+01
,1.04927588e+01,-3.50114298e+00,-3.87329996e-01,2.26186485e+01
,-1.07040348e+01,-2.32619929e+00,-1.90476525e+00]
,[9.24909592e+00,4.70300674e+01,-2.68817711e+01,5.42330503e+00
,2.65893459e+01,2.71482887e+01,3.25217171e+01,-3.16169949e+01
,1.76027215e+00,4.23304138e+01,-2.08098640e+01]
,[6.90774899e-03,-1.04783885e-01,-6.36029383e-03,-3.26915202e-03
,-4.68525589e-02,4.90747206e-02,-1.51918503e-03,7.40854368e-02
,5.75981988e-03,1.46457195e-01,5.89274045e-04]]

,[[4.99889106e-01,-2.02576399e+00,5.10439253e+00,4.91532183e+00
,-9.82450581e+00,-7.54506063e+00,5.74894094e+00,-1.15332613e+01
,1.35989170e+01,1.48689613e+01,-8.38042259e+00]
,[-8.46739590e-01,-1.48155287e-01,2.08716229e-01,-2.39001960e-01
,3.45410667e-02,-4.34824884e-01,3.35176051e-01,1.25092578e+00
,-2.71894902e-01,-5.88899255e-01,2.92417169e-01]
,[-2.80043864e+00,3.95390487e+00,1.07268476e+01,4.37378597e+00
,1.76138735e+00,1.58467841e+00,8.54964542e+00,9.16595650e+00
,2.43237901e+00,-4.34542370e+00,2.85870171e+00]
,[-1.22672796e+01,-1.18033381e+01,4.22342157e+00,-1.45650244e+01
,2.82889633e+01,-1.59085569e+01,-1.16412296e+01,5.62056541e+00
,7.89571238e+00,-3.15536642e+00,-7.63458538e+00]
,[-5.70739794e+00,-1.19557476e+01,-8.79311562e+00,-9.72783852e+00
,-1.81523151e+01,-1.30701962e+01,1.47132623e+00,2.62642212e+01
,-1.96196020e+00,-1.47425337e+01,1.55906773e+01]]

,[[5.19370041e+01,-4.71324539e+01,5.20028687e+01,-1.36918964e+01
,1.48827057e+01,1.97560847e+00,4.19721336e+01,-3.02496225e-01
,-4.77766323e+00,6.04711676e+00,8.29706192e+01]
,[1.52979207e+00,4.61601162e+00,-1.37956343e+01,1.45822611e+01
,1.31369534e+01,-4.02852869e+00,-3.82765913e+00,-1.60043221e+01
,1.48925142e+01,-1.49490128e+01,1.17491426e+01]
,[1.36984479e+00,1.75727534e+00,-5.98259068e+00,-2.02700496e+00
,3.12512255e+00,4.24514860e-01,-4.52292967e+00,2.49207163e+00
,4.37360907e+00,1.02290201e+01,-1.05151296e+00]
,[6.59639835e+00,4.02648592e+00,9.62512875e+00,-1.35759497e+01
,-1.68644142e+01,1.60323143e+01,-8.51013088e+00,5.92328596e+00
,2.31738548e+01,-8.39647102e+00,-3.00652647e+00]
,[-2.70165944e+00,-6.30751371e+00,2.75131798e+00,6.55165958e+00
,-6.86238527e+00,-1.12253189e+01,-1.23945093e+01,3.76353741e+00
,1.09070883e+01,1.11534681e+01,1.52927113e+01]]]]

bb=[[[[2.2452729,6.938395,1.2613175,8.770817]
,[1.3969936,3.3648973,3.3712919,7.4917183]
,[1.8915889,0.7749185,3.5741792,0.05729628]
,[8.426533,3.2713668,0.5313436,4.9413733]
,[6.0470843,0.8987757,0.05851877,7.131255]]

,[[5.9719086,0.7515718,1.26404,2.2826772]
,[5.531324,8.113029,2.9312482,4.250835]
,[2.4274013,5.9211335,0.83932906,4.5986476]
,[4.5223565,6.9258494,0.01802081,1.9305887]
,[0.21641421,1.2868321,3.5319235,5.284763]]

,[[6.317525,3.693468,1.1261784,2.9082098]
,[2.747768,0.26723564,0.8030013,6.2242627]
,[1.4995985,2.0826168,1.9849663,0.12781298]
,[6.835262,0.35044277,5.1207933,7.053607]
,[1.9006321,0.14264834,2.0753016,7.984844]]]


,[[[4.695484,7.2363987,0.25753224,5.841353]
,[3.779212,3.2621999,1.0545604,3.2708502]
,[0.26369983,7.8224936,8.3162365,5.9727607]
,[0.3462205,0.8399645,0.34342086,0.22979593]
,[2.0677187,0.14843333,0.17881143,2.2396252]]

,[[4.2636075,2.5012965,1.7102334,7.2331457]
,[2.629707,3.028932,2.17063,3.0653436]
,[6.923786,1.4176083,8.664116,1.4219272]
,[1.1849003,1.67261,0.61323476,3.8288968]
,[6.160305,2.4496088,10.067629,8.923168]]

,[[1.629724,3.1054416,7.848094,2.9004476]
,[0.8160143,0.7232089,3.7477205,0.49090755]
,[5.7717466,5.5647025,5.7974076,4.3016877]
,[3.1566095,0.9545621,2.5053418,4.83609]
,[4.4881315,2.1274064,1.8112786,2.1396203]]]


,[[[2.3471727,0.98015857,4.339315,2.5494137]
,[0.04910374,0.16517568,2.7487898,6.543073]
,[1.7770293,0.7558892,4.741975,8.828338]
,[2.0611653,2.4697123,0.89486873,0.5301968]
,[1.7858453,0.10209811,2.8441293,1.4025958]]

,[[1.2363843,0.97154915,3.313807,4.750233]
,[5.8338737,4.3052425,1.1652324,3.5960333]
,[1.1022294,0.2787814,1.0415096,2.803567]
,[5.191204,8.664848,2.2418504,7.9117966]
,[2.7054384,4.871028,0.35772407,2.3142567]]

,[[0.08426642,7.9041777,3.015615,7.599481]
,[0.4859547,3.9808831,2.3710299,4.766389]
,[0.84395635,4.246805,5.858828,3.6461835]
,[4.7820163,0.8020389,2.421639,5.3152957]
,[1.9010129,0.25976115,7.0779,8.542947]]]]

box=tf.constant(bb,shape=(3,3,5,4)) #构造一个(3,3,5,4)维的tensor,这就是YOLO中,3X3网格,每#个网格5个box  4是box的位置(nx,ny,nh,nw)
a=tf.constant(val,shape=(3,3,5,11)) #构造一个(3,3,5,11)维的tensor,这就是YOLO中,3X3网格,#每个网格5个box  11是指有11个分类(车、人、树木、山、。。。等等)

b=K.argmax(a,axis=-1)
c=K.max(a,axis=-1, keepdims=False)

f = c >= 15.6

sess=tf.Session()

print(sess.run(f))
s=tf.boolean_mask(c,f)
classes = tf.boolean_mask(b, f)
boxes=tf.boolean_mask(box,f)

print(sess.run(s))
print(sess.run(classes))
print(sess.run(boxes))

代码输出:

[[[ True  True False  True False]
  [ True  True  True  True False]
  [ True False  True False False]]

 [[ True  True False False  True]
  [ True False False False  True]
  [ True  True  True  True  True]]

 [[False  True  True  True False]
  [False False False  True  True]
  [ True False False  True False]]]
[19.692877 58.466614 46.35169  26.868181 28.03646  54.18869  19.043816
 17.285053 17.368477 28.950657 42.80066  48.186745 56.790367 52.180325
 21.358267 32.526382 22.549139 16.393044 19.37217  32.477287 22.618649
 47.030067 28.288963 26.264221 82.97062  23.173855]
[ 3  1  6  4  4  6 10  5  0  5  2  5  6  5  5  8  5 10  7  4  7  1  4  7
 10  8]
[[ 2.2452729   6.938395    1.2613175   8.770817  ]
 [ 1.3969936   3.3648973   3.3712919   7.4917183 ]
 [ 8.426533    3.2713668   0.5313436   4.9413733 ]
 [ 5.9719086   0.7515718   1.26404     2.2826772 ]
 [ 5.531324    8.113029    2.9312482   4.250835  ]
 [ 2.4274013   5.9211335   0.83932906  4.5986476 ]
 [ 4.5223565   6.9258494   0.01802081  1.9305887 ]
 [ 6.317525    3.693468    1.1261784   2.9082098 ]
 [ 1.4995985   2.0826168   1.9849663   0.12781298]
 [ 4.695484    7.2363987   0.25753224  5.841353  ]
 [ 3.779212    3.2621999   1.0545604   3.2708502 ]
 [ 2.0677187   0.14843333  0.17881143  2.2396252 ]
 [ 4.2636075   2.5012965   1.7102334   7.2331457 ]
 [ 6.160305    2.4496088  10.067629    8.923168  ]
 [ 1.629724    3.1054416   7.848094    2.9004476 ]
 [ 0.8160143   0.7232089   3.7477205   0.49090755]
 [ 5.7717466   5.5647025   5.7974076   4.3016877 ]
 [ 3.1566095   0.9545621   2.5053418   4.83609   ]
 [ 4.4881315   2.1274064   1.8112786   2.1396203 ]
 [ 0.04910374  0.16517568  2.7487898   6.543073  ]
 [ 1.7770293   0.7558892   4.741975    8.828338  ]
 [ 2.0611653   2.4697123   0.89486873  0.5301968 ]
 [ 5.191204    8.664848    2.2418504   7.9117966 ]
 [ 2.7054384   4.871028    0.35772407  2.3142567 ]
 [ 0.08426642  7.9041777   3.015615    7.599481  ]
 [ 4.7820163   0.8020389   2.421639    5.3152957 ]]

所以,K.argmax(input,axis=-1)是要求input(3,3,5,11) 最后一个维度中最大值的索引。可以想象为:11个数中选最大的数的索引,填写在(3,3,5)这个矩阵中。K.max(input,axis=-1) 是把最大值填写过来。代表什么意思? 代表着求出了 网络(3X3个网格,每个网格有5个box)11个分类中,最大概率的分类是哪个,概率是多少。

还有个函数:

tf.boolean_mask(input,mask),我们再来理解下这个函数,这个函数是说用mask去比较一下input,如果mask是True的地方,输出就有,mask是False的地方,输出就没有。但是比较难以理解的是 mask的维度是可以小于input的维度的。如果mask维度小于input维度,可以这样认为:例如,以上代码中input(3,3,5,4)  mask(3,3,5)。可以认为mask中每个点控制 4这个维度的 输出或者不输出。

 

 

YOLO算法整体的理解,有个人画的图(作者画的很有心,先感谢一下),我觉得很形象,链接:

http://www.cnblogs.com/sandy-t/p/7397713.html

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值