[機器學習] 深度學習之caffe1——軟件配置與測試


caffe的編譯配置真的是很讓人頭疼啊,不知道試過多少次了~~~


重裝系統了七八次,搞得linux的一些常用命令倒是很熟悉了~~~

我有潔癖~~~某一個點上出了錯,我一定要把它搞好了,再重新來一次,我怕會因為某一點的小錯誤會影響到其它重要的地方。。。(有同感的默默在心里舉個爪~~~^_^~~~)

又折騰了好幾次,參考了很多的博客,總結出一整套的安裝配置流程!

開始:


 

0、先行設置系統軟件源更新,以及目錄設置
  • 網絡無問題即可,不用太糾結
  更新sources.list,我使用的是ipv6校園網,用清華大學軟件源。
  修改完list文件后sudo apt-get update
 
1、系統驅動+CUDA安裝配置
  • 需要更換默認的驅動和安裝CUDA,但是如果你的cuda的計算能力達不到3.0及以上,請跳過本部分。

  驅動安裝過程中可能會出現問題:the nouveao kernel driver未禁用的錯誤。
    sudo gedit /etc/modprobe.d/blacklist.conf
  在最后加上兩行:    

  1 blacklist nouveau
  2 options nouveau modeset=0

  然后執行:

    sudo update-initramfs -u
  reboot重啟即可。重啟后會發現字體變大了。

  即是初始驅動已經禁用了。再次重試安裝即可。

  
  
  然后再 在字符界面下安裝:
  進入字符界面tty1:關閉X-Window:sudo service lightdm stop,然后切換到tty1:Ctrl+Alt+F1,在純字符界面下,登陸用戶;
 
  顯卡驅動:安裝使用 NVIDIA-Linux-x86_64-367.44.run文件
  1 sudo chmod +x NVIDIA-Linux-x86_64-367.44.run
  2 sudo ./NVIDIA-Linux-x86_64-367.44.run
  然后一路確認即可。
 
    CUDA安裝有兩種方式安裝,run文件和deb文件兩種,優先使用deb,如果安裝出錯再考慮使用run文件安裝。
      deb:(這里的安裝時需要網絡的,即軟件源能連通)  
        1sudo dpkg -i cuda-repo-ubuntu1604-8-0-rc_8.0.27-1_amd64.deb
        2sudo apt-get update
        3sudo apt-get install cuda
        4sudo dpkg -i cuda-misc-headers-8-0_8.0.27.1-1_amd64.deb
      run:
        1、 sudo sh cuda_8.0.27_linux.run
        然后一路按空格鍵,直到100%,其它選項基本選擇y即可,但是取消顯卡驅動的安裝即可。
 
 
  配置與測試:

    1、聲明環境變量:
      export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
      export CUDA_PATH=/usr/local/cuda-8.0/lib64${CUDA_PATH:+:${CUDA_PATH}}
    2、設置文件:
      sudo gedit /etc/profile
    3、在文件末尾添加:
      export PATH=/usr/local/cuda/bin:$PATH
    4、創建鏈接文件:
      sudo gedit /etc/ld.so.conf.d/cuda.conf
    5、在打開的文件中添加:
      /usr/local/cuda/lib64
    6、最后執行
      sudo ldconfig
    7、運行測試用例
      cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
      sudo make
      sudo ./deviceQuery
      然后即可顯示出關於GPU的信息,則說明安裝成功了
    8、另外使用命令:nvidia-smi直接會輸出支持cuda的GPU設備列表

 
