日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

SSD 安装、训练、测试(ubuntu14.04+cuda7.5+openvc2.4.9)

發(fā)布時間:2024/9/21 Ubuntu 88 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSD 安装、训练、测试(ubuntu14.04+cuda7.5+openvc2.4.9) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

安裝步驟

1.安裝git,下載SSD源碼包

sudo apt-get install git

git clone https://github.com/weiliu89/caffe.git

cd caffe

git checkout ssd

以下幾條命令是驗證相應(yīng)的包是否齊全

sudo apt-get install python-pip

sudo apt-get install python-numpy

sudo apt-get install python-scipy

pip install cython -ihttp://pypi.douban.com/simple

pip install eaydict


也可以指定git clone 存放地址(到指定目錄下,運行以上命令就行了)
2.修改Makefile.config文件

復(fù)制根目錄下的Makefile.config.exampleMakefile.config

根據(jù)本機環(huán)境,調(diào)整以下參數(shù):

CUDA_ARCH:

BLAS:
MATLAB_DIR:(可選)

PYTHON_INCLUDE:

3.編譯
在源碼包的根目錄下運行以下命令:

make -j8

make py

make test -j8

make runtest -j8(可選)

4.編譯錯誤分析


注意:cuda8.0要將gcc升級到5.0,否則就會出現(xiàn)上圖的錯誤。錯誤鏈接https://github.com/weiliu89/caffe/issues/237

The problem was that to make caffe with CUDA 8 it is necessary a 5.3 or 5.4 GCC version.
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-5 g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60 --slave /usr/bin/g++ g++ /usr/bin/g++-5

錯誤1

如果有多GPU,運行make runtest 出錯

解決方案:export CUDA_VISIBLE_DEVICES=0; makeruntest -j8

如果出現(xiàn)錯誤: check failed :error == cudasuccess(10 vs. 0) invaliddevice ordinal

解決方案:首先需要確保使用的是特定的GPU,或者嘗試

unsetCUDA_VISIBLE_DEVICES

錯誤2

使用caffe時編譯出錯

include and lib

使用自己機器編譯的include和lib (caffe/build/lib, caffe/include)

caffe.pb.h丟失問題:

/home/xxx/caffe/include/caffe/blob.hpp:9:34:fatal error: caffe/proto/caffe.pb.h: No such file or directory

?#include "caffe/proto/caffe.pb.h"

解決方法: 用protoc從caffe/src/caffe/proto/caffe.proto生成caffe.pb.h和caffe.pb.cc

li@li:~/caffe/src/caffe/proto$protoc --cpp_out=/home/xxx/caffe/include/caffe/ caffe.proto

錯誤3

stdc++

linker error:

/usr/bin/ld:caffe_cnn_handler.o: undefined reference to symbol'_ZNSs4_Rep10_M_destroyERKSaIcE@@GLIBCXX_3.4'

//usr/lib/x86_64-linux-gnu/libstdc++.so.6:error adding symbols: DSO missing from command line

解決方案:是找不到libstdc++.so.6,解決方法是在Makefile中加入:

LIBS +=-L/usr/lib/x86_64-linux-gnu -lstdc++

測試步驟

1.下載官網(wǎng)提供的模型,解壓放到/caffe/models/

比如:models_VGGNet_VOC0712_SSD_300x300.tar.gz,

解壓出來的是models文件夾,把這個文件夾里面的VGGNet拷貝放到caffe/models/下

2.測試

源碼包根目錄下運行:?

pythonexamples/ssd/score_ssd_pascal.py (數(shù)值在0.718左右)(老版本使用)

pythonexamles/ssd/ssd_pascal_webcam.py

pythonexamles/ssd/ssd_pascal_video.py

3.錯誤解析

錯誤1

提示:no module named caffe

在score_ssd_pascal.py/ssd_pascal_webcam.py/ssd_pascal_video.py等對應(yīng)腳本中添加

import sys

sys.path.insert(0,'/home/xxx/caffe/python')

訓(xùn)練步驟

1.制作自己的數(shù)據(jù)集(與faster rcnn類似)可參考我的另一篇博文:faster rcnn的安裝、訓(xùn)練、調(diào)試

新建

(1)data/VOCdevkit/VOC2007新建 Annotations;ImageSets/Main;JPEGImages

說明:

Annotations:保存標簽txt轉(zhuǎn)換的xml文件

JPEGImages: 圖片文件

ImageSets/Main:文件名列表(不含后綴)

訓(xùn)練集: ? ? train.txt

訓(xùn)練驗證集: trainval.txt

測試集: ? ? test.txt

驗證集: ? ? val.txt

拷貝

將data/VOC0712下面的create_list.sh、create_data.sh、labelmap_voc.prototxt拷貝到data/VOCdevkit2007/VOC2007/

修改接口

**create_list.sh**:修改3

1.root_dir=$HOME/data/VOCdevkit/? ? ? ? ? ? ? ?

改寫為 root_dir=$HOME/caffe/data/VOCdevkit/

2.for name inVOC2007 VOC2012 ? ? ? ? ? ? ? ???

改寫為 for name in VOC2007

3.$bash_dir/../../build/tools/get_image_size? ??

改寫為?$HOME/caffe/build/tools/get_image_size

?

**create_data.sh**修改5

1.root_dir=$cur_dir/../..? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ?

改寫為?root_dir=$HOME/caffe

2.data_root_dir="$HOME/data/VOCdevkit"? ??

改寫為?data_root_dir="$HOME/caffe/data/VOCdevkit"

3.dataset_name="VOC0712"? ? ? ? ? ? ? ? ? ? ?? ??

改寫為 dataset_name="VOC2007"

4.mapfile="$root_dir/data/$dataset_name/labelmap_voc.prototxt"

改寫為?mapfile="$root_dir/data/VOCdevkit/$dataset_name/labelmap_voc.prototxt"

?

?

5.python$root_dir/scripts/create_annoset.py --anno-type=$anno_type--label-map-file=$mapfile --min-dim=$min_dim --max-dim=$max_dim--resize-width=$width --resize-height=$height --check-label $extra_cmd$data_root_dir $root_dir/data/$dataset_name/$subset.txt$data_root_dir/$dataset_name/$db/$dataset_name"_"$subset"_"$dbexamples/$dataset_name

改寫為

python$root_dir/scripts/create_annoset.py --anno-type=$anno_type--label-map-file=$mapfile --min-dim=$min_dim --max-dim=$max_dim--resize-width=$width --resize-height=$height --check-label $extra_cmd$data_root_dir $root_dir/data/VOCdevkit/$dataset_name/$subset.txt$data_root_dir/$dataset_name/$db/$dataset_name"_"$subset"_"$dbexamples/$dataset_name

?

**labelmap_voc.prototxt**

需要注意是label需要小寫,刪除多余的label,保留label=0的背景,以及自己數(shù)據(jù)的name和label

例如:

item {

? name: "none_of_the_above"

? label: 0

? display_name: "background"

}

item {

? name: "face"

? label: 1

? display_name: "face"

}

item {

? name: "pedestrian"

? label: 2

? display_name: "pedestrian"

}

2. 轉(zhuǎn)換成 LMDB文件
到 caffe/examples 路徑下新建VOC2007文件夾,用于創(chuàng)建LMDB文件軟連接
然后到根目錄下運行已經(jīng)修改的sh文件
./data/VOCdevkit/VOC2007/create_list.sh
./data/VOCdevkit/VOC2007/create_data.sh
如果出現(xiàn): ? ?nomoudle named caffe/caffe-proto,
則在終端輸入:exportPYTHONPATH=$PYTHONPATH:/home/**(服務(wù)器的名字)/caffe/python

?

如果依然不行,打開 ./scripts/creta_annosetpy

在import sys后添加以下代碼:

import os.path asosp

defadd_path(path):

??? if path not in sys.path:

??????? sys.path.insert(0,path)

caffe_path =osp.join('/home/****/caffe/python')

add_path(caffe_path)

3. 如果是直接使用他人已經(jīng)制作好的LMDB 文件,則只需創(chuàng)建鏈接文件
到 ./scripts 創(chuàng)建 create_link.py 文件,并粘貼如下代碼:

import argparse

import os

import shutil

import subprocess

import sys

from caffe.protoimport caffe_pb2

fromgoogle.protobuf import text_format

example_dir ='/home/li/caffe/examples/VOC2007'

out_dir ='/home/***/caffe/data/VOCdevkit/VOC2007/lmdb'

lmdb_name =['VOC2007_test_lmdb', 'VOC2007_trainval_lmdb']

# checkexample_dir is exist

if notos.path.exists(example_dir):

??? os.makedirs(example_dir)

for lmdb_sub inlmdb_name:

??? link_dir = os.path.join(example_dir,lmdb_sub)

??? # check lin_dir is exist

??? if os.path.exists(link_dir):

??????? os.unlink(link_dir)

??? os.symlink(os.path.join(out_dir,lmdb_sub),link_dir)

?

