├── result ├── 1 ├── 1.PNG ├── 2.PNG └── 3.PNG ├── config.py ├── fine_tune_list.txt ├── README.md ├── Networks.py ├── selectivesearch.py ├── train_and_test.py ├── process_data.py └── train_list.txt /result/1: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /result/1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Liu-Yicheng/R-CNN/HEAD/result/1.PNG -------------------------------------------------------------------------------- /result/2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Liu-Yicheng/R-CNN/HEAD/result/2.PNG -------------------------------------------------------------------------------- /result/3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Liu-Yicheng/R-CNN/HEAD/result/3.PNG -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | Image_size = 224 4 | Staircase=True 5 | Summary_iter=50 6 | Save_iter = 5000 7 | Max_iter = 20000 8 | 9 | Train_list = r'./train_list.txt' 10 | Finetune_list = './fine_tune_list.txt' 11 | 12 | DATA = './FlowerData' 13 | Fineturn_save = './FlowerData/Fineturn' 14 | SVM_and_Reg_save ='./FlowerData/SVM_and_Reg' 15 | 16 | Out_put = './output' 17 | 18 | T_class_num = 17 19 | T_batch_size =64 20 | T_decay_iter=100 21 | T_learning_rate=0.0001 22 | T_decay_rate=0.99 23 | T_weights_file =r'./output/train_alexnet/save.ckpt-40000' 24 | 25 | F_class_num = 3 26 | F_batch_size = 256 27 | F_decay_iter=1000 28 | F_learning_rate=0.001 29 | F_decay_rate=0.99 30 | F_fineturn_threshold =0.3 31 | F_svm_threshold =0.3 32 | F_regression_threshold =0.6 33 | F_weights_file =r'./output/fineturn/save.ckpt-54000' 34 | 35 | R_class_num = 5 36 | R_batch_size = 512 37 | R_decay_iter=5000 38 | R_learning_rate=0.0001 39 | R_decay_rate=0.5 40 | R_weights_file =r'./output/Reg_box/save.ckpt-10000' -------------------------------------------------------------------------------- /fine_tune_list.txt: -------------------------------------------------------------------------------- 1 | 2flowers/jpg/0/image_0561.jpg 2 90,126,350,434 2 | 2flowers/jpg/0/image_0562.jpg 2 160,15,340,415 3 | 2flowers/jpg/0/image_0563.jpg 2 42,25,408,405 4 | 2flowers/jpg/0/image_0564.jpg 2 66,48,384,318 5 | 2flowers/jpg/0/image_0565.jpg 2 17,208,363,354 6 | 2flowers/jpg/0/image_0566.jpg 2 42,20,398,310 7 | 2flowers/jpg/0/image_0567.jpg 2 40,60,410,290 8 | 2flowers/jpg/0/image_0568.jpg 2 40,60,360,380 9 | 2flowers/jpg/0/image_0573.jpg 2 140,80,360,360 10 | 2flowers/jpg/0/image_0574.jpg 2 50,80,360,360 11 | 2flowers/jpg/0/image_0575.jpg 2 140,80,400,350 12 | 2flowers/jpg/0/image_0576.jpg 2 140,80,400,350 13 | 2flowers/jpg/0/image_0577.jpg 2 100,200,400,200 14 | 2flowers/jpg/0/image_0578.jpg 2 200,100,380,160 15 | 2flowers/jpg/0/image_0579.jpg 2 20,180,520,180 16 | 2flowers/jpg/0/image_0580.jpg 2 20,10,420,450 17 | 2flowers/jpg/0/image_0581.jpg 2 60,100,400,300 18 | 2flowers/jpg/0/image_0582.jpg 2 152,35,398,435 19 | 2flowers/jpg/0/image_0583.jpg 2 40,45,380,315 20 | 2flowers/jpg/0/image_0584.jpg 2 40,45,410,395 21 | 2flowers/jpg/0/image_0608.jpg 2 200,40,200,250 22 | 2flowers/jpg/0/image_0610.jpg 2 180,105,300,300 23 | 2flowers/jpg/0/image_0613.jpg 2 180,105,150,150 24 | 2flowers/jpg/0/image_0617.jpg 2 70,120,210,280 25 | 2flowers/jpg/0/image_0627.jpg 2 90,80,230,150 26 | 2flowers/jpg/0/image_0630.jpg 2 270,140,165,108 27 | 2flowers/jpg/0/image_0633.jpg 2 140,200,120,120 28 | 2flowers/jpg/0/image_0634.jpg 2 220,180,220,150 29 | 2flowers/jpg/0/image_0636.jpg 2 220,88,200,232 30 | 2flowers/jpg/0/image_0637.jpg 2 290,42,110,158 31 | 2flowers/jpg/1/image_1281.jpg 1 90,66,330,374 32 | 2flowers/jpg/1/image_1282.jpg 1 90,35,330,425 33 | 2flowers/jpg/1/image_1283.jpg 1 90,45,316,435 34 | 2flowers/jpg/1/image_1284.jpg 1 26,16,408,574 35 | 2flowers/jpg/1/image_1285.jpg 1 50,55,375,420 36 | 2flowers/jpg/1/image_1286.jpg 1 40,63,347,487 37 | 2flowers/jpg/1/image_1287.jpg 1 60,80,340,360 38 | 2flowers/jpg/1/image_1288.jpg 1 34,27,403,535 39 | 2flowers/jpg/1/image_1289.jpg 1 40,60,360,380 40 | 2flowers/jpg/1/image_1290.jpg 1 36,5,399,525 41 | 2flowers/jpg/1/image_1291.jpg 1 40,105,298,371 42 | 2flowers/jpg/1/image_1292.jpg 1 40,60,362,460 43 | 2flowers/jpg/1/image_1293.jpg 1 40,20,394,512 44 | 2flowers/jpg/1/image_1294.jpg 1 84,30,329,470 45 | 2flowers/jpg/1/image_1295.jpg 1 93,92,330,420 46 | 2flowers/jpg/1/image_1296.jpg 1 64,250,379,466 47 | 2flowers/jpg/1/image_1297.jpg 1 106,40,277,392 48 | 2flowers/jpg/1/image_1298.jpg 1 72,60,348,540 49 | 2flowers/jpg/1/image_1305.jpg 1 50,17,350,543 50 | 2flowers/jpg/1/image_1306.jpg 1 103,100,308,379 51 | 2flowers/jpg/1/image_1307.jpg 1 27,28,403,572 52 | 2flowers/jpg/1/image_1314.jpg 1 30,14,420,516 53 | 2flowers/jpg/1/image_1315.jpg 1 38,80,332,426 54 | 2flowers/jpg/1/image_1316.jpg 1 72,32,354,568 55 | 2flowers/jpg/1/image_1317.jpg 1 86,70,264,421 56 | 2flowers/jpg/1/image_1318.jpg 1 95,110,285,430 57 | 2flowers/jpg/1/image_1319.jpg 1 111,50,273,405 58 | 2flowers/jpg/1/image_1323.jpg 1 16,122,465,502 59 | 2flowers/jpg/1/image_1324.jpg 1 40,60,380,440 60 | 2flowers/jpg/1/image_1325.jpg 1 114,37,242,356 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RCNN 2 | Rich feature hierarchies for accurate object detection and semantic segmentation 3 | 4 | # 工程内容 5 | 这个程序是基于tensorflow实现RCNN功能。 6 | 7 | # 开发环境 8 | windows10 + python3.5 + tensorflow1.2 + tflearn + cv2 + scikit-learn 9 | i5-7500 + GTX 1070Ti 10 | 11 | # 数据集 12 | 采用17flowers据集, 官网下载:http://www.robots.ox.ac.uk/~vgg/data/flowers/17/ 13 | 14 | # 程序说明 15 | 1、config.py---网络定义、训练与数据处理所需要用到的参数 16 | 2、Networks.py---用于定义Alexnet_Net模型、fineturn模型、SVM模型、边框回归模型 17 | 4、process_data.py---用于对训练数据集与微调数据集进行处理(选择性搜索、数据存取等) 18 | 5、train_and_test.py---用于各类模型的训练与测试、主函数 19 | 6、selectivesearch.py---选择性搜索源码 20 | 21 | 22 | # 文件说明 23 | 1、train_list.txt---预训练数据,数据在17flowers文件夹中 24 | 2、fine_tune_list.txt---微调数据2flowers文件夹中 25 | 3、直接用选择性搜索的区域划分    通过RCNN后的区域划分  通过SVM与边框回归之后的最终结果 26 |   ![selectivesearch_1](https://github.com/liuyicheng007/R-CNN/raw/master/result/1.PNG)   ![RCNN_1](https://github.com/liuyicheng007/R-CNN/raw/master/result/2.PNG)   ![RCNN_2](https://github.com/liuyicheng007/R-CNN/raw/master/result/3.PNG) 27 | 28 | 29 | # 程序问题 30 | 1.参考代码给出了R-CNN十分清晰的主体流程,但缺失了最后的边框回归步骤。在实现的部分中使用了tflearn来实现 31 |  网络的定义与使用,好处是使用十分简单,使得程序易懂,代价是效率与灵活性。 32 | 2.在保留参考代码的主体思想与一些小轮子的基础上,本代码实现了各个网络定义与使用的每一个具体步骤 33 |  与集成数据处理各个步骤。本次学习的目的:学习RCNN的实现过程,熟悉用tensorflow来构建网络与训练 34 | 3.微调时的数据集存在一定的问题:一张图片经过筛选后一般保留100-200个候选框,当这些候选框与ground_truth的 35 |  IOU大于0.3时,我们将其认为是目标,小于0.3时我们认为是背景。实际情况是,目标候选框与背景候选框的比例过于 36 |  悬殊,可能达到几十比一的比例,这就导致了在微调训练时效果并不是特别好。 37 |  解决思路:将目标候选框与背景候选框在数据处理时就分开保存,之后训练时,按1:2的比例调数据进行训练。待续 38 | 4.在训练边框回归网络时,采用ReLU激活函数导致训练失败,许多权重都被变为0, 再一次证明了Relu的脆弱性。因此 39 |  采用了tanh激活函数,问题得到解决。上一次发生这种情况采用Leaky ReLU激活函数(可以解决ReLU易坏死问题)。 40 | 5.SVM训练过程,没有采用论文所描述的hard negative mining method与NMS,简单化了。 41 | 42 | # 论文细节补充: 43 | 1.finturn过程: 44 | 计算每个region proposal与人工标注的框的IoU,IoU重叠阈值设为0.5,大于这个阈值的作为正样本,其他作 45 |  为负样本。然后在训练的每一次迭代中都使用32个正样本(包括所有类别)和96个背景样本组成的128张图片的batch 46 |  进行训练(正样本图片太少了) 47 | 2.SVM训练过程: 48 |  对每个类都训练一个线性的SVM分类器,训练SVM需要正负样本文件,这里的正样本就是ground-truth框中的图像作 49 |  为正样本,完全不包含的region proposal应该是负样本,但是对于部分包含某一类物体的region proposal该如 50 |  何训练作者同样是使用IoU阈值的方法,这次的阈值为0.3,计算每一个region proposal与标准框的IoU,小于0.3 51 |  的作为负样本,其他的全都丢弃。由于训练样本比较大,作者使用了standard hard negative mining method 52 |  (具体怎么弄的不清楚)来训练分类器。作者在补充材料中讨论了为什么fine-tuning和训练SVM时所用的正负样本 53 |  标准不一样,以及为什么不直接用卷积神经网络的输出来分类而要单独训练SVM来分类,作者提到,刚开始时只是用了 54 |  ImageNet预训练了CNN,并用提取的特征训练了SVMs,此时用正负样本标记方法就是前面所述的0.3,后来刚开始使用 55 |  fine-tuning时,使用了这个方法但是发现结果很差,于是通过调试选择了0.5这个方法,作者认为这样可以加大样本 56 |  的数量,从而避免过拟合。然而,IoU大于0.5就作为正样本会导致网络定位准确度的下降,故使用了SVM来做检测,全 57 |  部使用ground-truth样本作为正样本,且使用非正样本的,且IoU小于0.3的“hard negatives”,提高了定位的准确度。 58 | 3.hard negatives: 59 |  在训练过程中会出现 正样本的数量远远小于负样本,这样训练出来的分类器的效果总是有限的,会出现许多false positive。 60 |  采取办法可以是,先将正样本与一部分的负样本投入模型进行训练,然后将训练出来的模型去预测剩下未加入训练过程的负样本, 61 |  当负样本被预测为正样本时,则它就为false positive,就把它加入训练的负样本集,进行下一次训练,知道模型的预测精度不再提升 62 |  这就好比错题集,做错了一道题,把它加入错题集进行学习,学会了这道题,成绩就能得到稍微提升,把自己的错题集都学过去,成绩就达到了相对最优 63 | 64 | 65 | # 参考 66 | 1、论文参考: 67 | https://www.computer.org/csdl/proceedings/cvpr/2014/5118/00/5118a580-abs.html 68 | 2、代码参考: 69 | https://github.com/yangxue0827/RCNN 70 | https://github.com/edwardbi/DeepLearningModels/tree/master/RCNN 71 | 3、博客参考: 72 | http://blog.csdn.net/u011534057/article/details/51218218 73 | http://blog.csdn.net/u011534057/article/details/51218250 74 | 75 | -------------------------------------------------------------------------------- /Networks.py: -------------------------------------------------------------------------------- 1 | import os 2 | import config as cfg 3 | from sklearn import svm 4 | import tensorflow as tf 5 | from sklearn.externals import joblib 6 | from tensorflow.python.ops import nn_ops 7 | from tflearn.layers.normalization import local_response_normalization 8 | 9 | slim = tf.contrib.slim 10 | 11 | class Alexnet_Net : 12 | ''' 13 | 此类用来定义Alexnet网络及其参数,之后整体作为参数输入到Solver中 14 | ''' 15 | def __init__(self, is_training=True, is_fineturn=False, is_SVM=False): 16 | self.image_size = cfg.Image_size 17 | self.batch_size = cfg.F_batch_size if is_fineturn else cfg.T_batch_size 18 | self.class_num = cfg.F_class_num if is_fineturn else cfg.T_class_num 19 | self.input_data = tf.placeholder(tf.float32,[None, self.image_size, self.image_size,3], name='input') 20 | self.logits = self.build_network(self.input_data, self.class_num, is_svm=is_SVM, is_training=is_training) 21 | 22 | if is_training == True : 23 | self.label = tf.placeholder(tf.float32, [None, self.class_num], name='label') 24 | self.loss_layer(self.logits, self.label) 25 | self.accuracy = self.get_accuracy(self.logits, self.label) 26 | self.total_loss = tf.losses.get_total_loss() 27 | tf.summary.scalar('total_loss', self.total_loss) 28 | 29 | def build_network(self, input, output, is_svm= False, scope='R-CNN',is_training=True, keep_prob=0.5): 30 | with tf.variable_scope(scope): 31 | with slim.arg_scope([slim.fully_connected, slim.conv2d], 32 | activation_fn=nn_ops.relu, 33 | weights_initializer=tf.truncated_normal_initializer(0.0, 0.01), 34 | weights_regularizer=slim.l2_regularizer(0.0005)): 35 | net = slim.conv2d(input, 96, 11, stride=4, scope='conv_1') 36 | net = slim.max_pool2d(net, 3, stride=2, scope='pool_2') 37 | net = local_response_normalization(net) 38 | net = slim.conv2d(net, 256, 5, scope='conv_3') 39 | net = slim.max_pool2d(net, 3, stride=2, scope='pool_2') 40 | net = local_response_normalization(net) 41 | net = slim.conv2d(net, 384, 3, scope='conv_4') 42 | net = slim.conv2d(net, 384, 3, scope='conv_5') 43 | net = slim.conv2d(net, 256, 3, scope='conv_6') 44 | net = slim.max_pool2d(net, 3, stride=2, scope='pool_7') 45 | net = local_response_normalization(net) 46 | net = slim.flatten(net, scope='flat_32') 47 | net = slim.fully_connected(net, 4096, activation_fn=self.tanh(), scope='fc_8') 48 | net = slim.dropout(net, keep_prob=keep_prob,is_training=is_training, scope='dropout9') 49 | net = slim.fully_connected(net, 4096, activation_fn=self.tanh(), scope='fc_10') 50 | if is_svm: 51 | return net 52 | net = slim.dropout(net, keep_prob=keep_prob, is_training=is_training, scope='dropout11') 53 | net = slim.fully_connected(net, output, activation_fn=self.softmax(), scope='fc_11') 54 | return net 55 | 56 | def loss_layer(self, y_pred, y_true): 57 | with tf.name_scope("Crossentropy"): 58 | y_pred = tf.clip_by_value(y_pred, tf.cast(1e-10, dtype=tf.float32),tf.cast(1. - 1e-10, dtype=tf.float32)) 59 | cross_entropy = - tf.reduce_sum(y_true * tf.log(y_pred),reduction_indices=len(y_pred.get_shape()) - 1) 60 | loss = tf.reduce_mean(cross_entropy) 61 | tf.losses.add_loss(loss) 62 | tf.summary.scalar('loss', loss) 63 | 64 | def get_accuracy(self, y_pred, y_true): 65 | y_pred_maxs =(tf.argmax(y_pred,1)) 66 | y_true_maxs =(tf.argmax(y_true,1)) 67 | num = tf.count_nonzero((y_true_maxs-y_pred_maxs)) 68 | result = 1-(num/self.batch_size) 69 | return result 70 | def softmax(self): 71 | def op(inputs): 72 | return tf.nn.softmax(inputs) 73 | return op 74 | def tanh(self): 75 | def op(inputs): 76 | return tf.tanh(inputs) 77 | return op 78 | 79 | class SVM : 80 | def __init__(self, data): 81 | self.data = data 82 | self.data_save_path = cfg.SVM_and_Reg_save 83 | self.output = cfg.Out_put 84 | def train(self): 85 | svms=[] 86 | data_dirs = os.listdir(self.data_save_path) 87 | for data_dir in data_dirs: 88 | images, labels = self.data.get_SVM_data(data_dir) 89 | clf = svm.LinearSVC() 90 | clf.fit(images, labels) 91 | svms.append(clf) 92 | SVM_model_path = os.path.join(self.output, 'SVM_model') 93 | if not os.path.exists(SVM_model_path): 94 | os.makedirs(SVM_model_path) 95 | joblib.dump(clf, os.path.join(SVM_model_path, str(data_dir)+ '_svm.pkl')) 96 | 97 | class Reg_Net(object): 98 | def __init__(self, is_training=True): 99 | self.output_num = cfg.R_class_num 100 | self.input_data = tf.placeholder(tf.float32, [None, 4096], name='input') 101 | self.logits = self.build_network(self.input_data, self.output_num, is_training=is_training) 102 | if is_training: 103 | self.label = tf.placeholder(tf.float32, [None, self.output_num], name='input') 104 | self.loss_layer(self.logits, self.label) 105 | self.total_loss = tf.losses.get_total_loss() 106 | tf.summary.scalar('total_loss', self.total_loss) 107 | 108 | def build_network(self, input_image, output_num, is_training= True, scope='regression_box', keep_prob=0.5): 109 | with tf.variable_scope(scope): 110 | with slim.arg_scope([slim.fully_connected], 111 | activation_fn=self.tanh(), 112 | weights_initializer=tf.truncated_normal_initializer(0.0, 0.01), 113 | weights_regularizer=slim.l2_regularizer(0.0005)): 114 | net = slim.fully_connected(input_image, 4096, scope='fc_1') 115 | net = slim.dropout(net, keep_prob=keep_prob, is_training=is_training, scope='dropout11') 116 | net = slim.fully_connected(net, output_num, scope='fc_2') 117 | return net 118 | 119 | def loss_layer(self,y_pred, y_true): 120 | no_object_loss = tf.reduce_mean(tf.square((1 - y_true[:, 0]) * y_pred[:, 0])) 121 | object_loss = tf.reduce_mean(tf.square((y_true[:, 0]) * (y_pred[:, 0] - 1))) 122 | 123 | loss = (tf.reduce_mean(y_true[:, 0] * ( 124 | tf.reduce_sum(tf.square(y_true[:, 1:5] - y_pred[:, 1:5]), 1))) + no_object_loss + object_loss) 125 | tf.losses.add_loss(loss) 126 | tf.summary.scalar('loss', loss) 127 | 128 | def tanh(self): 129 | def op(inputs): 130 | return tf.tanh(inputs) 131 | return op 132 | 133 | 134 | 135 | 136 | 137 | -------------------------------------------------------------------------------- /selectivesearch.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import skimage.io 3 | import skimage.feature 4 | import skimage.color 5 | import skimage.transform 6 | import skimage.util 7 | import skimage.segmentation 8 | import numpy 9 | 10 | 11 | # "Selective Search for Object Recognition" by J.R.R. Uijlings et al. 12 | # 13 | # - Modified version with LBP extractor for texture vectorization 14 | 15 | 16 | def _generate_segments(im_orig, scale, sigma, min_size): 17 | """ 18 | segment smallest regions by the algorithm of Felzenswalb and 19 | Huttenlocher 20 | """ 21 | 22 | # open the Image 23 | im_mask = skimage.segmentation.felzenszwalb( 24 | skimage.util.img_as_float(im_orig), scale=scale, sigma=sigma, 25 | min_size=min_size) 26 | 27 | # merge mask channel to the image as a 4th channel 28 | im_orig = numpy.append( 29 | im_orig, numpy.zeros(im_orig.shape[:2])[:, :, numpy.newaxis], axis=2) 30 | im_orig[:, :, 3] = im_mask 31 | 32 | return im_orig 33 | 34 | 35 | def _sim_colour(r1, r2): 36 | """ 37 | calculate the sum of histogram intersection of colour 38 | """ 39 | return sum([min(a, b) for a, b in zip(r1["hist_c"], r2["hist_c"])]) 40 | 41 | 42 | def _sim_texture(r1, r2): 43 | """ 44 | calculate the sum of histogram intersection of texture 45 | """ 46 | return sum([min(a, b) for a, b in zip(r1["hist_t"], r2["hist_t"])]) 47 | 48 | 49 | def _sim_size(r1, r2, imsize): 50 | """ 51 | calculate the size similarity over the image 52 | """ 53 | return 1.0 - (r1["size"] + r2["size"]) / imsize 54 | 55 | 56 | def _sim_fill(r1, r2, imsize): 57 | """ 58 | calculate the fill similarity over the image 59 | """ 60 | bbsize = ( 61 | (max(r1["max_x"], r2["max_x"]) - min(r1["min_x"], r2["min_x"])) 62 | * (max(r1["max_y"], r2["max_y"]) - min(r1["min_y"], r2["min_y"])) 63 | ) 64 | return 1.0 - (bbsize - r1["size"] - r2["size"]) / imsize 65 | 66 | 67 | def _calc_sim(r1, r2, imsize): 68 | return (_sim_colour(r1, r2) + _sim_texture(r1, r2) 69 | + _sim_size(r1, r2, imsize) + _sim_fill(r1, r2, imsize)) 70 | 71 | 72 | def _calc_colour_hist(img): 73 | """ 74 | calculate colour histogram for each region 75 | 76 | the size of output histogram will be BINS * COLOUR_CHANNELS(3) 77 | 78 | number of bins is 25 as same as [uijlings_ijcv2013_draft.pdf] 79 | 80 | extract HSV 81 | """ 82 | 83 | BINS = 25 84 | hist = numpy.array([]) 85 | 86 | for colour_channel in (0, 1, 2): 87 | 88 | # extracting one colour channel 89 | c = img[:, colour_channel] 90 | 91 | # calculate histogram for each colour and join to the result 92 | hist = numpy.concatenate( 93 | [hist] + [numpy.histogram(c, BINS, (0.0, 255.0))[0]]) 94 | 95 | # L1 normalize 96 | hist = hist / len(img) 97 | 98 | return hist 99 | 100 | 101 | def _calc_texture_gradient(img): 102 | """ 103 | calculate texture gradient for entire image 104 | 105 | The original SelectiveSearch algorithm proposed Gaussian derivative 106 | for 8 orientations, but we use LBP instead. 107 | 108 | output will be [height(*)][width(*)] 109 | """ 110 | ret = numpy.zeros((img.shape[0], img.shape[1], img.shape[2])) 111 | 112 | for colour_channel in (0, 1, 2): 113 | ret[:, :, colour_channel] = skimage.feature.local_binary_pattern( 114 | img[:, :, colour_channel], 8, 1.0) 115 | 116 | return ret 117 | 118 | 119 | def _calc_texture_hist(img): 120 | """ 121 | calculate texture histogram for each region 122 | 123 | calculate the histogram of gradient for each colours 124 | the size of output histogram will be 125 | BINS * ORIENTATIONS * COLOUR_CHANNELS(3) 126 | """ 127 | BINS = 10 128 | 129 | hist = numpy.array([]) 130 | 131 | for colour_channel in (0, 1, 2): 132 | 133 | # mask by the colour channel 134 | fd = img[:, colour_channel] 135 | 136 | # calculate histogram for each orientation and concatenate them all 137 | # and join to the result 138 | hist = numpy.concatenate( 139 | [hist] + [numpy.histogram(fd, BINS, (0.0, 1.0))[0]]) 140 | 141 | # L1 Normalize 142 | hist = hist / len(img) 143 | 144 | return hist 145 | 146 | 147 | def _extract_regions(img): 148 | 149 | R = {} 150 | 151 | # get hsv image 152 | hsv = skimage.color.rgb2hsv(img[:, :, :3]) 153 | 154 | # pass 1: count pixel positions 155 | for y, i in enumerate(img): 156 | 157 | for x, (r, g, b, l) in enumerate(i): 158 | 159 | # initialize a new region 160 | if l not in R: 161 | R[l] = { 162 | "min_x": 0xffff, "min_y": 0xffff, 163 | "max_x": 0, "max_y": 0, "labels": [l]} 164 | 165 | # bounding box 166 | if R[l]["min_x"] > x: 167 | R[l]["min_x"] = x 168 | if R[l]["min_y"] > y: 169 | R[l]["min_y"] = y 170 | if R[l]["max_x"] < x: 171 | R[l]["max_x"] = x 172 | if R[l]["max_y"] < y: 173 | R[l]["max_y"] = y 174 | 175 | # pass 2: calculate texture gradient 176 | tex_grad = _calc_texture_gradient(img) 177 | 178 | # pass 3: calculate colour histogram of each region 179 | for k, v in R.items(): 180 | 181 | # colour histogram 182 | masked_pixels = hsv[:, :, :][img[:, :, 3] == k] 183 | R[k]["size"] = len(masked_pixels / 4) 184 | R[k]["hist_c"] = _calc_colour_hist(masked_pixels) 185 | 186 | # texture histogram 187 | R[k]["hist_t"] = _calc_texture_hist(tex_grad[:, :][img[:, :, 3] == k]) 188 | 189 | return R 190 | 191 | 192 | def _extract_neighbours(regions): 193 | 194 | def intersect(a, b): 195 | if (a["min_x"] < b["min_x"] < a["max_x"] 196 | and a["min_y"] < b["min_y"] < a["max_y"]) or ( 197 | a["min_x"] < b["max_x"] < a["max_x"] 198 | and a["min_y"] < b["max_y"] < a["max_y"]) or ( 199 | a["min_x"] < b["min_x"] < a["max_x"] 200 | and a["min_y"] < b["max_y"] < a["max_y"]) or ( 201 | a["min_x"] < b["max_x"] < a["max_x"] 202 | and a["min_y"] < b["min_y"] < a["max_y"]): 203 | return True 204 | return False 205 | 206 | R = regions.items() 207 | r = [elm for elm in R] 208 | R = r 209 | neighbours = [] 210 | for cur, a in enumerate(R[:-1]): 211 | for b in R[cur + 1:]: 212 | if intersect(a[1], b[1]): 213 | neighbours.append((a, b)) 214 | 215 | return neighbours 216 | 217 | 218 | def _merge_regions(r1, r2): 219 | new_size = r1["size"] + r2["size"] 220 | rt = { 221 | "min_x": min(r1["min_x"], r2["min_x"]), 222 | "min_y": min(r1["min_y"], r2["min_y"]), 223 | "max_x": max(r1["max_x"], r2["max_x"]), 224 | "max_y": max(r1["max_y"], r2["max_y"]), 225 | "size": new_size, 226 | "hist_c": ( 227 | r1["hist_c"] * r1["size"] + r2["hist_c"] * r2["size"]) / new_size, 228 | "hist_t": ( 229 | r1["hist_t"] * r1["size"] + r2["hist_t"] * r2["size"]) / new_size, 230 | "labels": r1["labels"] + r2["labels"] 231 | } 232 | return rt 233 | 234 | 235 | def selective_search( 236 | im_orig, scale=1.0, sigma=0.8, min_size=50): 237 | '''Selective Search 238 | 239 | Parameters 240 | ---------- 241 | im_orig : ndarray 242 | Input image 243 | scale : int 244 | Free parameter. Higher means larger clusters in felzenszwalb segmentation. 245 | sigma : float 246 | Width of Gaussian kernel for felzenszwalb segmentation. 247 | min_size : int 248 | Minimum component size for felzenszwalb segmentation. 249 | Returns 250 | ------- 251 | img : ndarray 252 | image with region label 253 | region label is stored in the 4th value of each pixel [r,g,b,(region)] 254 | regions : array of dict 255 | [ 256 | { 257 | 'rect': (left, top, right, bottom), 258 | 'labels': [...] 259 | }, 260 | ... 261 | ] 262 | ''' 263 | assert im_orig.shape[2] == 3, "3ch image is expected" 264 | 265 | # load image and get smallest regions 266 | # region label is stored in the 4th value of each pixel [r,g,b,(region)] 267 | img = _generate_segments(im_orig, scale, sigma, min_size) 268 | 269 | if img is None: 270 | return None, {} 271 | 272 | imsize = img.shape[0] * img.shape[1] 273 | R = _extract_regions(img) 274 | 275 | # extract neighbouring information 276 | neighbours = _extract_neighbours(R) 277 | 278 | # calculate initial similarities 279 | S = {} 280 | for (ai, ar), (bi, br) in neighbours: 281 | S[(ai, bi)] = _calc_sim(ar, br, imsize) 282 | 283 | # hierarchal search 284 | while S != {}: 285 | 286 | # get highest similarity 287 | # i, j = sorted(S.items(), cmp=lambda a, b: cmp(a[1], b[1]))[-1][0] 288 | i, j = sorted(list(S.items()), key = lambda a: a[1])[-1][0] 289 | 290 | # merge corresponding regions 291 | t = max(R.keys()) + 1.0 292 | R[t] = _merge_regions(R[i], R[j]) 293 | 294 | # mark similarities for regions to be removed 295 | key_to_delete = [] 296 | for k, v in S.items(): 297 | if (i in k) or (j in k): 298 | key_to_delete.append(k) 299 | 300 | # remove old similarities of related regions 301 | for k in key_to_delete: 302 | del S[k] 303 | 304 | # calculate similarity set with the new region 305 | for k in filter(lambda a: a != (i, j), key_to_delete): 306 | n = k[1] if k[0] in (i, j) else k[0] 307 | S[(t, n)] = _calc_sim(R[t], R[n], imsize) 308 | 309 | regions = [] 310 | for k, r in R.items(): 311 | regions.append({ 312 | 'rect': ( 313 | r['min_x'], r['min_y'], 314 | r['max_x'] - r['min_x'], r['max_y'] - r['min_y']), 315 | 'size': r['size'], 316 | 'labels': r['labels'] 317 | }) 318 | 319 | return img, regions 320 | -------------------------------------------------------------------------------- /train_and_test.py: -------------------------------------------------------------------------------- 1 | import os 2 | import codecs 3 | import Networks 4 | import numpy as np 5 | import process_data 6 | import config as cfg 7 | import tensorflow as tf 8 | from sklearn.externals import joblib 9 | slim = tf.contrib.slim 10 | flower = {1:'pancy', 2:'Tulip'} 11 | class Solver : 12 | ''' 13 | 此类用于训练或测试自定义的网络结构。自定义的网络和数据都是原材料, Solver类属于锅,基于网络和数据来实现各种功能 14 | 15 | 参数:net --要用于训练或测试的网络结构(自定义的),属于类属性 16 | data --用来训练网络的数据,属于类属性 17 | is_training --当此类是用于训练网络是为True, 用网络进行预测时为false 18 | is_fineturn --当此类用于fineturn步骤和特征提取步骤时为True,其余时候为False 19 | is_Reg --当此类用于bounding_box回归时为True, 其余时候为false 20 | 21 | 函数:save_cfg() :将网络中的参数,训练过程中的参数以txt的文件保存下来 22 | train() :用于训练网络 23 | predict(input_data) :将input_data 作为网络的输入,得到网络运行之后的结果 24 | ''' 25 | def __init__(self, net, data, is_training=False, is_fineturn=False, is_Reg=False): 26 | self.net = net 27 | self.data = data 28 | self.is_Reg = is_Reg 29 | self.is_fineturn = is_fineturn 30 | self.summary_step = cfg.Summary_iter 31 | self.save_step = cfg.Save_iter 32 | self.max_iter = cfg.Max_iter 33 | self.staircase = cfg.Staircase 34 | 35 | if is_fineturn: 36 | self.initial_learning_rate = cfg.F_learning_rate 37 | self.decay_step = cfg.F_decay_iter 38 | self.decay_rate = cfg.F_decay_rate 39 | self.weights_file = cfg.T_weights_file 40 | self.output_dir = r'./output/fineturn' 41 | elif is_Reg: 42 | self.initial_learning_rate = cfg.R_learning_rate 43 | self.decay_step = cfg.R_decay_iter 44 | self.decay_rate = cfg.R_decay_rate 45 | if is_training == True: 46 | self.weights_file = None 47 | else: 48 | self.weights_file = cfg.R_weights_file 49 | self.output_dir = r'./output/Reg_box' 50 | else: 51 | self.initial_learning_rate = cfg.T_learning_rate 52 | self.decay_step = cfg.T_decay_iter 53 | self.decay_rate = cfg.T_decay_rate 54 | if is_training == True: 55 | self.weights_file = None 56 | else: 57 | self.weights_file = cfg.F_weights_file 58 | self.output_dir = r'./output/train_alexnet' 59 | self.save_cfg() 60 | #在恢复模型及其参数时,名字的R-CNN/fc_11网络层的参数不进行载入 61 | exclude = ['R-CNN/fc_11'] 62 | self.variable_to_restore = slim.get_variables_to_restore(exclude=exclude) 63 | self.variable_to_save = slim.get_variables_to_restore(exclude=[]) 64 | self.restorer = tf.train.Saver(self.variable_to_restore, max_to_keep=1) 65 | self.saver = tf.train.Saver(self.variable_to_save, max_to_keep=1) 66 | self.ckpt_file = os.path.join(self.output_dir, 'save.ckpt') 67 | 68 | self.summary_op = tf.summary.merge_all() 69 | self.writer = tf.summary.FileWriter(self.output_dir) 70 | 71 | self.global_step = tf.get_variable('global_step', [], initializer=tf.constant_initializer(0), trainable = False) 72 | self.learning_rate = tf.train.exponential_decay( 73 | self.initial_learning_rate, 74 | self.global_step, 75 | self.decay_step, 76 | self.decay_rate, 77 | self.staircase, 78 | name='learning_rate' 79 | ) 80 | if is_training : 81 | self.optimizer = tf.train.AdamOptimizer(learning_rate=self.learning_rate).minimize( 82 | self.net.total_loss ,global_step=self.global_step 83 | ) 84 | self.ema = tf.train.ExponentialMovingAverage(0.99) 85 | self.average_op = self.ema.apply(tf.trainable_variables()) 86 | with tf.control_dependencies([self.optimizer]): 87 | self.train_op = tf.group(self.average_op) 88 | 89 | self.sess = tf.Session() 90 | self.sess.run(tf.global_variables_initializer()) 91 | 92 | if self.weights_file is not None: 93 | self.restorer.restore(self.sess, self.weights_file) 94 | self.writer.add_graph(self.sess.graph) 95 | 96 | def save_cfg(self): 97 | with open(os.path.join(self.output_dir, 'config.txt'), 'w') as f: 98 | cfg_dict = cfg.__dict__ 99 | for key in sorted(cfg_dict.keys()): 100 | if key[0].isupper(): 101 | cfg_str = '{}: {}\n'.format(key, cfg_dict[key]) 102 | f.write(cfg_str) 103 | 104 | def train(self): 105 | for step in range(1, self.max_iter+1): 106 | if self.is_Reg: 107 | input, labels = self.data.get_Reg_batch() 108 | elif self.is_fineturn: 109 | input, labels = self.data.get_fineturn_batch() 110 | else: 111 | input, labels = self.data.get_batch() 112 | 113 | feed_dict = {self.net.input_data:input, self.net.label:labels} 114 | if step % self.summary_step == 0 : 115 | summary, loss, _=self.sess.run([self.summary_op,self.net.total_loss,self.train_op], feed_dict=feed_dict) 116 | self.writer.add_summary(summary, step) 117 | print("Data_epoch:"+str(self.data.epoch)+" "*5+"training_step:"+str(step)+" "*5+ "batch_loss:"+str(loss)) 118 | else: 119 | self.sess.run([self.train_op], feed_dict=feed_dict) 120 | if step % self.save_step == 0 : 121 | print("saving the model into " + self.ckpt_file) 122 | self.saver.save(self.sess, self.ckpt_file, global_step=self.global_step) 123 | 124 | def predict(self, input_data): 125 | feed_dict = {self.net.input_data :input_data} 126 | predict_result = self.sess.run(self.net.logits, feed_dict = feed_dict) 127 | return predict_result 128 | 129 | def get_Solvers(): 130 | ''' 131 | 此函数用于得到三个Solver:特征提取的Solver,SVM预测分类的solver,Reg_Box预测框回归的Solver 132 | 133 | :return: 134 | ''' 135 | weight_outputs = ['train_alexnet', 'fineturn', 'SVM_model', 'Reg_box'] 136 | for weight_output in weight_outputs: 137 | output_path = os.path.join(cfg.Out_put, weight_output) 138 | if not os.path.exists(output_path): 139 | os.makedirs(output_path) 140 | 141 | if len(os.listdir(r'./output/train_alexnet')) == 0: 142 | Train_alexnet = tf.Graph() 143 | with Train_alexnet.as_default(): 144 | Train_alexnet_data = process_data.Train_Alexnet_Data() 145 | Train_alexnet_net = Networks.Alexnet_Net(is_training=True, is_fineturn=False, is_SVM=False) 146 | Train_alexnet_solver = Solver(Train_alexnet_net, Train_alexnet_data, is_training=True, is_fineturn=False, is_Reg=False) 147 | Train_alexnet_solver.train() 148 | 149 | if len(os.listdir(r'./output/fineturn')) == 0: 150 | Fineturn = tf.Graph() 151 | with Fineturn.as_default(): 152 | Fineturn_data = process_data.FineTun_And_Predict_Data() 153 | Fineturn_net = Networks.Alexnet_Net(is_training=True, is_fineturn=True, is_SVM=False) 154 | Fineturn_solver = Solver(Fineturn_net, Fineturn_data, is_training=True, is_fineturn=True, is_Reg=False) 155 | Fineturn_solver.train() 156 | 157 | Features = tf.Graph() 158 | with Features.as_default(): 159 | Features_net = Networks.Alexnet_Net(is_training=False, is_fineturn=True, is_SVM=True) 160 | Features_solver = Solver(Features_net, None, is_training=False, is_fineturn=True, is_Reg=False) 161 | Features_data = process_data.FineTun_And_Predict_Data(Features_solver, is_svm=True, is_save=True) 162 | 163 | svms = [] 164 | if len(os.listdir(r'./output/SVM_model')) == 0: 165 | SVM_net = Networks.SVM(Features_data) 166 | SVM_net.train() 167 | for file in os.listdir(r'./output/SVM_model'): 168 | svms.append(joblib.load(os.path.join('./output/SVM_model', file))) 169 | 170 | Reg_box = tf.Graph() 171 | with Reg_box.as_default(): 172 | Reg_box_data = Features_data 173 | Reg_box_net = Networks.Reg_Net(is_training=True) 174 | if len(os.listdir(r'./output/Reg_box')) == 0: 175 | Reg_box_solver = Solver(Reg_box_net, Reg_box_data, is_training=True, is_fineturn=False, is_Reg=True) 176 | Reg_box_solver.train() 177 | else: 178 | Reg_box_solver = Solver(Reg_box_net, Reg_box_data, is_training=False, is_fineturn=False, is_Reg=True) 179 | 180 | return Features_solver, svms, Reg_box_solver 181 | 182 | if __name__ =='__main__': 183 | 184 | Features_solver, svms, Reg_box_solver =get_Solvers() 185 | 186 | img_path = './2flowers/jpg/0/image_0561.jpg' # or './17flowers/jpg/16/****.jpg' 187 | imgs, verts = process_data.image_proposal(img_path) 188 | process_data.show_rect(img_path, verts, ' ') 189 | features = Features_solver.predict(imgs) 190 | print(np.shape(features)) 191 | 192 | results = [] 193 | results_old = [] 194 | results_label = [] 195 | count = 0 196 | for f in features: 197 | for svm in svms: 198 | pred = svm.predict([f.tolist()]) 199 | # not background 200 | if pred[0] != 0: 201 | results_old.append(verts[count]) 202 | #print(Reg_box_solver.predict([f.tolist()])) 203 | if Reg_box_solver.predict([f.tolist()])[0][0] > 0.5: 204 | px, py, pw, ph = verts[count][0], verts[count][1], verts[count][2], verts[count][3] 205 | old_center_x, old_center_y = px + pw / 2.0, py + ph / 2.0 206 | x_ping, y_ping, w_suo, h_suo = Reg_box_solver.predict([f.tolist()])[0][1], \ 207 | Reg_box_solver.predict([f.tolist()])[0][2], \ 208 | Reg_box_solver.predict([f.tolist()])[0][3], \ 209 | Reg_box_solver.predict([f.tolist()])[0][4] 210 | new__center_x = x_ping * pw + old_center_x 211 | new__center_y = y_ping * ph + old_center_y 212 | new_w = pw * np.exp(w_suo) 213 | new_h = ph * np.exp(h_suo) 214 | new_verts = [new__center_x, new__center_y, new_w, new_h] 215 | results.append(new_verts) 216 | results_label.append(pred[0]) 217 | count += 1 218 | 219 | average_center_x, average_center_y, average_w,average_h = 0, 0, 0, 0 220 | #给预测出的所有的预测框区一个平均值,代表其预测出的最终位置 221 | for vert in results: 222 | average_center_x += vert[0] 223 | average_center_y += vert[1] 224 | average_w += vert[2] 225 | average_h += vert[3] 226 | average_center_x = average_center_x / len(results) 227 | average_center_y = average_center_y / len(results) 228 | average_w = average_w / len(results) 229 | average_h = average_h / len(results) 230 | average_result = [[average_center_x, average_center_y, average_w, average_h]] 231 | result_label = max(results_label, key=results_label.count) 232 | process_data.show_rect(img_path, results_old,' ') 233 | process_data.show_rect(img_path, average_result,flower[result_label]) 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | -------------------------------------------------------------------------------- /process_data.py: -------------------------------------------------------------------------------- 1 | import os 2 | import cv2 3 | import sys 4 | import math 5 | import codecs 6 | import pickle 7 | import skimage 8 | import numpy as np 9 | import config as cfg 10 | import selectivesearch 11 | import matplotlib.pyplot as plt 12 | import matplotlib.patches as mpatches 13 | 14 | def resize_image(in_image, new_width, new_height, out_image=None, resize_mode=cv2.INTER_CUBIC): 15 | ''' 16 | 17 | :param in_image: 输入的图片 18 | :param new_width: resize后的新图片的宽 19 | :param new_height: resize后的新图片的长 20 | :param out_image: 保存resize后的新图片的地址 21 | :param resize_mode: 用于resize的cv2中的模式 22 | :return: resize后的新图片 23 | ''' 24 | img = cv2.resize(in_image, (new_width, new_height), resize_mode) 25 | if out_image: 26 | cv2.imwrite(out_image, img) 27 | return img 28 | 29 | def clip_pic(img, rect): 30 | ''' 31 | 32 | :param img: 输入的图片 33 | :param rect: rect矩形框的4个参数 34 | :return: 输入的图片中相对应rect位置的部分 与 矩形框的一对对角点和长宽信息 35 | ''' 36 | x, y, w, h = rect[0], rect[1], rect[2], rect[3] 37 | x_1 = x + w 38 | y_1 = y + h 39 | return img[y:y_1, x:x_1, :], [x, y, x_1, y_1, w, h] 40 | 41 | def IOU(ver1, vertice2): 42 | ''' 43 | 用于计算两个矩形框的IOU 44 | :param ver1: 第一个矩形框 45 | :param vertice2: 第二个矩形框 46 | :return: 两个矩形框的IOU值 47 | ''' 48 | vertice1 = [ver1[0], ver1[1], ver1[0]+ver1[2], ver1[1]+ver1[3]] 49 | area_inter = if_intersection(vertice1[0], vertice1[2], vertice1[1], vertice1[3], vertice2[0], vertice2[2], vertice2[1], vertice2[3]) 50 | if area_inter: 51 | area_1 = ver1[2] * ver1[3] 52 | area_2 = vertice2[4] * vertice2[5] 53 | iou = float(area_inter) / (area_1 + area_2 - area_inter) 54 | return iou 55 | return False 56 | 57 | def view_bar(message, num, total): 58 | ''' 59 | 进度条工具 60 | :param message: 在进度条前所要显示的信息 61 | :param num: 当前所已经处理了的对象的个数 62 | :param total: 要处理的对象的总的个数 63 | :return: 64 | ''' 65 | rate = num / total 66 | rate_num = int(rate * 40) 67 | rate_nums = math.ceil(rate * 100) 68 | r = '\r%s:[%s%s]%d%%\t%d/%d' % (message, ">" * rate_num, " " * (40 - rate_num), rate_nums, num, total,) 69 | sys.stdout.write(r) 70 | sys.stdout.flush() 71 | 72 | def show_rect(img_path, regions, message): 73 | ''' 74 | :param img_path: 要显示的原图片 75 | :param regions: 要在原图片上标注的矩形框的参数 76 | :param message: 在矩形框周围添加的信息 77 | :return: 78 | ''' 79 | img = cv2.imread(img_path) 80 | img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 81 | for x, y, w, h in regions: 82 | x, y, w, h =int(x),int(y),int(w),int(h) 83 | rect = cv2.rectangle( 84 | img,(x, y), (x+w, y+h), (0,255,0),2) 85 | font = cv2.FONT_HERSHEY_SIMPLEX 86 | cv2.putText(img, message, (x+20, y+40),font, 1,(255,0,0),2) 87 | plt.imshow(img) 88 | plt.show() 89 | 90 | def image_proposal(img_path): 91 | ''' 92 | 输入要进行候选框提取的图片 93 | 利用图片的各像素点的特点进行候选框的提取,由于候选框数量太多且针对不同的问题背景所需要的候选框的尺寸是不一样的 94 | 因此要经过一系列的规则加以限制来进一步减小特征框的数量 95 | ''' 96 | img = cv2.imread(img_path) 97 | img_lbl, regions = selectivesearch.selective_search(img, scale=500, sigma=0.9, min_size=10) 98 | candidates = set() 99 | images = [] 100 | vertices = [] 101 | for r in regions: 102 | if r['rect'] in candidates: 103 | continue 104 | if r['size'] < 220: 105 | continue 106 | if (r['rect'][2] * r['rect'][3]) < 500: 107 | continue 108 | proposal_img, proposal_vertice = clip_pic(img, r['rect']) 109 | if len(proposal_img) == 0: 110 | continue 111 | x, y, w, h = r['rect'] 112 | if w == 0 or h == 0: 113 | continue 114 | [a, b, c] = np.shape(proposal_img) 115 | if a == 0 or b == 0 or c == 0: 116 | continue 117 | resized_proposal_img = resize_image(proposal_img, cfg.Image_size, cfg.Image_size) 118 | candidates.add(r['rect']) 119 | img_float = np.asarray(resized_proposal_img, dtype="float32") 120 | images.append(img_float) 121 | vertices.append(r['rect']) 122 | return images, vertices 123 | 124 | def if_intersection(xmin_a, xmax_a, ymin_a, ymax_a, xmin_b, xmax_b, ymin_b, ymax_b): 125 | if_intersect = False 126 | if xmin_a < xmax_b <= xmax_a and (ymin_a < ymax_b <= ymax_a or ymin_a <= ymin_b < ymax_a): 127 | if_intersect = True 128 | elif xmin_a <= xmin_b < xmax_a and (ymin_a < ymax_b <= ymax_a or ymin_a <= ymin_b < ymax_a): 129 | if_intersect = True 130 | elif xmin_b < xmax_a <= xmax_b and (ymin_b < ymax_a <= ymax_b or ymin_b <= ymin_a < ymax_b): 131 | if_intersect = True 132 | elif xmin_b <= xmin_a < xmax_b and (ymin_b < ymax_a <= ymax_b or ymin_b <= ymin_a < ymax_b): 133 | if_intersect = True 134 | else: 135 | return if_intersect 136 | if if_intersect: 137 | x_sorted_list = sorted([xmin_a, xmax_a, xmin_b, xmax_b]) 138 | y_sorted_list = sorted([ymin_a, ymax_a, ymin_b, ymax_b]) 139 | x_intersect_w = x_sorted_list[2] - x_sorted_list[1] 140 | y_intersect_h = y_sorted_list[2] - y_sorted_list[1] 141 | area_inter = x_intersect_w * y_intersect_h 142 | return area_inter 143 | 144 | class Train_Alexnet_Data(object): 145 | ''' 146 | 此类用于对flower17数据进行处理并保存为文件 147 | ''' 148 | def __init__(self): 149 | self.train_batch_size = cfg.T_batch_size 150 | self.image_size = cfg.Image_size 151 | 152 | self.train_list = cfg.Train_list 153 | self.train_class_num = cfg.T_class_num 154 | self.flower17_data = [] 155 | self.data = cfg.DATA 156 | if not os.path.isdir(self.data): 157 | os.makedirs(self.data) 158 | self.epoch = 0 159 | self.cursor = 0 160 | self.load_17flowers() 161 | 162 | 163 | def load_17flowers(self,save_name='17flowers.pkl'): 164 | ''' 165 | 在train_txt文件中以列为单位依次获取 图片地址、图片类别等信息 166 | 将图片的矩阵数据(img)与图片类别数据(lable)作为一个整体进行保存 167 | ''' 168 | save_path = os.path.join(self.data, save_name) 169 | if os.path.isfile(save_path): 170 | self.flower17_data = pickle.load(open(save_path, 'rb')) 171 | else: 172 | with codecs.open(self.train_list, 'r', 'utf-8') as f: 173 | lines = f.readlines() 174 | for num, line in enumerate(lines): 175 | context = line.strip().split(' ') 176 | image_path = context[0] 177 | index = int(context[1]) 178 | 179 | img = cv2.imread(image_path) 180 | img = resize_image(img, self.image_size, self.image_size) 181 | img = np.asarray(img, dtype='float32') 182 | 183 | label = np.zeros(self.train_class_num) 184 | label[index] = 1 185 | self.flower17_data.append([img, label]) 186 | view_bar("Process train_image of %s" % image_path, num + 1, len(lines)) 187 | pickle.dump(self.flower17_data,open(save_path,'wb')) 188 | 189 | def get_batch(self): 190 | ''' 191 | 网络训练时调用get_batch来获得每一轮训练的数据 192 | ''' 193 | images = np.zeros((self.train_batch_size, self.image_size, self.image_size, 3)) 194 | labels = np.zeros((self.train_batch_size, self.train_class_num)) 195 | count = 0 196 | while( count < self.train_batch_size): 197 | images[count] = self.flower17_data[self.cursor][0] 198 | labels[count] = self.flower17_data[self.cursor][1] 199 | count += 1 200 | self.cursor += 1 201 | if self.cursor >= len(self.flower17_data) : 202 | self.cursor = 0 203 | self.epoch += 1 204 | np.random.shuffle(self.flower17_data) 205 | print(self.epoch) 206 | return images, labels 207 | 208 | class FineTun_And_Predict_Data(object): 209 | ''' 210 | 此类的功能与函数与上一个类相似 211 | ''' 212 | def __init__(self, solver=None, is_svm=False, is_save=True): 213 | self.solver = solver 214 | self.is_svm = is_svm 215 | self.is_save = is_save 216 | 217 | self.fineturn_list = cfg.Finetune_list 218 | self.image_size = cfg.Image_size 219 | self.F_class_num = cfg.F_class_num 220 | self.R_class_num = cfg.R_class_num 221 | 222 | self.fineturn_batch_size = cfg.F_batch_size 223 | self.Reg_batch_size = cfg.R_batch_size 224 | 225 | self.fineturn_save_path = cfg.Fineturn_save 226 | if not os.path.isdir(self.fineturn_save_path): 227 | os.makedirs(self.fineturn_save_path) 228 | 229 | self.SVM_and_Reg_save_path = cfg.SVM_and_Reg_save 230 | if not os.path.isdir(self.SVM_and_Reg_save_path): 231 | os.makedirs(self.SVM_and_Reg_save_path) 232 | 233 | self.fineturn_threshold = cfg.F_fineturn_threshold 234 | self.svm_threshold = cfg.F_svm_threshold 235 | self.reg_threshold = cfg.F_regression_threshold 236 | 237 | self.SVM_data_dic = {} 238 | self.Reg_data = [] 239 | self.fineturn_data = [] 240 | 241 | self.cursor = 0 242 | self.epoch = 0 243 | if self.is_svm: 244 | if len(os.listdir(self.SVM_and_Reg_save_path)) == 0: 245 | self.load_2flowers() 246 | else: 247 | if len(os.listdir(self.fineturn_save_path)) == 0: 248 | self.load_2flowers() 249 | self.load_from_npy() 250 | 251 | def load_2flowers(self): 252 | with codecs.open(self.fineturn_list, 'r', 'utf-8') as f: 253 | lines = f.readlines() 254 | for num, line in enumerate(lines): 255 | labels = [] 256 | labels_bbox = [] 257 | images = [] 258 | context = line.strip().split(' ') 259 | image_path = context[0] 260 | ref_rect = context[2].split(',') 261 | ground_truth = [int(i) for i in ref_rect] 262 | img = cv2.imread(image_path) 263 | img_lbl, regions = selectivesearch.selective_search(img, scale=500, sigma=0.9, min_size=10) 264 | candidate = set() 265 | for r in regions: 266 | if r['rect'] in candidate: 267 | continue 268 | if r['size'] < 200 : 269 | continue 270 | if (r['rect'][2] * r['rect'][3]) <500: 271 | continue 272 | proposal_img, proposal_vertice = clip_pic(img, r['rect']) 273 | if len(proposal_img) == 0: 274 | continue 275 | x, y, w, h = r['rect'] 276 | if w==0 or h==0 : 277 | continue 278 | [a, b, c] =np.shape(proposal_img) 279 | if a==0 or b==0 or c==0 : 280 | continue 281 | resized_proposal_img = resize_image(proposal_img, self.image_size,self.image_size) 282 | candidate.add(r['rect']) 283 | img_float = np.asarray(resized_proposal_img, dtype="float32") 284 | if self.is_svm: 285 | feature = self.solver.predict([img_float]) 286 | images.append(feature[0]) 287 | else : 288 | images.append(img_float) 289 | 290 | iou_val = IOU(ground_truth, proposal_vertice) 291 | px = float(proposal_vertice[0]) + float(proposal_vertice[4] / 2.0) 292 | py = float(proposal_vertice[1]) + float(proposal_vertice[5] / 2.0) 293 | ph = float(proposal_vertice[5]) 294 | pw = float(proposal_vertice[4]) 295 | 296 | gx = float(ref_rect[0]) 297 | gy = float(ref_rect[1]) 298 | gw = float(ref_rect[2]) 299 | gh = float(ref_rect[3]) 300 | 301 | index = int(context[1]) 302 | if self.is_svm: 303 | if iou_val < self.svm_threshold: 304 | labels.append(0) 305 | else: 306 | labels.append(index) 307 | label = np.zeros(5) 308 | label[1:5] = [(gx - px) / pw, (gy - py) / ph, np.log(gw / pw), np.log(gh / ph)] 309 | if iou_val < self.reg_threshold: 310 | label[0] = 0 311 | else: 312 | label[0] = 1 313 | labels_bbox.append(label) 314 | 315 | else: 316 | label = np.zeros(self.F_class_num ) 317 | if iou_val < self.fineturn_threshold : 318 | label[0] = 1 319 | else: 320 | label[index] = 1 321 | labels.append(label) 322 | view_bar("Process SVM_and_Reg_image of %s" % image_path, num + 1, len(lines)) 323 | if self.is_save: 324 | if self.is_svm: 325 | if not os.path.exists(os.path.join(self.SVM_and_Reg_save_path, str(context[1]))): 326 | os.makedirs(os.path.join(self.SVM_and_Reg_save_path, str(context[1]))) 327 | np.save((os.path.join(self.SVM_and_Reg_save_path, str(context[1]), context[0].split('/')[-1].split('.')[0].strip()) 328 | + '_data.npy'),[images, labels, labels_bbox]) 329 | else: 330 | np.save((os.path.join(self.fineturn_save_path, context[0].split('/')[-1].split('.')[0].strip()) + 331 | '_data.npy'),[images, labels]) 332 | 333 | def load_from_npy(self): 334 | if self.is_svm: 335 | data_set = self.SVM_and_Reg_save_path 336 | data_dirs = os.listdir(data_set) 337 | for data_dir in data_dirs: 338 | SVM_data = [] 339 | data_list = os.listdir(os.path.join(data_set, data_dir)) 340 | for ind, d in enumerate(data_list): 341 | i, l, k = np.load(os.path.join(data_set, data_dir,d)) 342 | for index in range(len(i)): 343 | SVM_data.append([i[index], l[index]]) 344 | self.Reg_data.append([i[index], k[index]]) 345 | view_bar("Load SVM and Reg data of %s" % (data_dir+d), ind + 1, len(data_list)) 346 | self.SVM_data_dic[data_dir] = SVM_data 347 | 348 | 349 | else: 350 | data_set = self.fineturn_save_path 351 | data_list = os.listdir(data_set) 352 | for ind, d in enumerate(data_list): 353 | i, l = np.load(os.path.join(data_set, d)) 354 | for index in range(len(i)): 355 | self.fineturn_data.append([i[index], l[index]]) 356 | view_bar("Load fineturn data of %s" % d, ind + 1, len(data_list)) 357 | 358 | def get_fineturn_batch(self): 359 | images = np.zeros((self.fineturn_batch_size, self.image_size, self.image_size, 3)) 360 | labels = np.zeros((self.fineturn_batch_size, self.F_class_num)) 361 | count = 0 362 | while (count < self.fineturn_batch_size): 363 | images[count] = self.fineturn_data[self.cursor][0] 364 | labels[count] = self.fineturn_data[self.cursor][1] 365 | count += 1 366 | self.cursor += 1 367 | if self.cursor >= len(self.fineturn_data): 368 | self.cursor = 0 369 | self.epoch += 1 370 | np.random.shuffle(self.fineturn_data) 371 | print(self.epoch) 372 | return images, labels 373 | 374 | 375 | def get_SVM_data(self, data_dir): 376 | images = [] 377 | labels = [] 378 | for index in range(len(self.SVM_data_dic[data_dir])): 379 | images.append(self.SVM_data_dic[data_dir][index][0]) 380 | labels.append(self.SVM_data_dic[data_dir][index][1]) 381 | return images, labels 382 | 383 | def get_Reg_batch(self): 384 | images = np.zeros((self.Reg_batch_size, 4096)) 385 | labels = np.zeros((self.Reg_batch_size, self.R_class_num)) 386 | count = 0 387 | while (count < self.Reg_batch_size): 388 | images[count] = self.Reg_data[self.cursor][0] 389 | labels[count] = self.Reg_data[self.cursor][1] 390 | count += 1 391 | self.cursor += 1 392 | if self.cursor >= len(self.Reg_data): 393 | self.cursor = 0 394 | self.epoch += 1 395 | np.random.shuffle(self.Reg_data) 396 | return images,labels 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | -------------------------------------------------------------------------------- /train_list.txt: -------------------------------------------------------------------------------- 1 | 17flowers/jpg/13/image_1093.jpg 13 2 | 17flowers/jpg/13/image_1094.jpg 13 3 | 17flowers/jpg/13/image_1098.jpg 13 4 | 17flowers/jpg/13/image_1104.jpg 13 5 | 17flowers/jpg/13/image_1100.jpg 13 6 | 17flowers/jpg/13/image_1110.jpg 13 7 | 17flowers/jpg/13/image_1080.jpg 13 8 | 17flowers/jpg/13/image_1092.jpg 13 9 | 17flowers/jpg/13/image_1084.jpg 13 10 | 17flowers/jpg/13/image_1103.jpg 13 11 | 17flowers/jpg/13/image_1064.jpg 13 12 | 17flowers/jpg/13/image_1089.jpg 13 13 | 17flowers/jpg/13/image_1055.jpg 13 14 | 17flowers/jpg/13/image_1085.jpg 13 15 | 17flowers/jpg/13/image_1095.jpg 13 16 | 17flowers/jpg/13/image_1048.jpg 13 17 | 17flowers/jpg/13/image_1120.jpg 13 18 | 17flowers/jpg/13/image_1061.jpg 13 19 | 17flowers/jpg/13/image_1074.jpg 13 20 | 17flowers/jpg/13/image_1045.jpg 13 21 | 17flowers/jpg/13/image_1063.jpg 13 22 | 17flowers/jpg/13/image_1076.jpg 13 23 | 17flowers/jpg/13/image_1097.jpg 13 24 | 17flowers/jpg/13/image_1072.jpg 13 25 | 17flowers/jpg/13/image_1102.jpg 13 26 | 17flowers/jpg/13/image_1115.jpg 13 27 | 17flowers/jpg/13/image_1049.jpg 13 28 | 17flowers/jpg/13/image_1088.jpg 13 29 | 17flowers/jpg/13/image_1062.jpg 13 30 | 17flowers/jpg/13/image_1091.jpg 13 31 | 17flowers/jpg/13/image_1046.jpg 13 32 | 17flowers/jpg/13/image_1077.jpg 13 33 | 17flowers/jpg/13/image_1119.jpg 13 34 | 17flowers/jpg/13/image_1087.jpg 13 35 | 17flowers/jpg/13/image_1071.jpg 13 36 | 17flowers/jpg/13/image_1106.jpg 13 37 | 17flowers/jpg/13/image_1052.jpg 13 38 | 17flowers/jpg/13/image_1079.jpg 13 39 | 17flowers/jpg/13/image_1041.jpg 13 40 | 17flowers/jpg/13/image_1107.jpg 13 41 | 17flowers/jpg/13/image_1069.jpg 13 42 | 17flowers/jpg/13/image_1068.jpg 13 43 | 17flowers/jpg/13/image_1047.jpg 13 44 | 17flowers/jpg/13/image_1053.jpg 13 45 | 17flowers/jpg/13/image_1070.jpg 13 46 | 17flowers/jpg/13/image_1109.jpg 13 47 | 17flowers/jpg/13/image_1058.jpg 13 48 | 17flowers/jpg/13/image_1059.jpg 13 49 | 17flowers/jpg/13/image_1113.jpg 13 50 | 17flowers/jpg/13/image_1082.jpg 13 51 | 17flowers/jpg/13/image_1105.jpg 13 52 | 17flowers/jpg/13/image_1067.jpg 13 53 | 17flowers/jpg/13/image_1066.jpg 13 54 | 17flowers/jpg/13/image_1118.jpg 13 55 | 17flowers/jpg/13/image_1051.jpg 13 56 | 17flowers/jpg/13/image_1116.jpg 13 57 | 17flowers/jpg/13/image_1075.jpg 13 58 | 17flowers/jpg/13/image_1096.jpg 13 59 | 17flowers/jpg/13/image_1057.jpg 13 60 | 17flowers/jpg/13/image_1108.jpg 13 61 | 17flowers/jpg/13/image_1111.jpg 13 62 | 17flowers/jpg/13/image_1042.jpg 13 63 | 17flowers/jpg/13/image_1065.jpg 13 64 | 17flowers/jpg/13/image_1054.jpg 13 65 | 17flowers/jpg/13/image_1101.jpg 13 66 | 17flowers/jpg/13/image_1086.jpg 13 67 | 17flowers/jpg/13/image_1112.jpg 13 68 | 17flowers/jpg/13/image_1056.jpg 13 69 | 17flowers/jpg/13/image_1099.jpg 13 70 | 17flowers/jpg/13/image_1073.jpg 13 71 | 17flowers/jpg/13/image_1083.jpg 13 72 | 17flowers/jpg/13/image_1078.jpg 13 73 | 17flowers/jpg/13/image_1050.jpg 13 74 | 17flowers/jpg/13/image_1044.jpg 13 75 | 17flowers/jpg/13/image_1043.jpg 13 76 | 17flowers/jpg/13/image_1060.jpg 13 77 | 17flowers/jpg/13/image_1081.jpg 13 78 | 17flowers/jpg/13/image_1090.jpg 13 79 | 17flowers/jpg/13/image_1117.jpg 13 80 | 17flowers/jpg/13/image_1114.jpg 13 81 | 17flowers/jpg/10/image_0836.jpg 10 82 | 17flowers/jpg/10/image_0825.jpg 10 83 | 17flowers/jpg/10/image_0864.jpg 10 84 | 17flowers/jpg/10/image_0848.jpg 10 85 | 17flowers/jpg/10/image_0833.jpg 10 86 | 17flowers/jpg/10/image_0839.jpg 10 87 | 17flowers/jpg/10/image_0878.jpg 10 88 | 17flowers/jpg/10/image_0821.jpg 10 89 | 17flowers/jpg/10/image_0847.jpg 10 90 | 17flowers/jpg/10/image_0834.jpg 10 91 | 17flowers/jpg/10/image_0849.jpg 10 92 | 17flowers/jpg/10/image_0829.jpg 10 93 | 17flowers/jpg/10/image_0872.jpg 10 94 | 17flowers/jpg/10/image_0805.jpg 10 95 | 17flowers/jpg/10/image_0823.jpg 10 96 | 17flowers/jpg/10/image_0871.jpg 10 97 | 17flowers/jpg/10/image_0809.jpg 10 98 | 17flowers/jpg/10/image_0852.jpg 10 99 | 17flowers/jpg/10/image_0853.jpg 10 100 | 17flowers/jpg/10/image_0874.jpg 10 101 | 17flowers/jpg/10/image_0843.jpg 10 102 | 17flowers/jpg/10/image_0830.jpg 10 103 | 17flowers/jpg/10/image_0840.jpg 10 104 | 17flowers/jpg/10/image_0876.jpg 10 105 | 17flowers/jpg/10/image_0879.jpg 10 106 | 17flowers/jpg/10/image_0867.jpg 10 107 | 17flowers/jpg/10/image_0858.jpg 10 108 | 17flowers/jpg/10/image_0841.jpg 10 109 | 17flowers/jpg/10/image_0818.jpg 10 110 | 17flowers/jpg/10/image_0803.jpg 10 111 | 17flowers/jpg/10/image_0869.jpg 10 112 | 17flowers/jpg/10/image_0838.jpg 10 113 | 17flowers/jpg/10/image_0807.jpg 10 114 | 17flowers/jpg/10/image_0851.jpg 10 115 | 17flowers/jpg/10/image_0817.jpg 10 116 | 17flowers/jpg/10/image_0856.jpg 10 117 | 17flowers/jpg/10/image_0857.jpg 10 118 | 17flowers/jpg/10/image_0845.jpg 10 119 | 17flowers/jpg/10/image_0804.jpg 10 120 | 17flowers/jpg/10/image_0844.jpg 10 121 | 17flowers/jpg/10/image_0820.jpg 10 122 | 17flowers/jpg/10/image_0826.jpg 10 123 | 17flowers/jpg/10/image_0816.jpg 10 124 | 17flowers/jpg/10/image_0861.jpg 10 125 | 17flowers/jpg/10/image_0866.jpg 10 126 | 17flowers/jpg/10/image_0812.jpg 10 127 | 17flowers/jpg/10/image_0863.jpg 10 128 | 17flowers/jpg/10/image_0862.jpg 10 129 | 17flowers/jpg/10/image_0850.jpg 10 130 | 17flowers/jpg/10/image_0860.jpg 10 131 | 17flowers/jpg/10/image_0859.jpg 10 132 | 17flowers/jpg/10/image_0837.jpg 10 133 | 17flowers/jpg/10/image_0819.jpg 10 134 | 17flowers/jpg/10/image_0870.jpg 10 135 | 17flowers/jpg/10/image_0806.jpg 10 136 | 17flowers/jpg/10/image_0835.jpg 10 137 | 17flowers/jpg/10/image_0822.jpg 10 138 | 17flowers/jpg/10/image_0832.jpg 10 139 | 17flowers/jpg/10/image_0854.jpg 10 140 | 17flowers/jpg/10/image_0880.jpg 10 141 | 17flowers/jpg/10/image_0801.jpg 10 142 | 17flowers/jpg/10/image_0828.jpg 10 143 | 17flowers/jpg/10/image_0875.jpg 10 144 | 17flowers/jpg/10/image_0813.jpg 10 145 | 17flowers/jpg/10/image_0815.jpg 10 146 | 17flowers/jpg/10/image_0855.jpg 10 147 | 17flowers/jpg/10/image_0824.jpg 10 148 | 17flowers/jpg/10/image_0814.jpg 10 149 | 17flowers/jpg/10/image_0868.jpg 10 150 | 17flowers/jpg/10/image_0877.jpg 10 151 | 17flowers/jpg/10/image_0811.jpg 10 152 | 17flowers/jpg/10/image_0810.jpg 10 153 | 17flowers/jpg/10/image_0802.jpg 10 154 | 17flowers/jpg/10/image_0846.jpg 10 155 | 17flowers/jpg/10/image_0865.jpg 10 156 | 17flowers/jpg/10/image_0808.jpg 10 157 | 17flowers/jpg/10/image_0842.jpg 10 158 | 17flowers/jpg/10/image_0831.jpg 10 159 | 17flowers/jpg/10/image_0827.jpg 10 160 | 17flowers/jpg/10/image_0873.jpg 10 161 | 17flowers/jpg/2/image_0167.jpg 2 162 | 17flowers/jpg/2/image_0162.jpg 2 163 | 17flowers/jpg/2/image_0213.jpg 2 164 | 17flowers/jpg/2/image_0166.jpg 2 165 | 17flowers/jpg/2/image_0205.jpg 2 166 | 17flowers/jpg/2/image_0173.jpg 2 167 | 17flowers/jpg/2/image_0199.jpg 2 168 | 17flowers/jpg/2/image_0200.jpg 2 169 | 17flowers/jpg/2/image_0180.jpg 2 170 | 17flowers/jpg/2/image_0235.jpg 2 171 | 17flowers/jpg/2/image_0223.jpg 2 172 | 17flowers/jpg/2/image_0170.jpg 2 173 | 17flowers/jpg/2/image_0164.jpg 2 174 | 17flowers/jpg/2/image_0211.jpg 2 175 | 17flowers/jpg/2/image_0201.jpg 2 176 | 17flowers/jpg/2/image_0227.jpg 2 177 | 17flowers/jpg/2/image_0240.jpg 2 178 | 17flowers/jpg/2/image_0165.jpg 2 179 | 17flowers/jpg/2/image_0236.jpg 2 180 | 17flowers/jpg/2/image_0183.jpg 2 181 | 17flowers/jpg/2/image_0191.jpg 2 182 | 17flowers/jpg/2/image_0204.jpg 2 183 | 17flowers/jpg/2/image_0216.jpg 2 184 | 17flowers/jpg/2/image_0171.jpg 2 185 | 17flowers/jpg/2/image_0195.jpg 2 186 | 17flowers/jpg/2/image_0208.jpg 2 187 | 17flowers/jpg/2/image_0228.jpg 2 188 | 17flowers/jpg/2/image_0218.jpg 2 189 | 17flowers/jpg/2/image_0168.jpg 2 190 | 17flowers/jpg/2/image_0192.jpg 2 191 | 17flowers/jpg/2/image_0190.jpg 2 192 | 17flowers/jpg/2/image_0238.jpg 2 193 | 17flowers/jpg/2/image_0169.jpg 2 194 | 17flowers/jpg/2/image_0219.jpg 2 195 | 17flowers/jpg/2/image_0224.jpg 2 196 | 17flowers/jpg/2/image_0212.jpg 2 197 | 17flowers/jpg/2/image_0239.jpg 2 198 | 17flowers/jpg/2/image_0179.jpg 2 199 | 17flowers/jpg/2/image_0234.jpg 2 200 | 17flowers/jpg/2/image_0189.jpg 2 201 | 17flowers/jpg/2/image_0231.jpg 2 202 | 17flowers/jpg/2/image_0206.jpg 2 203 | 17flowers/jpg/2/image_0184.jpg 2 204 | 17flowers/jpg/2/image_0222.jpg 2 205 | 17flowers/jpg/2/image_0197.jpg 2 206 | 17flowers/jpg/2/image_0198.jpg 2 207 | 17flowers/jpg/2/image_0194.jpg 2 208 | 17flowers/jpg/2/image_0215.jpg 2 209 | 17flowers/jpg/2/image_0176.jpg 2 210 | 17flowers/jpg/2/image_0225.jpg 2 211 | 17flowers/jpg/2/image_0181.jpg 2 212 | 17flowers/jpg/2/image_0232.jpg 2 213 | 17flowers/jpg/2/image_0187.jpg 2 214 | 17flowers/jpg/2/image_0172.jpg 2 215 | 17flowers/jpg/2/image_0233.jpg 2 216 | 17flowers/jpg/2/image_0230.jpg 2 217 | 17flowers/jpg/2/image_0182.jpg 2 218 | 17flowers/jpg/2/image_0229.jpg 2 219 | 17flowers/jpg/2/image_0196.jpg 2 220 | 17flowers/jpg/2/image_0214.jpg 2 221 | 17flowers/jpg/2/image_0163.jpg 2 222 | 17flowers/jpg/2/image_0177.jpg 2 223 | 17flowers/jpg/2/image_0185.jpg 2 224 | 17flowers/jpg/2/image_0203.jpg 2 225 | 17flowers/jpg/2/image_0174.jpg 2 226 | 17flowers/jpg/2/image_0175.jpg 2 227 | 17flowers/jpg/2/image_0226.jpg 2 228 | 17flowers/jpg/2/image_0161.jpg 2 229 | 17flowers/jpg/2/image_0178.jpg 2 230 | 17flowers/jpg/2/image_0221.jpg 2 231 | 17flowers/jpg/2/image_0210.jpg 2 232 | 17flowers/jpg/2/image_0237.jpg 2 233 | 17flowers/jpg/2/image_0202.jpg 2 234 | 17flowers/jpg/2/image_0193.jpg 2 235 | 17flowers/jpg/2/image_0188.jpg 2 236 | 17flowers/jpg/2/image_0220.jpg 2 237 | 17flowers/jpg/2/image_0186.jpg 2 238 | 17flowers/jpg/2/image_0207.jpg 2 239 | 17flowers/jpg/2/image_0209.jpg 2 240 | 17flowers/jpg/2/image_0217.jpg 2 241 | 17flowers/jpg/3/image_0257.jpg 3 242 | 17flowers/jpg/3/image_0252.jpg 3 243 | 17flowers/jpg/3/image_0281.jpg 3 244 | 17flowers/jpg/3/image_0254.jpg 3 245 | 17flowers/jpg/3/image_0289.jpg 3 246 | 17flowers/jpg/3/image_0249.jpg 3 247 | 17flowers/jpg/3/image_0297.jpg 3 248 | 17flowers/jpg/3/image_0309.jpg 3 249 | 17flowers/jpg/3/image_0299.jpg 3 250 | 17flowers/jpg/3/image_0266.jpg 3 251 | 17flowers/jpg/3/image_0301.jpg 3 252 | 17flowers/jpg/3/image_0304.jpg 3 253 | 17flowers/jpg/3/image_0311.jpg 3 254 | 17flowers/jpg/3/image_0268.jpg 3 255 | 17flowers/jpg/3/image_0285.jpg 3 256 | 17flowers/jpg/3/image_0253.jpg 3 257 | 17flowers/jpg/3/image_0244.jpg 3 258 | 17flowers/jpg/3/image_0307.jpg 3 259 | 17flowers/jpg/3/image_0274.jpg 3 260 | 17flowers/jpg/3/image_0255.jpg 3 261 | 17flowers/jpg/3/image_0247.jpg 3 262 | 17flowers/jpg/3/image_0263.jpg 3 263 | 17flowers/jpg/3/image_0287.jpg 3 264 | 17flowers/jpg/3/image_0273.jpg 3 265 | 17flowers/jpg/3/image_0278.jpg 3 266 | 17flowers/jpg/3/image_0286.jpg 3 267 | 17flowers/jpg/3/image_0312.jpg 3 268 | 17flowers/jpg/3/image_0243.jpg 3 269 | 17flowers/jpg/3/image_0319.jpg 3 270 | 17flowers/jpg/3/image_0282.jpg 3 271 | 17flowers/jpg/3/image_0251.jpg 3 272 | 17flowers/jpg/3/image_0272.jpg 3 273 | 17flowers/jpg/3/image_0245.jpg 3 274 | 17flowers/jpg/3/image_0271.jpg 3 275 | 17flowers/jpg/3/image_0242.jpg 3 276 | 17flowers/jpg/3/image_0261.jpg 3 277 | 17flowers/jpg/3/image_0280.jpg 3 278 | 17flowers/jpg/3/image_0291.jpg 3 279 | 17flowers/jpg/3/image_0279.jpg 3 280 | 17flowers/jpg/3/image_0248.jpg 3 281 | 17flowers/jpg/3/image_0246.jpg 3 282 | 17flowers/jpg/3/image_0306.jpg 3 283 | 17flowers/jpg/3/image_0318.jpg 3 284 | 17flowers/jpg/3/image_0270.jpg 3 285 | 17flowers/jpg/3/image_0269.jpg 3 286 | 17flowers/jpg/3/image_0250.jpg 3 287 | 17flowers/jpg/3/image_0308.jpg 3 288 | 17flowers/jpg/3/image_0300.jpg 3 289 | 17flowers/jpg/3/image_0298.jpg 3 290 | 17flowers/jpg/3/image_0320.jpg 3 291 | 17flowers/jpg/3/image_0316.jpg 3 292 | 17flowers/jpg/3/image_0296.jpg 3 293 | 17flowers/jpg/3/image_0317.jpg 3 294 | 17flowers/jpg/3/image_0310.jpg 3 295 | 17flowers/jpg/3/image_0275.jpg 3 296 | 17flowers/jpg/3/image_0288.jpg 3 297 | 17flowers/jpg/3/image_0259.jpg 3 298 | 17flowers/jpg/3/image_0294.jpg 3 299 | 17flowers/jpg/3/image_0267.jpg 3 300 | 17flowers/jpg/3/image_0283.jpg 3 301 | 17flowers/jpg/3/image_0276.jpg 3 302 | 17flowers/jpg/3/image_0315.jpg 3 303 | 17flowers/jpg/3/image_0302.jpg 3 304 | 17flowers/jpg/3/image_0264.jpg 3 305 | 17flowers/jpg/3/image_0303.jpg 3 306 | 17flowers/jpg/3/image_0277.jpg 3 307 | 17flowers/jpg/3/image_0260.jpg 3 308 | 17flowers/jpg/3/image_0305.jpg 3 309 | 17flowers/jpg/3/image_0314.jpg 3 310 | 17flowers/jpg/3/image_0258.jpg 3 311 | 17flowers/jpg/3/image_0265.jpg 3 312 | 17flowers/jpg/3/image_0290.jpg 3 313 | 17flowers/jpg/3/image_0262.jpg 3 314 | 17flowers/jpg/3/image_0292.jpg 3 315 | 17flowers/jpg/3/image_0284.jpg 3 316 | 17flowers/jpg/3/image_0313.jpg 3 317 | 17flowers/jpg/3/image_0256.jpg 3 318 | 17flowers/jpg/3/image_0293.jpg 3 319 | 17flowers/jpg/3/image_0295.jpg 3 320 | 17flowers/jpg/3/image_0241.jpg 3 321 | 17flowers/jpg/0/image_0020.jpg 0 322 | 17flowers/jpg/0/image_0062.jpg 0 323 | 17flowers/jpg/0/image_0064.jpg 0 324 | 17flowers/jpg/0/image_0022.jpg 0 325 | 17flowers/jpg/0/image_0068.jpg 0 326 | 17flowers/jpg/0/image_0007.jpg 0 327 | 17flowers/jpg/0/image_0067.jpg 0 328 | 17flowers/jpg/0/image_0045.jpg 0 329 | 17flowers/jpg/0/image_0010.jpg 0 330 | 17flowers/jpg/0/image_0039.jpg 0 331 | 17flowers/jpg/0/image_0076.jpg 0 332 | 17flowers/jpg/0/image_0059.jpg 0 333 | 17flowers/jpg/0/image_0017.jpg 0 334 | 17flowers/jpg/0/image_0005.jpg 0 335 | 17flowers/jpg/0/image_0001.jpg 0 336 | 17flowers/jpg/0/image_0075.jpg 0 337 | 17flowers/jpg/0/image_0070.jpg 0 338 | 17flowers/jpg/0/image_0004.jpg 0 339 | 17flowers/jpg/0/image_0008.jpg 0 340 | 17flowers/jpg/0/image_0042.jpg 0 341 | 17flowers/jpg/0/image_0049.jpg 0 342 | 17flowers/jpg/0/image_0052.jpg 0 343 | 17flowers/jpg/0/image_0053.jpg 0 344 | 17flowers/jpg/0/image_0046.jpg 0 345 | 17flowers/jpg/0/image_0077.jpg 0 346 | 17flowers/jpg/0/image_0034.jpg 0 347 | 17flowers/jpg/0/image_0057.jpg 0 348 | 17flowers/jpg/0/image_0035.jpg 0 349 | 17flowers/jpg/0/image_0015.jpg 0 350 | 17flowers/jpg/0/image_0043.jpg 0 351 | 17flowers/jpg/0/image_0033.jpg 0 352 | 17flowers/jpg/0/image_0044.jpg 0 353 | 17flowers/jpg/0/image_0030.jpg 0 354 | 17flowers/jpg/0/image_0028.jpg 0 355 | 17flowers/jpg/0/image_0009.jpg 0 356 | 17flowers/jpg/0/image_0040.jpg 0 357 | 17flowers/jpg/0/image_0056.jpg 0 358 | 17flowers/jpg/0/image_0013.jpg 0 359 | 17flowers/jpg/0/image_0073.jpg 0 360 | 17flowers/jpg/0/image_0014.jpg 0 361 | 17flowers/jpg/0/image_0037.jpg 0 362 | 17flowers/jpg/0/image_0072.jpg 0 363 | 17flowers/jpg/0/image_0021.jpg 0 364 | 17flowers/jpg/0/image_0041.jpg 0 365 | 17flowers/jpg/0/image_0011.jpg 0 366 | 17flowers/jpg/0/image_0047.jpg 0 367 | 17flowers/jpg/0/image_0060.jpg 0 368 | 17flowers/jpg/0/image_0065.jpg 0 369 | 17flowers/jpg/0/image_0048.jpg 0 370 | 17flowers/jpg/0/image_0018.jpg 0 371 | 17flowers/jpg/0/image_0024.jpg 0 372 | 17flowers/jpg/0/image_0061.jpg 0 373 | 17flowers/jpg/0/image_0079.jpg 0 374 | 17flowers/jpg/0/image_0054.jpg 0 375 | 17flowers/jpg/0/image_0027.jpg 0 376 | 17flowers/jpg/0/image_0074.jpg 0 377 | 17flowers/jpg/0/image_0066.jpg 0 378 | 17flowers/jpg/0/image_0029.jpg 0 379 | 17flowers/jpg/0/image_0069.jpg 0 380 | 17flowers/jpg/0/image_0080.jpg 0 381 | 17flowers/jpg/0/image_0051.jpg 0 382 | 17flowers/jpg/0/image_0003.jpg 0 383 | 17flowers/jpg/0/image_0016.jpg 0 384 | 17flowers/jpg/0/image_0038.jpg 0 385 | 17flowers/jpg/0/image_0055.jpg 0 386 | 17flowers/jpg/0/image_0050.jpg 0 387 | 17flowers/jpg/0/image_0006.jpg 0 388 | 17flowers/jpg/0/image_0058.jpg 0 389 | 17flowers/jpg/0/image_0063.jpg 0 390 | 17flowers/jpg/0/image_0012.jpg 0 391 | 17flowers/jpg/0/image_0031.jpg 0 392 | 17flowers/jpg/0/image_0023.jpg 0 393 | 17flowers/jpg/0/image_0032.jpg 0 394 | 17flowers/jpg/0/image_0019.jpg 0 395 | 17flowers/jpg/0/image_0002.jpg 0 396 | 17flowers/jpg/0/image_0071.jpg 0 397 | 17flowers/jpg/0/image_0078.jpg 0 398 | 17flowers/jpg/0/image_0036.jpg 0 399 | 17flowers/jpg/0/image_0025.jpg 0 400 | 17flowers/jpg/0/image_0026.jpg 0 401 | 17flowers/jpg/6/image_0508.jpg 6 402 | 17flowers/jpg/6/image_0503.jpg 6 403 | 17flowers/jpg/6/image_0533.jpg 6 404 | 17flowers/jpg/6/image_0498.jpg 6 405 | 17flowers/jpg/6/image_0544.jpg 6 406 | 17flowers/jpg/6/image_0486.jpg 6 407 | 17flowers/jpg/6/image_0536.jpg 6 408 | 17flowers/jpg/6/image_0532.jpg 6 409 | 17flowers/jpg/6/image_0535.jpg 6 410 | 17flowers/jpg/6/image_0507.jpg 6 411 | 17flowers/jpg/6/image_0529.jpg 6 412 | 17flowers/jpg/6/image_0494.jpg 6 413 | 17flowers/jpg/6/image_0523.jpg 6 414 | 17flowers/jpg/6/image_0521.jpg 6 415 | 17flowers/jpg/6/image_0510.jpg 6 416 | 17flowers/jpg/6/image_0489.jpg 6 417 | 17flowers/jpg/6/image_0542.jpg 6 418 | 17flowers/jpg/6/image_0541.jpg 6 419 | 17flowers/jpg/6/image_0528.jpg 6 420 | 17flowers/jpg/6/image_0519.jpg 6 421 | 17flowers/jpg/6/image_0525.jpg 6 422 | 17flowers/jpg/6/image_0547.jpg 6 423 | 17flowers/jpg/6/image_0524.jpg 6 424 | 17flowers/jpg/6/image_0522.jpg 6 425 | 17flowers/jpg/6/image_0511.jpg 6 426 | 17flowers/jpg/6/image_0493.jpg 6 427 | 17flowers/jpg/6/image_0531.jpg 6 428 | 17flowers/jpg/6/image_0540.jpg 6 429 | 17flowers/jpg/6/image_0527.jpg 6 430 | 17flowers/jpg/6/image_0518.jpg 6 431 | 17flowers/jpg/6/image_0560.jpg 6 432 | 17flowers/jpg/6/image_0556.jpg 6 433 | 17flowers/jpg/6/image_0513.jpg 6 434 | 17flowers/jpg/6/image_0516.jpg 6 435 | 17flowers/jpg/6/image_0553.jpg 6 436 | 17flowers/jpg/6/image_0554.jpg 6 437 | 17flowers/jpg/6/image_0552.jpg 6 438 | 17flowers/jpg/6/image_0505.jpg 6 439 | 17flowers/jpg/6/image_0534.jpg 6 440 | 17flowers/jpg/6/image_0495.jpg 6 441 | 17flowers/jpg/6/image_0557.jpg 6 442 | 17flowers/jpg/6/image_0558.jpg 6 443 | 17flowers/jpg/6/image_0485.jpg 6 444 | 17flowers/jpg/6/image_0515.jpg 6 445 | 17flowers/jpg/6/image_0509.jpg 6 446 | 17flowers/jpg/6/image_0491.jpg 6 447 | 17flowers/jpg/6/image_0487.jpg 6 448 | 17flowers/jpg/6/image_0506.jpg 6 449 | 17flowers/jpg/6/image_0538.jpg 6 450 | 17flowers/jpg/6/image_0484.jpg 6 451 | 17flowers/jpg/6/image_0502.jpg 6 452 | 17flowers/jpg/6/image_0499.jpg 6 453 | 17flowers/jpg/6/image_0550.jpg 6 454 | 17flowers/jpg/6/image_0526.jpg 6 455 | 17flowers/jpg/6/image_0488.jpg 6 456 | 17flowers/jpg/6/image_0546.jpg 6 457 | 17flowers/jpg/6/image_0517.jpg 6 458 | 17flowers/jpg/6/image_0501.jpg 6 459 | 17flowers/jpg/6/image_0483.jpg 6 460 | 17flowers/jpg/6/image_0481.jpg 6 461 | 17flowers/jpg/6/image_0537.jpg 6 462 | 17flowers/jpg/6/image_0549.jpg 6 463 | 17flowers/jpg/6/image_0559.jpg 6 464 | 17flowers/jpg/6/image_0490.jpg 6 465 | 17flowers/jpg/6/image_0543.jpg 6 466 | 17flowers/jpg/6/image_0492.jpg 6 467 | 17flowers/jpg/6/image_0555.jpg 6 468 | 17flowers/jpg/6/image_0514.jpg 6 469 | 17flowers/jpg/6/image_0500.jpg 6 470 | 17flowers/jpg/6/image_0539.jpg 6 471 | 17flowers/jpg/6/image_0545.jpg 6 472 | 17flowers/jpg/6/image_0504.jpg 6 473 | 17flowers/jpg/6/image_0482.jpg 6 474 | 17flowers/jpg/6/image_0551.jpg 6 475 | 17flowers/jpg/6/image_0497.jpg 6 476 | 17flowers/jpg/6/image_0496.jpg 6 477 | 17flowers/jpg/6/image_0520.jpg 6 478 | 17flowers/jpg/6/image_0512.jpg 6 479 | 17flowers/jpg/6/image_0530.jpg 6 480 | 17flowers/jpg/6/image_0548.jpg 6 481 | 17flowers/jpg/8/image_0682.jpg 8 482 | 17flowers/jpg/8/image_0678.jpg 8 483 | 17flowers/jpg/8/image_0666.jpg 8 484 | 17flowers/jpg/8/image_0684.jpg 8 485 | 17flowers/jpg/8/image_0665.jpg 8 486 | 17flowers/jpg/8/image_0645.jpg 8 487 | 17flowers/jpg/8/image_0693.jpg 8 488 | 17flowers/jpg/8/image_0716.jpg 8 489 | 17flowers/jpg/8/image_0660.jpg 8 490 | 17flowers/jpg/8/image_0698.jpg 8 491 | 17flowers/jpg/8/image_0713.jpg 8 492 | 17flowers/jpg/8/image_0681.jpg 8 493 | 17flowers/jpg/8/image_0664.jpg 8 494 | 17flowers/jpg/8/image_0643.jpg 8 495 | 17flowers/jpg/8/image_0717.jpg 8 496 | 17flowers/jpg/8/image_0655.jpg 8 497 | 17flowers/jpg/8/image_0689.jpg 8 498 | 17flowers/jpg/8/image_0718.jpg 8 499 | 17flowers/jpg/8/image_0667.jpg 8 500 | 17flowers/jpg/8/image_0686.jpg 8 501 | 17flowers/jpg/8/image_0680.jpg 8 502 | 17flowers/jpg/8/image_0647.jpg 8 503 | 17flowers/jpg/8/image_0703.jpg 8 504 | 17flowers/jpg/8/image_0688.jpg 8 505 | 17flowers/jpg/8/image_0720.jpg 8 506 | 17flowers/jpg/8/image_0687.jpg 8 507 | 17flowers/jpg/8/image_0652.jpg 8 508 | 17flowers/jpg/8/image_0672.jpg 8 509 | 17flowers/jpg/8/image_0697.jpg 8 510 | 17flowers/jpg/8/image_0669.jpg 8 511 | 17flowers/jpg/8/image_0651.jpg 8 512 | 17flowers/jpg/8/image_0683.jpg 8 513 | 17flowers/jpg/8/image_0685.jpg 8 514 | 17flowers/jpg/8/image_0663.jpg 8 515 | 17flowers/jpg/8/image_0705.jpg 8 516 | 17flowers/jpg/8/image_0691.jpg 8 517 | 17flowers/jpg/8/image_0674.jpg 8 518 | 17flowers/jpg/8/image_0658.jpg 8 519 | 17flowers/jpg/8/image_0659.jpg 8 520 | 17flowers/jpg/8/image_0711.jpg 8 521 | 17flowers/jpg/8/image_0677.jpg 8 522 | 17flowers/jpg/8/image_0709.jpg 8 523 | 17flowers/jpg/8/image_0671.jpg 8 524 | 17flowers/jpg/8/image_0706.jpg 8 525 | 17flowers/jpg/8/image_0646.jpg 8 526 | 17flowers/jpg/8/image_0704.jpg 8 527 | 17flowers/jpg/8/image_0654.jpg 8 528 | 17flowers/jpg/8/image_0695.jpg 8 529 | 17flowers/jpg/8/image_0673.jpg 8 530 | 17flowers/jpg/8/image_0715.jpg 8 531 | 17flowers/jpg/8/image_0692.jpg 8 532 | 17flowers/jpg/8/image_0719.jpg 8 533 | 17flowers/jpg/8/image_0696.jpg 8 534 | 17flowers/jpg/8/image_0653.jpg 8 535 | 17flowers/jpg/8/image_0670.jpg 8 536 | 17flowers/jpg/8/image_0690.jpg 8 537 | 17flowers/jpg/8/image_0641.jpg 8 538 | 17flowers/jpg/8/image_0701.jpg 8 539 | 17flowers/jpg/8/image_0700.jpg 8 540 | 17flowers/jpg/8/image_0650.jpg 8 541 | 17flowers/jpg/8/image_0662.jpg 8 542 | 17flowers/jpg/8/image_0649.jpg 8 543 | 17flowers/jpg/8/image_0708.jpg 8 544 | 17flowers/jpg/8/image_0712.jpg 8 545 | 17flowers/jpg/8/image_0707.jpg 8 546 | 17flowers/jpg/8/image_0676.jpg 8 547 | 17flowers/jpg/8/image_0675.jpg 8 548 | 17flowers/jpg/8/image_0642.jpg 8 549 | 17flowers/jpg/8/image_0694.jpg 8 550 | 17flowers/jpg/8/image_0657.jpg 8 551 | 17flowers/jpg/8/image_0710.jpg 8 552 | 17flowers/jpg/8/image_0714.jpg 8 553 | 17flowers/jpg/8/image_0668.jpg 8 554 | 17flowers/jpg/8/image_0661.jpg 8 555 | 17flowers/jpg/8/image_0699.jpg 8 556 | 17flowers/jpg/8/image_0656.jpg 8 557 | 17flowers/jpg/8/image_0702.jpg 8 558 | 17flowers/jpg/8/image_0679.jpg 8 559 | 17flowers/jpg/8/image_0644.jpg 8 560 | 17flowers/jpg/8/image_0648.jpg 8 561 | 17flowers/jpg/4/image_0399.jpg 4 562 | 17flowers/jpg/4/image_0368.jpg 4 563 | 17flowers/jpg/4/image_0362.jpg 4 564 | 17flowers/jpg/4/image_0390.jpg 4 565 | 17flowers/jpg/4/image_0361.jpg 4 566 | 17flowers/jpg/4/image_0365.jpg 4 567 | 17flowers/jpg/4/image_0375.jpg 4 568 | 17flowers/jpg/4/image_0331.jpg 4 569 | 17flowers/jpg/4/image_0382.jpg 4 570 | 17flowers/jpg/4/image_0396.jpg 4 571 | 17flowers/jpg/4/image_0338.jpg 4 572 | 17flowers/jpg/4/image_0325.jpg 4 573 | 17flowers/jpg/4/image_0334.jpg 4 574 | 17flowers/jpg/4/image_0367.jpg 4 575 | 17flowers/jpg/4/image_0383.jpg 4 576 | 17flowers/jpg/4/image_0364.jpg 4 577 | 17flowers/jpg/4/image_0347.jpg 4 578 | 17flowers/jpg/4/image_0388.jpg 4 579 | 17flowers/jpg/4/image_0346.jpg 4 580 | 17flowers/jpg/4/image_0376.jpg 4 581 | 17flowers/jpg/4/image_0371.jpg 4 582 | 17flowers/jpg/4/image_0348.jpg 4 583 | 17flowers/jpg/4/image_0359.jpg 4 584 | 17flowers/jpg/4/image_0349.jpg 4 585 | 17flowers/jpg/4/image_0341.jpg 4 586 | 17flowers/jpg/4/image_0380.jpg 4 587 | 17flowers/jpg/4/image_0387.jpg 4 588 | 17flowers/jpg/4/image_0350.jpg 4 589 | 17flowers/jpg/4/image_0370.jpg 4 590 | 17flowers/jpg/4/image_0400.jpg 4 591 | 17flowers/jpg/4/image_0389.jpg 4 592 | 17flowers/jpg/4/image_0355.jpg 4 593 | 17flowers/jpg/4/image_0397.jpg 4 594 | 17flowers/jpg/4/image_0395.jpg 4 595 | 17flowers/jpg/4/image_0378.jpg 4 596 | 17flowers/jpg/4/image_0381.jpg 4 597 | 17flowers/jpg/4/image_0354.jpg 4 598 | 17flowers/jpg/4/image_0356.jpg 4 599 | 17flowers/jpg/4/image_0384.jpg 4 600 | 17flowers/jpg/4/image_0342.jpg 4 601 | 17flowers/jpg/4/image_0339.jpg 4 602 | 17flowers/jpg/4/image_0373.jpg 4 603 | 17flowers/jpg/4/image_0372.jpg 4 604 | 17flowers/jpg/4/image_0335.jpg 4 605 | 17flowers/jpg/4/image_0340.jpg 4 606 | 17flowers/jpg/4/image_0321.jpg 4 607 | 17flowers/jpg/4/image_0337.jpg 4 608 | 17flowers/jpg/4/image_0336.jpg 4 609 | 17flowers/jpg/4/image_0344.jpg 4 610 | 17flowers/jpg/4/image_0366.jpg 4 611 | 17flowers/jpg/4/image_0345.jpg 4 612 | 17flowers/jpg/4/image_0352.jpg 4 613 | 17flowers/jpg/4/image_0394.jpg 4 614 | 17flowers/jpg/4/image_0343.jpg 4 615 | 17flowers/jpg/4/image_0369.jpg 4 616 | 17flowers/jpg/4/image_0398.jpg 4 617 | 17flowers/jpg/4/image_0391.jpg 4 618 | 17flowers/jpg/4/image_0351.jpg 4 619 | 17flowers/jpg/4/image_0392.jpg 4 620 | 17flowers/jpg/4/image_0363.jpg 4 621 | 17flowers/jpg/4/image_0393.jpg 4 622 | 17flowers/jpg/4/image_0326.jpg 4 623 | 17flowers/jpg/4/image_0328.jpg 4 624 | 17flowers/jpg/4/image_0358.jpg 4 625 | 17flowers/jpg/4/image_0385.jpg 4 626 | 17flowers/jpg/4/image_0327.jpg 4 627 | 17flowers/jpg/4/image_0322.jpg 4 628 | 17flowers/jpg/4/image_0330.jpg 4 629 | 17flowers/jpg/4/image_0374.jpg 4 630 | 17flowers/jpg/4/image_0360.jpg 4 631 | 17flowers/jpg/4/image_0329.jpg 4 632 | 17flowers/jpg/4/image_0324.jpg 4 633 | 17flowers/jpg/4/image_0379.jpg 4 634 | 17flowers/jpg/4/image_0386.jpg 4 635 | 17flowers/jpg/4/image_0332.jpg 4 636 | 17flowers/jpg/4/image_0377.jpg 4 637 | 17flowers/jpg/4/image_0357.jpg 4 638 | 17flowers/jpg/4/image_0353.jpg 4 639 | 17flowers/jpg/4/image_0323.jpg 4 640 | 17flowers/jpg/4/image_0333.jpg 4 641 | 17flowers/jpg/9/image_0750.jpg 9 642 | 17flowers/jpg/9/image_0785.jpg 9 643 | 17flowers/jpg/9/image_0746.jpg 9 644 | 17flowers/jpg/9/image_0792.jpg 9 645 | 17flowers/jpg/9/image_0778.jpg 9 646 | 17flowers/jpg/9/image_0748.jpg 9 647 | 17flowers/jpg/9/image_0783.jpg 9 648 | 17flowers/jpg/9/image_0752.jpg 9 649 | 17flowers/jpg/9/image_0793.jpg 9 650 | 17flowers/jpg/9/image_0726.jpg 9 651 | 17flowers/jpg/9/image_0794.jpg 9 652 | 17flowers/jpg/9/image_0737.jpg 9 653 | 17flowers/jpg/9/image_0732.jpg 9 654 | 17flowers/jpg/9/image_0756.jpg 9 655 | 17flowers/jpg/9/image_0758.jpg 9 656 | 17flowers/jpg/9/image_0755.jpg 9 657 | 17flowers/jpg/9/image_0734.jpg 9 658 | 17flowers/jpg/9/image_0749.jpg 9 659 | 17flowers/jpg/9/image_0767.jpg 9 660 | 17flowers/jpg/9/image_0796.jpg 9 661 | 17flowers/jpg/9/image_0763.jpg 9 662 | 17flowers/jpg/9/image_0739.jpg 9 663 | 17flowers/jpg/9/image_0735.jpg 9 664 | 17flowers/jpg/9/image_0742.jpg 9 665 | 17flowers/jpg/9/image_0731.jpg 9 666 | 17flowers/jpg/9/image_0784.jpg 9 667 | 17flowers/jpg/9/image_0789.jpg 9 668 | 17flowers/jpg/9/image_0771.jpg 9 669 | 17flowers/jpg/9/image_0757.jpg 9 670 | 17flowers/jpg/9/image_0762.jpg 9 671 | 17flowers/jpg/9/image_0727.jpg 9 672 | 17flowers/jpg/9/image_0729.jpg 9 673 | 17flowers/jpg/9/image_0774.jpg 9 674 | 17flowers/jpg/9/image_0787.jpg 9 675 | 17flowers/jpg/9/image_0790.jpg 9 676 | 17flowers/jpg/9/image_0799.jpg 9 677 | 17flowers/jpg/9/image_0754.jpg 9 678 | 17flowers/jpg/9/image_0733.jpg 9 679 | 17flowers/jpg/9/image_0721.jpg 9 680 | 17flowers/jpg/9/image_0723.jpg 9 681 | 17flowers/jpg/9/image_0791.jpg 9 682 | 17flowers/jpg/9/image_0788.jpg 9 683 | 17flowers/jpg/9/image_0728.jpg 9 684 | 17flowers/jpg/9/image_0795.jpg 9 685 | 17flowers/jpg/9/image_0722.jpg 9 686 | 17flowers/jpg/9/image_0764.jpg 9 687 | 17flowers/jpg/9/image_0781.jpg 9 688 | 17flowers/jpg/9/image_0760.jpg 9 689 | 17flowers/jpg/9/image_0738.jpg 9 690 | 17flowers/jpg/9/image_0776.jpg 9 691 | 17flowers/jpg/9/image_0747.jpg 9 692 | 17flowers/jpg/9/image_0800.jpg 9 693 | 17flowers/jpg/9/image_0798.jpg 9 694 | 17flowers/jpg/9/image_0779.jpg 9 695 | 17flowers/jpg/9/image_0740.jpg 9 696 | 17flowers/jpg/9/image_0769.jpg 9 697 | 17flowers/jpg/9/image_0777.jpg 9 698 | 17flowers/jpg/9/image_0761.jpg 9 699 | 17flowers/jpg/9/image_0797.jpg 9 700 | 17flowers/jpg/9/image_0753.jpg 9 701 | 17flowers/jpg/9/image_0741.jpg 9 702 | 17flowers/jpg/9/image_0780.jpg 9 703 | 17flowers/jpg/9/image_0775.jpg 9 704 | 17flowers/jpg/9/image_0736.jpg 9 705 | 17flowers/jpg/9/image_0743.jpg 9 706 | 17flowers/jpg/9/image_0770.jpg 9 707 | 17flowers/jpg/9/image_0773.jpg 9 708 | 17flowers/jpg/9/image_0772.jpg 9 709 | 17flowers/jpg/9/image_0751.jpg 9 710 | 17flowers/jpg/9/image_0730.jpg 9 711 | 17flowers/jpg/9/image_0786.jpg 9 712 | 17flowers/jpg/9/image_0765.jpg 9 713 | 17flowers/jpg/9/image_0724.jpg 9 714 | 17flowers/jpg/9/image_0744.jpg 9 715 | 17flowers/jpg/9/image_0782.jpg 9 716 | 17flowers/jpg/9/image_0745.jpg 9 717 | 17flowers/jpg/9/image_0768.jpg 9 718 | 17flowers/jpg/9/image_0759.jpg 9 719 | 17flowers/jpg/9/image_0725.jpg 9 720 | 17flowers/jpg/9/image_0766.jpg 9 721 | 17flowers/jpg/7/image_0583.jpg 7 722 | 17flowers/jpg/7/image_0587.jpg 7 723 | 17flowers/jpg/7/image_0638.jpg 7 724 | 17flowers/jpg/7/image_0564.jpg 7 725 | 17flowers/jpg/7/image_0632.jpg 7 726 | 17flowers/jpg/7/image_0598.jpg 7 727 | 17flowers/jpg/7/image_0599.jpg 7 728 | 17flowers/jpg/7/image_0574.jpg 7 729 | 17flowers/jpg/7/image_0607.jpg 7 730 | 17flowers/jpg/7/image_0600.jpg 7 731 | 17flowers/jpg/7/image_0610.jpg 7 732 | 17flowers/jpg/7/image_0626.jpg 7 733 | 17flowers/jpg/7/image_0605.jpg 7 734 | 17flowers/jpg/7/image_0561.jpg 7 735 | 17flowers/jpg/7/image_0611.jpg 7 736 | 17flowers/jpg/7/image_0569.jpg 7 737 | 17flowers/jpg/7/image_0563.jpg 7 738 | 17flowers/jpg/7/image_0604.jpg 7 739 | 17flowers/jpg/7/image_0613.jpg 7 740 | 17flowers/jpg/7/image_0639.jpg 7 741 | 17flowers/jpg/7/image_0615.jpg 7 742 | 17flowers/jpg/7/image_0623.jpg 7 743 | 17flowers/jpg/7/image_0576.jpg 7 744 | 17flowers/jpg/7/image_0567.jpg 7 745 | 17flowers/jpg/7/image_0621.jpg 7 746 | 17flowers/jpg/7/image_0620.jpg 7 747 | 17flowers/jpg/7/image_0624.jpg 7 748 | 17flowers/jpg/7/image_0592.jpg 7 749 | 17flowers/jpg/7/image_0622.jpg 7 750 | 17flowers/jpg/7/image_0628.jpg 7 751 | 17flowers/jpg/7/image_0573.jpg 7 752 | 17flowers/jpg/7/image_0608.jpg 7 753 | 17flowers/jpg/7/image_0568.jpg 7 754 | 17flowers/jpg/7/image_0614.jpg 7 755 | 17flowers/jpg/7/image_0571.jpg 7 756 | 17flowers/jpg/7/image_0588.jpg 7 757 | 17flowers/jpg/7/image_0634.jpg 7 758 | 17flowers/jpg/7/image_0570.jpg 7 759 | 17flowers/jpg/7/image_0586.jpg 7 760 | 17flowers/jpg/7/image_0635.jpg 7 761 | 17flowers/jpg/7/image_0606.jpg 7 762 | 17flowers/jpg/7/image_0565.jpg 7 763 | 17flowers/jpg/7/image_0636.jpg 7 764 | 17flowers/jpg/7/image_0593.jpg 7 765 | 17flowers/jpg/7/image_0640.jpg 7 766 | 17flowers/jpg/7/image_0595.jpg 7 767 | 17flowers/jpg/7/image_0629.jpg 7 768 | 17flowers/jpg/7/image_0630.jpg 7 769 | 17flowers/jpg/7/image_0603.jpg 7 770 | 17flowers/jpg/7/image_0590.jpg 7 771 | 17flowers/jpg/7/image_0618.jpg 7 772 | 17flowers/jpg/7/image_0616.jpg 7 773 | 17flowers/jpg/7/image_0582.jpg 7 774 | 17flowers/jpg/7/image_0601.jpg 7 775 | 17flowers/jpg/7/image_0596.jpg 7 776 | 17flowers/jpg/7/image_0580.jpg 7 777 | 17flowers/jpg/7/image_0609.jpg 7 778 | 17flowers/jpg/7/image_0578.jpg 7 779 | 17flowers/jpg/7/image_0572.jpg 7 780 | 17flowers/jpg/7/image_0631.jpg 7 781 | 17flowers/jpg/7/image_0585.jpg 7 782 | 17flowers/jpg/7/image_0589.jpg 7 783 | 17flowers/jpg/7/image_0591.jpg 7 784 | 17flowers/jpg/7/image_0594.jpg 7 785 | 17flowers/jpg/7/image_0612.jpg 7 786 | 17flowers/jpg/7/image_0566.jpg 7 787 | 17flowers/jpg/7/image_0602.jpg 7 788 | 17flowers/jpg/7/image_0577.jpg 7 789 | 17flowers/jpg/7/image_0579.jpg 7 790 | 17flowers/jpg/7/image_0597.jpg 7 791 | 17flowers/jpg/7/image_0627.jpg 7 792 | 17flowers/jpg/7/image_0617.jpg 7 793 | 17flowers/jpg/7/image_0619.jpg 7 794 | 17flowers/jpg/7/image_0575.jpg 7 795 | 17flowers/jpg/7/image_0637.jpg 7 796 | 17flowers/jpg/7/image_0581.jpg 7 797 | 17flowers/jpg/7/image_0625.jpg 7 798 | 17flowers/jpg/7/image_0633.jpg 7 799 | 17flowers/jpg/7/image_0562.jpg 7 800 | 17flowers/jpg/7/image_0584.jpg 7 801 | 17flowers/jpg/16/image_1322.jpg 16 802 | 17flowers/jpg/16/image_1282.jpg 16 803 | 17flowers/jpg/16/image_1293.jpg 16 804 | 17flowers/jpg/16/image_1309.jpg 16 805 | 17flowers/jpg/16/image_1310.jpg 16 806 | 17flowers/jpg/16/image_1312.jpg 16 807 | 17flowers/jpg/16/image_1351.jpg 16 808 | 17flowers/jpg/16/image_1314.jpg 16 809 | 17flowers/jpg/16/image_1357.jpg 16 810 | 17flowers/jpg/16/image_1325.jpg 16 811 | 17flowers/jpg/16/image_1286.jpg 16 812 | 17flowers/jpg/16/image_1285.jpg 16 813 | 17flowers/jpg/16/image_1352.jpg 16 814 | 17flowers/jpg/16/image_1297.jpg 16 815 | 17flowers/jpg/16/image_1329.jpg 16 816 | 17flowers/jpg/16/image_1349.jpg 16 817 | 17flowers/jpg/16/image_1289.jpg 16 818 | 17flowers/jpg/16/image_1360.jpg 16 819 | 17flowers/jpg/16/image_1298.jpg 16 820 | 17flowers/jpg/16/image_1331.jpg 16 821 | 17flowers/jpg/16/image_1347.jpg 16 822 | 17flowers/jpg/16/image_1353.jpg 16 823 | 17flowers/jpg/16/image_1304.jpg 16 824 | 17flowers/jpg/16/image_1284.jpg 16 825 | 17flowers/jpg/16/image_1355.jpg 16 826 | 17flowers/jpg/16/image_1300.jpg 16 827 | 17flowers/jpg/16/image_1295.jpg 16 828 | 17flowers/jpg/16/image_1356.jpg 16 829 | 17flowers/jpg/16/image_1318.jpg 16 830 | 17flowers/jpg/16/image_1292.jpg 16 831 | 17flowers/jpg/16/image_1333.jpg 16 832 | 17flowers/jpg/16/image_1327.jpg 16 833 | 17flowers/jpg/16/image_1305.jpg 16 834 | 17flowers/jpg/16/image_1323.jpg 16 835 | 17flowers/jpg/16/image_1346.jpg 16 836 | 17flowers/jpg/16/image_1354.jpg 16 837 | 17flowers/jpg/16/image_1344.jpg 16 838 | 17flowers/jpg/16/image_1317.jpg 16 839 | 17flowers/jpg/16/image_1345.jpg 16 840 | 17flowers/jpg/16/image_1303.jpg 16 841 | 17flowers/jpg/16/image_1359.jpg 16 842 | 17flowers/jpg/16/image_1288.jpg 16 843 | 17flowers/jpg/16/image_1316.jpg 16 844 | 17flowers/jpg/16/image_1283.jpg 16 845 | 17flowers/jpg/16/image_1311.jpg 16 846 | 17flowers/jpg/16/image_1343.jpg 16 847 | 17flowers/jpg/16/image_1320.jpg 16 848 | 17flowers/jpg/16/image_1306.jpg 16 849 | 17flowers/jpg/16/image_1315.jpg 16 850 | 17flowers/jpg/16/image_1287.jpg 16 851 | 17flowers/jpg/16/image_1348.jpg 16 852 | 17flowers/jpg/16/image_1290.jpg 16 853 | 17flowers/jpg/16/image_1313.jpg 16 854 | 17flowers/jpg/16/image_1341.jpg 16 855 | 17flowers/jpg/16/image_1326.jpg 16 856 | 17flowers/jpg/16/image_1350.jpg 16 857 | 17flowers/jpg/16/image_1281.jpg 16 858 | 17flowers/jpg/16/image_1301.jpg 16 859 | 17flowers/jpg/16/image_1339.jpg 16 860 | 17flowers/jpg/16/image_1336.jpg 16 861 | 17flowers/jpg/16/image_1358.jpg 16 862 | 17flowers/jpg/16/image_1334.jpg 16 863 | 17flowers/jpg/16/image_1338.jpg 16 864 | 17flowers/jpg/16/image_1337.jpg 16 865 | 17flowers/jpg/16/image_1340.jpg 16 866 | 17flowers/jpg/16/image_1294.jpg 16 867 | 17flowers/jpg/16/image_1291.jpg 16 868 | 17flowers/jpg/16/image_1332.jpg 16 869 | 17flowers/jpg/16/image_1302.jpg 16 870 | 17flowers/jpg/16/image_1321.jpg 16 871 | 17flowers/jpg/16/image_1319.jpg 16 872 | 17flowers/jpg/16/image_1324.jpg 16 873 | 17flowers/jpg/16/image_1342.jpg 16 874 | 17flowers/jpg/16/image_1330.jpg 16 875 | 17flowers/jpg/16/image_1335.jpg 16 876 | 17flowers/jpg/16/image_1308.jpg 16 877 | 17flowers/jpg/16/image_1299.jpg 16 878 | 17flowers/jpg/16/image_1307.jpg 16 879 | 17flowers/jpg/16/image_1296.jpg 16 880 | 17flowers/jpg/16/image_1328.jpg 16 881 | 17flowers/jpg/11/image_0899.jpg 11 882 | 17flowers/jpg/11/image_0949.jpg 11 883 | 17flowers/jpg/11/image_0948.jpg 11 884 | 17flowers/jpg/11/image_0894.jpg 11 885 | 17flowers/jpg/11/image_0937.jpg 11 886 | 17flowers/jpg/11/image_0914.jpg 11 887 | 17flowers/jpg/11/image_0928.jpg 11 888 | 17flowers/jpg/11/image_0932.jpg 11 889 | 17flowers/jpg/11/image_0909.jpg 11 890 | 17flowers/jpg/11/image_0905.jpg 11 891 | 17flowers/jpg/11/image_0922.jpg 11 892 | 17flowers/jpg/11/image_0890.jpg 11 893 | 17flowers/jpg/11/image_0951.jpg 11 894 | 17flowers/jpg/11/image_0920.jpg 11 895 | 17flowers/jpg/11/image_0882.jpg 11 896 | 17flowers/jpg/11/image_0929.jpg 11 897 | 17flowers/jpg/11/image_0958.jpg 11 898 | 17flowers/jpg/11/image_0904.jpg 11 899 | 17flowers/jpg/11/image_0952.jpg 11 900 | 17flowers/jpg/11/image_0916.jpg 11 901 | 17flowers/jpg/11/image_0893.jpg 11 902 | 17flowers/jpg/11/image_0919.jpg 11 903 | 17flowers/jpg/11/image_0913.jpg 11 904 | 17flowers/jpg/11/image_0927.jpg 11 905 | 17flowers/jpg/11/image_0938.jpg 11 906 | 17flowers/jpg/11/image_0954.jpg 11 907 | 17flowers/jpg/11/image_0884.jpg 11 908 | 17flowers/jpg/11/image_0889.jpg 11 909 | 17flowers/jpg/11/image_0921.jpg 11 910 | 17flowers/jpg/11/image_0953.jpg 11 911 | 17flowers/jpg/11/image_0934.jpg 11 912 | 17flowers/jpg/11/image_0887.jpg 11 913 | 17flowers/jpg/11/image_0911.jpg 11 914 | 17flowers/jpg/11/image_0892.jpg 11 915 | 17flowers/jpg/11/image_0891.jpg 11 916 | 17flowers/jpg/11/image_0888.jpg 11 917 | 17flowers/jpg/11/image_0895.jpg 11 918 | 17flowers/jpg/11/image_0906.jpg 11 919 | 17flowers/jpg/11/image_0959.jpg 11 920 | 17flowers/jpg/11/image_0960.jpg 11 921 | 17flowers/jpg/11/image_0939.jpg 11 922 | 17flowers/jpg/11/image_0957.jpg 11 923 | 17flowers/jpg/11/image_0898.jpg 11 924 | 17flowers/jpg/11/image_0900.jpg 11 925 | 17flowers/jpg/11/image_0955.jpg 11 926 | 17flowers/jpg/11/image_0917.jpg 11 927 | 17flowers/jpg/11/image_0944.jpg 11 928 | 17flowers/jpg/11/image_0897.jpg 11 929 | 17flowers/jpg/11/image_0940.jpg 11 930 | 17flowers/jpg/11/image_0915.jpg 11 931 | 17flowers/jpg/11/image_0924.jpg 11 932 | 17flowers/jpg/11/image_0912.jpg 11 933 | 17flowers/jpg/11/image_0956.jpg 11 934 | 17flowers/jpg/11/image_0943.jpg 11 935 | 17flowers/jpg/11/image_0902.jpg 11 936 | 17flowers/jpg/11/image_0947.jpg 11 937 | 17flowers/jpg/11/image_0936.jpg 11 938 | 17flowers/jpg/11/image_0907.jpg 11 939 | 17flowers/jpg/11/image_0946.jpg 11 940 | 17flowers/jpg/11/image_0886.jpg 11 941 | 17flowers/jpg/11/image_0926.jpg 11 942 | 17flowers/jpg/11/image_0910.jpg 11 943 | 17flowers/jpg/11/image_0942.jpg 11 944 | 17flowers/jpg/11/image_0903.jpg 11 945 | 17flowers/jpg/11/image_0901.jpg 11 946 | 17flowers/jpg/11/image_0933.jpg 11 947 | 17flowers/jpg/11/image_0896.jpg 11 948 | 17flowers/jpg/11/image_0908.jpg 11 949 | 17flowers/jpg/11/image_0925.jpg 11 950 | 17flowers/jpg/11/image_0923.jpg 11 951 | 17flowers/jpg/11/image_0935.jpg 11 952 | 17flowers/jpg/11/image_0881.jpg 11 953 | 17flowers/jpg/11/image_0883.jpg 11 954 | 17flowers/jpg/11/image_0930.jpg 11 955 | 17flowers/jpg/11/image_0931.jpg 11 956 | 17flowers/jpg/11/image_0918.jpg 11 957 | 17flowers/jpg/11/image_0945.jpg 11 958 | 17flowers/jpg/11/image_0885.jpg 11 959 | 17flowers/jpg/11/image_0950.jpg 11 960 | 17flowers/jpg/11/image_0941.jpg 11 961 | 17flowers/jpg/5/image_0477.jpg 5 962 | 17flowers/jpg/5/image_0429.jpg 5 963 | 17flowers/jpg/5/image_0414.jpg 5 964 | 17flowers/jpg/5/image_0409.jpg 5 965 | 17flowers/jpg/5/image_0441.jpg 5 966 | 17flowers/jpg/5/image_0438.jpg 5 967 | 17flowers/jpg/5/image_0412.jpg 5 968 | 17flowers/jpg/5/image_0428.jpg 5 969 | 17flowers/jpg/5/image_0480.jpg 5 970 | 17flowers/jpg/5/image_0404.jpg 5 971 | 17flowers/jpg/5/image_0450.jpg 5 972 | 17flowers/jpg/5/image_0445.jpg 5 973 | 17flowers/jpg/5/image_0417.jpg 5 974 | 17flowers/jpg/5/image_0478.jpg 5 975 | 17flowers/jpg/5/image_0446.jpg 5 976 | 17flowers/jpg/5/image_0469.jpg 5 977 | 17flowers/jpg/5/image_0425.jpg 5 978 | 17flowers/jpg/5/image_0421.jpg 5 979 | 17flowers/jpg/5/image_0452.jpg 5 980 | 17flowers/jpg/5/image_0403.jpg 5 981 | 17flowers/jpg/5/image_0454.jpg 5 982 | 17flowers/jpg/5/image_0430.jpg 5 983 | 17flowers/jpg/5/image_0416.jpg 5 984 | 17flowers/jpg/5/image_0474.jpg 5 985 | 17flowers/jpg/5/image_0415.jpg 5 986 | 17flowers/jpg/5/image_0401.jpg 5 987 | 17flowers/jpg/5/image_0435.jpg 5 988 | 17flowers/jpg/5/image_0418.jpg 5 989 | 17flowers/jpg/5/image_0453.jpg 5 990 | 17flowers/jpg/5/image_0411.jpg 5 991 | 17flowers/jpg/5/image_0471.jpg 5 992 | 17flowers/jpg/5/image_0443.jpg 5 993 | 17flowers/jpg/5/image_0439.jpg 5 994 | 17flowers/jpg/5/image_0468.jpg 5 995 | 17flowers/jpg/5/image_0408.jpg 5 996 | 17flowers/jpg/5/image_0419.jpg 5 997 | 17flowers/jpg/5/image_0423.jpg 5 998 | 17flowers/jpg/5/image_0464.jpg 5 999 | 17flowers/jpg/5/image_0463.jpg 5 1000 | 17flowers/jpg/5/image_0459.jpg 5 1001 | 17flowers/jpg/5/image_0476.jpg 5 1002 | 17flowers/jpg/5/image_0479.jpg 5 1003 | 17flowers/jpg/5/image_0410.jpg 5 1004 | 17flowers/jpg/5/image_0437.jpg 5 1005 | 17flowers/jpg/5/image_0440.jpg 5 1006 | 17flowers/jpg/5/image_0406.jpg 5 1007 | 17flowers/jpg/5/image_0465.jpg 5 1008 | 17flowers/jpg/5/image_0434.jpg 5 1009 | 17flowers/jpg/5/image_0427.jpg 5 1010 | 17flowers/jpg/5/image_0433.jpg 5 1011 | 17flowers/jpg/5/image_0473.jpg 5 1012 | 17flowers/jpg/5/image_0456.jpg 5 1013 | 17flowers/jpg/5/image_0413.jpg 5 1014 | 17flowers/jpg/5/image_0444.jpg 5 1015 | 17flowers/jpg/5/image_0432.jpg 5 1016 | 17flowers/jpg/5/image_0442.jpg 5 1017 | 17flowers/jpg/5/image_0402.jpg 5 1018 | 17flowers/jpg/5/image_0475.jpg 5 1019 | 17flowers/jpg/5/image_0424.jpg 5 1020 | 17flowers/jpg/5/image_0451.jpg 5 1021 | 17flowers/jpg/5/image_0458.jpg 5 1022 | 17flowers/jpg/5/image_0405.jpg 5 1023 | 17flowers/jpg/5/image_0462.jpg 5 1024 | 17flowers/jpg/5/image_0448.jpg 5 1025 | 17flowers/jpg/5/image_0472.jpg 5 1026 | 17flowers/jpg/5/image_0457.jpg 5 1027 | 17flowers/jpg/5/image_0461.jpg 5 1028 | 17flowers/jpg/5/image_0455.jpg 5 1029 | 17flowers/jpg/5/image_0431.jpg 5 1030 | 17flowers/jpg/5/image_0436.jpg 5 1031 | 17flowers/jpg/5/image_0470.jpg 5 1032 | 17flowers/jpg/5/image_0422.jpg 5 1033 | 17flowers/jpg/5/image_0449.jpg 5 1034 | 17flowers/jpg/5/image_0466.jpg 5 1035 | 17flowers/jpg/5/image_0420.jpg 5 1036 | 17flowers/jpg/5/image_0407.jpg 5 1037 | 17flowers/jpg/5/image_0460.jpg 5 1038 | 17flowers/jpg/5/image_0467.jpg 5 1039 | 17flowers/jpg/5/image_0426.jpg 5 1040 | 17flowers/jpg/5/image_0447.jpg 5 1041 | 17flowers/jpg/1/image_0150.jpg 1 1042 | 17flowers/jpg/1/image_0157.jpg 1 1043 | 17flowers/jpg/1/image_0126.jpg 1 1044 | 17flowers/jpg/1/image_0121.jpg 1 1045 | 17flowers/jpg/1/image_0115.jpg 1 1046 | 17flowers/jpg/1/image_0101.jpg 1 1047 | 17flowers/jpg/1/image_0082.jpg 1 1048 | 17flowers/jpg/1/image_0148.jpg 1 1049 | 17flowers/jpg/1/image_0145.jpg 1 1050 | 17flowers/jpg/1/image_0109.jpg 1 1051 | 17flowers/jpg/1/image_0110.jpg 1 1052 | 17flowers/jpg/1/image_0155.jpg 1 1053 | 17flowers/jpg/1/image_0097.jpg 1 1054 | 17flowers/jpg/1/image_0128.jpg 1 1055 | 17flowers/jpg/1/image_0136.jpg 1 1056 | 17flowers/jpg/1/image_0146.jpg 1 1057 | 17flowers/jpg/1/image_0104.jpg 1 1058 | 17flowers/jpg/1/image_0112.jpg 1 1059 | 17flowers/jpg/1/image_0151.jpg 1 1060 | 17flowers/jpg/1/image_0087.jpg 1 1061 | 17flowers/jpg/1/image_0093.jpg 1 1062 | 17flowers/jpg/1/image_0160.jpg 1 1063 | 17flowers/jpg/1/image_0081.jpg 1 1064 | 17flowers/jpg/1/image_0088.jpg 1 1065 | 17flowers/jpg/1/image_0158.jpg 1 1066 | 17flowers/jpg/1/image_0107.jpg 1 1067 | 17flowers/jpg/1/image_0144.jpg 1 1068 | 17flowers/jpg/1/image_0154.jpg 1 1069 | 17flowers/jpg/1/image_0083.jpg 1 1070 | 17flowers/jpg/1/image_0143.jpg 1 1071 | 17flowers/jpg/1/image_0139.jpg 1 1072 | 17flowers/jpg/1/image_0111.jpg 1 1073 | 17flowers/jpg/1/image_0127.jpg 1 1074 | 17flowers/jpg/1/image_0152.jpg 1 1075 | 17flowers/jpg/1/image_0153.jpg 1 1076 | 17flowers/jpg/1/image_0123.jpg 1 1077 | 17flowers/jpg/1/image_0135.jpg 1 1078 | 17flowers/jpg/1/image_0105.jpg 1 1079 | 17flowers/jpg/1/image_0142.jpg 1 1080 | 17flowers/jpg/1/image_0133.jpg 1 1081 | 17flowers/jpg/1/image_0118.jpg 1 1082 | 17flowers/jpg/1/image_0116.jpg 1 1083 | 17flowers/jpg/1/image_0098.jpg 1 1084 | 17flowers/jpg/1/image_0117.jpg 1 1085 | 17flowers/jpg/1/image_0095.jpg 1 1086 | 17flowers/jpg/1/image_0090.jpg 1 1087 | 17flowers/jpg/1/image_0122.jpg 1 1088 | 17flowers/jpg/1/image_0114.jpg 1 1089 | 17flowers/jpg/1/image_0119.jpg 1 1090 | 17flowers/jpg/1/image_0096.jpg 1 1091 | 17flowers/jpg/1/image_0147.jpg 1 1092 | 17flowers/jpg/1/image_0138.jpg 1 1093 | 17flowers/jpg/1/image_0159.jpg 1 1094 | 17flowers/jpg/1/image_0085.jpg 1 1095 | 17flowers/jpg/1/image_0149.jpg 1 1096 | 17flowers/jpg/1/image_0092.jpg 1 1097 | 17flowers/jpg/1/image_0130.jpg 1 1098 | 17flowers/jpg/1/image_0125.jpg 1 1099 | 17flowers/jpg/1/image_0113.jpg 1 1100 | 17flowers/jpg/1/image_0134.jpg 1 1101 | 17flowers/jpg/1/image_0140.jpg 1 1102 | 17flowers/jpg/1/image_0132.jpg 1 1103 | 17flowers/jpg/1/image_0120.jpg 1 1104 | 17flowers/jpg/1/image_0099.jpg 1 1105 | 17flowers/jpg/1/image_0091.jpg 1 1106 | 17flowers/jpg/1/image_0086.jpg 1 1107 | 17flowers/jpg/1/image_0100.jpg 1 1108 | 17flowers/jpg/1/image_0131.jpg 1 1109 | 17flowers/jpg/1/image_0108.jpg 1 1110 | 17flowers/jpg/1/image_0102.jpg 1 1111 | 17flowers/jpg/1/image_0103.jpg 1 1112 | 17flowers/jpg/1/image_0141.jpg 1 1113 | 17flowers/jpg/1/image_0089.jpg 1 1114 | 17flowers/jpg/1/image_0124.jpg 1 1115 | 17flowers/jpg/1/image_0106.jpg 1 1116 | 17flowers/jpg/1/image_0084.jpg 1 1117 | 17flowers/jpg/1/image_0156.jpg 1 1118 | 17flowers/jpg/1/image_0137.jpg 1 1119 | 17flowers/jpg/1/image_0129.jpg 1 1120 | 17flowers/jpg/1/image_0094.jpg 1 1121 | 17flowers/jpg/14/image_1197.jpg 14 1122 | 17flowers/jpg/14/image_1195.jpg 14 1123 | 17flowers/jpg/14/image_1183.jpg 14 1124 | 17flowers/jpg/14/image_1198.jpg 14 1125 | 17flowers/jpg/14/image_1179.jpg 14 1126 | 17flowers/jpg/14/image_1146.jpg 14 1127 | 17flowers/jpg/14/image_1193.jpg 14 1128 | 17flowers/jpg/14/image_1124.jpg 14 1129 | 17flowers/jpg/14/image_1145.jpg 14 1130 | 17flowers/jpg/14/image_1158.jpg 14 1131 | 17flowers/jpg/14/image_1131.jpg 14 1132 | 17flowers/jpg/14/image_1136.jpg 14 1133 | 17flowers/jpg/14/image_1143.jpg 14 1134 | 17flowers/jpg/14/image_1174.jpg 14 1135 | 17flowers/jpg/14/image_1182.jpg 14 1136 | 17flowers/jpg/14/image_1130.jpg 14 1137 | 17flowers/jpg/14/image_1122.jpg 14 1138 | 17flowers/jpg/14/image_1196.jpg 14 1139 | 17flowers/jpg/14/image_1167.jpg 14 1140 | 17flowers/jpg/14/image_1139.jpg 14 1141 | 17flowers/jpg/14/image_1154.jpg 14 1142 | 17flowers/jpg/14/image_1169.jpg 14 1143 | 17flowers/jpg/14/image_1127.jpg 14 1144 | 17flowers/jpg/14/image_1200.jpg 14 1145 | 17flowers/jpg/14/image_1140.jpg 14 1146 | 17flowers/jpg/14/image_1175.jpg 14 1147 | 17flowers/jpg/14/image_1161.jpg 14 1148 | 17flowers/jpg/14/image_1177.jpg 14 1149 | 17flowers/jpg/14/image_1137.jpg 14 1150 | 17flowers/jpg/14/image_1166.jpg 14 1151 | 17flowers/jpg/14/image_1133.jpg 14 1152 | 17flowers/jpg/14/image_1194.jpg 14 1153 | 17flowers/jpg/14/image_1135.jpg 14 1154 | 17flowers/jpg/14/image_1172.jpg 14 1155 | 17flowers/jpg/14/image_1190.jpg 14 1156 | 17flowers/jpg/14/image_1153.jpg 14 1157 | 17flowers/jpg/14/image_1186.jpg 14 1158 | 17flowers/jpg/14/image_1189.jpg 14 1159 | 17flowers/jpg/14/image_1128.jpg 14 1160 | 17flowers/jpg/14/image_1165.jpg 14 1161 | 17flowers/jpg/14/image_1192.jpg 14 1162 | 17flowers/jpg/14/image_1163.jpg 14 1163 | 17flowers/jpg/14/image_1199.jpg 14 1164 | 17flowers/jpg/14/image_1188.jpg 14 1165 | 17flowers/jpg/14/image_1155.jpg 14 1166 | 17flowers/jpg/14/image_1141.jpg 14 1167 | 17flowers/jpg/14/image_1123.jpg 14 1168 | 17flowers/jpg/14/image_1162.jpg 14 1169 | 17flowers/jpg/14/image_1149.jpg 14 1170 | 17flowers/jpg/14/image_1142.jpg 14 1171 | 17flowers/jpg/14/image_1151.jpg 14 1172 | 17flowers/jpg/14/image_1125.jpg 14 1173 | 17flowers/jpg/14/image_1156.jpg 14 1174 | 17flowers/jpg/14/image_1176.jpg 14 1175 | 17flowers/jpg/14/image_1185.jpg 14 1176 | 17flowers/jpg/14/image_1160.jpg 14 1177 | 17flowers/jpg/14/image_1180.jpg 14 1178 | 17flowers/jpg/14/image_1144.jpg 14 1179 | 17flowers/jpg/14/image_1121.jpg 14 1180 | 17flowers/jpg/14/image_1147.jpg 14 1181 | 17flowers/jpg/14/image_1191.jpg 14 1182 | 17flowers/jpg/14/image_1181.jpg 14 1183 | 17flowers/jpg/14/image_1178.jpg 14 1184 | 17flowers/jpg/14/image_1164.jpg 14 1185 | 17flowers/jpg/14/image_1126.jpg 14 1186 | 17flowers/jpg/14/image_1148.jpg 14 1187 | 17flowers/jpg/14/image_1159.jpg 14 1188 | 17flowers/jpg/14/image_1157.jpg 14 1189 | 17flowers/jpg/14/image_1134.jpg 14 1190 | 17flowers/jpg/14/image_1187.jpg 14 1191 | 17flowers/jpg/14/image_1150.jpg 14 1192 | 17flowers/jpg/14/image_1138.jpg 14 1193 | 17flowers/jpg/14/image_1170.jpg 14 1194 | 17flowers/jpg/14/image_1152.jpg 14 1195 | 17flowers/jpg/14/image_1168.jpg 14 1196 | 17flowers/jpg/14/image_1132.jpg 14 1197 | 17flowers/jpg/14/image_1129.jpg 14 1198 | 17flowers/jpg/14/image_1184.jpg 14 1199 | 17flowers/jpg/14/image_1173.jpg 14 1200 | 17flowers/jpg/14/image_1171.jpg 14 1201 | 17flowers/jpg/12/image_1012.jpg 12 1202 | 17flowers/jpg/12/image_1006.jpg 12 1203 | 17flowers/jpg/12/image_0995.jpg 12 1204 | 17flowers/jpg/12/image_1024.jpg 12 1205 | 17flowers/jpg/12/image_0990.jpg 12 1206 | 17flowers/jpg/12/image_0962.jpg 12 1207 | 17flowers/jpg/12/image_1039.jpg 12 1208 | 17flowers/jpg/12/image_1015.jpg 12 1209 | 17flowers/jpg/12/image_0967.jpg 12 1210 | 17flowers/jpg/12/image_0982.jpg 12 1211 | 17flowers/jpg/12/image_1035.jpg 12 1212 | 17flowers/jpg/12/image_1033.jpg 12 1213 | 17flowers/jpg/12/image_1014.jpg 12 1214 | 17flowers/jpg/12/image_1038.jpg 12 1215 | 17flowers/jpg/12/image_0998.jpg 12 1216 | 17flowers/jpg/12/image_0988.jpg 12 1217 | 17flowers/jpg/12/image_1018.jpg 12 1218 | 17flowers/jpg/12/image_0987.jpg 12 1219 | 17flowers/jpg/12/image_0980.jpg 12 1220 | 17flowers/jpg/12/image_0976.jpg 12 1221 | 17flowers/jpg/12/image_1013.jpg 12 1222 | 17flowers/jpg/12/image_0978.jpg 12 1223 | 17flowers/jpg/12/image_0997.jpg 12 1224 | 17flowers/jpg/12/image_0999.jpg 12 1225 | 17flowers/jpg/12/image_0977.jpg 12 1226 | 17flowers/jpg/12/image_0972.jpg 12 1227 | 17flowers/jpg/12/image_1029.jpg 12 1228 | 17flowers/jpg/12/image_0974.jpg 12 1229 | 17flowers/jpg/12/image_1023.jpg 12 1230 | 17flowers/jpg/12/image_0964.jpg 12 1231 | 17flowers/jpg/12/image_0968.jpg 12 1232 | 17flowers/jpg/12/image_1003.jpg 12 1233 | 17flowers/jpg/12/image_1036.jpg 12 1234 | 17flowers/jpg/12/image_1002.jpg 12 1235 | 17flowers/jpg/12/image_0971.jpg 12 1236 | 17flowers/jpg/12/image_0975.jpg 12 1237 | 17flowers/jpg/12/image_1027.jpg 12 1238 | 17flowers/jpg/12/image_1020.jpg 12 1239 | 17flowers/jpg/12/image_1011.jpg 12 1240 | 17flowers/jpg/12/image_1037.jpg 12 1241 | 17flowers/jpg/12/image_0989.jpg 12 1242 | 17flowers/jpg/12/image_1032.jpg 12 1243 | 17flowers/jpg/12/image_0996.jpg 12 1244 | 17flowers/jpg/12/image_1034.jpg 12 1245 | 17flowers/jpg/12/image_1017.jpg 12 1246 | 17flowers/jpg/12/image_0981.jpg 12 1247 | 17flowers/jpg/12/image_0969.jpg 12 1248 | 17flowers/jpg/12/image_0966.jpg 12 1249 | 17flowers/jpg/12/image_1016.jpg 12 1250 | 17flowers/jpg/12/image_1040.jpg 12 1251 | 17flowers/jpg/12/image_0970.jpg 12 1252 | 17flowers/jpg/12/image_1007.jpg 12 1253 | 17flowers/jpg/12/image_1022.jpg 12 1254 | 17flowers/jpg/12/image_0961.jpg 12 1255 | 17flowers/jpg/12/image_1021.jpg 12 1256 | 17flowers/jpg/12/image_1028.jpg 12 1257 | 17flowers/jpg/12/image_0993.jpg 12 1258 | 17flowers/jpg/12/image_1010.jpg 12 1259 | 17flowers/jpg/12/image_0963.jpg 12 1260 | 17flowers/jpg/12/image_1031.jpg 12 1261 | 17flowers/jpg/12/image_0992.jpg 12 1262 | 17flowers/jpg/12/image_0979.jpg 12 1263 | 17flowers/jpg/12/image_1026.jpg 12 1264 | 17flowers/jpg/12/image_1005.jpg 12 1265 | 17flowers/jpg/12/image_0991.jpg 12 1266 | 17flowers/jpg/12/image_1001.jpg 12 1267 | 17flowers/jpg/12/image_0965.jpg 12 1268 | 17flowers/jpg/12/image_0986.jpg 12 1269 | 17flowers/jpg/12/image_0985.jpg 12 1270 | 17flowers/jpg/12/image_0973.jpg 12 1271 | 17flowers/jpg/12/image_0984.jpg 12 1272 | 17flowers/jpg/12/image_1019.jpg 12 1273 | 17flowers/jpg/12/image_1004.jpg 12 1274 | 17flowers/jpg/12/image_1009.jpg 12 1275 | 17flowers/jpg/12/image_1008.jpg 12 1276 | 17flowers/jpg/12/image_0994.jpg 12 1277 | 17flowers/jpg/12/image_1030.jpg 12 1278 | 17flowers/jpg/12/image_1000.jpg 12 1279 | 17flowers/jpg/12/image_1025.jpg 12 1280 | 17flowers/jpg/12/image_0983.jpg 12 1281 | 17flowers/jpg/15/image_1246.jpg 15 1282 | 17flowers/jpg/15/image_1210.jpg 15 1283 | 17flowers/jpg/15/image_1238.jpg 15 1284 | 17flowers/jpg/15/image_1202.jpg 15 1285 | 17flowers/jpg/15/image_1272.jpg 15 1286 | 17flowers/jpg/15/image_1229.jpg 15 1287 | 17flowers/jpg/15/image_1249.jpg 15 1288 | 17flowers/jpg/15/image_1239.jpg 15 1289 | 17flowers/jpg/15/image_1216.jpg 15 1290 | 17flowers/jpg/15/image_1261.jpg 15 1291 | 17flowers/jpg/15/image_1235.jpg 15 1292 | 17flowers/jpg/15/image_1258.jpg 15 1293 | 17flowers/jpg/15/image_1255.jpg 15 1294 | 17flowers/jpg/15/image_1267.jpg 15 1295 | 17flowers/jpg/15/image_1201.jpg 15 1296 | 17flowers/jpg/15/image_1213.jpg 15 1297 | 17flowers/jpg/15/image_1209.jpg 15 1298 | 17flowers/jpg/15/image_1232.jpg 15 1299 | 17flowers/jpg/15/image_1218.jpg 15 1300 | 17flowers/jpg/15/image_1254.jpg 15 1301 | 17flowers/jpg/15/image_1259.jpg 15 1302 | 17flowers/jpg/15/image_1231.jpg 15 1303 | 17flowers/jpg/15/image_1253.jpg 15 1304 | 17flowers/jpg/15/image_1274.jpg 15 1305 | 17flowers/jpg/15/image_1222.jpg 15 1306 | 17flowers/jpg/15/image_1215.jpg 15 1307 | 17flowers/jpg/15/image_1204.jpg 15 1308 | 17flowers/jpg/15/image_1250.jpg 15 1309 | 17flowers/jpg/15/image_1280.jpg 15 1310 | 17flowers/jpg/15/image_1230.jpg 15 1311 | 17flowers/jpg/15/image_1270.jpg 15 1312 | 17flowers/jpg/15/image_1279.jpg 15 1313 | 17flowers/jpg/15/image_1223.jpg 15 1314 | 17flowers/jpg/15/image_1260.jpg 15 1315 | 17flowers/jpg/15/image_1273.jpg 15 1316 | 17flowers/jpg/15/image_1244.jpg 15 1317 | 17flowers/jpg/15/image_1242.jpg 15 1318 | 17flowers/jpg/15/image_1203.jpg 15 1319 | 17flowers/jpg/15/image_1234.jpg 15 1320 | 17flowers/jpg/15/image_1271.jpg 15 1321 | 17flowers/jpg/15/image_1225.jpg 15 1322 | 17flowers/jpg/15/image_1237.jpg 15 1323 | 17flowers/jpg/15/image_1212.jpg 15 1324 | 17flowers/jpg/15/image_1220.jpg 15 1325 | 17flowers/jpg/15/image_1278.jpg 15 1326 | 17flowers/jpg/15/image_1262.jpg 15 1327 | 17flowers/jpg/15/image_1219.jpg 15 1328 | 17flowers/jpg/15/image_1207.jpg 15 1329 | 17flowers/jpg/15/image_1214.jpg 15 1330 | 17flowers/jpg/15/image_1221.jpg 15 1331 | 17flowers/jpg/15/image_1217.jpg 15 1332 | 17flowers/jpg/15/image_1265.jpg 15 1333 | 17flowers/jpg/15/image_1252.jpg 15 1334 | 17flowers/jpg/15/image_1248.jpg 15 1335 | 17flowers/jpg/15/image_1268.jpg 15 1336 | 17flowers/jpg/15/image_1211.jpg 15 1337 | 17flowers/jpg/15/image_1263.jpg 15 1338 | 17flowers/jpg/15/image_1208.jpg 15 1339 | 17flowers/jpg/15/image_1240.jpg 15 1340 | 17flowers/jpg/15/image_1277.jpg 15 1341 | 17flowers/jpg/15/image_1233.jpg 15 1342 | 17flowers/jpg/15/image_1228.jpg 15 1343 | 17flowers/jpg/15/image_1257.jpg 15 1344 | 17flowers/jpg/15/image_1245.jpg 15 1345 | 17flowers/jpg/15/image_1247.jpg 15 1346 | 17flowers/jpg/15/image_1269.jpg 15 1347 | 17flowers/jpg/15/image_1205.jpg 15 1348 | 17flowers/jpg/15/image_1266.jpg 15 1349 | 17flowers/jpg/15/image_1251.jpg 15 1350 | 17flowers/jpg/15/image_1243.jpg 15 1351 | 17flowers/jpg/15/image_1256.jpg 15 1352 | 17flowers/jpg/15/image_1241.jpg 15 1353 | 17flowers/jpg/15/image_1224.jpg 15 1354 | 17flowers/jpg/15/image_1264.jpg 15 1355 | 17flowers/jpg/15/image_1206.jpg 15 1356 | 17flowers/jpg/15/image_1227.jpg 15 1357 | 17flowers/jpg/15/image_1226.jpg 15 1358 | 17flowers/jpg/15/image_1275.jpg 15 1359 | 17flowers/jpg/15/image_1276.jpg 15 1360 | 17flowers/jpg/15/image_1236.jpg 15 1361 | --------------------------------------------------------------------------------