2、cuDNN設置
  • 這里設置使用cudnn加速,一定注意前面說的計算能力問題,后面還會提到!!! 
  下載的壓縮包:cudnn-8.0-linux-x64-v5.0-ga.tgz,解壓縮會有兩個文件夾include和lib64
  依次進行如下命令:

    cd cuda
    sudo cp ./include/cudnn.h /usr/local/cuda/include/ #復制頭文件
    sudo cp ./lib64/lib* /usr/local/cuda/lib64/ #復制動態鏈接庫

    cd /usr/local/cuda/lib64/
    sudo rm -rf libcudnn.so libcudnn.so.5 #刪除原有動態文件
    sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5 #生成軟銜接
    sudo ln -s libcudnn.so.5 libcudnn.so #生成軟鏈接

 
  在caffe的Makefile.config文件中開啟cuDNN
  1 # cuDNN acceleration switch (uncomment to build with cuDNN).
  2 USE_CUDNN := 1

  查看CUDA計算容量:

 sudo /usr/local/cuda/samples/bin/x86_64/linux/release/deviceQuery

2.1

  在caffe的Makefile.config文件中,找到並修改:

   CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
          -gencode arch=compute_20,code=sm_21 \   -gencode arch=compute_21,code=sm_21 \   -gencode arch=compute_30,code=sm_30 \   -gencode arch=compute_35,code=sm_35 \   -gencode arch=compute_50,code=sm_50 \   -gencode arch=compute_50,code=compute_50 
   不知道是不是有什么用處,但是據說cudnn加速需要cuda計算能力在3.0以上才可以!
 
3、OpenCV安裝配置
  
  這里使用OpenCV2.4.13,將opencv也安裝到與cuda一致的目錄下:/usr/local/opencv***
  • 這里需要注意opencv的版本:最好使用2.4.13,其它版本會出錯誤!!!
   1、准備文件,依次如下使用命令行:
 
      sudo cp opencv-2.4.13.zip /usr/local/
      cd /usr/local/
      sudo unzip opencv-2.4.13.zip
      cd ./opencv-2.4.13
      mkdir build
 
   2、配置生成Makefile
     cd build
    sudo cmake 
    
    可能會出現如下錯誤,若無直接跳過:
       可能會提示缺少相關的依賴庫以及下載文件失敗等錯誤。
      比如ippicv_linux_******.tgz包下載失敗而導致Makefile生成失敗,可通過手動下載,然后放置到路徑opencv-2.4.13/3rdparty/ippicv/downloads/linux-808********目錄內:
      sudo rm /usr/local/opencv-2.4.13/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz
      sudo cp /home/leeyang/ippicv_linux_20151201.tgz /usr/local/opencv-2.4.13/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/
 
    重新執行配置命令即可。
    先考慮安裝上一些相關庫:
       sudo apt-get install --assume-yes libopencv-dev build-essential git unzip libgtk2.0-dev pkg-config libdc1394-22
      libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev
      libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev 
      libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils
 
    執行:
       sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..       (這里的兩個點不要忽略!!)
 
    最終輸出,則配置和生成成功
       -- Configuring done
      -- Generating done
      -- Build files have been written to: /home/leeyang/opencv-2.4.13/build
 
   3、最后進行編譯安裝

      注意編譯之前確保numpy已經安裝,否則最后不會生成cv2.so
        sudo apt-get install python-numpy python3-numpy
      可能會出現錯誤:error:1 /usr/include/string.h:652:42: error: ‘memcpy’ was not declared in this scope

      原因是g++版本太新了,需要在CMakeLists.txt中前面幾行添加
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORCE_INLINES")
      然后再重新執行2中的cmake一次即可。

    在build目錄下執行:
       sudo make -j8 需要執行一段時間。。。
    安裝並進行配置:
       sudo make install
      sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
      sudo ldconfig
 
        如果編譯安裝等出錯,可以嘗試一下自動腳本進行安裝配置:
          https://github.com/jayrambhia/Install-OpenCV
          直接使用opencv-2.4.13(使用opencv3.0、3.1、2.4.10都會編譯出錯)
          對與cuda8.0,opencv3.0或者2.4.10都會報如下錯誤,使用opencv2.4.13就沒 有問題。(唯一一個2016年發布的版本)
          Ubuntu/3.0/OpenCV/opencv-3.0.0/modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState’
          has not been declared   typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppState, Npp8u* pDeviceMem);
 
