檢測(1)從0到1


檢測(1)跑通mmdetection

二、安裝教程

本人的系統環境:

  • Ubuntu 16.04

  • Cuda 9.0 + Cudnn 7.0.5  (cuda8.0也可,親測)

  • Python 3.6 mmdetection要求Python版本需要3.4+

  • Anaconda 3 (可選)

這里推薦大家使用Anaconda,可以比較方便的創建Python虛擬環境,避免不同的Python庫之間產生沖突。在安裝mmdetection之前,需要安裝以下幾個依賴庫:

  • PyTorch 1.0 (

  • Cython

  • mmcv

下面是我的安裝和測試步驟,以Anaconda 3為例。

1. 使用conda創建Python虛擬環境(可選)

  conda create -n mmdetection python=3.6

  source activate mmdetection

  這樣就創建了名為mmdetectionPython3.6環境,並且在terminal中激活。

2. 安裝Pytorch 1.0

  conda install pytorch=1.0 -c pytorch

  這樣的速度會比較慢,我之后會貼一個百度雲,里面貼了這些所需要的庫,包括torch1.0-cp36等

  安裝好以后,進入Python環境,輸入以下代碼測試是否安裝成功,不報錯則說明安裝成功


3. 安裝Cython

  conda install cython

4. 安裝mmcv

  git clone https://github.com/open-mmlab/mmcv.git

  cd mmcv

  pip install .

注意:這里會下載opencv,如果下載太慢,可以自己去下載,鏈接會運行時會顯示

注意pip install 后面有個點,別漏了

5. 安裝mmdetection

  git clone https://github.com/open-mmlab/mmdetection.git

  cd mmdetection

  ./compile.sh

  python setup.py install

 

  注意:這里編譯必須要求gcc是5.4版本,如果不是,會出現錯誤:segmentation fault

到此,我們就完成了mmdetection及其依賴庫的安裝

6. 測試Demo

將下方的代碼寫入py文件,並存放到mmdetection文件夾目錄下,然后運行。該代碼的功能是檢測圖片中的目標,測試模型是官方給出的Faster-RCNN-fpn-resnet50的模型,運行代碼會自動下載模型。由於模型是存儲在亞馬遜雲服務器上,速度可能會稍慢,如果下載失敗可以通過我的網盤鏈接mmdetection(密碼:dpyl)進行下載,存放到mmdetection文件夾目錄下,然后修改下方代碼的相關部分

import mmcv

from mmcv.runner import load_checkpoint

from mmdet.models import build_detector

from mmdet.apis import inference_detector, show_result

cfg = mmcv.Config.fromfile('configs/faster_rcnn_r50_fpn_1x.py')

cfg.model.pretrained = None


# 構建網絡,載入模型

model = build_detector(cfg.model, test_cfg=cfg.test_cfg)


_ = load_checkpoint(model, 'https://s3.ap-northeast-2.amazonaws.com/open-mmlab/mmdetection/models/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth')

# 如果通過網盤下載,取消下一行代碼的注釋,並且注釋掉上一行

# _ = load_checkpoint(model, 'faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth')


# 測試一張圖片

img = mmcv.imread('test.jpg')

result = inference_detector(model, img, cfg)

show_result(img, result)


# 測試多張圖片

imgs = ['test1.jpg', 'test2.jpg']

for i, result in enumerate(inference_detector(model, imgs, cfg, device='cuda:0')):

print(i, imgs[i])

show_result(imgs[i], result)

7. 准備自己的數據

mmdetection支持coco格式和voc格式的數據集,下面將分別介紹這兩種數據集的使用方式

  • coco數據集
    官方推薦coco數據集按照以下的目錄形式存儲,以coco2017數據集為例

mmdetection

├── mmdet

├── tools

├── configs

├── data

│ ├── coco

│ │ ├── annotations

│ │ ├── train2017

│ │ ├── val2017

│ │ ├── test2017

推薦以軟連接的方式創建data文件夾,下面是創建軟連接的步驟

cd mmdetection

mkdir data

ln -s $COCO_ROOT data

其中,$COCO_ROOT需改為你的coco數據集根目錄

  • voc數據集
    coco數據集類似,將voc數據集按照以下的目錄形式存儲,以VOC2007為例

mmdetection

├── mmdet

├── tools

├── configs

├── data

│ ├── VOCdevkit

│ │ ├── VOC2007

│ │ │ ├── Annotations

│ │ │ ├── JPEGImages

│ │ │ ├── ImageSets

│ │ │ │ ├── Main

│ │ │ │ │ ├── test.txt

│ │ │ │ │ ├── trainval.txt

同樣推薦以軟連接的方式創建

cd mmdetection

mkdir data

ln -s $VOC2007_ROOT data/VOCdevkit

  • 1

  • 2

  • 3

其中,$VOC2007_ROOT需改為你的VOC2007數據集根目錄
然后,下載 pascal_voc_mod.py voc_classes.txt (上方的模型下載地址中有)存放到mmdetection根目錄下,運行以下代碼
mmdetection
官方代碼已更新,不再需要自己生成

如果需要標注自己的數據,推薦使用LabelImg工具標注
然后在運行 pascal_voc_mod.py 之前,修改 voc_classes.txt 里的類別名為你自己設定的類別名,再運行py文件
然后需要修改mmdet/datasets/voc.py文件中的CLASSES為你自己的類別

8. 訓練

官方推薦使用分布式的訓練方式,這樣速度更快,如果是coco訓練集,修改CONFIG_FILE中的pretrained參數,改為你的模型路徑,然后運行下方代碼

./tools/dist_train.sh <CONFIG_FILE> <GPU_NUM> [optional arguments]

  • 1

如果是voc訓練集,還需要修改config文件中的相關參數,可以參考 faster_rcnn_r50_mod.py (上方網盤地址中有),然后再運行上面的代碼
mmdetection
官方代碼已更新,目前已支持voc格式的數據集,不再需要自己修改

如果不想采用分布式的訓練方式,或者你只有一塊顯卡,則運行下方的代碼

python tools/train.py <CONFIG_FILE> --gpus <GPU_NUM> --work_dir <WORK_DIR>

  • 1

至此,如果一切順利的話,你的模型應該就開始訓練了

以上是轉載的以為大神的博客,但是我中間遇到了很多問題

注意:

1 當一切都成功之后,我以為自己可以成功跑通,但是發生了這樣的錯誤,

   segmentation fault

      出這個錯的原因是我的gcc版本(4.8)偏低,導致編譯錯誤,才會導致出現指針錯誤

      但是gcc高級版本死活安裝不上去,apt-get update也更新了,但是總是卡在gbd 那里有問題

   問題顯示:Ignoring Provides line with DepCompareOp for package gdb-minimal

   原因是因為我用了ubuntu14,沒有聽樓主的話,然后改成ubuntu16,這樣gcc版本直接就是5.4,

   

2 如果想正確安裝gcc5.0以上,需要ubuntu16版本

3 其中,python3.6在安裝numpy scipy等包時,要注意:

如果想省事,pip3 install numpy

 

4 會出現編譯不通:錯誤是:command '/usr/local/cuda/bin/nvcc' failed with exit status 1

這個時候的解決方案是:

 添加環境變量

vim ~/.bashrc

export PATH=/usr/local/cuda/bin:$PATH

5 cudnn 怎么安裝?

 先下載cudnn  網上下載,然后解壓tar -xzvf .....tar.gz

注意,放到哪個cuda,要根據自己的cuda版本

解壓之后,得到一個 cudn 文件夾,該文件夾下include 和 lib64 兩個文件夾,命令行進入 cudn/include 路徑下,然后進行以下操作:

    cd cuda/include
    sudo cp cudnn.h /usr/local/cuda/include  #復制頭文件

再將進入lib64目錄下的動態文件進行復制和鏈接:

    cd ..
    cd lib64
    sudo cp 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      #生成軟鏈接

安裝完成后可用 nvcc -V 命令驗證是否安裝成功,若出現以下信息則表示安裝成功:

6

E138: Can't write viminfo file /public/home/dgxu/.viminfo!

Press ENTER or type command to continue

 

1 切換到root用戶(一定要)

2 rm -f .viminf*.tmp

 

7 fatal error:cublas_v2.h: No such file or directory

cublas_v2.h是cuda里面非常重要的一個加速矩陣運算的庫,所以必須安裝

如何安裝:這個庫在/usr/local/cuda/include里面,如果沒有,則有問題,需要查看

anaconda是不會安裝cuda的,需要自己安裝

ll命令查看是否鏈接,且鏈接的是什么

gcc版本,系統gcc版本不好更換,所以盡量使用ubuntu16

 

 8 ImportError: libSM.so.6: cannot open shared object file: No such file or directory

再裝opencv時會遇到這個問題,以下代碼可以解決

apt-get update

apt-get upgrade

apt-get install -y python-qt4

 

9expected str, bytes or os.PathLike object, not numpy.ndarray

有問題,一直沒有解決

 

10  cannot connect to X server

由於是沒有安裝圖形界面,所以會出現這個問題

修改方案為:

import cv2

img=imread()

 counttt=0
    for i in bboxes:
        cv2.rectangle(img,(bboxes[counttt][1],bboxes[counttt][2]),(bboxes[counttt][3],bboxes[counttt][4]),(255, 0, 0), 2)
        counttt=counttt+1
    cv2.imwrite('/workspace/a.png',img)

 

11 繼續說明錯誤,這個錯誤是 batch_size=0,其實是因為你的gpu不能設置為0,如果把gpu設置為0,他會

認為這里是null,所以,只有一個gpu,要把gpu的設置為1

 

 

 

 


免責聲明!

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



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