4. 下載預(yù)訓(xùn)練模型
下載預(yù)訓(xùn)練模型VGG_ILSVRC_16_layers_fc_reduced.caffemodel,放在 ./models/VGGNet/路徑下

5. 修改./examples/ssd/ssd_pascal.py腳本
需要修改的地方在對應(yīng)行之后用######標注出來了

from __future__import print_function

import sys######

sys.path.insert(0,'/XXX/caffe/python')######添加路徑SSD/caffe/python路徑,防止找不到caffe

import caffe

fromcaffe.model_libs import *

fromgoogle.protobuf import text_format

import math

import os

import shutil

import stat

import subprocess


# Add extra layerson top of a "base" network (e.g. VGGNet or Inception).

defAddExtraLayers(net, use_batchnorm=True, lr_mult=1):

??? use_relu = True

??? # Add additional convolutional layers.

??? # 19 x 19

??? from_layer = net.keys()[-1]

??? # TODO(weiliu89): Construct the name usingthe last layer to avoid duplication.

??? # 10 x 10

??? out_layer = "conv6_1"

??? ConvBNLayer(net, from_layer, out_layer, use_batchnorm,use_relu, 256, 1, 0, 1,

??????? lr_mult=lr_mult)

??? from_layer = out_layer

??? out_layer = "conv6_2"

??? ConvBNLayer(net, from_layer, out_layer,use_batchnorm, use_relu, 512, 3, 1, 2,

??????? lr_mult=lr_mult)

??? # 5 x 5

??? from_layer = out_layer

??? out_layer = "conv7_1"

??? ConvBNLayer(net, from_layer, out_layer,use_batchnorm, use_relu, 128, 1, 0, 1,

????? lr_mult=lr_mult)

??? from_layer = out_layer

??? out_layer = "conv7_2"

??? ConvBNLayer(net, from_layer, out_layer,use_batchnorm, use_relu, 256, 3, 1, 2,

????? lr_mult=lr_mult)

??? # 3 x 3

??? from_layer = out_layer

??? out_layer = "conv8_1"

??? ConvBNLayer(net, from_layer, out_layer,use_batchnorm, use_relu, 128, 1, 0, 1,

????? lr_mult=lr_mult)

??? from_layer = out_layer

??? out_layer = "conv8_2"

??? ConvBNLayer(net, from_layer, out_layer,use_batchnorm, use_relu, 256, 3, 0, 1,

????? lr_mult=lr_mult)

??? # 1 x 1

??? from_layer = out_layer

??? out_layer = "conv9_1"

??? ConvBNLayer(net, from_layer, out_layer,use_batchnorm, use_relu, 128, 1, 0, 1,

????? lr_mult=lr_mult)

??? from_layer = out_layer

??? out_layer = "conv9_2"

??? ConvBNLayer(net, from_layer, out_layer,use_batchnorm, use_relu, 256, 3, 0, 1,

????? lr_mult=lr_mult)

??? return net

### Modify thefollowing parameters accordingly ###

# The directorywhich contains the caffe code.

# We assume youare running the script at the CAFFE_ROOT.

caffe_root =os.getcwd()

# Set true if youwant to start training right after generating all files.

run_soon = True

# Set true if youwant to load from most recently saved snapshot.

# Otherwise, wewill load from the pretrain_model defined below.

resume_training =True

# If true, Removeold model files.

remove_old_models= False

# The databasefile for training data. Created by data/VOC0712/create_data.sh

train_data ="examples/VOC2007/VOC2007_trainval_lmdb"######

# The databasefile for testing data. Created by data/VOC0712/create_data.sh

test_data ="examples/VOC2007/VOC2007_test_lmdb"######

# Specify thebatch sampler.

resize_width = 300######

resize_height =300######

resize ="{}x{}".format(resize_width, resize_height)

batch_sampler = [

??????? {

??????????????? 'sampler': {

??????????????????????? },

??????????????? 'max_trials': 1,

??????????????? 'max_sample': 1,

??????? },

??????? {

?????????????? ?'sampler': {

??????????????????????? 'min_scale': 0.3,

??????????????????????? 'max_scale': 1.0,

??????????????????????? 'min_aspect_ratio':0.5,

??????????????????????? 'max_aspect_ratio':2.0,

??????????????????????? },

??????????????? 'sample_constraint': {

??????????????????????? 'min_jaccard_overlap':0.1,

??????????????????????? },

??????????????? 'max_trials': 50,

??????????????? 'max_sample': 1,

??????? },

??????? {

??????????????? 'sampler': {

??????????????????????? 'min_scale': 0.3,

??????????? ????????????'max_scale': 1.0,

??????????????????????? 'min_aspect_ratio':0.5,

??????????????????????? 'max_aspect_ratio':2.0,

??????????????????????? },

??????????????? 'sample_constraint': {

??????????????????????? 'min_jaccard_overlap':0.3,

????????? ??????????????},

??????????????? 'max_trials': 50,

??????????????? 'max_sample': 1,

??????? },

??????? {

??????????????? 'sampler': {

??????????????????????? 'min_scale': 0.3,

??????????????????????? 'max_scale': 1.0,

??????????????????????? 'min_aspect_ratio':0.5,

??????????????????????? 'max_aspect_ratio':2.0,

??????????????????????? },

??????????????? 'sample_constraint': {

??????????????????????? 'min_jaccard_overlap':0.5,

??????????????????????? },

??????????????? 'max_trials': 50,

??????????????? 'max_sample': 1,

??????? },

??????? {

??????????????? 'sampler': {

??????????????????????? 'min_scale': 0.3,

??????????????????????? 'max_scale': 1.0,

??????????????????????? 'min_aspect_ratio':0.5,

??????????????????????? 'max_aspect_ratio':2.0,

??????? ????????????????},

??????????????? 'sample_constraint': {

??????????????????????? 'min_jaccard_overlap':0.7,

??????????????????????? },

??????????????? 'max_trials': 50,

??????????????? 'max_sample': 1,

??????? },

??????? {

??????????????? 'sampler': {

? ??????????????????????'min_scale': 0.3,

??????????????????????? 'max_scale': 1.0,

??????????????????????? 'min_aspect_ratio':0.5,

??????????????????????? 'max_aspect_ratio':2.0,

??????????????????????? },

??????????????? 'sample_constraint': {

????????? ??????????????'min_jaccard_overlap': 0.9,

??????????????????????? },

??????????????? 'max_trials': 50,

??????????????? 'max_sample': 1,

??????? },

??????? {

??????????????? 'sampler': {

??????????????????????? 'min_scale': 0.3,

??????????????????????? 'max_scale': 1.0,

??????????????????????? 'min_aspect_ratio':0.5,

??????????????????????? 'max_aspect_ratio':2.0,

??????????????????????? },

??????????????? 'sample_constraint': {

??????????????????????? 'max_jaccard_overlap':1.0,

??????????????????????? },

??????????????? 'max_trials': 50,

??????????????? 'max_sample': 1,

??????? },

??????? ]

train_transform_param= {

??????? 'mirror': True,

??????? 'mean_value': [104, 117, 123],

??????? 'resize_param': {

??????????????? 'prob': 1,

??????????????? 'resize_mode': P.Resize.WARP,

??????????????? 'height': resize_height,

??????????????? 'width': resize_width,

??????????????? 'interp_mode': [

??????????????????????? P.Resize.LINEAR,

??????????????????????? P.Resize.AREA,

??????????????????????? P.Resize.NEAREST,

??????????????????????? P.Resize.CUBIC,

??????????????????????? P.Resize.LANCZOS4,

??????????????????????? ],

??????????????? },

??????? 'distort_param': {

??????????????? 'brightness_prob': 0.5,

??????????????? 'brightness_delta': 32,

??????????????? 'contrast_prob': 0.5,

??????????????? 'contrast_lower': 0.5,

??????????????? 'contrast_upper': 1.5,

??????????????? 'hue_prob': 0.5,

??????????????? 'hue_delta': 18,

??????????????? 'saturation_prob': 0.5,

??????????????? 'saturation_lower': 0.5,

???????????? ???'saturation_upper': 1.5,

??????????????? 'random_order_prob': 0.0,

??????????????? },

??????? 'expand_param': {

??????????????? 'prob': 0.5,

??????????????? 'max_expand_ratio': 4.0,

??????????????? },

??????? 'emit_constraint': {

??????????? 'emit_type':caffe_pb2.EmitConstraint.CENTER,

??????????? }

??????? }

test_transform_param= {

??????? 'mean_value': [104, 117, 123],

??????? 'resize_param': {

??????????????? 'prob': 1,

??????????????? 'resize_mode': P.Resize.WARP,

??????????????? 'height': resize_height,

??????????????? 'width': resize_width,

??????????????? 'interp_mode':[P.Resize.LINEAR],

??????????????? },

??????? }

# If true, usebatch norm for all newly added layers.

# Currently onlythe non batch norm version has been tested.

use_batchnorm =False

lr_mult = 1

# Use differentinitial learning rate.

if use_batchnorm:

??? base_lr = 0.0004

else:

??? # A learning rate for batch_size = 1,num_gpus = 1.

