xuepengqiang
2020-05-26 bb5cb224c9abe4216aaa49a8287b06d9f05dab60
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
חíZc@sGdZddlmZddlZddlZddlmZ    ddl
m Z m Z m Z mZmZddlmZddlmZddlmZdd    lmZdd
lmZee ƒd „ƒZd „Zd „Zd„Zd„Zd„Zd„Z d„Z!d„Z"dddd„Z#d„Z$d„Z%dd„Z&dS(sYOLO_v3 Model Defined in Keras.iÿÿÿÿ(twrapsN(tbackend(tConv2DtAddt ZeroPadding2Dt UpSampling2Dt Concatenate(t    LeakyReLU(tBatchNormalization(tModel(tl2(tcomposecOsRitdƒd6}|jdƒdkr.dnd|d<|j|ƒt||ŽS(    s4Wrapper to set Darknet parameters for Convolution2D.gü©ñÒMb@?tkernel_regularizertstridesitvalidtsametpadding(ii(R
tgettupdateR(targstkwargstdarknet_conv_kwargs((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pyt DarknetConv2Ds% cOs?itd6}|j|ƒtt||ŽtƒtddƒƒS(sCDarknet Convolution2D followed by BatchNormalization and LeakyReLU.tuse_biastalphagš™™™™™¹?(tFalseRR RRR(RRtno_bias_kwargs((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pytDarknetConv2D_BN_Leakys    cCsŽtddfƒ|ƒ}t|ddd    ƒ|ƒ}xTt|ƒD]F}tt|dd
ƒt|d ƒƒ|ƒ}tƒ||gƒ}q@W|S( s@A series of resblocks starting with a downsampling Convolution2DiiiR i(ii(ii(ii(ii(ii(ii(RRtrangeR R(txt num_filterst
num_blockstity((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pyt resblock_body"scCsstdd ƒ|ƒ}t|ddƒ}t|ddƒ}t|ddƒ}t|d    dƒ}t|d
d ƒ}|S( s,Darknent body having 52 Convolution2D layersi ii@ii€iiiiii(ii(RR"(R((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pyt darknet_body.sc    Csˆtt|dƒt|ddƒt|dƒt|ddƒt|dƒƒ|ƒ}tt|dd    ƒt|d
ƒƒ|ƒ}||fS( s:6 Conv2D_BN_Leaky layers followed by a Conv2D_linear layeriii(ii(ii(ii(ii(ii(ii(ii(R RR(RRt out_filtersR!((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pytmake_last_layers8s  cCst|t|ƒƒ}t|jd||dƒ\}}ttdd    ƒtdƒƒ|ƒ}tƒ||jdjgƒ}t|d||dƒ\}}ttdd
ƒtdƒƒ|ƒ}tƒ||jdjgƒ}t|d||dƒ\}}t||||gƒS( s'Create YOLO_V3 model CNN body in Keras.iiiiii˜i€i\(ii(ii(    R    R#R%toutputR RRRtlayers(tinputst num_anchorst num_classestdarknetRty1ty2ty3((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pyt    yolo_bodyFs#    cCs/t|ƒ}tjtj|ƒddd|dgƒ}tj|ƒdd!}tjtjtjdd|dƒddddgƒd|dddgƒ}tjtjtjdd|dƒddddgƒ|ddddgƒ}tj||gƒ}    tj|    tj    |ƒƒ}    tj|d|d|d||dgƒ}tj
|dd    d…fƒ}
tj |ddd
…fƒ} tj
|dd
d…fƒ} tj
|ddd    …fƒ} |
|    tj|d    d    d…tj    |ƒƒ}
| |tj|d    d    d…tj    |ƒƒ} |
| | | fS( s8Convert final layer features to bounding box parameters.iiiitstopiÿÿÿÿi.Ni( tlentKtreshapetconstanttshapettiletaranget concatenatetcasttdtypetsigmoidtexp(tfeatstanchorsR*t input_shapeR)tanchors_tensort
grid_shapetgrid_ytgrid_xtgridtbox_xytbox_whtbox_confidencetbox_class_probs((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pyt    yolo_headZs$ *44'00c CsP|dddd…f}|dddd…f}tj|tj|ƒƒ}tj|tj|ƒƒ}tj|tj||ƒƒ}||d|}||}|||}||9}||d}    ||d}
tj|    ddd…f|    ddd…f|
ddd…f|
ddd…fgƒ} | tj||gƒ9} | S(sGet corrected boxes.Niÿÿÿÿg@iii(R2R9R:troundtminR8( RERFR?t image_shapetbox_yxtbox_hwt    new_shapetoffsettscaletbox_minst    box_maxestboxes((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pytyolo_correct_boxesws$ 
 
c Cszt||||ƒ\}}}}t||||ƒ}    tj|    ddgƒ}    ||}
tj|
d|gƒ}
|    |
fS(sProcess Conv layer outputiÿÿÿÿi(RIRUR2R3( R=R>R*R?RLRERFRGRHRTt
box_scores((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pytyolo_boxes_and_scores‘s
ig333333ã?gà?cCsBdddgdddgddd    gg}tj|dƒdd!d
}g}    g}
xXtdƒD]J} t|| ||| |||ƒ\} } |    j| ƒ|
j| ƒqaWtj|    d dƒ}    tj|
d dƒ}
|
|k}tj|d d ƒ}g}g}g}xçt|ƒD]Ù}tj|    |dd…|fƒ}tj|
dd…|f|dd…|fƒ}tj    j
|||d|ƒ}tj ||ƒ}tj ||ƒ}tj |d ƒ|}|j|ƒ|j|ƒ|j|ƒqWtj|d dƒ}tj|d dƒ}tj|d dƒ}|||fS(s=Evaluate YOLO model on given input and return filtered boxes.iiiiiiiiii taxisR:tint32Nt iou_threshold( R2R5RRWtappendR8R4ttft boolean_masktimagetnon_max_suppressiontgathert    ones_like(t yolo_outputsR>R*RLt    max_boxestscore_thresholdRZt anchor_maskR?RTRVtlt_boxest _box_scorestmasktmax_boxes_tensortboxes_tscores_tclasses_tct class_boxestclass_box_scorest    nms_indextclasses((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pyt    yolo_evalœs>*
   "2      c Csdddgdddgddd    gg}tj|d
d ƒ}tj|d
d ƒ}|d dd    …f|d d    d…fd    }|d d    d…f|d dd    …f}||ddd…|d dd    …f<||ddd…|d d    d…f<|jd}gtdƒD])}|idd6dd6dd    6|^q}    gtdƒD]H}tj||    |d|    |dt||ƒd|fd
d ƒ^qP}
tj|dƒ}|d} | } |ddk} x/t|ƒD]!}||| |f}tj|dƒ}|d}| }tj|| ƒ}tj|| ƒ}tj||dƒ}|d|d}|d|d}|d|d}||||}tj    |ddƒ}xJt
|ƒD]<\}}x-tdƒD]}|||krØtj |||df|    |dƒj d ƒ}tj |||df|    |dƒj d ƒ}||j |ƒ}|||dfj d ƒ}|||dd…f|
|||||dd…f<d|
|||||df<d|
|||||d|f<PqØqØWq¿WqÞW|
S(sŸPreprocess true boxes to training input format
 
    Parameters
    ----------
    true_boxes: array, shape=(m, T, 5)
        Absolute x_min, y_min, x_max, y_max, class_code reletive to input_shape.
    input_shape: array-like, hw, multiples of 32
    anchors: array, shape=(N, 2), wh
    num_classes: integer
 
    Returns
    -------
    y_true: list of array, shape like yolo_outputs, xywh are reletive value
 
    iiiiiiiiiR:tfloat32RY.Niÿÿÿÿi ig@iþÿÿÿgRX(.i(.i(.i(.i(.i(.i(.i(tnptarrayR5RtzerosR1t expand_dimstmaximumtminimumtargmaxt    enumeratetfloortastypetindex(t
true_boxesR?R>R*Retboxes_xytboxes_whtmRft grid_shapesty_truet anchor_maxest anchor_minst
valid_masktbtwhRSRRtintersect_minstintersect_maxest intersect_whtintersect_areatbox_areat anchor_areatiout best_anchortttnR tjRn((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pytpreprocess_true_boxesÈsP*.*'' <X
 
116!cCs>tj|dƒ}|ddd…f}|ddd…f}|d}||}||}tj|dƒ}|ddd…f}|ddd…f}|d}    ||    }
||    } tj||
ƒ} tj|| ƒ} tj| | dƒ}|d
|d }|d |d }|d|d}||||}|S(sÃReturn iou tensor
 
    Parameters
    ----------
    b1: tensor, shape=(i1,...,iN, 4), xywh
    b2: tensor, shape=(j, 4), xywh
 
    Returns
    -------
    iou: tensor, shape=(i1,...,iN, j)
 
    iþÿÿÿ.Niig@igi(.i(.i(.i(.i(.i(.i(R2RxRyRz(tb1tb2tb1_xytb1_wht
b1_wh_halftb1_minstb1_maxestb2_xytb2_wht
b2_wh_halftb2_minstb2_maxesR‹RŒRRŽtb1_areatb2_areaR‘((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pytbox_iou s(
 
 
 
 
 
cs‰|d }|d‰dddgdddgddd    gg}tjtj|dƒdd!d
tjˆdƒƒ}gtdƒD]9‰tjtj|ˆƒdd!tjˆdƒƒ^q‚}d}tj|dƒd‰x‹tdƒD]}‰ˆˆd dd…f}    ˆˆd dd …f}
t|ˆ||ˆ||ƒ\} } } }tj| | gƒ‰ˆˆd d d    …f| |ˆd d d …}tjˆˆd d    d…fƒtj| ƒ}tj|    |tj    |ƒƒ}tj||gdd ƒ}d    ˆˆd d    d…fˆˆd dd…f}t
j tjˆdƒdddt ƒ}tj|    dƒ‰‡‡‡‡‡fd†}tj j‡fd†|d|gƒ\}}|jƒ}tj|d ƒ}|    tj||ƒ}|    tjd| ƒd|    tjd| ƒ|}|    tj|
|ƒ}|tj|ƒtj|ƒtj|ƒ7}qëW|tjˆtj|ƒƒS(s~Return yolo_loss tensor
 
    Parameters
    ----------
    yolo_outputs: list of tensor, the output of yolo_body
    y_true: list of array, the output of preprocess_true_boxes
    anchors: array, shape=(T, 2), wh
    num_classes: integer
    ignore_thresh: float, the iou threshold whether to ignore object confidence loss
 
    Returns
    -------
    loss: tensor, shape=(1,)
 
    iiiiiiiiii .NiÿÿÿÿRXtsizet dynamic_sizetboolcs™tjˆˆ|ddd…fˆ|ddfƒ}tˆ||ƒ}tj|ddƒ}|j|tj|ˆktj|ƒƒƒ}|d|fS(N.iiRXiÿÿÿÿi(R\R]R¥R2tmaxtwriteR9R:(R‰t ignore_maskttrue_boxR‘tbest_iou(t ignore_threshRftobject_mask_booltpred_boxR…(s//home/zzg/Opensource/keras-yolo3/yolo3/model.pyt    loop_bodybs
6-cs
|ˆkS(N((R‰R(Rƒ(s//home/zzg/Opensource/keras-yolo3/yolo3/model.pyt<lambda>hs(R2R9R5R:RRIR8tlogtswitcht
zeros_likeR\t TensorArraytTruetcontrol_flow_opst
while_looptstackRxtsquaretsum(RR>R*R®RbReR?R„tlosst object_maskttrue_class_probstpred_xytpred_whtpred_confidencetpred_class_probstxy_deltatwh_deltat    box_deltatbox_delta_scaleR«R±t_tbox_losstconfidence_losst
class_loss((R®RfRƒR¯R°R…s//home/zzg/Opensource/keras-yolo3/yolo3/model.pyt    yolo_loss7s<
 
*7L
#306(-  1('t__doc__t    functoolsRtnumpyRut
tensorflowR\tkerasRR2t keras.layersRRRRRt!keras.layers.advanced_activationsRtkeras.layers.normalizationRt keras.modelsR    tkeras.regularizersR
t yolo3.utilsR RRR"R#R%R/RIRURWRsR–R¥RÌ(((s//home/zzg/Opensource/keras-yolo3/yolo3/model.pyt<module>s2  (                 
                     &    E    *