4、Python以及 Matlab with python engine
      
      這里解釋一下:有了默認的python,為什么還要安裝python-dev?

        linux發行版通常會把類庫的頭文件和相關的pkg-config分拆成一個單獨的xxx-dev(el)包.

        以python為例, 以下情況你是需要python-dev的
        你需要自己安裝一個源外的python類庫, 而這個類庫內含需要編譯的調用python api的c/c++文件
        你自己寫的一個程序編譯需要鏈接libpythonXX.(a|so)
        (注:以上不含使用ctypes/ffi或者裸dlsym方式直接調用libpython.so)
        其他正常使用python或者通過安裝源內的python類庫的不需要python-dev.

 
    還是直接使用默認python+python-dev的方式來進行使用吧,再額外安裝一個spyder來使用。
 
    這里的安裝步驟是:Python依賴包、Matlab、Matlab engine for python
 
    這里的安裝使用需要搞明白三個變量路徑:PYTHON_INCLUDE、PYTHON_LIBRARIES、PYTHON_LIB,在安裝好相關軟件后,找到各自對應的路徑即可。
       1、Python依賴包
         1、直接使用系統默認python2.7的版本
          ①、安裝相應的發布版本:sudo apt-get install python2.7 python2.7-dev
          ②、安裝相應的build依賴包:
            sudo apt-get install build-essential libssl-dev libevent-dev libjpeg-dev libxml2-dev libxslt-dev
          ③、安裝pip:sudo apt-get install python-pip
 
         2、安裝所有與python相關的包
          ①、依據下面的依賴包項目,逐條執行,使用pip進行安裝。
          先一句安裝,出錯了再逐條安裝:
           sudo pip install cython numpy scipy scikit-image matplotlib ipython h5py leveldb networkx nose pandas
          python-dateutil protobuf python-gflags pyyaml pillow six
        逐條:
           sudo pip install cython
          sudo pip install numpy
          sudo pip install scipy
          sudo pip install scikit-image
          sudo pip install matplotlib
          sudo pip install ipython
          sudo pip install h5py
          sudo pip install leveldb
          sudo pip install networkx
          sudo pip install nose
          sudo pip install pandas
          sudo pip install python-dateutil
          sudo pip install protobuf
          sudo pip install python-gflags
          sudo pip install pyyaml
          sudo pip install pillow
          sudo pip install six
 
         依賴包版本號要求列表:
          

cython>=0.19.2

 

          numpy>=1.7.1

 

          scipy>=0.13.2

 

          scikit-image>=0.9.3

 

          matplotlib>=1.3.1

 

          ipython>=3.0.0

 

          h5py>=2.2.0

 

          leveldb>=0.191

 

          networkx>=1.8.1

 

          nose>=1.3.0

 

          pandas>=0.12.0

 

          python-dateutil>=1.4,<2

 

          protobuf>=2.5.0

 

          python-gflags>=2.0

 

          pyyaml>=3.10

 

          Pillow>=2.3.0

 

          six>=1.1.0

 
       2、Matlab安裝,使用2014b版本,匹配python engine支持的版本python2.7,3.3
        解壓縮到目錄matlab2014b目錄下,cd到該目錄
          sudo ./install
        之后即可出現圖形界面。
        選擇離線使用安裝碼進行安裝,序列碼:29797-39064-48306-32452
        安裝目錄默認即可,等待安裝完畢
 
        運行激活選擇離線激活,激活文件:license.lic
        將libmwservices.so復制到 /matlab安裝目錄/R2014b/bin/glnxa64/下,替換已有文件
        即可完整安裝,下面進行Matlab engine的安裝即可。
 
        激活選擇已破解的lic文件
        替換破解文件
 
           sudo rm /usr/local/MATLAB/R2014b/bin/glnxa64/libmwservices.so
          sudo cp ~/matlab2014b/crack/libmwservices.so /usr/local/MATLAB/R2014b/bin/glnxa64/
 
 
       3、Matlab engine for python
        • 這里Matlab engine是非常重要的步驟
        MATLAB的安裝路徑中應該會有:"\extern\engines\python"路徑
        直接在該目錄下運行:
          python setup.py install
 
        測試用例:
        直接使用控制台的python命令執行以下代碼:
           import matlab.engine
          eng = matlab.engine.start_matlab()
          future = eng.sqrt(4.0,async=True)
          ret = future.result()
          print(ret)
        無錯誤即為正常安裝成功。
 
           可能會出現錯誤提示:
            OSError: MATLAB Engine for Python supports Python version 3.3 and 2.7, but your version of Python is 3.5
            是因為Anaconda版本太高了。
 