??? base_lr = 0.000004######

# Modify the jobname if you want.

job_name ="SSD_{}".format(resize)

# The name of themodel. Modify it if you want.

model_name ="VGG_VOC2007_{}".format(job_name)######

# Directory whichstores the model .prototxt file.

save_dir ="models/VGGNet/VOC2007/{}".format(job_name)######

# Directory whichstores the snapshot of models.

snapshot_dir ="models/VGGNet/VOC2007/{}".format(job_name)######

# Directory whichstores the job script and log file.

job_dir ="jobs/VGGNet/VOC2007/{}".format(job_name)######

# Directory whichstores the detection results.

output_result_dir= "{}/data/VOCdevkit/results/VOC2007/{}/Main".format(os.environ['HOME'],job_name)######

# model definitionfiles.

train_net_file ="{}/train.prototxt".format(save_dir)

test_net_file ="{}/test.prototxt".format(save_dir)

deploy_net_file ="{}/deploy.prototxt".format(save_dir)

solver_file ="{}/solver.prototxt".format(save_dir)

# snapshot prefix.

snapshot_prefix ="{}/{}".format(snapshot_dir, model_name)

# job script path.

job_file ="{}/{}.sh".format(job_dir, model_name)

# Stores the testimage names and sizes. Created by data/VOC0712/create_list.sh

name_size_file ="data/VOCdevkit/VOC2007/test_name_size.txt"######

# The pretrainedmodel. We use the Fully convolutional reduced (atrous) VGGNet.

pretrain_model ="models/VGGNet/VGG_ILSVRC_16_layers_fc_reduced.caffemodel"######

# StoresLabelMapItem.

label_map_file ="data/VOCdevkit/VOC2007/labelmap_voc.prototxt"######

# MultiBoxLossparameters.

num_classes = 2######

share_location =True

background_label_id=0

train_on_diff_gt =True

normalization_mode= P.Loss.VALID

code_type =P.PriorBox.CENTER_SIZE

ignore_cross_boundary_bbox= False

mining_type =P.MultiBoxLoss.MAX_NEGATIVE

neg_pos_ratio = 3.

loc_weight =(neg_pos_ratio + 1.) / 4.

multibox_loss_param= {

??? 'loc_loss_type': P.MultiBoxLoss.SMOOTH_L1,

??? 'conf_loss_type': P.MultiBoxLoss.SOFTMAX,

??? 'loc_weight': loc_weight,

??? 'num_classes': num_classes,

??? 'share_location': share_location,

??? 'match_type':P.MultiBoxLoss.PER_PREDICTION,

??? 'overlap_threshold': 0.5,

??? 'use_prior_for_matching': True,

??? 'background_label_id': background_label_id,

??? 'use_difficult_gt': train_on_diff_gt,

??? 'mining_type': mining_type,

??? 'neg_pos_ratio': neg_pos_ratio,

??? 'neg_overlap': 0.5,

??? 'code_type': code_type,

??? 'ignore_cross_boundary_bbox':ignore_cross_boundary_bbox,

??? }

loss_param = {

??? 'normalization': normalization_mode,

??? }

# parameters forgenerating priors.

# minimumdimension of input image

min_dim = 300

# conv4_3 ==>38 x 38

# fc7 ==> 19 x19

# conv6_2 ==>10 x 10

# conv7_2 ==> 5x 5

# conv8_2 ==> 3x 3

# conv9_2 ==> 1x 1

mbox_source_layers= ['conv4_3', 'fc7', 'conv6_2', 'conv7_2', 'conv8_2', 'conv9_2']

# in percent %

min_ratio = 20

max_ratio = 90

step =int(math.floor((max_ratio - min_ratio) / (len(mbox_source_layers) - 2)))

min_sizes = []

max_sizes = []

for ratio inxrange(min_ratio, max_ratio + 1, step):

? min_sizes.append(min_dim * ratio / 100.)

? max_sizes.append(min_dim * (ratio + step) /100.)

min_sizes =[min_dim * 10 / 100.] + min_sizes

max_sizes =[min_dim * 20 / 100.] + max_sizes

steps = [8, 16,32, 64, 100, 300]

aspect_ratios =[[2], [2, 3], [2, 3], [2, 3], [2], [2]]

# L2 normalizeconv4_3.

normalizations =[20, -1, -1, -1, -1, -1]

# variance used toencode/decode prior bboxes.

if code_type ==P.PriorBox.CENTER_SIZE:

? prior_variance = [0.1, 0.1, 0.2, 0.2]

else:

? prior_variance = [0.1]

flip = True

clip = False

# Solverparameters.

# Defining whichGPUs to use.

gpus ="0"######

gpulist =gpus.split(",")

num_gpus =len(gpulist)

# Divide themini-batch to different GPUs.

batch_size = 32######

accum_batch_size =32######

iter_size =accum_batch_size / batch_size

solver_mode =P.Solver.CPU

device_id = 0

batch_size_per_device= batch_size

if num_gpus >0:

? batch_size_per_device =int(math.ceil(float(batch_size) / num_gpus))

? iter_size =int(math.ceil(float(accum_batch_size) / (batch_size_per_device * num_gpus)))

? solver_mode = P.Solver.GPU

? device_id = int(gpulist[0])

ifnormalization_mode == P.Loss.NONE:

? base_lr /= batch_size_per_device

elifnormalization_mode == P.Loss.VALID:

? base_lr *= 25. / loc_weight

elifnormalization_mode == P.Loss.FULL:

? # Roughly there are 2000 prior bboxes perimage.

? # TODO(weiliu89): Estimate the exact # ofpriors.

? base_lr *= 2000.

# Evaluate onwhole test set.

num_test_image =15439######

test_batch_size =8######

test_iter =num_test_image / test_batch_size

solver_param = {

??? # Train parameters

??? 'base_lr': base_lr,

??? 'weight_decay': 0.0005,

??? 'lr_policy': "multistep",

??? 'stepvalue': [80000, 100000, 120000],

??? 'gamma': 0.1,

??? 'momentum': 0.9,

??? 'iter_size': iter_size,

??? 'max_iter': 120000,

??? 'snapshot': 80000,

??? 'display': 10,

??? 'average_loss': 10,

??? 'type': "SGD",

??? 'solver_mode': solver_mode,

??? 'device_id': device_id,

??? 'debug_info': False,

??? 'snapshot_after_train': True,

??? # Test parameters

??? 'test_iter': [test_iter],

??? 'test_interval': 10000,

??? 'eval_type': "detection",

??? 'ap_version': "11point",

??? 'test_initialization': False,

??? }

?

# parameters forgenerating detection output.

det_out_param = {

??? 'num_classes': num_classes,

??? 'share_location': share_location,

??? 'background_label_id': background_label_id,

??? 'nms_param': {'nms_threshold': 0.45,'top_k': 400},

??? 'save_output_param': {

??????? 'output_directory': output_result_dir,

??????? 'output_name_prefix':"comp4_det_test_",

??????? 'output_format': "VOC",

??????? 'label_map_file': label_map_file,

??????? 'name_size_file': name_size_file,

??????? 'num_test_image': num_test_image,

??????? },

??? 'keep_top_k': 200,

??? 'confidence_threshold': 0.01,

??? 'code_type': code_type,

??? }

# parameters forevaluating detection results.

det_eval_param = {

??? 'num_classes': num_classes,

??? 'background_label_id': background_label_id,

??? 'overlap_threshold': 0.5,

??? 'evaluate_difficult_gt': False,

??? 'name_size_file': name_size_file,

??? }

### Hopefully youdon't need to change the following ###

# Check file.

check_if_exist(train_data)

check_if_exist(test_data)

check_if_exist(label_map_file)

check_if_exist(pretrain_model)

make_if_not_exist(save_dir)

make_if_not_exist(job_dir)

make_if_not_exist(snapshot_dir)

# Create trainnet.

net =caffe.NetSpec()

net.data,net.label = CreateAnnotatedDataLayer(train_data,batch_size=batch_size_per_device,

??????? train=True, output_label=True,label_map_file=label_map_file,

??????? transform_param=train_transform_param,batch_sampler=batch_sampler)

VGGNetBody(net,from_layer='data', fully_conv=True, reduced=True, dilated=True,

??? dropout=False)

AddExtraLayers(net,use_batchnorm, lr_mult=lr_mult)

mbox_layers =CreateMultiBoxHead(net, data_layer='data', from_layers=mbox_source_layers,

??????? use_batchnorm=use_batchnorm,min_sizes=min_sizes, max_sizes=max_sizes,

??????? aspect_ratios=aspect_ratios,steps=steps, normalizations=normalizations,

??????? num_classes=num_classes,share_location=share_location, flip=flip, clip=clip,

??????? prior_variance=prior_variance,kernel_size=3, pad=1, lr_mult=lr_mult)

# Create theMultiBoxLossLayer.

name ="mbox_loss"

mbox_layers.append(net.label)

net[name] =L.MultiBoxLoss(*mbox_layers, multibox_loss_param=multibox_loss_param,

??????? loss_param=loss_param,include=dict(phase=caffe_pb2.Phase.Value('TRAIN')),

??????? propagate_down=[True, True, False,False])

