def add_yolo_loss(net): bottom = net.tops.keys()[-1] conv = L.Convolution(net[bottom], kernel_size=1, stride=1, num_output=125, pad=0, bias_term=True, weight_filler=dict(type='xavier'), bias_filler=dict(type='constant')) net.RegionLoss = L.RegionLoss( conv, net.label, top='det_loss', num_class=20, coords=4, num=5, softmax=1, jitter=0.2, rescore=0, object_scale=5.0, noobject_scale=1.0, class_scale=1.0, coord_scale=1.0, absolute=1, thresh=0.6, random=0, biases=[1.08, 1.19, 3.42, 4.41, 6.63, 11.38, 9.42, 5.11, 16.62, 10.52])
def region_loss_layer(previous, name, params, train=False): """ create region loss layer""" fields = dict(num_class=int(params["classes"]), coords=int(params["coords"])) if "anchors" in params.keys(): fields["biases"] = int(params["anchors"]) if "jitter" in params.keys(): fields["jitter"] = float(params["jitter"]) if "num" in params.keys(): fields["num"] = int(params["num"]) if "object_scale" in params.keys(): fields["object_scale"] = int(params["object_scale"]) if "noobject_scale" in params.keys(): fields["noobject_scale"] = int(params["noobject_scale"]) if "class_scale" in params.keys(): fields["class_scale"] = int(params["class_scale"]) if "coord_scale" in params.keys(): fields["coord_scale"] = int(params["coord_scale"]) if "absolute" in params.keys(): fields["absolute"] = int(params["absolute"]) if "thresh" in params.keys(): fields["thresh"] = float(params["thresh"]) return cl.RegionLoss(previous, name=name, **fields)
def add_yolo_loss(net,out_layer=0,version='yolov2'): bottom = net.tops.keys()[-1] if version is 'yolov2' : net.conv_global = L.Convolution(net[bottom], kernel_size=1, stride=1,name='conv_global', num_output=125, pad=0, bias_term=True, weight_filler=dict(type='xavier'), bias_filler=dict(type='constant')) net.RegionLoss = L.RegionLoss(net.conv_global,net.label,num_class=20,coords=4,num=5,softmax=1,jitter=0.2,rescore=0,object_scale=5.0,noobject_scale=1.0,class_scale=1.0, coord_scale=1.0,absolute=1,thresh=0.6,random=0,biases=[1.08,1.19,3.42,4.41,6.63,11.38,9.42,5.11,16.62,10.52], include={'phase':caffe.TRAIN}) return net.conv_global,net.conv_global else : #net.conv_global1 = L.Convolution(net[bottom], kernel_size=1, stride=1,name='conv_global1', # num_output=75, pad=0, bias_term=True, weight_filler=dict(type='msra'), bias_filler=dict(type='constant')) net.Yolov3Loss1 = L.Yolov3(net[bottom],net.label,num_class=20,num=3,object_scale=5.0,noobject_scale=1.0,class_scale=1.0,side=13, coord_scale=1.0,thresh=0.6,anchors_scale=32,use_logic_gradient=False,mask=[3,4,5],biases=[10,14,23,27,37,58,81,82,135,169,344,319], include={'phase':caffe.TRAIN}) net.upsample = L.Deconvolution(net[bottom],param=dict(lr_mult=0, decay_mult=0),convolution_param=dict(kernel_size=4,stride=2,pad=1,group=75,bias_term=False,num_output=75,weight_filler=dict(type='bilinear'))) x = L.Eltwise(net.upsample, out_layer) #net.conv_global2 = L.Convolution(x, kernel_size=1, stride=1,name='conv_global2', # num_output=75, pad=0, bias_term=True, weight_filler=dict(type='msra'), bias_filler=dict(type='constant')) net.Yolov3Loss2 = L.Yolov3(x,net.label,num_class=20,num=3,object_scale=5.0,noobject_scale=1.0,class_scale=1.0,side=26, coord_scale=1.0,thresh=0.6,anchors_scale=16,use_logic_gradient=False,mask=[0,1,2],biases=[10,14,23,27,37,58,81,82,135,169,344,319], include={'phase':caffe.TRAIN}) return net[bottom],x