5、protoc、glog、gflags(一定先安裝glog再安裝gflags)、BLAS
     1、protoc
      安裝curl,但是一般Ubuntu16以上是自動安裝了的,跳過。
      手動下載文件http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2
      可百度后下載,復制到protobuf的目錄下,找到autogen.sh文件中,注釋掉curl語句
         #curl -0 http://.......
      安裝 automake 工具:
         sudo apt-get install autoconf automake libtool
      再次運行:
         ./autogen.sh
 
      然后依次運行以下命令
         ./configure
        sudo make
        sudo make check 一般輸出全部測試通過

          PASS: protobuf-test
          PASS: protobuf-lazy-descriptor-test
          PASS: protobuf-lite-test
          PASS: google/protobuf/compiler/zip_output_unittest.sh
          PASS: google/protobuf/io/gzip_stream_unittest.sh
          =================================
          Testsuite summary for Protocol Buffers 2.5.0
          =================================
          # TOTAL: 5
          # PASS: 5
          # SKIP: 0
          # XFAIL: 0
          # FAIL: 0
          # XPASS: 0
          # ERROR: 0
          =================================

 
      最后再執行:sudo make install
 
     2、再安裝一些依賴庫:
         sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libboost-all-dev libhdf5-serial-dev
        sudo apt-get install libboost-all-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
 
     3、安裝配置glog
      進入glog目錄下:
         ./ configure
        sudo make
        sudo make install
 
     4、安裝配置gflags
      進入gflags目錄下:
         mkdir build && cd build
        cmake ..
 
        ccmake ..
      之后會進入圖形化的配置界面:
 
          

      修改完成后,按C鍵再按G鍵,生成Makefile
      再執行:
         sudo make
        sudo make install
 
 
     5、BLAS安裝與配置
      caffe官網推薦三種實現:ATLAS, MKL, or OpenBLAS
      其中atlas可以直接通過命令行安裝,不用MKL了,破解申請麻煩。
 
      直接用atlas
         sudo apt-get install libatlas-base-dev
 
 