withopen(train_net_file, 'w') as f:

??? print('name:"{}_train"'.format(model_name), file=f)

??? print(net.to_proto(), file=f)

shutil.copy(train_net_file,job_dir)

# Create test net.

net =caffe.NetSpec()

net.data,net.label = CreateAnnotatedDataLayer(test_data, batch_size=test_batch_size,

??????? train=False, output_label=True,label_map_file=label_map_file,

??????? transform_param=test_transform_param)

VGGNetBody(net,from_layer='data', fully_conv=True, reduced=True, dilated=True,

??? dropout=False)

AddExtraLayers(net,use_batchnorm, lr_mult=lr_mult)

mbox_layers =CreateMultiBoxHead(net, data_layer='data', from_layers=mbox_source_layers,

??????? use_batchnorm=use_batchnorm,min_sizes=min_sizes, max_sizes=max_sizes,

??????? aspect_ratios=aspect_ratios,steps=steps, normalizations=normalizations,

??????? num_classes=num_classes,share_location=share_location, flip=flip, clip=clip,

??????? prior_variance=prior_variance,kernel_size=3, pad=1, lr_mult=lr_mult)

conf_name ="mbox_conf"

ifmultibox_loss_param["conf_loss_type"] == P.MultiBoxLoss.SOFTMAX:

? reshape_name ="{}_reshape".format(conf_name)

? net[reshape_name] = L.Reshape(net[conf_name],shape=dict(dim=[0, -1, num_classes]))

? softmax_name ="{}_softmax".format(conf_name)

? net[softmax_name] =L.Softmax(net[reshape_name], axis=2)

? flatten_name ="{}_flatten".format(conf_name)

? net[flatten_name] =L.Flatten(net[softmax_name], axis=1)

? mbox_layers[1] = net[flatten_name]

elifmultibox_loss_param["conf_loss_type"] == P.MultiBoxLoss.LOGISTIC:

? sigmoid_name ="{}_sigmoid".format(conf_name)

? net[sigmoid_name] = L.Sigmoid(net[conf_name])

? mbox_layers[1] = net[sigmoid_name]

net.detection_out= L.DetectionOutput(*mbox_layers,

??? detection_output_param=det_out_param,

???include=dict(phase=caffe_pb2.Phase.Value('TEST')))

net.detection_eval= L.DetectionEvaluate(net.detection_out, net.label,

??? detection_evaluate_param=det_eval_param,

???include=dict(phase=caffe_pb2.Phase.Value('TEST')))

withopen(test_net_file, 'w') as f:

??? print('name:"{}_test"'.format(model_name), file=f)

??? print(net.to_proto(), file=f)

shutil.copy(test_net_file,job_dir)

# Create deploynet.

# Remove the firstand last layer from test net.

deploy_net = net

withopen(deploy_net_file, 'w') as f:

??? net_param = deploy_net.to_proto()

??? # Remove the first (AnnotatedData) and last(DetectionEvaluate) layer from test net.

??? del net_param.layer[0]

??? del net_param.layer[-1]

??? net_param.name ='{}_deploy'.format(model_name)

??? net_param.input.extend(['data'])

??? net_param.input_shape.extend([

??????? caffe_pb2.BlobShape(dim=[1, 3,resize_height, resize_width])])

??? print(net_param, file=f)

shutil.copy(deploy_net_file,job_dir)

# Create solver.

solver =caffe_pb2.SolverParameter(

??????? train_net=train_net_file,

??????? test_net=[test_net_file],

??????? snapshot_prefix=snapshot_prefix,

??????? **solver_param)

withopen(solver_file, 'w') as f:

??? print(solver, file=f)

shutil.copy(solver_file,job_dir)

max_iter = 0

# Find most recentsnapshot.

for file inos.listdir(snapshot_dir):

? if file.endswith(".solverstate"):

??? basename = os.path.splitext(file)[0]

??? iter =int(basename.split("{}_iter_".format(model_name))[1])

??? if iter > max_iter:

????? max_iter = iter

train_src_param ='--weights="{}" \\\n'.format(pretrain_model)

ifresume_training:

? if max_iter > 0:

??? train_src_param ='--snapshot="{}_iter_{}.solverstate" \\\n'.format(snapshot_prefix,max_iter)

ifremove_old_models:

? # Remove any snapshots smaller than max_iter.

? for file in os.listdir(snapshot_dir):

??? if file.endswith(".solverstate"):

????? basename = os.path.splitext(file)[0]

????? iter =int(basename.split("{}_iter_".format(model_name))[1])

????? if max_iter > iter:

???????os.remove("{}/{}".format(snapshot_dir, file))

??? if file.endswith(".caffemodel"):

????? basename = os.path.splitext(file)[0]

????? iter =int(basename.split("{}_iter_".format(model_name))[1])

????? if max_iter > iter:

???????os.remove("{}/{}".format(snapshot_dir, file))

# Create job file.

withopen(job_file, 'w') as f:

? f.write('cd {}\n'.format(caffe_root))

? f.write('./build/tools/caffe train \\\n')

? f.write('--solver="{}"\\\n'.format(solver_file))

? f.write(train_src_param)

? if solver_param['solver_mode'] ==P.Solver.GPU:

??? f.write('--gpu {} 2>&1 | tee{}/{}.log\n'.format(gpus, job_dir, model_name))

? else:

??? f.write('2>&1 | tee{}/{}.log\n'.format(job_dir, model_name))

# Copy the pythonscript to job_dir.

py_file =os.path.abspath(__file__)

shutil.copy(py_file,job_dir)

# Run the job.

os.chmod(job_file,stat.S_IRWXU)

if run_soon:

? subprocess.call(job_file, shell=True)

?

?

train\test\deploy\solver.prototxt等都是運行這個腳本自動生成的。

gpus='0,1,2,3',如果有一塊GPU,則刪除123,有兩塊則刪除23

如果沒有GPU,需要注釋以下幾行,程序會以cpu形式訓(xùn)練:(這個是解決 cudasucess(10vs0)的方法)

#ifnum_gpus >0:

#batch_size_per_device=int(math.ceil(float(batch_size)/num_gpus))

#iter_size = int(math.ceil(float(accum_batch_size)/(batch_size_per_device*num_gpus)))

#solver_model=P.Solver.GPU

#device_id=int(gpulist[0])

6. 修改 ./examples/ssd/ssd_pascal_webcam.py腳本

對應(yīng)修改就行了

7. 訓(xùn)練

在根目錄下運行

python ./examples/ssd/ssd_pascal.py 2>&1 | tee ssd_train_log.txt

?

如果出現(xiàn) cudasucess(2vs0):說明顯卡的計算能力有限,需要更改 caffe/examples/sdd/ssd_pascal.py 中的batch_size. 默認的32變小成16、8、4。

8. 測試單張圖片,并顯示框的坐標信息

