yolov3项目工程
1. 下載YOLOv3工程項目
git clone https://github.com/pjreddie/darknet cd darknet- 1
- 2
- 1
- 2
2. 修改Makefile配置,使用GPU訓練,修改如下:
GPU=1 #如果使用GPU設置為1,CPU設置為0 CUDNN=1 #如果使用CUDNN設置為1,否則為0 OPENCV=0 #如果調用攝像頭,還需要設置OPENCV為1,否則為0 OPENMP=0 #如果使用OPENMP設置為1,否則為0 DEBUG=0 #如果使用DEBUG設置為1,否則為0CC=gcc NVCC=/home/user/cuda-9.0/bin/nvcc #NVCC=nvcc 修改為自己的路徑 AR=ar ARFLAGS=rcs OPTS=-Ofast LDFLAGS= -lm -pthread COMMON= -Iinclude/ -Isrc/ CFLAGS=-Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC ... ifeq ($(GPU), 1) COMMON+= -DGPU -I/home/hebao/cuda-9.0/include/ #修改為自己的路徑 CFLAGS+= -DGPU LDFLAGS+= -L/home/hebao/cuda-9.0/lib64 -lcuda -lcudart -lcublas -lcurand #修改為自己的路徑 endif- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
保存完成后,在此路徑下執行make,如果出現如下錯誤:
Loadingweights from yolo.weights...Done! CUDA Error:invalid device function darknet: ./src/cuda.c:21: check_error: Assertion `0' failed. Aborted (core dumped)- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
這是因為配置文件Makefile中配置的GPU架構和本機GPU型號不一致導致的。更改前默認配置如下(不同版本可能有變):
ARCH= -gencode arch=compute_30,code=sm_30 \-gencode arch=compute_35,code=sm_35 \-gencode arch=compute_50,code=[sm_50,compute_50] \-gencode arch=compute_52,code=[sm_52,compute_52] # -gencode arch=compute_20,code=[sm_20,sm_21] \ This one is deprecated? # This is what I use, uncomment if you know your arch and want to specify # ARCH= -gencode arch=compute_52,code=compute_52- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
CUDA官方說明文檔:http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#virtual-architecture-feature-list
然后重新編譯即可:
3. 準備訓練數據集
按下列文件夾結構,將訓練數據集放到各個文件夾下面,生成4個訓練、測試和驗證txt文件列表
VOCdevkit
—VOC2007
——Annotations
——ImageSets
———Layout
———Main
———Segmentation
——JPEGImages
Annotations中是所有的xml文件
JPEGImages中是所有的訓練圖片
Main中是4個txt文件,其中test.txt是測試集,train.txt是訓練集,val.txt是驗證集,trainval.txt是訓練和驗證集。
3. 生成2007_train.txt和2007_val.txt文件
下載voc_label.py文件,將文件下載到VOCdevkit同級的路徑下,生成訓練和驗證的文件列表
wget https://pjreddie.com/media/files/voc_label.py
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
運行python voc_label.py,生成2007_train.txt訓練文件列表。
4.下載Imagenet上預先訓練的權重
wget https://pjreddie.com/media/files/darknet53.conv.74- 1
- 1
5. 修改cfg/voc.data
classes= 10 #classes為訓練樣本集的類別總數 train = /home/user/darknet/2007_train.txt #train的路徑為訓練樣本集所在的路徑 valid = /home/user/darknet/2007_val.txt #valid的路徑為驗證樣本集所在的路徑 names = data/voc.names #names的路徑為data/voc.names文件所在的路徑 backup = backup- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
6. 在darknet文件夾下面新建文件夾backup
7. 修改data/voc.name為樣本集的標簽名
0- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
8. 修改cfg/yolov3-voc.cfg
關于cfg修改,以10類目標檢測為例,主要有以下幾處調整(藍色標出):
[net] # Testing ### 測試模式 # batch=1 # subdivisions=1 # Training ### 訓練模式,每次前向的圖片數目 = batch/subdivisions batch=64 subdivisions=16 width=416 ### 網絡的輸入寬、高、通道數 height=416 channels=3 momentum=0.9 ### 動量 decay=0.0005 ### 權重衰減 angle=0 saturation = 1.5 ### 飽和度 exposure = 1.5 ### 曝光度 hue=.1 ### 色調 learning_rate=0.001 ### 學習率 burn_in=1000 ### 學習率控制的參數 max_batches = 50200 ### 迭代次數 policy=steps ### 學習率策略 steps=40000,45000 ### 學習率變動步長 scales=.1,.1 ### 學習率變動因子 [convolutional] batch_normalize=1 ### BN filters=32 ### 卷積核數目 size=3 ### 卷積核尺寸 stride=1 ### 卷積核步長 pad=1 ### pad activation=leaky ### 激活函數......[convolutional] size=1 stride=1 pad=1 filters=45 #3*(10+4+1) activation=linear[yolo] mask = 6,7,8 anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 classes=10 #類別 num=9 jitter=.3 ignore_thresh = .5 truth_thresh = 1 random=0 #1,如果顯存很小,將random設置為0,關閉多尺度訓練; ......[convolutional] size=1 stride=1 pad=1 filters=45 #3*(10+4+1) activation=linear[yolo] mask = 3,4,5 anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 classes=10 #類別 num=9 jitter=.3 ignore_thresh = .5 truth_thresh = 1 random=0 #1,如果顯存很小,將random設置為0,關閉多尺度訓練; ......[convolutional] size=1 stride=1 pad=1 filters=45 #3*(10+4+1) activation=linear[yolo] mask = 0,1,2 anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 classes=10 #類別 num=9 jitter=.3 # 數據擴充的抖動操作 ignore_thresh = .5 #文章中的閾值1 truth_thresh = 1 #文章中的閾值2 random=0 #1,如果顯存很小,將random設置為0,關閉多尺度訓練;總結
以上是生活随笔為你收集整理的yolov3项目工程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: yolo 学习系列
- 下一篇: SegNet网络简析及caffe工程应用