6、Caffe安裝配置
    (為確保過程不出錯,請軟件源和系統保持最新版本<Ubuntu16.04LTS+校園網清華大學軟件源>)
 
    以上安裝確保無錯誤發生,則使用make all來進行測試。
    可能會出現錯誤:
      hdf5配置出現問題。。。
      所有依賴庫安裝都非常順利,但是在hdf5這里會有個坑,
 
      • 這里的Makefile設置非常重要       
 
      需要在Makefile.config中INCLUDE_DIRS后添加/usr/include/hdf5/serial/,在LIBRARY_DIRS后添加/usr/lib/x86_64-linux-gnu/hdf5/serial/
    最終Makefile.config文件對應部分修改如下,
       INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
      LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/
 
    這里檢查一遍Makefile.config所做的主要修改:

      CPU_ONLY := 1

      USE_OPENCV := 0
      USE_LEVELDB := 0
      USE_LMDB := 0

      USE_OPENCV := 1
      USE_LEVELDB := 1
      USE_LMDB := 1

      CUSTOM_CXX := g++
      WITH_PYTHON_LAYER := 1

      # Whatever else you find you need goes here.
      INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
      LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/

 
 
    再次make all,輸出顯示若干CXX,無錯誤提示即可。
 
    再make test,輸出顯示若干CXX,LD等,無錯誤提示
    再make runtest,輸出的所有的RUN均為OK即可確認caffe安裝成功
 

      可能會出現錯誤:Check failed: status == CUDNN_STATUS_SUCCESS (6 vs. 0)
      說明GPU的加速性能不夠,CUDNN只支持CUDA Capability 3.0以上的GPU加速,所以不能使用CUDNN加速,需要在Makefile.config中注釋掉USE_CUDNN := 1
      一定要注意自己GPU硬件的計算能力問題!!!

 
    出現全部測試通過即可:

      [----------] Global test environment tear-down
      [==========] 996 tests from 141 test cases ran. (45874 ms total)
      [ PASSED ] 996 tests.

 

      • 這里的pycaffe接口非常重要,一定要配置測試好!!!(先編譯好caffe后再進行pycaffe接口編譯)
    
    編譯python接口:
      將caffe根目錄下的python文件夾加入到bash
      打開配置文件bashrc
      # sudo gedit ~/.bashrc
 
      在最后面加入caffe目錄下的python路徑
         export TCNN_ROOT=/home/leeyang/T-CNN
        export PYTHONPATH=$TCNN_ROOT/External/caffe/python:$PYTHONPATH
        sudo ldconfig
      更新配置即可。
 
    執行命令:
       sudo make pycaffe
    輸出:

      LD -o .build_release/lib/libcaffe.so.1.0.0-rc3
      CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
      touch python/caffe/proto/__init__.py
      PROTOC (python) src/caffe/proto/caffe.proto

 
    在python中使用代碼測試:
      import caffe
    無錯誤即可
 

 
測試demo:
 
   一般第一個測試都是對手寫字體minist進行識別,主要有三個步驟:准備數據、修改配置、開始使用。
 
  1、准備數據
 
    一般是使用命令:
       sudo sh ./data/mnist/get_mnist.sh      (大約是9.5M左右的數據,需要聯網下載)
    輸出提示:

      Downloading...
      --2016-10-07 23:44:11-- http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
      Resolving yann.lecun.com (yann.lecun.com)... 128.122.47.89
      Connecting to yann.lecun.com (yann.lecun.com)|128.122.47.89|:80... connected.
      HTTP request sent, awaiting response... 200 OK
      Length: 9912422 (9.5M) [application/x-gzip]
      Saving to: ‘train-images-idx3-ubyte.gz’
      train-images-idx3-ubyte.gz 100%[=====================================>] 9.45M 39.5KB/s in 2m 42s
      2016-10-07 23:46:53 (59.9 KB/s) - ‘train-images-idx3-ubyte.gz’ saved [9912422/9912422]

    生成標准數據:
       sudo sh ./examples/mnist/create_mnist.sh
    輸出提示:

      Creating lmdb...
      I1007 23:47:04.655964 18706 db_lmdb.cpp:35] Opened lmdb examples/mnist/mnist_train_lmdb
      I1007 23:47:04.656126 18706 convert_mnist_data.cpp:88] A total of 60000 items.
      I1007 23:47:04.656134 18706 convert_mnist_data.cpp:89] Rows: 28 Cols: 28
      I1007 23:47:09.992278 18706 convert_mnist_data.cpp:108] Processed 60000 files.
      I1007 23:47:10.043660 18708 db_lmdb.cpp:35] Opened lmdb examples/mnist/mnist_test_lmdb
      I1007 23:47:10.043848 18708 convert_mnist_data.cpp:88] A total of 10000 items.
      I1007 23:47:10.043862 18708 convert_mnist_data.cpp:89] Rows: 28 Cols: 28
      I1007 23:47:10.859005 18708 convert_mnist_data.cpp:108] Processed 10000 files.
      Done.

 
    但有時可能會網絡不通暢。 這里直接下載
    解壓得到兩個文件夾(mnist-train-leveldb和mnist-test-leveldb),復制到 .\examples\mnist\  目錄下即可
 
     錯誤1:F1007 23:20:39.377470 14871 convert_mnist_data.cpp:144] This example requires LevelDB and LMDB; compile with USE_LEVELDB and USE_LMDB.
       這個錯誤是因為學習中的之知其然不知其所以然導致的!!!
      caffe的Makefile文件中取消注釋,但是其后的值仍然是0,和不取消是一樣的了!取消注釋后將值改為1,然后全部重新編譯caffe
       USE_OPENCV := 1
      USE_LEVELDB := 1
      USE_LMDB := 1
  
    一切正常會在.\examples\mnist\  目錄下生成這兩個數據文件夾。

  2、修改配置

    修改該目錄下的prototxt擴展名配置文件

    修改./examples/mnist/lenet_solver.prototxt

    定位到最后一行:solver_mode: GPU,將GPU改為CPU。 直接先使用CPU進行測試

  3、運行

     執行文件命令:
       sudo sh ./examples/mnist/train_lenet.sh
     輸出提示:
     
     I