[python] view plaincopyprint?
  • #?coding:?utf-8??
  • #?Note:?this?file?is?expected?to?be?in?{caffe_root}/examples??
  • #?###?1.?Setup??
  • from?__future__?import?print_function??
  • import?numpy?as?np??
  • import?matplotlib.pyplot?as?plt??
  • import?pylab??
  • ??
  • ??
  • plt.rcParams['figure.figsize']?=?(10,?10)??
  • plt.rcParams['image.interpolation']?=?'nearest'??
  • plt.rcParams['image.cmap']?=?'gray'??
  • ??
  • ??
  • caffe_root?=?'../'??
  • import?os??
  • os.chdir(caffe_root)??
  • import?sys??
  • sys.path.insert(0,?'/home/lilai/LL/caffe/python')??
  • import?caffe??
  • from?google.protobuf?import?text_format??
  • from?caffe.proto?import?caffe_pb2??
  • ??
  • ??
  • caffe.set_device(0)??
  • caffe.set_mode_gpu()??
  • labelmap_file?=?'/home/lilai/LL/caffe/data/VOC0712/labelmap_voc.prototxt'??
  • file?=?open(labelmap_file,?'r')??
  • labelmap?=?caffe_pb2.LabelMap()??
  • text_format.Merge(str(file.read()),?labelmap)??
  • ??
  • ??
  • def?get_labelname(labelmap,?labels):??
  • ????num_labels?=?len(labelmap.item)??
  • ????labelnames?=?[]??
  • ????if?type(labels)?is?not?list:??
  • ????????labels?=?[labels]??
  • ????for?label?in?labels:??
  • ????????found?=?False??
  • ????????for?i?in?xrange(0,?num_labels):??
  • ????????????if?label?==?labelmap.item[i].label:??
  • ????????????????found?=?True??
  • ????????????????labelnames.append(labelmap.item[i].display_name)??
  • ????????????????break??
  • ????????assert?found?==?True??
  • ????return?labelnames??
  • ??
  • ??
  • model_def?=?'/home/lilai/LL/caffe/models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt'??
  • model_weights?=?'/home/lilai/LL/caffe/models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel'??
  • ??
  • net?=?caffe.Net(model_def,?model_weights,?caffe.TEST)??
  • ??
  • #?input?preprocessing:?'data'?is?the?name?of?the?input?blob?==?net.inputs[0]??
  • transformer?=?caffe.io.Transformer({'data':?net.blobs['data'].data.shape})??
  • transformer.set_transpose('data',?(2,?0,?1))??
  • transformer.set_mean('data',?np.array([104,?117,?123]))??#?mean?pixel??
  • transformer.set_raw_scale('data',?255)??#?the?reference?model?operates?on?images?in?[0,255]?range?instead?of?[0,1]??
  • transformer.set_channel_swap('data',?(2,?1,?0))??#?the?reference?model?has?channels?in?BGR?order?instead?of?RGB??
  • ??
  • #?###?2.?SSD?detection??
  • ??
  • #?Load?an?image.??
  • ??
  • image_resize?=?300??
  • net.blobs['data'].reshape(1,?3,?image_resize,?image_resize)??
  • ??
  • image?=?caffe.io.load_image('/home/lilai/LL/caffe/examples/images/fish-bike.jpg')??
  • plt.imshow(image)??
  • ??
  • #?Run?the?net?and?examine?the?top_k?results??
  • ??
  • transformed_image?=?transformer.preprocess('data',?image)??
  • net.blobs['data'].data[...]?=?transformed_image??
  • ??
  • #?Forward?pass.??
  • detections?=?net.forward()['detection_out']??
  • ??
  • #?Parse?the?outputs.??
  • det_label?=?detections[0,?0,?:,?1]??
  • det_conf?=?detections[0,?0,?:,?2]??
  • det_xmin?=?detections[0,?0,?:,?3]??
  • det_ymin?=?detections[0,?0,?:,?4]??
  • det_xmax?=?detections[0,?0,?:,?5]??
  • det_ymax?=?detections[0,?0,?:,?6]??
  • ??
  • #?Get?detections?with?confidence?higher?than?0.6.??
  • top_indices?=?[i?for?i,?conf?in?enumerate(det_conf)?if?conf?>=?0.6]??
  • ??
  • top_conf?=?det_conf[top_indices]??
  • top_label_indices?=?det_label[top_indices].tolist()??
  • top_labels?=?get_labelname(labelmap,?top_label_indices)??
  • top_xmin?=?det_xmin[top_indices]??
  • top_ymin?=?det_ymin[top_indices]??
  • top_xmax?=?det_xmax[top_indices]??
  • top_ymax?=?det_ymax[top_indices]??
  • ??
  • #?Plot?the?boxes??
  • ??
  • colors?=?plt.cm.hsv(np.linspace(0,?1,?21)).tolist()??
  • ??
  • currentAxis?=?plt.gca()??
  • ??
  • for?i?in?xrange(top_conf.shape[0]):??
  • ????#?bbox?value??
  • ????xmin?=?int(round(top_xmin[i]?*?image.shape[1]))??
  • ????ymin?=?int(round(top_ymin[i]?*?image.shape[0]))??
  • ????xmax?=?int(round(top_xmax[i]?*?image.shape[1]))??
  • ????ymax?=?int(round(top_ymax[i]?*?image.shape[0]))??
  • ????#?score??
  • ????score?=?top_conf[i]??
  • ????#?label??
  • ????label?=?int(top_label_indices[i])??
  • ????label_name?=?top_labels[i]??
  • ????#?display?info:?label?score?xmin?ymin?xmax?ymax??
  • ????display_txt?=?'%s:?%.2f?%d?%d?%d?%d'?%?(label_name,?score,xmin,?ymin,?xmax,?ymax)??
  • ????#?display_bbox_value?=?'%d?%d?%d?%d'?%?(xmin,?ymin,?xmax,?ymax)??
  • ????coords?=?(xmin,?ymin),?xmax?-?xmin?+?1,?ymax?-?ymin?+?1??
  • ????color?=?colors[label]??
  • ????currentAxis.add_patch(plt.Rectangle(*coords,?fill=False,?edgecolor=color,?linewidth=2))??
  • ????currentAxis.text(xmin,?ymin,?display_txt,?bbox={'facecolor':?color,?'alpha':?0.5})??
  • ????#?currentAxis.text((xmin+xmax)/2,?(ymin+ymax)/2,?display_bbox_value,?bbox={'facecolor':?color,?'alpha':?0.5})??
  • plt.imshow(image)??
  • pylab.show()??

  • 9.?關(guān)于aspect_ratios問題

    SSD算法中aspect_ratios = [[2], [2, 3], [2, 3], [2, 3], [2], [2]],這句話具體是什么意思

    [2, 3] means using default box of aspect ratio of 2 and 3. And since we set flip=True at here, it will also use default box of aspect ratio of 1/2 and 1/3.?

    舉例說明:[2]表示ar = {1,2,1/2};[2,3]表示ar = {1,2,3,1/2,1/3}。當?shù)扔?的時候會在增加一個默認框。

    aspect_ratios = [[2], [2, 3], [2, 3], [2, 3], [2], [2]]總計有6個元素,每一個元素對應(yīng)相應(yīng)的feature map

    第一個元素表示第一個feature map上每個像素點上有多少個box:【2】:表明ar = {1,2,1/2}。等于1的時候會再增加一個(論文中有說明)

    第二個元素同理:【2,3】:表明ar={1,2,3,1/2,1/3}.等于1的時候會再增加一個(論文中有說明)

    不明白的直接看看prior_box_layer.cpp代碼。里面有具體操作。一看就懂。





    具體的

    總結(jié)

    以上是生活随笔為你收集整理的SSD 安装、训练、测试(ubuntu14.04+cuda7.5+openvc2.4.9)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    天天综合中文 | 欧美一级免费高清 | www.天天操 | 成年人在线观看免费视频 | 在线观看日本高清mv视频 | 日韩午夜电影 | 成人在线观看影院 | 91av在线免费看 | 久久久久女人精品毛片九一 | 一区二区中文字幕在线观看 | 少妇激情久久 | 亚洲精品乱码白浆高清久久久久久 | 狠狠干天天干 | 亚洲涩综合 | 黄在线免费看 | 免费观看一级成人毛片 | 日韩中文字幕第一页 | 色噜噜日韩精品一区二区三区视频 | 国产精品久久久久久久久久东京 | 国产精品成人免费一区久久羞羞 | 中文字幕一区二区三区四区久久 | zzijzzij亚洲成熟少妇 | 看黄色.com | 久久免费黄色网址 | 92国产精品久久久久首页 | 久久深夜福利免费观看 | 在线色吧 | 成人毛片久久 | 国产无遮挡又黄又爽在线观看 | 西西人体www444| 久久久99精品免费观看app | 国产一区二区精品久久 | 国产精品乱码一区二三区 | 一二三区av| 欧美国产不卡 | 亚洲国产成人在线观看 | 久久国内精品视频 | 久久成人高清视频 | 国产精品美女久久久久久网站 | 四虎国产精品免费 | 91香蕉视频污在线 | 国产小视频在线播放 | a在线免费观看视频 | 中文字幕高清免费日韩视频在线 | 国产日韩高清在线 | 麻豆观看 | av丝袜美腿 | 亚洲精品国产片 | 久久国产精品久久久久 | 国产美女精品久久久 | 91久久国产综合精品女同国语 | 日韩av一区二区在线影视 | 久久久午夜视频 | 日韩一区二区三区免费电影 | 日日综合网 | 91在线www | 狠狠色噜噜狠狠 | 国产一区在线不卡 | 久久69av| 日韩91在线 | 91视频麻豆 | 91桃色视频 | 人人爱人人爽 | 亚洲精品视频在 | 999日韩 | 最近中文字幕高清字幕免费mv | 亚洲电影影音先锋 | 久久免费看av | 国产中文字幕在线免费观看 | 97电院网手机版 | 亚洲在线视频免费 | 亚洲欧洲精品一区二区精品久久久 | 国产又粗又猛又黄 | 国产精品一区二 | 久草网站在线 | 成人av免费网站 | 亚洲好视频 | 免费在线观看国产黄 | 欧美精品久久久久久久 | 精品久久久久久久 | 亚洲丁香久久久 | 国产破处在线播放 | 久久精品这里都是精品 | 97超级碰碰 | 欧美成人在线免费 | 久久草在线精品 | 中文字幕一区在线观看视频 | 精品视频一区在线 | 国产又粗又猛又黄又爽 | 蜜桃视频在线观看一区 | 日韩在线观看一区 | 欧美少妇的秘密 | 在线免费黄色 | 亚洲精品无 | 极品国产91在线网站 | 一区二区三区四区在线 | 久久精品国产99国产 | 成人av在线网址 | 国产精品成人免费一区久久羞羞 | 亚洲 欧洲av | 激情综合网五月激情 | 日韩视频免费在线观看 | 五月激情久久 | 精品国产乱码久久久久久1区二区 | 亚洲a在线观看 | 爱爱av网| 久久露脸国产精品 | 国产韩国日本高清视频 | 91视频久久久 | 日韩av免费观看网站 | 97精品免费视频 | 91丨九色丨91啦蝌蚪老版 | 国产中文字幕在线播放 | 国产精品成人免费 | 天天操狠狠操 | 97在线视频观看 | 99久热在线精品视频 | 欧美日韩免费视频 | 中文字幕成人在线 | 五月婷婷在线综合 | av午夜电影 | 人人澡人人爽 | 久久这里只有精品9 | 狠狠干狠狠久久 | 天天操伊人 | 国产人成免费视频 | 国产一区二区视频在线播放 | 国产黄色在线观看 | 久久这里只有精品久久 | 在线网址你懂得 | 一区二区三区在线看 | 成年人免费观看国产 | 亚洲乱码国产乱码精品天美传媒 | 亚洲伊人婷婷 | 久久免费看a级毛毛片 | 久久精品国产免费看久久精品 | 成人免费视频观看 | 日韩视频一二三区 | 这里有精品在线视频 | 97超碰资源站 | 草久久精品 | 4p变态网欧美系列 | 有码中文字幕在线观看 | 久久久久久久毛片 | 日韩夜夜爽 | 中文字幕久久精品一区 | 日韩精品中文字幕在线观看 | 国产香蕉视频在线观看 | 免费亚洲精品 | 999久久久欧美日韩黑人 | 黄色av电影在线观看 | 国产一区久久久 | 一级电影免费在线观看 | 国产精品久久久久久久久久久久冷 | 人人插人人看 | 色综合久久综合中文综合网 | 97看片网 | 久久精品欧美日韩精品 | 国产亚洲综合在线 | av在线播放观看 | 欧美国产日韩一区二区 | 久草视频国产 | 美女视频久久久 | 久久久久久久久久久成人 | 日日爽天天操 | 99免费在线播放99久久免费 | 国产一级淫片免费看 | 精品国产精品久久一区免费式 | 干天天| 国产成人精品午夜在线播放 | 在线三级中文 | 亚洲高清视频在线播放 | 99久久婷婷国产综合亚洲 | 欧洲性视频 | 免费91在线 | 人人看97| 久久理论影院 | 久久在线免费视频 | 在线视频婷婷 | 国产美女免费观看 | 中文字幕黄色 | 亚洲一二三区精品 | 亚洲理论视频 | 91精品国产91 | 在线最新av| 51久久成人国产精品麻豆 | 天天翘av| 黄色网在线免费观看 | 久久久人| 人人涩| 欧美aaa视频| 91精品久久久久久久久久入口 | 男女全黄一级一级高潮免费看 | www.久久久.com | 久久色在线观看 | 午夜av在线免费 | 国产在线观看免费 | 91午夜精品 | 欧美一级电影片 | 久久久国产精品一区二区三区 | 日韩精品中文字幕在线观看 | 国产久草在线观看 | 欧美午夜理伦三级在线观看 | 国产精品99久久久久久武松影视 | 日批网站免费观看 | 丁香六月激情婷婷 | 99福利片 | 91精品久久久久久久久久入口 | 伊人狠狠色 | www.91国产| 精品国产一区二区三区四 | 波多野结衣电影一区二区三区 | 欧美日韩在线观看一区二区 | 黄色av免费在线 | 日韩精品一区二区免费 | 亚洲黄色免费在线 | 国产精品99久久久久久大便 | 精品久久久久久电影 | 国产视频不卡 | 国产视频高清 | 久久久麻豆视频 | 日本中文字幕高清 | 亚洲国产理论片 | 国产999精品久久久久久绿帽 | av黄色一级片 | 亚州精品视频 | 国产另类av| 66av99精品福利视频在线 | 成人a级免费视频 | 91成人精品 | 91视频高清 | 一二三精品视频 | 国产精品成人一区二区三区吃奶 | 免费观看一级成人毛片 | 久久视频免费在线观看 | 亚洲精品成人 | 在线观看日韩 | 在线91网 | 久久久www成人免费精品 | 日韩视频一区二区在线观看 | 精品嫩模福利一区二区蜜臀 | 伊人手机在线 | 亚洲精品乱码久久久久久按摩 | h视频在线看 | 国产一区二区精品久久 | 一区二区三区在线观看免费视频 | 97日日| 亚洲欧洲av在线 | 免费成人在线网站 | 亚洲精品小区久久久久久 | 97超碰成人 | 日韩xxx视频 | 国产午夜精品一区二区三区四区 | 日韩免费视频观看 | 亚洲砖区区免费 | 天天干天天干天天干 | 激情av资源网 | 成人网页在线免费观看 | 狠狠干网 | 私人av| 亚洲一区二区黄色 | 国产精品三级视频 | 成人黄色在线观看视频 | 9在线观看免费高清完整版在线观看明 | 麻豆传媒一区二区 | 69国产在线观看 | 国产精品久久久久永久免费观看 | 中文字幕在线看视频 | 大荫蒂欧美视频另类xxxx | 久久人视频 | 免费观看久久久 | 国内精品在线看 | 国产91在线播放 | 国产精品日韩在线 | av电影一区二区三区 | 国产成人在线网站 | 黄a在线 | 久久中文网 | 91av资源在线 | 日本在线观看中文字幕 | 日韩在线观看你懂得 | 国产中文视| av片中文| 国产日韩欧美在线观看 | 免费一级日韩欧美性大片 | 亚洲精品免费在线播放 | 久久久免费毛片 | 精品一二三区 | 人人要人人澡人人爽人人dvd | 亚洲aⅴ在线 | 免费看高清毛片 | 亚洲欧美怡红院 | 特级毛片在线免费观看 | 久久66热这里只有精品 | 天天操天天拍 | 国产日韩精品一区二区三区在线 | 久久国产视频网站 | 国产精品毛片一区二区 | 91色视频 | 一本一本久久a久久精品综合小说 | 国产精品白浆视频 | 免费高清影视 | 日本午夜在线观看 | 亚洲最新毛片 | 91xav| 91精品国产99久久久久久红楼 | 久产久精国产品 | 日本爱爱片| 大荫蒂欧美视频另类xxxx | 日韩激情久久 | 91在线精品播放 | 久章草在线观看 | 黄色成人小视频 | 国产精品美女免费看 | 免费av片在线 | 色国产视频 | 99久久99久久精品 | 国产丝袜网站 | 91久久一区二区 | 国产精品成久久久久三级 | 国产精品日韩欧美一区二区 | 又紧又大又爽精品一区二区 | 99视频在线观看一区三区 | 国产高清专区 | 国内免费久久久久久久久久久 | 国产色综合天天综合网 | 免费看黄电影 | 在线综合 亚洲 欧美在线视频 | 成人观看视频 | a特级毛片 | 99久久婷婷国产综合精品 | 成人av免费网站 | 九九视频这里只有精品 | 亚洲午夜精品一区二区三区电影院 | 欧洲亚洲精品 | 成人全视频免费观看在线看 | 99精品免费久久久久久久久 | www成人av | 国产精品露脸在线 | 深爱激情av | 91探花视频 | 久久精品视频在线免费观看 | 免费久久网| 亚洲精品视频在 | 亚洲精品在线一区二区三区 | 成 人 黄 色视频免费播放 | 久久精视频| av在线播放中文字幕 | 99精品久久久久久久久久综合 | 九九有精品 | 99这里精品| 激情小说网站亚洲综合网 | www黄色com| 亚洲乱码在线 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 久久久久久蜜av免费网站 | 中文字幕久久精品一区 | 瑞典xxxx性hd极品 | 一区二区三区 中文字幕 | 国产黄免费 | 国产亚洲精品日韩在线tv黄 | 视频在线播放国产 | 午夜av剧场 | 婷婷精品视频 | 日日干夜夜爱 | 欧美日韩视频精品 | 玖玖视频 | 欧美最猛性xxx | 免费高清av在线看 | 欧美久久电影 | 在线观看色视频 | 久久美女视频 | 亚洲电影毛片 | 免费观看的av | 成人理论电影 | 欧洲精品在线视频 | 在线欧美小视频 | 91久久久久久国产精品 | av色图天堂网 | 91激情小视频 | 精品久久久久久亚洲综合网站 | 特级西西www44高清大胆图片 | 亚洲高清视频在线 | 日本三级国产 | 国产亚洲视频系列 | 超碰在线观看99 | 日韩电影在线观看一区 | 国产首页| 欧美a√大片 | 久久不见久久见免费影院 | 亚洲视频电影在线 | 成人午夜在线观看 | 国产精品国产亚洲精品看不卡15 | 欧美视频一区二 | 99精品电影 | 日韩午夜三级 | 在线观看一 | 国产成人久久精品77777综合 | 免费成人结看片 | 日韩视频一区二区三区在线播放免费观看 | 中文字幕成人网 | 日韩欧美视频一区二区三区 | av在线com| 在线观看一 | 99久久久久久国产精品 | 99久热在线精品视频成人一区 | 中国老女人日b | 久久不见久久见免费影院 | 国产不卡在线 | 国产一区二区三区在线免费观看 | 亚洲综合网站在线观看 | 综合国产在线观看 | 国产人成在线视频 | 丁香影院在线 | www.国产毛片 | 天天操天天操天天 | 五月激情五月激情 | 亚洲最新在线 | 日韩欧美在线一区 | 中文字幕亚洲在线观看 | 国产一区视频在线播放 | 久久久久综合网 | 亚洲免费观看在线视频 | 日日夜精品 | 久久久久久久久精 | 日韩精品一区二区三区外面 | 91在线免费观看网站 | 天天操天天爱天天干 | 97香蕉视频| 日日夜夜草| 国产日韩欧美视频在线观看 | 黄色亚洲 | 欧洲不卡av | 99精品免费视频 | 欧美动漫一区二区三区 | 亚洲夜夜综合 | 欧美性色xo影院 | 国内精品久久久久久久影视简单 | 国产一区二区在线观看免费 | 精品一区二三区 | 欧美国产大片 | 久久另类视频 | 国内精品久久久久久久97牛牛 | 激情开心站 | 一区二区三区免费 | 亚洲高清资源 | 免费视频a | 少妇性bbb搡bbb爽爽爽欧美 | 在线免费观看一区二区三区 | 97碰碰精品嫩模在线播放 | 久久综合欧美精品亚洲一区 | 亚洲免费精品视频 | 色婷婷六月天 | 天天操天天操天天操天天操天天操天天操 | 欧美日韩视频免费看 | 亚洲免费视频在线观看 | 国产黑丝一区二区 | 国产精品久久久亚洲 | 在线免费观看麻豆视频 | 日日成人网 | 国产免费高清 | 99爱视频| 中文字幕日韩免费视频 | 91黄色在线看 | 色鬼综合网 | 亚洲国产三级在线观看 | 国产 日韩 欧美 在线 | 国产美女视频网站 | 亚洲欧美日韩中文在线 | 亚洲综合导航 | 欧美精品xxx| 99精品乱码国产在线观看 | 五月开心婷婷网 | 91麻豆精品国产自产 | 免费久久网 | 999视频网 | 香蕉成人在线视频 | 免费黄a大片 | 91视频一8mav| 99九九99九九九视频精品 | 国产精品二区三区 | 欧美日韩国产精品久久 | 亚洲91中文字幕无线码三区 | 成人免费xxxxxx视频 | 久久99精品久久只有精品 | 亚洲欧美日韩精品一区二区 | av黄色免费在线观看 | 婷婷丁香色综合狠狠色 | 久久综合久色欧美综合狠狠 | av黄色免费看 | 在线观看色视频 | 亚洲经典视频在线观看 | 日本精品久久久久中文字幕 | 国产一二区精品 | 色a网| 天天射天天干天天插 | 亚洲激情av | 91视频免费播放 | 91亚洲网| 欧美另类亚洲 | 免费观看不卡av | 日韩午夜在线播放 | 国产精品久久久99 | 色婷婷av一区二 | 极品嫩模被强到高潮呻吟91 | 成人免费在线观看电影 | 欧美在线视频免费 | 91麻豆精品 | 中文字幕免费在线看 | 91丨九色丨国产在线观看 | 一级黄色片在线 | 在线电影 一区 | 色综合天天综合在线视频 | 97av色 | 黄色av电影网 | 又黄又刺激视频 | 精品国产91亚洲一区二区三区www | 51久久夜色精品国产麻豆 | 久久99网站 | 亚洲精品国产品国语在线 | 国产精品一码二码三码在线 | 六月激情丁香 | 特黄色大片| 天天躁日日躁狠狠躁av麻豆 | 久草在线资源观看 | 四虎成人精品在永久免费 | 人人网av | 国产成人久久精品一区二区三区 | 日韩网站在线 | 国产精品久久久亚洲 | 久久精品国产免费观看 | 91在线视频导航 | 在线免费观看涩涩 | 国产精久久久久久妇女av | 久久不色| 二区三区精品 | 色婷婷亚洲婷婷 | 国产亚洲视频在线免费观看 | av电影在线免费观看 | 亚洲国产午夜精品 | 日韩久久午夜一级啪啪 | 97在线观看免费高清完整版在线观看 | 国产一区二区高清视频 | 九九久久婷婷 | 午夜色影院 | 久久免费99 | 日本成人中文字幕在线观看 | 久久99深爱久久99精品 | 成人综合婷婷国产精品久久免费 | 黄色av网站在线观看 | 在线观看中文字幕dvd播放 | 99热在线观看 | 欧美日韩不卡在线观看 | 久久精品国产免费观看 | 欧美亚洲成人免费 | 久久大片网站 | 2024国产精品视频 | 国产黄色特级片 | 青草视频在线看 | 精品在线看 | 天天干,狠狠干 | 色综合久久久久久中文网 | 性色xxxxhd | 国产伦精品一区二区三区免费 | 超碰国产人人 | 久久精品成人热国产成 | 国产精品久久久久永久免费观看 | 久久久久久久久久福利 | 久久综合狠狠综合 | 亚洲一区天堂 | 美女精品在线观看 | 在线视频你懂 | 一区二区中文字幕在线观看 | 国产在线观看xxx | av蜜桃在线 | 日韩欧美在线观看一区二区三区 | 日韩精品一区二区三区三炮视频 | 亚洲人成人天堂h久久 | zzijzzij亚洲日本少妇熟睡 | 日韩在线视频看看 | 二区三区毛片 | 久草在线最新 | 中文字幕在线色 | 伊人影院得得 | 日韩在线精品视频 | 免费黄在线观看 | 久久国产精品久久精品国产演员表 | 亚洲人成人在线 | 日本久久久久久科技有限公司 | 久久69av| 在线视频成人 | 精品黄色在线观看 | 精油按摩av | 亚洲乱码精品久久久 | 久久综合国产伦精品免费 | 国产一区观看 | 国产不卡一区二区视频 | 精品一区二区免费视频 | 又湿又紧又大又爽a视频国产 | 69国产盗摄一区二区三区五区 | 国产成人av一区二区三区在线观看 | 亚洲精品成人免费 | 久久伊人精品一区二区三区 | 丁香婷婷综合色啪 | 亚洲综合一区二区精品导航 | 久久字幕精品一区 | 色黄视频免费观看 | 婷婷在线综合 | 又色又爽又黄高潮的免费视频 | 国产99精品| 天天操天操 | 在线观看91久久久久久 | 国产最新在线观看 | 黄色毛片一级 | 97视频播放 | 一级黄色视屏 | 综合婷婷 | 色香蕉视频 | 黄色大全免费观看 | 国产男女爽爽爽免费视频 | 久在线 | 国产天天爽 | 亚洲欧洲一区二区在线观看 | 亚洲伊人第一页 | 热久久99这里有精品 | 激情网综合 | 国产麻豆剧果冻传媒视频播放量 | 99视频偷窥在线精品国自产拍 | 91成人久久| 日韩激情在线 | 久久午夜影院 | 91视频-88av| 国产精品美女久久久久久久 | 成人在线视频你懂的 | 久久 亚洲视频 | 免费中文字幕视频 | 一区二区三区四区五区在线 | 激情一区二区三区欧美 | 九草在线观看 | 亚洲综合色视频 | 久久天天躁狠狠躁亚洲综合公司 | 夜色资源网 | 国产亚洲精品久久19p | 国产精品原创 | 精品人人人 | 亚洲精品午夜国产va久久成人 | 色视频国产直接看 | 99久久久久久国产精品 | 在线天堂中文在线资源网 | 精品国产一区二区三区久久影院 | www.夜夜干.com| 国产精品久久久久久久久久久久午 | 日日夜夜干 | 免费观看特级毛片 | 国产成人综合精品 | 日韩av中文 | 精品黄色视| 欧美日韩精品区 | 丁香六月伊人 | 国产精品成人一区二区三区吃奶 | 91麻豆精品国产91久久久无限制版 | 黄色小网站在线观看 | 九九在线精品视频 | 天天色天天操综合网 | 午夜精品一区二区三区在线 | 日韩精品专区 | 男女激情片在线观看 | 国产精品久久片 | 在线观看韩国av | 日韩另类在线 | 久久综合偷偷噜噜噜色 | 欧美另类一二三四区 | 麻豆视频www | 在线免费日韩 | 久久久久久久久久久久av | 国产原厂视频在线观看 | 高清av网站 | 激情伊人 | 久久视频在线观看 | 91免费观看视频网站 | 日日夜夜精品网站 | 黄网站色视频免费观看 | 免费亚洲片 | a视频在线观看免费 | 欧美精品久久久久久久久久久 | av不卡网站 | 国产精品短视频 | 欧美一二区视频 | 色窝资源 | 中文在线最新版天堂 | 欧美久久久久久久久久久久 | 久久99视频 | 99精品一区二区 | 国产成人l区 | 97偷拍视频 | 日韩高清av | 中文字幕在线一区观看 | 日韩一区正在播放 | 亚洲人在线视频 | 超碰在线中文字幕 | 日p在线观看 | 久久精彩免费视频 | 97网| 久久国产精品99久久久久久丝袜 | 午夜精品一区二区三区免费 | 日韩黄色大片在线观看 | 欧美少妇xxx | 丰满少妇高潮在线观看 | 久久夜夜爽 | 亚洲国产大片 | 在线免费观看不卡av | 亚洲理论在线观看电影 | 91视频在线网址 | 久久精品人人做人人综合老师 | 日韩在线视频在线观看 | 国产精品12| av国产网站 | 久久久福利影院 | 久久99久久99精品 | 久久精品一区二区三区视频 | 久久视了 | 精品在线看 | 亚洲手机av | 国产精品久久久一区二区三区网站 | 99精品在线 | 久久草av | 欧美 亚洲 另类 激情 另类 | 日韩精品久久久久 | 97在线精品 | 色天天天 | 国产大尺度视频 | 国产精品久久电影观看 | 日日爱视频 | 欧美一级视频免费 | 日韩丝袜在线 | 久久久片 | 国产精品久久久久久久免费大片 | 国产精成人品免费观看 | 九色在线| 中文字幕在线观看91 | 午夜美女福利直播 | 日韩免费中文字幕 | 午夜久久福利 | 免费av网站观看 | av在线中文 | 九九久久久久久久久激情 | 精油按摩av| 最近中文字幕久久 | av在线专区 | 国产一区二区三区久久久 | 亚洲国产精品电影 | 免费av成人在线 | 国产高清视频免费最新在线 | 鲁一鲁影院 | 在线观看激情av | 国产自制av | 国产精品一区二区三区在线 | 免费福利视频导航 | 91成人免费看 | 在线播放视频一区 | 99国产精品免费网站 | 亚洲高清免费在线 | 久久99亚洲精品 | 黄色精品视频 | 亚洲国产精品va在线看黑人动漫 | 久久免费视频在线 | 婷婷色在线视频 | 国产一区二区三区在线免费观看 | 亚洲欧美乱综合图片区小说区 | 国产精品白浆 | 在线视频你懂得 | 亚洲久久视频 | 在线影视 一区 二区 三区 | av解说在线观看 | 久久久国产精品一区二区中文 | 亚洲亚洲精品在线观看 | 成人午夜精品福利免费 | 精品国产视频在线观看 | 在线免费观看黄色 | 中文字幕高清有码 | 人人搞人人干 | 精品国产一区二区三区男人吃奶 | 国产拍揄自揄精品视频麻豆 | 麻豆成人精品 | 激情网站 | 国产精品久久久久婷婷二区次 | 精品国产一区二区三区噜噜噜 | 成人av高清 | 91麻豆国产福利在线观看 | 国产福利在线不卡 | 中文字幕 国产视频 | 久久婷综合 | 久久精品视频4 | 亚洲 综合 精品 | 三级av在线播放 | 我要看黄色一级片 | 69xx视频 | 成年人在线免费看片 | 国产麻豆成人传媒免费观看 | 久久精品99久久久久久 | 亚洲人成综合 | 国产免费资源 | 日韩性xxx| 免费观看av | 草久在线观看 | 全久久久久久久久久久电影 | 国产婷婷vvvv激情久 | 亚洲欧美国产精品久久久久 | 久精品在线观看 | 高清一区二区三区av | 中午字幕在线 | 国产精品久久久久久久久久三级 | 五月婷婷综合在线 | 日韩在线视频网 | 中文字幕电影一区 | 久久精品五月 | 正在播放国产91 | 天堂v中文 | 天堂在线视频中文网 | 久久久免费视频播放 | 成人av在线影视 | 91传媒视频在线观看 | 久久精品视频4 | 欧美91成人网 | 91亚洲成人| 亚洲精品www. | 中文字幕人成不卡一区 | 夜夜嗨av色一区二区不卡 | 美女很黄免费网站 | 国产精品久久久av | 欧美成人高清 | 亚洲精品乱码久久久久久蜜桃91 | 国产免费一区二区三区最新 | 欧美日韩高清一区 | 国产精品嫩草影视久久久 | 成年免费在线视频 | 5月丁香婷婷综合 | 国产不卡免费av | 亚洲激情校园春色 | 在线中文字幕视频 | 国内精品久久久久影院一蜜桃 | www狠狠| 十八岁以下禁止观看的1000个网站 | 国产精品电影一区二区 | 成人性生交大片免费看中文网站 | 精品一区二区三区四区在线 | 91成人精品国产刺激国语对白 | 99久久毛片 | 午夜精品视频一区 | av在线免费观看黄 | 欧美性久久久久久 | 国产精品18久久久久久首页狼 | 久久激情视频网 | 国产高清精品在线观看 | 999久久久久久久久6666 | 福利视频区 | 91av免费看 | www操操| www激情网 | 在线精品一区二区 | 亚洲第一伊人 | 午夜视频在线观看网站 | 亚洲激情五月 | 久草a在线 | 亚洲精品国偷拍自产在线观看 | 欧美精品久久久久久久久久丰满 | 国产精品视频线看 | 不卡视频国产 | 日本天天色 | 日韩高清精品免费观看 | 久久久免费精品国产一区二区 | 亚洲精品国产精品久久99 | 日韩免费福利 | 99成人精品 | 四季av综合网站 | 亚洲一级二级 | 欧美人zozo | 国产亚洲精品久久久久久网站 | 成人久久18免费 | 超碰在线国产 | sm免费xx网站 | 国产在线欧美日韩 | av在线中文| 日韩午夜电影院 | 久久综合国产伦精品免费 | 国产精彩在线视频 | www在线观看视频 | www.色婷婷 | 色综合久久久久综合99 | 欧美最猛性xxx | 国产成人福利在线观看 | 在线播放av网址 | 黄在线免费看 | 日韩精品一区二区三区免费观看 | 亚洲国产精品久久久久久 | 99久久99久久免费精品蜜臀 | 综合久久久 | 999精品网 | 亚洲一区天堂 | 91麻豆精品国产91久久久久 | 在线免费视频a | 欧美成人精品三级在线观看播放 | 热re99久久精品国产66热 | av丝袜制服 | 日韩精品视频在线观看免费 | 亚洲专区免费观看 | 日韩在线观看你懂的 | 国产精品国产亚洲精品看不卡15 | 99国产精品一区二区 | 美女久久 | 在线看国产精品 | 日韩最新av在线 | 国产日产高清dvd碟片 | av电影免费 | 亚洲综合在线视频 | 亚洲午夜精品一区二区三区电影院 | 日日干天天爽 | 久草在线观看视频免费 | 国产精品成人一区二区三区吃奶 | 久久在线视频精品 | 五月婷婷一级片 | 少妇bbb好爽| bayu135国产精品视频 | 国产精品一区二区久久国产 | 久久99国产精品久久99 | 玖玖色在线观看 | 蜜桃视频色 | 久久久久麻豆 | 九七人人干| 五月天综合网站 | 四虎免费av | 亚洲国产成人精品在线观看 | 天天躁天天躁天天躁婷 | 久久免费视频在线观看6 | 毛片www | 日韩va在线观看 | 日韩夜夜爽 | 黄色成人免费电影 | 一区三区视频在线观看 | 在线播放你懂 | 久久乐九色婷婷综合色狠狠182 | 日本在线观看视频一区 | 国产精品夜夜夜一区二区三区尤 | 国产精品视频免费在线观看 | 久久久久久久久毛片精品 | 国产精品久久久久久久久久久久午 | 色综合天天在线 | 久久艹综合 | 爱干视频 | 午夜精品久久久久久 | 天天做日日做天天爽视频免费 | 在线观看aa | 亚洲日本一区二区在线 | 亚洲高清在线 | 欧美小视频在线观看 | 干av在线 | 99 视频 高清 | 久久久久久国产精品 | 成年人黄色免费视频 | 热久久免费国产视频 | 国产视频91在线 | 国产自在线 | 在线观看免费一级片 | 精品国产伦一区二区三区观看体验 | 在线观看视频在线观看 | 婷久久 | 久草视频手机在线 | 不卡在线一区 | 97精品一区 | 国产香蕉97碰碰碰视频在线观看 | 色天天综合久久久久综合片 | www.com.日本一级 | 狠狠色婷婷丁香六月 | 国产黄在线看 | 日本中文字幕高清 | 婷婷丁香狠狠爱 | 人人干干人人 | 欧美超碰在线 | 亚洲精品国产自产拍在线观看 | 日本三级不卡视频 | 国产精品一区二区av日韩在线 | 操操操av| 日日综合网 | 日韩激情视频在线 | 青青河边草观看完整版高清 | 中文字幕在线观看免费高清电影 | 久久艹国产视频 | 亚洲激情在线播放 | 久久久国产在线视频 | 国产成人精品av在线观 | 少妇超碰在线 | 日韩欧美综合在线视频 | 国产午夜精品一区二区三区在线观看 | 91精品国产自产老师啪 | 在线亚洲观看 | 深爱激情av | 狠狠色狠狠色综合日日小说 | 91亚洲精品国偷拍自产在线观看 |