diff --git a/README.md b/README.md index 1434869..673a1d2 100644 --- a/README.md +++ b/README.md @@ -1 +1,25 @@ -keras +# Keras implementation of [PSPNet(caffe)](https://github.com/hszhao/PSPNet) + +Implemented Architecture of pyramid scene parsing network in Keras + +Converted trained weights needed to run the network. + +Download converted weights here: +[link:pspnet.npy](https://www.dropbox.com/s/9xebhix7dbk372d/pspnet.npy?dl=0) + +And place in directory with pspnet.py + +Memory usage:3500Mb +Calculation speed: 1.2 sec + +## Dependencies: +1. Tensorflow +2. Keras +3. numpy + + +## Usage: + +```bash +python pspnet.py +``` \ No newline at end of file diff --git a/drawImage/DrawBbox/DrawBbox.py b/drawImage/DrawBbox/DrawBbox.py new file mode 100644 index 0000000..ea4d6ea --- /dev/null +++ b/drawImage/DrawBbox/DrawBbox.py @@ -0,0 +1,99 @@ +#OpenCV module for bbox search +import numpy as np +import cv2 +from PIL import Image, ImageDraw +import math +import random +import copy +#JUST WINDOWS aka binary + +#_-------Changed box drawing mode from vertical to with angle ------_# +class Bbox: + def __init__(self): + self.bboxInfo = {} + def bubble_sort(self, items, numToReturn): + """ Implementation of bubble sort """ + for i in range(len(items)): + for j in range(len(items)-1-i): + if items[j][1] < items[j+1][1]: + items[j], items[j+1] = items[j+1], items[j] + return items[:numToReturn] + def filterBboxes(self): + for bboxObject in self.objects_to_bbox: + if self.class_ratio[bboxObject]listToDraw.__len__(): + num_to_draw = listToDraw.__len__() + + for i in range(num_to_draw): + x1 = listToDraw[i][2][0] + y1 = listToDraw[i][2][1] + x2 = listToDraw[i][2][0] + listToDraw[i][2][2] + y2 = listToDraw[i][2][1] + listToDraw[i][2][3] + clr = listToDraw[i][2][5] + box = cv2.cv.BoxPoints(((listToDraw[i][2][0],listToDraw[i][2][1]),(listToDraw[i][2][2],listToDraw[i][2][3]),listToDraw[i][2][6])) # cv2.boxPoints(rect) for OpenCV 3.x + box = np.int0(box) + cv2.drawContours(segmentedImageRGB,[box],0,clr,2) + cv2.drawContours(output_im,[box],0,clr,2) + + BboxedRawImage = Image.fromarray(output_im) + for x in range(num_to_draw): + listToDraw[x][2].pop() + listToDraw[x][2].pop() + if JSONCoords.has_key(listToDraw[x][0]): + JSONCoords[listToDraw[x][0]].append(listToDraw[x][2]) + else: + JSONCoords[listToDraw[x][0]]=[listToDraw[x][2]] + BboxedImage = Image.fromarray(segmentedImageRGB) + return BboxedImage, BboxedRawImage, JSONCoords #image + + + + + + def findBbox(self, segmentedImageRGB, maskImage, **kwargs): + objectName = kwargs['objectName'] + + maskImage = maskImage.convert("RGB") + imW,imH = segmentedImageRGB.size + open_cv_image = np.array(maskImage) + open_cv_image = cv2.cvtColor(open_cv_image, cv2.COLOR_RGB2BGR) + + imgray = cv2.cvtColor(open_cv_image,cv2.COLOR_BGR2GRAY) + ret,thresh = cv2.threshold(imgray,127,255,0) + contours, _ = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) + self.bboxInfo[objectName] = [] #[[coords,clr],[coords,clr]] + bboxClr = (int(math.floor(random.random()*255)), int(math.floor(random.random()*255)), int(math.floor(random.random()*255))) + for c in contours: + rect = cv2.minAreaRect(c) + if (rect[1][0]*rect[1][1])<500: continue + x = int(rect[0][0]) + y = int(rect[0][1]) + w = int(rect[1][0]) + h = int(rect[1][1]) + rotation = rect[2] + single_bbox_info = [x,y,w,h,w*h,bboxClr, rotation] + #Instrument to filter inner bboxes + if thresh[y][x]==0: continue + self.bboxInfo[objectName].append(single_bbox_info) diff --git a/drawImage/DrawBbox/__init__.py b/drawImage/DrawBbox/__init__.py new file mode 100644 index 0000000..62ffbd7 --- /dev/null +++ b/drawImage/DrawBbox/__init__.py @@ -0,0 +1 @@ +from DrawBbox import * \ No newline at end of file diff --git a/drawImage/__init__.py b/drawImage/__init__.py new file mode 100644 index 0000000..6203fe3 --- /dev/null +++ b/drawImage/__init__.py @@ -0,0 +1 @@ +from drawModule import * \ No newline at end of file diff --git a/drawImage/drawModule.py b/drawImage/drawModule.py new file mode 100644 index 0000000..e591ca4 --- /dev/null +++ b/drawImage/drawModule.py @@ -0,0 +1,74 @@ +from PIL import Image, ImageDraw +import scipy.ndimage +import scipy.io +import numpy as np +import time +import copy + + +class BaseDraw: + def __init__(self, color150, objectNames, img, pred_size, predicted_classes): + self.class_colors = scipy.io.loadmat(color150) + self.class_names = scipy.io.loadmat(objectNames, struct_as_record=False) + self.im = img + self.pred_size = pred_size + self.predicted_classes = copy.deepcopy(predicted_classes) + self.original_W = self.im.size[0] + self.original_H = self.im.size[1] + + self.output_W = 1920 + self.output_H = 1080 + + + def dumpArray(self, array, i): + test = array*100 + test = Image.fromarray(test.astype('uint8')) + test = test.convert("RGB") + test.save('/home/vlad/oS_AI/'+str(i)+'t.jpg', "JPEG") + + def calculateResize(self): + W_coef = float(self.original_W)/float(self.output_W) + H_coef = float(self.original_H)/float(self.output_H) + horiz_pad = 0 + vert_pad = 0 + if W_coef > H_coef: + coef = W_coef + horiz_pad = int((self.output_H - self.original_H/coef)/2) + return [coef, horiz_pad, vert_pad] + else: + coef = H_coef + vert_pad = int((self.output_W - self.original_W/coef)/2) + return [coef, horiz_pad, vert_pad] + + + def resizeToOutput(self, image, coef, h_pad, w_pad): + image = image.resize((int(self.original_W/coef), int(self.original_H/coef)), resample=Image.BILINEAR) + outputImage = Image.new("RGB",(self.output_W,self.output_H),(0,0,0)) + outputImage.paste(image,(w_pad,h_pad)) + return outputImage + + + + def drawSimpleSegment(self): + + #Drawing module + im_Width, im_Height = self.pred_size + prediction_image = Image.new("RGB", (im_Width, im_Height) ,(0,0,0)) + prediction_imageDraw = ImageDraw.Draw(prediction_image) + + #BASE all image segmentation + for i in range(im_Width): + for j in range(im_Height): + #get matrix element class(0-149) + px_Class = self.predicted_classes[j][i] + #assign color from .mat list + put_Px_Color = tuple(self.class_colors['colors'][px_Class]) + + #drawing + prediction_imageDraw.point((i,j), fill=put_Px_Color) + + #Resize to original size and save + self.coef, self.h_pad, self.w_pad = self.calculateResize() + FullHdOutImage = self.resizeToOutput(prediction_image, self.coef, self.h_pad, self.w_pad) + + return FullHdOutImage diff --git a/pspnet.py b/pspnet.py new file mode 100644 index 0000000..876bf3b --- /dev/null +++ b/pspnet.py @@ -0,0 +1,334 @@ +from keras.models import Sequential +from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D, UpSampling2D +from keras.layers import BatchNormalization, Activation, Input, Dropout, ZeroPadding2D +from keras.layers import Add, merge, concatenate, Lambda, Reshape +from keras import backend as K +import tensorflow as tf +from keras.models import Model +import numpy as np +from PIL import Image +import drawImage +import time + +def load_weights(): + w = np.load('pspnet.npy').item() + return w + +def set_weights(model, weights): + print 'weights set start' + for layer in model.layers: + if layer.name[:4] == 'conv' and layer.name[-2:] == 'bn': + print layer.name + scale = weights[layer.name]['scale'].reshape(-1) + + offset = weights[layer.name]['offset'].reshape(-1) + mean = weights[layer.name]['mean'].reshape(-1) + variance = weights[layer.name]['variance'].reshape(-1) + + model.get_layer(layer.name).set_weights([mean, variance, + scale, offset]) + + elif layer.name[:4] == 'conv' and not layer.name[-4:] == 'relu': + print layer.name + try: + weight = weights[layer.name]['weights'] + model.get_layer(layer.name).set_weights([weight]) + except Exception as err: + biases = weights[layer.name]['biases'] + model.get_layer(layer.name).set_weights([weight, biases]) + + print 'weights set finish' + return model + +def Interp_(x, size=None, zoom=None): + print(x.shape) + + old_height = int(x.shape[2]) + old_width = int(x.shape[3]) + if zoom is not None: + zoom = int(zoom) + new_height = old_height + (old_height-1) * (zoom - 1) + new_width = old_width + (old_width-1) * (old_width - 1) + elif size is not None: + new_height = size[0] + new_width = size[1] + resized = tf.image.resize_images(x, [new_height, new_width]) + return resized + + +def Interp(x, size=(60,60)): + print(x.shape) + + new_height = size[0] + new_width = size[1] + resized = tf.image.resize_images(x, [new_height, new_width]) + print(resized.shape) + + return resized + +def Interp_zoom(x, zoom=8): + print(x.shape) + old_height = int(x.shape[1]) + old_width = int(x.shape[2]) + new_height = old_height + (old_height-1) * (zoom - 1) + new_width = old_width + (old_width-1) * (zoom - 1) + resized = tf.image.resize_images(x, [new_height, new_width]) + return resized + +#NOT USED--- +def add_common_layers(prev): + prev = BatchNormalization(momentum=0.95)(prev) + prev = Activation('relu')(prev) + return prev + +def Conv(prev_layer, level, kernel=(1,1), strides=(1,1)): + layer = Conv2D(64 * level, (1,1), strides=(1,1))(prev_layer) + return layer +#----------- + + +def residual_conv(prev, level, + pad=1, lvl=1, sub_lvl=1, modify_stride=False): + + lvl = str(lvl) + sub_lvl = str(sub_lvl) + names = ["conv"+lvl+"_"+ sub_lvl +"_1x1_reduce" , + "conv"+lvl+"_"+ sub_lvl +"_1x1_reduce_bn", + "conv"+lvl+"_"+ sub_lvl +"_3x3", + "conv"+lvl+"_"+ sub_lvl +"_3x3_bn", + "conv"+lvl+"_"+ sub_lvl +"_1x1_increase", + "conv"+lvl+"_"+ sub_lvl +"_1x1_increase_bn"] + if modify_stride == False: + prev = Conv2D(64 * level, (1,1), strides=(1,1), use_bias=False, + name=names[0])(prev) + elif modify_stride == True: + prev = Conv2D(64 * level, (1,1), strides=(2,2), use_bias=False, + name=names[0])(prev) + + prev = BatchNormalization(momentum=0.95, name=names[1])(prev) + prev = Activation('relu')(prev) + + prev = ZeroPadding2D(padding=(pad,pad))(prev) + prev = Conv2D(64 * level, (3,3), + strides=(1,1), dilation_rate=pad, use_bias=False, + name=names[2])(prev) + + + prev = BatchNormalization(momentum=0.95, name=names[3])(prev) + prev = Activation('relu')(prev) + prev = Conv2D(256 * level, (1,1), strides=(1,1), use_bias=False, + name=names[4])(prev) + prev = BatchNormalization(momentum=0.95, name=names[5])(prev) + return prev + + +def short_convolution_branch(prev, level, + lvl=1, sub_lvl=1, modify_stride=False): + lvl = str(lvl) + sub_lvl = str(sub_lvl) + names = ["conv"+lvl+"_"+ sub_lvl +"_1x1_proj", + "conv"+lvl+"_"+ sub_lvl +"_1x1_proj_bn" + ] + + if modify_stride == False: + prev = Conv2D(256 * level ,(1,1), strides=(1,1), use_bias=False, + name=names[0])(prev) + elif modify_stride == True: + prev = Conv2D(256 * level, (1,1), strides=(2,2), use_bias=False, + name=names[0])(prev) + + prev = BatchNormalization(momentum=0.95, name=names[1])(prev) + return prev + + +def empty_branch(prev): + return prev + + +def residual_short(prev_layer, level, pad=1, lvl=1, sub_lvl=1, modify_stride=False): + + block_1 = residual_conv(prev_layer, level, + pad=pad, lvl=lvl, sub_lvl=sub_lvl, + modify_stride=modify_stride) + + block_2 = short_convolution_branch(prev_layer, level, + lvl=lvl, sub_lvl=sub_lvl, + modify_stride=modify_stride) + + return merge([block_1, block_2], mode='sum') + + +def residual_empty(prev_layer, level, pad=1, lvl=1, sub_lvl=1): + prev_layer = Activation('relu')(prev_layer) + + block_1 = residual_conv(prev_layer, level, + pad=pad, lvl=lvl, sub_lvl=sub_lvl) + block_2 = empty_branch(prev_layer) + return merge([block_1, block_2], mode='sum') + +def interp_block(prev_layer, level, str_lvl=1): + + str_lvl = str(str_lvl) + + names = [ + "conv5_3_pool"+str_lvl+"_conv", + "conv5_3_pool"+str_lvl+"_conv_bn" + ] + + kernel = (10*level, 10*level) + strides = (10*level, 10*level) + prev_layer = AveragePooling2D(kernel,strides=strides)(prev_layer) + prev_layer = Conv2D(512, (1,1), strides=(1,1), use_bias=False, name=names[0])(prev_layer) + prev_layer = BatchNormalization(momentum=0.95, name=names[1])(prev_layer) + prev_layer = Activation('relu')(prev_layer) + prev_layer = Lambda(Interp)(prev_layer) + return prev_layer + + +if __name__ == "__main__": + + #Names for the first layers of model + names = ["conv1_1_3x3_s2", + "conv1_1_3x3_s2_bn", + "conv1_2_3x3", + "conv1_2_3x3_bn", + "conv1_3_3x3", + "conv1_3_3x3_bn"] + + #---Short branch(only start of network) + + inp = Input((473,473, 3)) + + cnv1 = ZeroPadding2D(padding=(1,1))(inp) + cnv1 = Conv2D(64, (3, 3), strides=(2, 2), use_bias=False, name=names[0])(cnv1) # "conv1_1_3x3_s2" + + bn1 = BatchNormalization(momentum=0.95, name=names[1])(cnv1) # "conv1_1_3x3_s2/bn" + relu1 = Activation('relu')(bn1) #"conv1_1_3x3_s2/relu" + + cnv1 = ZeroPadding2D(padding=(1,1))(relu1) + cnv1 = Conv2D(64, (3, 3), strides=(1, 1), use_bias=False, name=names[2])(cnv1) #"conv1_2_3x3" + + bn1 = BatchNormalization(momentum=0.95, name=names[3])(cnv1) #"conv1_2_3x3/bn" + relu1 = Activation('relu')(bn1) #"conv1_2_3x3/relu" + + cnv1 = ZeroPadding2D(padding=(1,1))(relu1) + cnv1 = Conv2D(128, (3, 3), strides=(1, 1), use_bias=False, name=names[4])(cnv1) #"conv1_3_3x3" + + bn1 = BatchNormalization(momentum=0.95, name=names[5])(cnv1) #"conv1_3_3x3/bn" + relu1 = Activation('relu')(bn1) #"conv1_3_3x3/relu" + + res = ZeroPadding2D(padding=(1,1))(relu1) + res = MaxPooling2D(pool_size=(3,3), strides=(2,2))(res) #"pool1_3x3_s2" + + + #---Residual layers(body of network) + + """ + Modify_stride --Used only once in first 3_1 convolutions block. + changes stride of first convolution from 1 -> 2 + """ + + #2_1- 2_3 + res = residual_short(res, 1, pad=1, lvl=2, sub_lvl=1) + for i in range(2): + res = residual_empty(res, 1, pad=1, lvl=2, sub_lvl=i+2) + + #3_1 - 3_3 + res = residual_short(res, 2, pad=1, lvl=3, sub_lvl=1, modify_stride=True) + for i in range(2): + res = residual_empty(res, 2, pad=1, lvl=3, sub_lvl=i+2) + + #4_1 - 4_6 + res = residual_short(res, 4, pad=2, lvl=4, sub_lvl=1) + for i in range(5): + res = residual_empty(res, 4, pad=2, lvl=4, sub_lvl=i+2) + + #5_1 - 5_3 + res = residual_short(res, 8, pad=4, lvl=5, sub_lvl=1) + for i in range(2): + res = residual_empty(res, 8, pad=4, lvl=5, sub_lvl=i+2) + + #---Head of network + #---PSPNet concat layers with Interpolation + + res = Activation('relu')(res) + interp_block1 = interp_block(res, 6, str_lvl=1) + interp_block2 = interp_block(res, 3, str_lvl=2) + interp_block3 = interp_block(res, 2, str_lvl=3) + interp_block4 = interp_block(res, 1, str_lvl=6) + + #concat all these layers by 4th axis(3+1). resulted shape=(1,60,60,4096) + res = concatenate([res, + interp_block1, + interp_block2, + interp_block3, + interp_block4], axis=3) + + res = ZeroPadding2D(padding=(1,1))(res) + res = Conv2D(512, (3, 3), strides=(1, 1), use_bias=False, name="conv5_4")(res) + + res = BatchNormalization(momentum=0.95, name="conv5_4_bn")(res) + res = Activation('relu')(res) + #res = Dropout(0.1)(res) + res = Conv2D(150, (1, 1), strides=(1, 1), name="conv6")(res) + res = Lambda(Interp_zoom)(res) + + + #Use softmax layer for pixelwise prediction + curr_width, curr_height, curr_channels = res._shape_as_list()[1:] + + reshape = Reshape((curr_width*curr_height, curr_channels))(res) + activation = Activation('softmax')(reshape) + reshape = Reshape((curr_width, curr_height, curr_channels))(activation) + + #End of model + model = Model(inputs=inp, outputs=reshape) + + + + + + sess = tf.Session() + K.set_session(sess) + + + + with sess.as_default(): + #Load weights into variable + npy_weights = load_weights() + #Set weights to each laye by name + model = set_weights(model, npy_weights) + + #Load image, resize and paste into 4D tensor + image = Image.open('test.jpg') + data_im = np.asarray(image) + data = np.zeros([1,473,473,3]) + data_im = np.resize(data_im, [473, 473, 3]) + + data[0] = data_im + + #predict + + startForward = time.time() + pred = model.predict(data, batch_size=1, verbose=0) + finishForward = (time.time() - startForward) + + pred = np.transpose(pred[0], (2, 1, 0)) + predicted_classes = np.argmax(pred, axis=0) + + + proto = 'utils/model/pspnet.prototxt' + weights = 'utils/model/pspnet.caffemodel' + colors = 'utils/colorization/color150.mat' + objects = 'utils/colorization/objectName150.mat' + + + im_Width = predicted_classes.shape[1] + im_Height = predicted_classes.shape[0] + draw = drawImage.BaseDraw(colors, objects, + image, (im_Width, im_Height), + predicted_classes) + simpleSegmentImage = draw.drawSimpleSegment(); + simpleSegmentImage.save('out.jpg',"JPEG") + + diff --git a/test.jpg b/test.jpg new file mode 100644 index 0000000..36ce6d5 Binary files /dev/null and b/test.jpg differ diff --git a/utils/color150/airplane.jpg b/utils/color150/airplane.jpg new file mode 100644 index 0000000..25e2951 Binary files /dev/null and b/utils/color150/airplane.jpg differ diff --git a/utils/color150/animal.jpg b/utils/color150/animal.jpg new file mode 100644 index 0000000..d23e3f4 Binary files /dev/null and b/utils/color150/animal.jpg differ diff --git a/utils/color150/apparel.jpg b/utils/color150/apparel.jpg new file mode 100644 index 0000000..fce4181 Binary files /dev/null and b/utils/color150/apparel.jpg differ diff --git a/utils/color150/arcade machine.jpg b/utils/color150/arcade machine.jpg new file mode 100644 index 0000000..b19b974 Binary files /dev/null and b/utils/color150/arcade machine.jpg differ diff --git a/utils/color150/armchair.jpg b/utils/color150/armchair.jpg new file mode 100644 index 0000000..247b342 Binary files /dev/null and b/utils/color150/armchair.jpg differ diff --git a/utils/color150/ashcan.jpg b/utils/color150/ashcan.jpg new file mode 100644 index 0000000..e4e3f59 Binary files /dev/null and b/utils/color150/ashcan.jpg differ diff --git a/utils/color150/awning.jpg b/utils/color150/awning.jpg new file mode 100644 index 0000000..81cbbc8 Binary files /dev/null and b/utils/color150/awning.jpg differ diff --git a/utils/color150/bag.jpg b/utils/color150/bag.jpg new file mode 100644 index 0000000..8716640 Binary files /dev/null and b/utils/color150/bag.jpg differ diff --git a/utils/color150/ball.jpg b/utils/color150/ball.jpg new file mode 100644 index 0000000..a32a55e Binary files /dev/null and b/utils/color150/ball.jpg differ diff --git a/utils/color150/bannister.jpg b/utils/color150/bannister.jpg new file mode 100644 index 0000000..3ab3d6d Binary files /dev/null and b/utils/color150/bannister.jpg differ diff --git a/utils/color150/bar.jpg b/utils/color150/bar.jpg new file mode 100644 index 0000000..447d368 Binary files /dev/null and b/utils/color150/bar.jpg differ diff --git a/utils/color150/barrel.jpg b/utils/color150/barrel.jpg new file mode 100644 index 0000000..b74b5fd Binary files /dev/null and b/utils/color150/barrel.jpg differ diff --git a/utils/color150/base.jpg b/utils/color150/base.jpg new file mode 100644 index 0000000..94dbc69 Binary files /dev/null and b/utils/color150/base.jpg differ diff --git a/utils/color150/basket.jpg b/utils/color150/basket.jpg new file mode 100644 index 0000000..ab9eec4 Binary files /dev/null and b/utils/color150/basket.jpg differ diff --git a/utils/color150/bathtub.jpg b/utils/color150/bathtub.jpg new file mode 100644 index 0000000..21c5cb2 Binary files /dev/null and b/utils/color150/bathtub.jpg differ diff --git a/utils/color150/bed.jpg b/utils/color150/bed.jpg new file mode 100644 index 0000000..e209eb2 Binary files /dev/null and b/utils/color150/bed.jpg differ diff --git a/utils/color150/bench.jpg b/utils/color150/bench.jpg new file mode 100644 index 0000000..d9893ce Binary files /dev/null and b/utils/color150/bench.jpg differ diff --git a/utils/color150/bicycle.jpg b/utils/color150/bicycle.jpg new file mode 100644 index 0000000..beeb613 Binary files /dev/null and b/utils/color150/bicycle.jpg differ diff --git a/utils/color150/bike.jpg b/utils/color150/bike.jpg new file mode 100644 index 0000000..82fb32d Binary files /dev/null and b/utils/color150/bike.jpg differ diff --git a/utils/color150/blanket.jpg b/utils/color150/blanket.jpg new file mode 100644 index 0000000..889aa59 Binary files /dev/null and b/utils/color150/blanket.jpg differ diff --git a/utils/color150/blind.jpg b/utils/color150/blind.jpg new file mode 100644 index 0000000..a10d5a4 Binary files /dev/null and b/utils/color150/blind.jpg differ diff --git a/utils/color150/boat.jpg b/utils/color150/boat.jpg new file mode 100644 index 0000000..2e70556 Binary files /dev/null and b/utils/color150/boat.jpg differ diff --git a/utils/color150/book.jpg b/utils/color150/book.jpg new file mode 100644 index 0000000..f95b1a5 Binary files /dev/null and b/utils/color150/book.jpg differ diff --git a/utils/color150/bookcase.jpg b/utils/color150/bookcase.jpg new file mode 100644 index 0000000..c94cc80 Binary files /dev/null and b/utils/color150/bookcase.jpg differ diff --git a/utils/color150/booth.jpg b/utils/color150/booth.jpg new file mode 100644 index 0000000..52c3910 Binary files /dev/null and b/utils/color150/booth.jpg differ diff --git a/utils/color150/bottle.jpg b/utils/color150/bottle.jpg new file mode 100644 index 0000000..0e5ca5d Binary files /dev/null and b/utils/color150/bottle.jpg differ diff --git a/utils/color150/box.jpg b/utils/color150/box.jpg new file mode 100644 index 0000000..b966994 Binary files /dev/null and b/utils/color150/box.jpg differ diff --git a/utils/color150/bridge.jpg b/utils/color150/bridge.jpg new file mode 100644 index 0000000..546063e Binary files /dev/null and b/utils/color150/bridge.jpg differ diff --git a/utils/color150/buffet.jpg b/utils/color150/buffet.jpg new file mode 100644 index 0000000..d3bd77e Binary files /dev/null and b/utils/color150/buffet.jpg differ diff --git a/utils/color150/building.jpg b/utils/color150/building.jpg new file mode 100644 index 0000000..b67e8bd Binary files /dev/null and b/utils/color150/building.jpg differ diff --git a/utils/color150/bulletin board.jpg b/utils/color150/bulletin board.jpg new file mode 100644 index 0000000..3ca7a99 Binary files /dev/null and b/utils/color150/bulletin board.jpg differ diff --git a/utils/color150/bus.jpg b/utils/color150/bus.jpg new file mode 100644 index 0000000..fd49653 Binary files /dev/null and b/utils/color150/bus.jpg differ diff --git a/utils/color150/cabinet.jpg b/utils/color150/cabinet.jpg new file mode 100644 index 0000000..839e5a6 Binary files /dev/null and b/utils/color150/cabinet.jpg differ diff --git a/utils/color150/canopy.jpg b/utils/color150/canopy.jpg new file mode 100644 index 0000000..c73ea2e Binary files /dev/null and b/utils/color150/canopy.jpg differ diff --git a/utils/color150/car.jpg b/utils/color150/car.jpg new file mode 100644 index 0000000..1de5d60 Binary files /dev/null and b/utils/color150/car.jpg differ diff --git a/utils/color150/case.jpg b/utils/color150/case.jpg new file mode 100644 index 0000000..5b1af64 Binary files /dev/null and b/utils/color150/case.jpg differ diff --git a/utils/color150/ceiling.jpg b/utils/color150/ceiling.jpg new file mode 100644 index 0000000..d16bf74 Binary files /dev/null and b/utils/color150/ceiling.jpg differ diff --git a/utils/color150/chair.jpg b/utils/color150/chair.jpg new file mode 100644 index 0000000..2fa7415 Binary files /dev/null and b/utils/color150/chair.jpg differ diff --git a/utils/color150/chandelier.jpg b/utils/color150/chandelier.jpg new file mode 100644 index 0000000..1479522 Binary files /dev/null and b/utils/color150/chandelier.jpg differ diff --git a/utils/color150/chest of drawers.jpg b/utils/color150/chest of drawers.jpg new file mode 100644 index 0000000..5ce551a Binary files /dev/null and b/utils/color150/chest of drawers.jpg differ diff --git a/utils/color150/clock.jpg b/utils/color150/clock.jpg new file mode 100644 index 0000000..f4097f3 Binary files /dev/null and b/utils/color150/clock.jpg differ diff --git a/utils/color150/coffee table.jpg b/utils/color150/coffee table.jpg new file mode 100644 index 0000000..7e59e41 Binary files /dev/null and b/utils/color150/coffee table.jpg differ diff --git a/utils/color150/column.jpg b/utils/color150/column.jpg new file mode 100644 index 0000000..11d47a3 Binary files /dev/null and b/utils/color150/column.jpg differ diff --git a/utils/color150/computer.jpg b/utils/color150/computer.jpg new file mode 100644 index 0000000..5c0d07c Binary files /dev/null and b/utils/color150/computer.jpg differ diff --git a/utils/color150/conveyer belt.jpg b/utils/color150/conveyer belt.jpg new file mode 100644 index 0000000..a29b310 Binary files /dev/null and b/utils/color150/conveyer belt.jpg differ diff --git a/utils/color150/counter.jpg b/utils/color150/counter.jpg new file mode 100644 index 0000000..f4bb9ae Binary files /dev/null and b/utils/color150/counter.jpg differ diff --git a/utils/color150/countertop.jpg b/utils/color150/countertop.jpg new file mode 100644 index 0000000..c8380f0 Binary files /dev/null and b/utils/color150/countertop.jpg differ diff --git a/utils/color150/cradle.jpg b/utils/color150/cradle.jpg new file mode 100644 index 0000000..f5759b8 Binary files /dev/null and b/utils/color150/cradle.jpg differ diff --git a/utils/color150/crt screen.jpg b/utils/color150/crt screen.jpg new file mode 100644 index 0000000..3d040dd Binary files /dev/null and b/utils/color150/crt screen.jpg differ diff --git a/utils/color150/curtain.jpg b/utils/color150/curtain.jpg new file mode 100644 index 0000000..a20d792 Binary files /dev/null and b/utils/color150/curtain.jpg differ diff --git a/utils/color150/cushion.jpg b/utils/color150/cushion.jpg new file mode 100644 index 0000000..1fc7b5c Binary files /dev/null and b/utils/color150/cushion.jpg differ diff --git a/utils/color150/desk.jpg b/utils/color150/desk.jpg new file mode 100644 index 0000000..9c6ee55 Binary files /dev/null and b/utils/color150/desk.jpg differ diff --git a/utils/color150/dirt track.jpg b/utils/color150/dirt track.jpg new file mode 100644 index 0000000..1bbe968 Binary files /dev/null and b/utils/color150/dirt track.jpg differ diff --git a/utils/color150/dishwasher.jpg b/utils/color150/dishwasher.jpg new file mode 100644 index 0000000..7313e2f Binary files /dev/null and b/utils/color150/dishwasher.jpg differ diff --git a/utils/color150/door.jpg b/utils/color150/door.jpg new file mode 100644 index 0000000..3f03471 Binary files /dev/null and b/utils/color150/door.jpg differ diff --git a/utils/color150/earth.jpg b/utils/color150/earth.jpg new file mode 100644 index 0000000..7830f12 Binary files /dev/null and b/utils/color150/earth.jpg differ diff --git a/utils/color150/escalator.jpg b/utils/color150/escalator.jpg new file mode 100644 index 0000000..85010cd Binary files /dev/null and b/utils/color150/escalator.jpg differ diff --git a/utils/color150/fan.jpg b/utils/color150/fan.jpg new file mode 100644 index 0000000..6dc3be3 Binary files /dev/null and b/utils/color150/fan.jpg differ diff --git a/utils/color150/fence.jpg b/utils/color150/fence.jpg new file mode 100644 index 0000000..e7b6b73 Binary files /dev/null and b/utils/color150/fence.jpg differ diff --git a/utils/color150/field.jpg b/utils/color150/field.jpg new file mode 100644 index 0000000..058df3d Binary files /dev/null and b/utils/color150/field.jpg differ diff --git a/utils/color150/fireplace.jpg b/utils/color150/fireplace.jpg new file mode 100644 index 0000000..6f6a1d8 Binary files /dev/null and b/utils/color150/fireplace.jpg differ diff --git a/utils/color150/flag.jpg b/utils/color150/flag.jpg new file mode 100644 index 0000000..27ff1dc Binary files /dev/null and b/utils/color150/flag.jpg differ diff --git a/utils/color150/floor.jpg b/utils/color150/floor.jpg new file mode 100644 index 0000000..34bedde Binary files /dev/null and b/utils/color150/floor.jpg differ diff --git a/utils/color150/flower.jpg b/utils/color150/flower.jpg new file mode 100644 index 0000000..7a4d7ee Binary files /dev/null and b/utils/color150/flower.jpg differ diff --git a/utils/color150/food.jpg b/utils/color150/food.jpg new file mode 100644 index 0000000..ec7c014 Binary files /dev/null and b/utils/color150/food.jpg differ diff --git a/utils/color150/fountain.jpg b/utils/color150/fountain.jpg new file mode 100644 index 0000000..677e1e8 Binary files /dev/null and b/utils/color150/fountain.jpg differ diff --git a/utils/color150/furniture.jpg b/utils/color150/furniture.jpg new file mode 100644 index 0000000..1848dd9 Binary files /dev/null and b/utils/color150/furniture.jpg differ diff --git a/utils/color150/glass.jpg b/utils/color150/glass.jpg new file mode 100644 index 0000000..5bf79b1 Binary files /dev/null and b/utils/color150/glass.jpg differ diff --git a/utils/color150/grandstand.jpg b/utils/color150/grandstand.jpg new file mode 100644 index 0000000..59f242f Binary files /dev/null and b/utils/color150/grandstand.jpg differ diff --git a/utils/color150/grass.jpg b/utils/color150/grass.jpg new file mode 100644 index 0000000..5ffdbfb Binary files /dev/null and b/utils/color150/grass.jpg differ diff --git a/utils/color150/hill.jpg b/utils/color150/hill.jpg new file mode 100644 index 0000000..cb52aca Binary files /dev/null and b/utils/color150/hill.jpg differ diff --git a/utils/color150/hood.jpg b/utils/color150/hood.jpg new file mode 100644 index 0000000..0ef4011 Binary files /dev/null and b/utils/color150/hood.jpg differ diff --git a/utils/color150/house.jpg b/utils/color150/house.jpg new file mode 100644 index 0000000..bdcfa66 Binary files /dev/null and b/utils/color150/house.jpg differ diff --git a/utils/color150/houseware.jpg b/utils/color150/houseware.jpg new file mode 100644 index 0000000..7dfab2c Binary files /dev/null and b/utils/color150/houseware.jpg differ diff --git a/utils/color150/hovel.jpg b/utils/color150/hovel.jpg new file mode 100644 index 0000000..f4eb5a6 Binary files /dev/null and b/utils/color150/hovel.jpg differ diff --git a/utils/color150/kitchen island.jpg b/utils/color150/kitchen island.jpg new file mode 100644 index 0000000..d0a8016 Binary files /dev/null and b/utils/color150/kitchen island.jpg differ diff --git a/utils/color150/lake.jpg b/utils/color150/lake.jpg new file mode 100644 index 0000000..5813922 Binary files /dev/null and b/utils/color150/lake.jpg differ diff --git a/utils/color150/lamp.jpg b/utils/color150/lamp.jpg new file mode 100644 index 0000000..953c8e9 Binary files /dev/null and b/utils/color150/lamp.jpg differ diff --git a/utils/color150/land.jpg b/utils/color150/land.jpg new file mode 100644 index 0000000..f32c7ba Binary files /dev/null and b/utils/color150/land.jpg differ diff --git a/utils/color150/light.jpg b/utils/color150/light.jpg new file mode 100644 index 0000000..882c7b8 Binary files /dev/null and b/utils/color150/light.jpg differ diff --git a/utils/color150/microwave.jpg b/utils/color150/microwave.jpg new file mode 100644 index 0000000..e9aa2c0 Binary files /dev/null and b/utils/color150/microwave.jpg differ diff --git a/utils/color150/minibike.jpg b/utils/color150/minibike.jpg new file mode 100644 index 0000000..9fc2418 Binary files /dev/null and b/utils/color150/minibike.jpg differ diff --git a/utils/color150/mirror.jpg b/utils/color150/mirror.jpg new file mode 100644 index 0000000..2c6ec33 Binary files /dev/null and b/utils/color150/mirror.jpg differ diff --git a/utils/color150/monitor.jpg b/utils/color150/monitor.jpg new file mode 100644 index 0000000..2f3f4ce Binary files /dev/null and b/utils/color150/monitor.jpg differ diff --git a/utils/color150/mountain.jpg b/utils/color150/mountain.jpg new file mode 100644 index 0000000..6b0f4f5 Binary files /dev/null and b/utils/color150/mountain.jpg differ diff --git a/utils/color150/ottoman.jpg b/utils/color150/ottoman.jpg new file mode 100644 index 0000000..6b0cb5a Binary files /dev/null and b/utils/color150/ottoman.jpg differ diff --git a/utils/color150/oven.jpg b/utils/color150/oven.jpg new file mode 100644 index 0000000..64e11aa Binary files /dev/null and b/utils/color150/oven.jpg differ diff --git a/utils/color150/painting.jpg b/utils/color150/painting.jpg new file mode 100644 index 0000000..6ce52a8 Binary files /dev/null and b/utils/color150/painting.jpg differ diff --git a/utils/color150/palm.jpg b/utils/color150/palm.jpg new file mode 100644 index 0000000..d275a5c Binary files /dev/null and b/utils/color150/palm.jpg differ diff --git a/utils/color150/path.jpg b/utils/color150/path.jpg new file mode 100644 index 0000000..9dec532 Binary files /dev/null and b/utils/color150/path.jpg differ diff --git a/utils/color150/person.jpg b/utils/color150/person.jpg new file mode 100644 index 0000000..5304c0d Binary files /dev/null and b/utils/color150/person.jpg differ diff --git a/utils/color150/pier.jpg b/utils/color150/pier.jpg new file mode 100644 index 0000000..69f0046 Binary files /dev/null and b/utils/color150/pier.jpg differ diff --git a/utils/color150/pillow.jpg b/utils/color150/pillow.jpg new file mode 100644 index 0000000..e4aa67d Binary files /dev/null and b/utils/color150/pillow.jpg differ diff --git a/utils/color150/plant.jpg b/utils/color150/plant.jpg new file mode 100644 index 0000000..32e53f8 Binary files /dev/null and b/utils/color150/plant.jpg differ diff --git a/utils/color150/plate.jpg b/utils/color150/plate.jpg new file mode 100644 index 0000000..c0e6fd9 Binary files /dev/null and b/utils/color150/plate.jpg differ diff --git a/utils/color150/plaything.jpg b/utils/color150/plaything.jpg new file mode 100644 index 0000000..ef66e15 Binary files /dev/null and b/utils/color150/plaything.jpg differ diff --git a/utils/color150/pole.jpg b/utils/color150/pole.jpg new file mode 100644 index 0000000..abf7dc3 Binary files /dev/null and b/utils/color150/pole.jpg differ diff --git a/utils/color150/pool table.jpg b/utils/color150/pool table.jpg new file mode 100644 index 0000000..e36d642 Binary files /dev/null and b/utils/color150/pool table.jpg differ diff --git a/utils/color150/poster.jpg b/utils/color150/poster.jpg new file mode 100644 index 0000000..6a80e2d Binary files /dev/null and b/utils/color150/poster.jpg differ diff --git a/utils/color150/pot.jpg b/utils/color150/pot.jpg new file mode 100644 index 0000000..55063fd Binary files /dev/null and b/utils/color150/pot.jpg differ diff --git a/utils/color150/radiator.jpg b/utils/color150/radiator.jpg new file mode 100644 index 0000000..e48785b Binary files /dev/null and b/utils/color150/radiator.jpg differ diff --git a/utils/color150/railing.jpg b/utils/color150/railing.jpg new file mode 100644 index 0000000..cba249a Binary files /dev/null and b/utils/color150/railing.jpg differ diff --git a/utils/color150/refrigerator.jpg b/utils/color150/refrigerator.jpg new file mode 100644 index 0000000..8c25c6f Binary files /dev/null and b/utils/color150/refrigerator.jpg differ diff --git a/utils/color150/river.jpg b/utils/color150/river.jpg new file mode 100644 index 0000000..59e5510 Binary files /dev/null and b/utils/color150/river.jpg differ diff --git a/utils/color150/road.jpg b/utils/color150/road.jpg new file mode 100644 index 0000000..ce7cefc Binary files /dev/null and b/utils/color150/road.jpg differ diff --git a/utils/color150/rock.jpg b/utils/color150/rock.jpg new file mode 100644 index 0000000..a523849 Binary files /dev/null and b/utils/color150/rock.jpg differ diff --git a/utils/color150/rug.jpg b/utils/color150/rug.jpg new file mode 100644 index 0000000..6c4b142 Binary files /dev/null and b/utils/color150/rug.jpg differ diff --git a/utils/color150/runway.jpg b/utils/color150/runway.jpg new file mode 100644 index 0000000..1630175 Binary files /dev/null and b/utils/color150/runway.jpg differ diff --git a/utils/color150/sand.jpg b/utils/color150/sand.jpg new file mode 100644 index 0000000..56968dd Binary files /dev/null and b/utils/color150/sand.jpg differ diff --git a/utils/color150/sconce.jpg b/utils/color150/sconce.jpg new file mode 100644 index 0000000..ef5f1ad Binary files /dev/null and b/utils/color150/sconce.jpg differ diff --git a/utils/color150/screen door.jpg b/utils/color150/screen door.jpg new file mode 100644 index 0000000..932b1f4 Binary files /dev/null and b/utils/color150/screen door.jpg differ diff --git a/utils/color150/screen.jpg b/utils/color150/screen.jpg new file mode 100644 index 0000000..4f2cfa6 Binary files /dev/null and b/utils/color150/screen.jpg differ diff --git a/utils/color150/sculpture.jpg b/utils/color150/sculpture.jpg new file mode 100644 index 0000000..5514b09 Binary files /dev/null and b/utils/color150/sculpture.jpg differ diff --git a/utils/color150/sea.jpg b/utils/color150/sea.jpg new file mode 100644 index 0000000..59073aa Binary files /dev/null and b/utils/color150/sea.jpg differ diff --git a/utils/color150/seat.jpg b/utils/color150/seat.jpg new file mode 100644 index 0000000..44a392a Binary files /dev/null and b/utils/color150/seat.jpg differ diff --git a/utils/color150/shelf.jpg b/utils/color150/shelf.jpg new file mode 100644 index 0000000..5ba6ff1 Binary files /dev/null and b/utils/color150/shelf.jpg differ diff --git a/utils/color150/ship.jpg b/utils/color150/ship.jpg new file mode 100644 index 0000000..9af7cc3 Binary files /dev/null and b/utils/color150/ship.jpg differ diff --git a/utils/color150/shower.jpg b/utils/color150/shower.jpg new file mode 100644 index 0000000..bc5b912 Binary files /dev/null and b/utils/color150/shower.jpg differ diff --git a/utils/color150/sidewalk.jpg b/utils/color150/sidewalk.jpg new file mode 100644 index 0000000..29bacee Binary files /dev/null and b/utils/color150/sidewalk.jpg differ diff --git a/utils/color150/signboard.jpg b/utils/color150/signboard.jpg new file mode 100644 index 0000000..a1eed2b Binary files /dev/null and b/utils/color150/signboard.jpg differ diff --git a/utils/color150/sink.jpg b/utils/color150/sink.jpg new file mode 100644 index 0000000..62a0d04 Binary files /dev/null and b/utils/color150/sink.jpg differ diff --git a/utils/color150/sky.jpg b/utils/color150/sky.jpg new file mode 100644 index 0000000..64fdffb Binary files /dev/null and b/utils/color150/sky.jpg differ diff --git a/utils/color150/skyscraper.jpg b/utils/color150/skyscraper.jpg new file mode 100644 index 0000000..b23c19b Binary files /dev/null and b/utils/color150/skyscraper.jpg differ diff --git a/utils/color150/sofa.jpg b/utils/color150/sofa.jpg new file mode 100644 index 0000000..76faa56 Binary files /dev/null and b/utils/color150/sofa.jpg differ diff --git a/utils/color150/stage.jpg b/utils/color150/stage.jpg new file mode 100644 index 0000000..c1628b6 Binary files /dev/null and b/utils/color150/stage.jpg differ diff --git a/utils/color150/stairs.jpg b/utils/color150/stairs.jpg new file mode 100644 index 0000000..d952af9 Binary files /dev/null and b/utils/color150/stairs.jpg differ diff --git a/utils/color150/stairway.jpg b/utils/color150/stairway.jpg new file mode 100644 index 0000000..3ada3d1 Binary files /dev/null and b/utils/color150/stairway.jpg differ diff --git a/utils/color150/step.jpg b/utils/color150/step.jpg new file mode 100644 index 0000000..9afd2a3 Binary files /dev/null and b/utils/color150/step.jpg differ diff --git a/utils/color150/stool.jpg b/utils/color150/stool.jpg new file mode 100644 index 0000000..fa90951 Binary files /dev/null and b/utils/color150/stool.jpg differ diff --git a/utils/color150/stove.jpg b/utils/color150/stove.jpg new file mode 100644 index 0000000..ad298d3 Binary files /dev/null and b/utils/color150/stove.jpg differ diff --git a/utils/color150/streetlight.jpg b/utils/color150/streetlight.jpg new file mode 100644 index 0000000..6e019ab Binary files /dev/null and b/utils/color150/streetlight.jpg differ diff --git a/utils/color150/swimming pool.jpg b/utils/color150/swimming pool.jpg new file mode 100644 index 0000000..524245d Binary files /dev/null and b/utils/color150/swimming pool.jpg differ diff --git a/utils/color150/swivel chair.jpg b/utils/color150/swivel chair.jpg new file mode 100644 index 0000000..ca60e74 Binary files /dev/null and b/utils/color150/swivel chair.jpg differ diff --git a/utils/color150/table.jpg b/utils/color150/table.jpg new file mode 100644 index 0000000..5e6a0b7 Binary files /dev/null and b/utils/color150/table.jpg differ diff --git a/utils/color150/tank.jpg b/utils/color150/tank.jpg new file mode 100644 index 0000000..7deaabd Binary files /dev/null and b/utils/color150/tank.jpg differ diff --git a/utils/color150/television receiver.jpg b/utils/color150/television receiver.jpg new file mode 100644 index 0000000..5123240 Binary files /dev/null and b/utils/color150/television receiver.jpg differ diff --git a/utils/color150/tent.jpg b/utils/color150/tent.jpg new file mode 100644 index 0000000..843aef0 Binary files /dev/null and b/utils/color150/tent.jpg differ diff --git a/utils/color150/toilet.jpg b/utils/color150/toilet.jpg new file mode 100644 index 0000000..d221d6f Binary files /dev/null and b/utils/color150/toilet.jpg differ diff --git a/utils/color150/towel.jpg b/utils/color150/towel.jpg new file mode 100644 index 0000000..23d7a23 Binary files /dev/null and b/utils/color150/towel.jpg differ diff --git a/utils/color150/tower.jpg b/utils/color150/tower.jpg new file mode 100644 index 0000000..f4646b2 Binary files /dev/null and b/utils/color150/tower.jpg differ diff --git a/utils/color150/trade name.jpg b/utils/color150/trade name.jpg new file mode 100644 index 0000000..615706c Binary files /dev/null and b/utils/color150/trade name.jpg differ diff --git a/utils/color150/traffic light.jpg b/utils/color150/traffic light.jpg new file mode 100644 index 0000000..b89e96e Binary files /dev/null and b/utils/color150/traffic light.jpg differ diff --git a/utils/color150/tray.jpg b/utils/color150/tray.jpg new file mode 100644 index 0000000..07d791e Binary files /dev/null and b/utils/color150/tray.jpg differ diff --git a/utils/color150/tree.jpg b/utils/color150/tree.jpg new file mode 100644 index 0000000..54f755d Binary files /dev/null and b/utils/color150/tree.jpg differ diff --git a/utils/color150/truck.jpg b/utils/color150/truck.jpg new file mode 100644 index 0000000..43f195f Binary files /dev/null and b/utils/color150/truck.jpg differ diff --git a/utils/color150/van.jpg b/utils/color150/van.jpg new file mode 100644 index 0000000..c9192c4 Binary files /dev/null and b/utils/color150/van.jpg differ diff --git a/utils/color150/vase.jpg b/utils/color150/vase.jpg new file mode 100644 index 0000000..74e287b Binary files /dev/null and b/utils/color150/vase.jpg differ diff --git a/utils/color150/wall.jpg b/utils/color150/wall.jpg new file mode 100644 index 0000000..e60f36c Binary files /dev/null and b/utils/color150/wall.jpg differ diff --git a/utils/color150/wardrobe.jpg b/utils/color150/wardrobe.jpg new file mode 100644 index 0000000..b1fea0a Binary files /dev/null and b/utils/color150/wardrobe.jpg differ diff --git a/utils/color150/washer.jpg b/utils/color150/washer.jpg new file mode 100644 index 0000000..2994186 Binary files /dev/null and b/utils/color150/washer.jpg differ diff --git a/utils/color150/water.jpg b/utils/color150/water.jpg new file mode 100644 index 0000000..d25faa6 Binary files /dev/null and b/utils/color150/water.jpg differ diff --git a/utils/color150/waterfall.jpg b/utils/color150/waterfall.jpg new file mode 100644 index 0000000..7faae28 Binary files /dev/null and b/utils/color150/waterfall.jpg differ diff --git a/utils/color150/windowpane.jpg b/utils/color150/windowpane.jpg new file mode 100644 index 0000000..a49f781 Binary files /dev/null and b/utils/color150/windowpane.jpg differ diff --git a/utils/colorization/color150.mat b/utils/colorization/color150.mat new file mode 100644 index 0000000..c518b64 Binary files /dev/null and b/utils/colorization/color150.mat differ diff --git a/utils/colorization/objectName150.mat b/utils/colorization/objectName150.mat new file mode 100644 index 0000000..613c178 Binary files /dev/null and b/utils/colorization/objectName150.mat differ diff --git a/utils/model/pspnet.prototxt b/utils/model/pspnet.prototxt new file mode 100644 index 0000000..c57306f --- /dev/null +++ b/utils/model/pspnet.prototxt @@ -0,0 +1,3894 @@ +# +input: "data" +input_dim: 1 +input_dim: 3 +input_dim: 473 +input_dim: 473 + +layer { + name: "conv1_1_3x3_s2" + type: "Convolution" + bottom: "data" + top: "conv1_1_3x3_s2" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + stride: 2 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv1_1_3x3_s2/bn" + type: "BN" + bottom: "conv1_1_3x3_s2" + top: "conv1_1_3x3_s2" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv1_1_3x3_s2/relu" + type: "ReLU" + bottom: "conv1_1_3x3_s2" + top: "conv1_1_3x3_s2" +} +layer { + name: "conv1_2_3x3" + type: "Convolution" + bottom: "conv1_1_3x3_s2" + top: "conv1_2_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv1_2_3x3/bn" + type: "BN" + bottom: "conv1_2_3x3" + top: "conv1_2_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv1_2_3x3/relu" + type: "ReLU" + bottom: "conv1_2_3x3" + top: "conv1_2_3x3" +} +layer { + name: "conv1_3_3x3" + type: "Convolution" + bottom: "conv1_2_3x3" + top: "conv1_3_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv1_3_3x3/bn" + type: "BN" + bottom: "conv1_3_3x3" + top: "conv1_3_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv1_3_3x3/relu" + type: "ReLU" + bottom: "conv1_3_3x3" + top: "conv1_3_3x3" +} +layer { + name: "pool1_3x3_s2" + type: "Pooling" + bottom: "conv1_3_3x3" + top: "pool1_3x3_s2" + pooling_param { + pool: MAX + kernel_size: 3 + stride: 2 + pad: 1 + } +} +layer { + name: "conv2_1_1x1_reduce" + type: "Convolution" + bottom: "pool1_3x3_s2" + top: "conv2_1_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv2_1_1x1_reduce/bn" + type: "BN" + bottom: "conv2_1_1x1_reduce" + top: "conv2_1_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv2_1_1x1_reduce/relu" + type: "ReLU" + bottom: "conv2_1_1x1_reduce" + top: "conv2_1_1x1_reduce" +} +layer { + name: "conv2_1_3x3" + type: "Convolution" + bottom: "conv2_1_1x1_reduce" + top: "conv2_1_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv2_1_3x3/bn" + type: "BN" + bottom: "conv2_1_3x3" + top: "conv2_1_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv2_1_3x3/relu" + type: "ReLU" + bottom: "conv2_1_3x3" + top: "conv2_1_3x3" +} +layer { + name: "conv2_1_1x1_increase" + type: "Convolution" + bottom: "conv2_1_3x3" + top: "conv2_1_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv2_1_1x1_increase/bn" + type: "BN" + bottom: "conv2_1_1x1_increase" + top: "conv2_1_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv2_1_1x1_proj" + type: "Convolution" + bottom: "pool1_3x3_s2" + top: "conv2_1_1x1_proj" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv2_1_1x1_proj/bn" + type: "BN" + bottom: "conv2_1_1x1_proj" + top: "conv2_1_1x1_proj" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv2_1" + type: "Eltwise" + bottom: "conv2_1_1x1_proj" + bottom: "conv2_1_1x1_increase" + top: "conv2_1" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv2_1/relu" + type: "ReLU" + bottom: "conv2_1" + top: "conv2_1" +} +layer { + name: "conv2_2_1x1_reduce" + type: "Convolution" + bottom: "conv2_1" + top: "conv2_2_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv2_2_1x1_reduce/bn" + type: "BN" + bottom: "conv2_2_1x1_reduce" + top: "conv2_2_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv2_2_1x1_reduce/relu" + type: "ReLU" + bottom: "conv2_2_1x1_reduce" + top: "conv2_2_1x1_reduce" +} +layer { + name: "conv2_2_3x3" + type: "Convolution" + bottom: "conv2_2_1x1_reduce" + top: "conv2_2_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv2_2_3x3/bn" + type: "BN" + bottom: "conv2_2_3x3" + top: "conv2_2_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv2_2_3x3/relu" + type: "ReLU" + bottom: "conv2_2_3x3" + top: "conv2_2_3x3" +} +layer { + name: "conv2_2_1x1_increase" + type: "Convolution" + bottom: "conv2_2_3x3" + top: "conv2_2_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv2_2_1x1_increase/bn" + type: "BN" + bottom: "conv2_2_1x1_increase" + top: "conv2_2_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv2_2" + type: "Eltwise" + bottom: "conv2_1" + bottom: "conv2_2_1x1_increase" + top: "conv2_2" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv2_2/relu" + type: "ReLU" + bottom: "conv2_2" + top: "conv2_2" +} +layer { + name: "conv2_3_1x1_reduce" + type: "Convolution" + bottom: "conv2_2" + top: "conv2_3_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv2_3_1x1_reduce/bn" + type: "BN" + bottom: "conv2_3_1x1_reduce" + top: "conv2_3_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv2_3_1x1_reduce/relu" + type: "ReLU" + bottom: "conv2_3_1x1_reduce" + top: "conv2_3_1x1_reduce" +} +layer { + name: "conv2_3_3x3" + type: "Convolution" + bottom: "conv2_3_1x1_reduce" + top: "conv2_3_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv2_3_3x3/bn" + type: "BN" + bottom: "conv2_3_3x3" + top: "conv2_3_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv2_3_3x3/relu" + type: "ReLU" + bottom: "conv2_3_3x3" + top: "conv2_3_3x3" +} +layer { + name: "conv2_3_1x1_increase" + type: "Convolution" + bottom: "conv2_3_3x3" + top: "conv2_3_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv2_3_1x1_increase/bn" + type: "BN" + bottom: "conv2_3_1x1_increase" + top: "conv2_3_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv2_3" + type: "Eltwise" + bottom: "conv2_2" + bottom: "conv2_3_1x1_increase" + top: "conv2_3" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv2_3/relu" + type: "ReLU" + bottom: "conv2_3" + top: "conv2_3" +} +layer { + name: "conv3_1_1x1_reduce" + type: "Convolution" + bottom: "conv2_3" + top: "conv3_1_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + stride: 2 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_1_1x1_reduce/bn" + type: "BN" + bottom: "conv3_1_1x1_reduce" + top: "conv3_1_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_1_1x1_reduce/relu" + type: "ReLU" + bottom: "conv3_1_1x1_reduce" + top: "conv3_1_1x1_reduce" +} +layer { + name: "conv3_1_3x3" + type: "Convolution" + bottom: "conv3_1_1x1_reduce" + top: "conv3_1_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_1_3x3/bn" + type: "BN" + bottom: "conv3_1_3x3" + top: "conv3_1_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_1_3x3/relu" + type: "ReLU" + bottom: "conv3_1_3x3" + top: "conv3_1_3x3" +} +layer { + name: "conv3_1_1x1_increase" + type: "Convolution" + bottom: "conv3_1_3x3" + top: "conv3_1_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 512 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_1_1x1_increase/bn" + type: "BN" + bottom: "conv3_1_1x1_increase" + top: "conv3_1_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_1_1x1_proj" + type: "Convolution" + bottom: "conv2_3" + top: "conv3_1_1x1_proj" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 512 + pad: 0 + kernel_size: 1 + stride: 2 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_1_1x1_proj/bn" + type: "BN" + bottom: "conv3_1_1x1_proj" + top: "conv3_1_1x1_proj" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_1" + type: "Eltwise" + bottom: "conv3_1_1x1_proj" + bottom: "conv3_1_1x1_increase" + top: "conv3_1" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv3_1/relu" + type: "ReLU" + bottom: "conv3_1" + top: "conv3_1" +} +layer { + name: "conv3_2_1x1_reduce" + type: "Convolution" + bottom: "conv3_1" + top: "conv3_2_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_2_1x1_reduce/bn" + type: "BN" + bottom: "conv3_2_1x1_reduce" + top: "conv3_2_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_2_1x1_reduce/relu" + type: "ReLU" + bottom: "conv3_2_1x1_reduce" + top: "conv3_2_1x1_reduce" +} +layer { + name: "conv3_2_3x3" + type: "Convolution" + bottom: "conv3_2_1x1_reduce" + top: "conv3_2_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_2_3x3/bn" + type: "BN" + bottom: "conv3_2_3x3" + top: "conv3_2_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_2_3x3/relu" + type: "ReLU" + bottom: "conv3_2_3x3" + top: "conv3_2_3x3" +} +layer { + name: "conv3_2_1x1_increase" + type: "Convolution" + bottom: "conv3_2_3x3" + top: "conv3_2_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 512 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_2_1x1_increase/bn" + type: "BN" + bottom: "conv3_2_1x1_increase" + top: "conv3_2_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_2" + type: "Eltwise" + bottom: "conv3_1" + bottom: "conv3_2_1x1_increase" + top: "conv3_2" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv3_2/relu" + type: "ReLU" + bottom: "conv3_2" + top: "conv3_2" +} +layer { + name: "conv3_3_1x1_reduce" + type: "Convolution" + bottom: "conv3_2" + top: "conv3_3_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_3_1x1_reduce/bn" + type: "BN" + bottom: "conv3_3_1x1_reduce" + top: "conv3_3_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_3_1x1_reduce/relu" + type: "ReLU" + bottom: "conv3_3_1x1_reduce" + top: "conv3_3_1x1_reduce" +} +layer { + name: "conv3_3_3x3" + type: "Convolution" + bottom: "conv3_3_1x1_reduce" + top: "conv3_3_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_3_3x3/bn" + type: "BN" + bottom: "conv3_3_3x3" + top: "conv3_3_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_3_3x3/relu" + type: "ReLU" + bottom: "conv3_3_3x3" + top: "conv3_3_3x3" +} +layer { + name: "conv3_3_1x1_increase" + type: "Convolution" + bottom: "conv3_3_3x3" + top: "conv3_3_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 512 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_3_1x1_increase/bn" + type: "BN" + bottom: "conv3_3_1x1_increase" + top: "conv3_3_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_3" + type: "Eltwise" + bottom: "conv3_2" + bottom: "conv3_3_1x1_increase" + top: "conv3_3" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv3_3/relu" + type: "ReLU" + bottom: "conv3_3" + top: "conv3_3" +} +layer { + name: "conv3_4_1x1_reduce" + type: "Convolution" + bottom: "conv3_3" + top: "conv3_4_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_4_1x1_reduce/bn" + type: "BN" + bottom: "conv3_4_1x1_reduce" + top: "conv3_4_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_4_1x1_reduce/relu" + type: "ReLU" + bottom: "conv3_4_1x1_reduce" + top: "conv3_4_1x1_reduce" +} +layer { + name: "conv3_4_3x3" + type: "Convolution" + bottom: "conv3_4_1x1_reduce" + top: "conv3_4_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_4_3x3/bn" + type: "BN" + bottom: "conv3_4_3x3" + top: "conv3_4_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_4_3x3/relu" + type: "ReLU" + bottom: "conv3_4_3x3" + top: "conv3_4_3x3" +} +layer { + name: "conv3_4_1x1_increase" + type: "Convolution" + bottom: "conv3_4_3x3" + top: "conv3_4_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 512 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv3_4_1x1_increase/bn" + type: "BN" + bottom: "conv3_4_1x1_increase" + top: "conv3_4_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv3_4" + type: "Eltwise" + bottom: "conv3_3" + bottom: "conv3_4_1x1_increase" + top: "conv3_4" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv3_4/relu" + type: "ReLU" + bottom: "conv3_4" + top: "conv3_4" +} +layer { + name: "conv4_1_1x1_reduce" + type: "Convolution" + bottom: "conv3_4" + top: "conv4_1_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_1_1x1_reduce/bn" + type: "BN" + bottom: "conv4_1_1x1_reduce" + top: "conv4_1_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_1_1x1_reduce/relu" + type: "ReLU" + bottom: "conv4_1_1x1_reduce" + top: "conv4_1_1x1_reduce" +} +layer { + name: "conv4_1_3x3" + type: "Convolution" + bottom: "conv4_1_1x1_reduce" + top: "conv4_1_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 2 + dilation: 2 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_1_3x3/bn" + type: "BN" + bottom: "conv4_1_3x3" + top: "conv4_1_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_1_3x3/relu" + type: "ReLU" + bottom: "conv4_1_3x3" + top: "conv4_1_3x3" +} +layer { + name: "conv4_1_1x1_increase" + type: "Convolution" + bottom: "conv4_1_3x3" + top: "conv4_1_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 1024 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_1_1x1_increase/bn" + type: "BN" + bottom: "conv4_1_1x1_increase" + top: "conv4_1_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_1_1x1_proj" + type: "Convolution" + bottom: "conv3_4" + top: "conv4_1_1x1_proj" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 1024 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_1_1x1_proj/bn" + type: "BN" + bottom: "conv4_1_1x1_proj" + top: "conv4_1_1x1_proj" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_1" + type: "Eltwise" + bottom: "conv4_1_1x1_proj" + bottom: "conv4_1_1x1_increase" + top: "conv4_1" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv4_1/relu" + type: "ReLU" + bottom: "conv4_1" + top: "conv4_1" +} +layer { + name: "conv4_2_1x1_reduce" + type: "Convolution" + bottom: "conv4_1" + top: "conv4_2_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_2_1x1_reduce/bn" + type: "BN" + bottom: "conv4_2_1x1_reduce" + top: "conv4_2_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_2_1x1_reduce/relu" + type: "ReLU" + bottom: "conv4_2_1x1_reduce" + top: "conv4_2_1x1_reduce" +} +layer { + name: "conv4_2_3x3" + type: "Convolution" + bottom: "conv4_2_1x1_reduce" + top: "conv4_2_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 2 + dilation: 2 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_2_3x3/bn" + type: "BN" + bottom: "conv4_2_3x3" + top: "conv4_2_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_2_3x3/relu" + type: "ReLU" + bottom: "conv4_2_3x3" + top: "conv4_2_3x3" +} +layer { + name: "conv4_2_1x1_increase" + type: "Convolution" + bottom: "conv4_2_3x3" + top: "conv4_2_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 1024 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_2_1x1_increase/bn" + type: "BN" + bottom: "conv4_2_1x1_increase" + top: "conv4_2_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_2" + type: "Eltwise" + bottom: "conv4_1" + bottom: "conv4_2_1x1_increase" + top: "conv4_2" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv4_2/relu" + type: "ReLU" + bottom: "conv4_2" + top: "conv4_2" +} +layer { + name: "conv4_3_1x1_reduce" + type: "Convolution" + bottom: "conv4_2" + top: "conv4_3_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_3_1x1_reduce/bn" + type: "BN" + bottom: "conv4_3_1x1_reduce" + top: "conv4_3_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_3_1x1_reduce/relu" + type: "ReLU" + bottom: "conv4_3_1x1_reduce" + top: "conv4_3_1x1_reduce" +} +layer { + name: "conv4_3_3x3" + type: "Convolution" + bottom: "conv4_3_1x1_reduce" + top: "conv4_3_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 2 + dilation: 2 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_3_3x3/bn" + type: "BN" + bottom: "conv4_3_3x3" + top: "conv4_3_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_3_3x3/relu" + type: "ReLU" + bottom: "conv4_3_3x3" + top: "conv4_3_3x3" +} +layer { + name: "conv4_3_1x1_increase" + type: "Convolution" + bottom: "conv4_3_3x3" + top: "conv4_3_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 1024 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_3_1x1_increase/bn" + type: "BN" + bottom: "conv4_3_1x1_increase" + top: "conv4_3_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_3" + type: "Eltwise" + bottom: "conv4_2" + bottom: "conv4_3_1x1_increase" + top: "conv4_3" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv4_3/relu" + type: "ReLU" + bottom: "conv4_3" + top: "conv4_3" +} +layer { + name: "conv4_4_1x1_reduce" + type: "Convolution" + bottom: "conv4_3" + top: "conv4_4_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_4_1x1_reduce/bn" + type: "BN" + bottom: "conv4_4_1x1_reduce" + top: "conv4_4_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_4_1x1_reduce/relu" + type: "ReLU" + bottom: "conv4_4_1x1_reduce" + top: "conv4_4_1x1_reduce" +} +layer { + name: "conv4_4_3x3" + type: "Convolution" + bottom: "conv4_4_1x1_reduce" + top: "conv4_4_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 2 + dilation: 2 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_4_3x3/bn" + type: "BN" + bottom: "conv4_4_3x3" + top: "conv4_4_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_4_3x3/relu" + type: "ReLU" + bottom: "conv4_4_3x3" + top: "conv4_4_3x3" +} +layer { + name: "conv4_4_1x1_increase" + type: "Convolution" + bottom: "conv4_4_3x3" + top: "conv4_4_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 1024 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_4_1x1_increase/bn" + type: "BN" + bottom: "conv4_4_1x1_increase" + top: "conv4_4_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_4" + type: "Eltwise" + bottom: "conv4_3" + bottom: "conv4_4_1x1_increase" + top: "conv4_4" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv4_4/relu" + type: "ReLU" + bottom: "conv4_4" + top: "conv4_4" +} +layer { + name: "conv4_5_1x1_reduce" + type: "Convolution" + bottom: "conv4_4" + top: "conv4_5_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_5_1x1_reduce/bn" + type: "BN" + bottom: "conv4_5_1x1_reduce" + top: "conv4_5_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_5_1x1_reduce/relu" + type: "ReLU" + bottom: "conv4_5_1x1_reduce" + top: "conv4_5_1x1_reduce" +} +layer { + name: "conv4_5_3x3" + type: "Convolution" + bottom: "conv4_5_1x1_reduce" + top: "conv4_5_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 2 + dilation: 2 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_5_3x3/bn" + type: "BN" + bottom: "conv4_5_3x3" + top: "conv4_5_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_5_3x3/relu" + type: "ReLU" + bottom: "conv4_5_3x3" + top: "conv4_5_3x3" +} +layer { + name: "conv4_5_1x1_increase" + type: "Convolution" + bottom: "conv4_5_3x3" + top: "conv4_5_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 1024 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_5_1x1_increase/bn" + type: "BN" + bottom: "conv4_5_1x1_increase" + top: "conv4_5_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_5" + type: "Eltwise" + bottom: "conv4_4" + bottom: "conv4_5_1x1_increase" + top: "conv4_5" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv4_5/relu" + type: "ReLU" + bottom: "conv4_5" + top: "conv4_5" +} +layer { + name: "conv4_6_1x1_reduce" + type: "Convolution" + bottom: "conv4_5" + top: "conv4_6_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_6_1x1_reduce/bn" + type: "BN" + bottom: "conv4_6_1x1_reduce" + top: "conv4_6_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_6_1x1_reduce/relu" + type: "ReLU" + bottom: "conv4_6_1x1_reduce" + top: "conv4_6_1x1_reduce" +} +layer { + name: "conv4_6_3x3" + type: "Convolution" + bottom: "conv4_6_1x1_reduce" + top: "conv4_6_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 256 + pad: 2 + dilation: 2 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_6_3x3/bn" + type: "BN" + bottom: "conv4_6_3x3" + top: "conv4_6_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_6_3x3/relu" + type: "ReLU" + bottom: "conv4_6_3x3" + top: "conv4_6_3x3" +} +layer { + name: "conv4_6_1x1_increase" + type: "Convolution" + bottom: "conv4_6_3x3" + top: "conv4_6_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 1024 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv4_6_1x1_increase/bn" + type: "BN" + bottom: "conv4_6_1x1_increase" + top: "conv4_6_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv4_6" + type: "Eltwise" + bottom: "conv4_5" + bottom: "conv4_6_1x1_increase" + top: "conv4_6" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv4_6/relu" + type: "ReLU" + bottom: "conv4_6" + top: "conv4_6" +} +layer { + name: "conv5_1_1x1_reduce" + type: "Convolution" + bottom: "conv4_6" + top: "conv5_1_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 512 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_1_1x1_reduce/bn" + type: "BN" + bottom: "conv5_1_1x1_reduce" + top: "conv5_1_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_1_1x1_reduce/relu" + type: "ReLU" + bottom: "conv5_1_1x1_reduce" + top: "conv5_1_1x1_reduce" +} +layer { + name: "conv5_1_3x3" + type: "Convolution" + bottom: "conv5_1_1x1_reduce" + top: "conv5_1_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 512 + pad: 4 + dilation: 4 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_1_3x3/bn" + type: "BN" + bottom: "conv5_1_3x3" + top: "conv5_1_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_1_3x3/relu" + type: "ReLU" + bottom: "conv5_1_3x3" + top: "conv5_1_3x3" +} +layer { + name: "conv5_1_1x1_increase" + type: "Convolution" + bottom: "conv5_1_3x3" + top: "conv5_1_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 2048 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_1_1x1_increase/bn" + type: "BN" + bottom: "conv5_1_1x1_increase" + top: "conv5_1_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_1_1x1_proj" + type: "Convolution" + bottom: "conv4_6" + top: "conv5_1_1x1_proj" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 2048 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_1_1x1_proj/bn" + type: "BN" + bottom: "conv5_1_1x1_proj" + top: "conv5_1_1x1_proj" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_1" + type: "Eltwise" + bottom: "conv5_1_1x1_proj" + bottom: "conv5_1_1x1_increase" + top: "conv5_1" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv5_1/relu" + type: "ReLU" + bottom: "conv5_1" + top: "conv5_1" +} +layer { + name: "conv5_2_1x1_reduce" + type: "Convolution" + bottom: "conv5_1" + top: "conv5_2_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 512 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_2_1x1_reduce/bn" + type: "BN" + bottom: "conv5_2_1x1_reduce" + top: "conv5_2_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_2_1x1_reduce/relu" + type: "ReLU" + bottom: "conv5_2_1x1_reduce" + top: "conv5_2_1x1_reduce" +} +layer { + name: "conv5_2_3x3" + type: "Convolution" + bottom: "conv5_2_1x1_reduce" + top: "conv5_2_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 512 + pad: 4 + dilation: 4 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_2_3x3/bn" + type: "BN" + bottom: "conv5_2_3x3" + top: "conv5_2_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_2_3x3/relu" + type: "ReLU" + bottom: "conv5_2_3x3" + top: "conv5_2_3x3" +} +layer { + name: "conv5_2_1x1_increase" + type: "Convolution" + bottom: "conv5_2_3x3" + top: "conv5_2_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 2048 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_2_1x1_increase/bn" + type: "BN" + bottom: "conv5_2_1x1_increase" + top: "conv5_2_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_2" + type: "Eltwise" + bottom: "conv5_1" + bottom: "conv5_2_1x1_increase" + top: "conv5_2" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv5_2/relu" + type: "ReLU" + bottom: "conv5_2" + top: "conv5_2" +} +layer { + name: "conv5_3_1x1_reduce" + type: "Convolution" + bottom: "conv5_2" + top: "conv5_3_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 512 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_3_1x1_reduce/bn" + type: "BN" + bottom: "conv5_3_1x1_reduce" + top: "conv5_3_1x1_reduce" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_3_1x1_reduce/relu" + type: "ReLU" + bottom: "conv5_3_1x1_reduce" + top: "conv5_3_1x1_reduce" +} +layer { + name: "conv5_3_3x3" + type: "Convolution" + bottom: "conv5_3_1x1_reduce" + top: "conv5_3_3x3" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 512 + pad: 4 + dilation: 4 + kernel_size: 3 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_3_3x3/bn" + type: "BN" + bottom: "conv5_3_3x3" + top: "conv5_3_3x3" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_3_3x3/relu" + type: "ReLU" + bottom: "conv5_3_3x3" + top: "conv5_3_3x3" +} +layer { + name: "conv5_3_1x1_increase" + type: "Convolution" + bottom: "conv5_3_3x3" + top: "conv5_3_1x1_increase" + param { + lr_mult: 1 + decay_mult: 1 + } + convolution_param { + num_output: 2048 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_3_1x1_increase/bn" + type: "BN" + bottom: "conv5_3_1x1_increase" + top: "conv5_3_1x1_increase" + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 1 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_3" + type: "Eltwise" + bottom: "conv5_2" + bottom: "conv5_3_1x1_increase" + top: "conv5_3" + eltwise_param { + operation: SUM + } +} +layer { + name: "conv5_3/relu" + type: "ReLU" + bottom: "conv5_3" + top: "conv5_3" +} +layer { + name: "conv5_3_pool1" + type: "Pooling" + bottom: "conv5_3" + top: "conv5_3_pool1" + pooling_param { + pool: AVE + kernel_size: 60 + stride: 60 + } +} +layer { + name: "conv5_3_pool1_conv" + type: "Convolution" + bottom: "conv5_3_pool1" + top: "conv5_3_pool1_conv" + param { + lr_mult: 10 + decay_mult: 1 + } + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_3_pool1_conv/bn" + type: "BN" + bottom: "conv5_3_pool1_conv" + top: "conv5_3_pool1_conv" + param { + lr_mult: 10 + decay_mult: 0 + } + param { + lr_mult: 10 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_3_pool1_conv/relu" + type: "ReLU" + bottom: "conv5_3_pool1_conv" + top: "conv5_3_pool1_conv" +} +layer { + name: "conv5_3_pool1_interp" + type: "Interp" + bottom: "conv5_3_pool1_conv" + top: "conv5_3_pool1_interp" + interp_param { + height: 60 + width: 60 + } +} +layer { + name: "conv5_3_pool2" + type: "Pooling" + bottom: "conv5_3" + top: "conv5_3_pool2" + pooling_param { + pool: AVE + kernel_size: 30 + stride: 30 + } +} +layer { + name: "conv5_3_pool2_conv" + type: "Convolution" + bottom: "conv5_3_pool2" + top: "conv5_3_pool2_conv" + param { + lr_mult: 10 + decay_mult: 1 + } + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_3_pool2_conv/bn" + type: "BN" + bottom: "conv5_3_pool2_conv" + top: "conv5_3_pool2_conv" + param { + lr_mult: 10 + decay_mult: 0 + } + param { + lr_mult: 10 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_3_pool2_conv/relu" + type: "ReLU" + bottom: "conv5_3_pool2_conv" + top: "conv5_3_pool2_conv" +} +layer { + name: "conv5_3_pool2_interp" + type: "Interp" + bottom: "conv5_3_pool2_conv" + top: "conv5_3_pool2_interp" + interp_param { + height: 60 + width: 60 + } +} +layer { + name: "conv5_3_pool3" + type: "Pooling" + bottom: "conv5_3" + top: "conv5_3_pool3" + pooling_param { + pool: AVE + kernel_size: 20 + stride: 20 + } +} +layer { + name: "conv5_3_pool3_conv" + type: "Convolution" + bottom: "conv5_3_pool3" + top: "conv5_3_pool3_conv" + param { + lr_mult: 10 + decay_mult: 1 + } + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_3_pool3_conv/bn" + type: "BN" + bottom: "conv5_3_pool3_conv" + top: "conv5_3_pool3_conv" + param { + lr_mult: 10 + decay_mult: 0 + } + param { + lr_mult: 10 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_3_pool3_conv/relu" + type: "ReLU" + bottom: "conv5_3_pool3_conv" + top: "conv5_3_pool3_conv" +} +layer { + name: "conv5_3_pool3_interp" + type: "Interp" + bottom: "conv5_3_pool3_conv" + top: "conv5_3_pool3_interp" + interp_param { + height: 60 + width: 60 + } +} +layer { + name: "conv5_3_pool6" + type: "Pooling" + bottom: "conv5_3" + top: "conv5_3_pool6" + pooling_param { + pool: AVE + kernel_size: 10 + stride: 10 + } +} +layer { + name: "conv5_3_pool6_conv" + type: "Convolution" + bottom: "conv5_3_pool6" + top: "conv5_3_pool6_conv" + param { + lr_mult: 10 + decay_mult: 1 + } + convolution_param { + num_output: 512 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_3_pool6_conv/bn" + type: "BN" + bottom: "conv5_3_pool6_conv" + top: "conv5_3_pool6_conv" + param { + lr_mult: 10 + decay_mult: 0 + } + param { + lr_mult: 10 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_3_pool6_conv/relu" + type: "ReLU" + bottom: "conv5_3_pool6_conv" + top: "conv5_3_pool6_conv" +} +layer { + name: "conv5_3_pool6_interp" + type: "Interp" + bottom: "conv5_3_pool6_conv" + top: "conv5_3_pool6_interp" + interp_param { + height: 60 + width: 60 + } +} +layer { + name: "conv5_3_concat" + type: "Concat" + bottom: "conv5_3" + bottom: "conv5_3_pool6_interp" + bottom: "conv5_3_pool3_interp" + bottom: "conv5_3_pool2_interp" + bottom: "conv5_3_pool1_interp" + top: "conv5_3_concat" +} +layer { + name: "conv5_4" + type: "Convolution" + bottom: "conv5_3_concat" + top: "conv5_4" + param { + lr_mult: 10 + decay_mult: 1 + } + convolution_param { + num_output: 512 + kernel_size: 3 + stride: 1 + pad: 1 + weight_filler { + type: "msra" + } + bias_term: false + } +} +layer { + name: "conv5_4/bn" + type: "BN" + bottom: "conv5_4" + top: "conv5_4" + param { + lr_mult: 10 + decay_mult: 0 + } + param { + lr_mult: 10 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 1 + } + param { + lr_mult: 0 + decay_mult: 0 + } + bn_param { + slope_filler { + type: "constant" + value: 1 + } + bias_filler { + type: "constant" + value: 0 + } + frozen: true + momentum: 0.95 + } +} +layer { + name: "conv5_4/relu" + type: "ReLU" + bottom: "conv5_4" + top: "conv5_4" +} +layer { + name: "conv5_4/dropout" + type: "Dropout" + bottom: "conv5_4" + top: "conv5_4" + dropout_param { + dropout_ratio: 0.1 + } +} +layer { + name: "conv6" + type: "Convolution" + bottom: "conv5_4" + top: "conv6" + param { + lr_mult: 10 + decay_mult: 1 + } + param { + lr_mult: 20 + decay_mult: 1 + } + convolution_param { + num_output: 150 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv6_interp" + type: "Interp" + bottom: "conv6" + top: "conv6_interp" + interp_param { + zoom_factor: 8 + } +}