1007 23:53:09.915892 18795 caffe.cpp:210] Use CPU.

    I1007 23:53:09.916203 18795 solver.cpp:48] Initializing solver from parameters:
    test_iter: 100
    test_interval: 500
    base_lr: 0.01
    display: 100
    max_iter: 10000
    lr_policy: "inv"
    gamma: 0.0001
    power: 0.75
    momentum: 0.9
    weight_decay: 0.0005
    snapshot: 5000
    snapshot_prefix: "examples/mnist/lenet"
    solver_mode: CPU
    net: "examples/mnist/lenet_train_test.prototxt"
    train_state {
      level: 0
      stage: ""
    }

    **********************************
    **********************************

    I1008 00:12:51.708220 18795 sgd_solver.cpp:106] Iteration 9800, lr = 0.00599102
    I1008 00:13:02.717388 18795 solver.cpp:228] Iteration 9900, loss = 0.00611393
    I1008 00:13:02.717483 18795 solver.cpp:244] Train net output #0: loss = 0.00611391 (* 1 = 0.00611391 loss)
    I1008 00:13:02.717496 18795 sgd_solver.cpp:106] Iteration 9900, lr = 0.00596843
    I1008 00:13:14.016697 18795 solver.cpp:454] Snapshotting to binary proto file examples/mnist/lenet_iter_10000.caffemodel
    I1008 00:13:14.025446 18795 sgd_solver.cpp:273] Snapshotting solver state to binary proto file examples/mnist/lenet_iter_10000.solverstate
    I1008 00:13:14.084300 18795 solver.cpp:317] Iteration 10000, loss = 0.00241856
    I1008 00:13:14.084349 18795 solver.cpp:337] Iteration 10000, Testing net (#0)
    I1008 00:13:21.108484 18795 solver.cpp:404] Test net output #0: accuracy = 0.9905
    I1008 00:13:21.108542 18795 solver.cpp:404] Test net output #1: loss = 0.0295916 (* 1 = 0.0295916 loss)
    I1008 00:13:21.108553 18795 solver.cpp:322] Optimization Done.
    I1008 00:13:21.108559 18795 caffe.cpp:254] Optimization Done.

    
    渣配置訓練跑了大約20分鍾~模型精度在0.99以上
    最終訓練完的模型存儲為一個二進制的protobuf文件:
     ./examples/mnist/lenet_iter_10000.caffemodel
 
     這個模型就可以用來直接使用了,具體怎么使用還有待繼續學習!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM