iou画 yolov3_yolov3环境配置训练及优化
科普
gcc/g++: - GNU project C and C++ compiler.When you compile C++ programs, you should invoke GCC as g++ instead.
Cuda:GPU Accelerated Computing with C and C++
一、Ubuntu+cuda+cudnn+opencv+darknet/yolov3環境配置
1.NVIDIA顯卡驅動安裝
首先查看系統是否已經安裝NVIDIA驅動,查看方式輸入nvidia-smi無輸出或系統信息沒有顯卡信息。
安裝方式有ppa或官網下載驅動安裝,再次之前可查看系統推薦驅動:
ubuntu-drivers devices
也可以在官網查看:https://www.geforce.cn/drivers
安裝成功:nvidia-smi顯示顯卡信息,或系統信息有顯卡graphics這欄,如下:
2.gcc降版本
3.安裝cuda
查看顯卡支持cuda版本
windows:(參考:https://blog.csdn.net/wangyjfrecky/article/details/55100963)
控制面板->搜索NVIDIA->雙擊進入NVIDIA控制面板:
點擊幫助->系統信息->組件
UBUNTU:參考(http://www.voidcn.com/article/p-ujjgjaae-xp.html)根據顯卡型號選擇
我選擇cuda9.0 cuda9.0【點這下載】
根據自己的系統選擇,但必須選擇runfile,因為之前已經安裝過驅動,其他包會重復安裝。可能導致循環登錄。安裝參考官網命令:
首先是協議,按enter到100%,是否安裝驅動選擇no,其他默認或自定。
InstallNVIDIA Accelerated GraphicsDriver for Linux-x86_64 384.81?
此處選擇no
此處需要安裝四個打包文件patch,命令同上,安裝后在根目錄/usr/local下會有cuda-9.0和cuda兩個文件夾。
若系統自帶驅動符合要求,可以直接跳過驅動安裝:
配置環境變量:
打開~/.bashrc文件,在末尾加入:
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
***此處需要測試nvcc命令,若提示沒有安裝并建議安裝nvidia-cuda-toolkit,可以重啟電腦再試,run包安裝時有選擇cuda-toolkit安裝,若重復安裝,nvidia-cuda-toolkit自帶415驅動,可能導致循環登錄。正常安裝后,nvcc輸出:
具體可參考這篇博客:https://blog.csdn.net/jiangyanting2011/article/details/78873113
3.cudnn安裝
cudnn安裝比較簡單,需注意和cuda版本匹配【下載地址】
注冊登錄后下載
4.opencv NVIDIA cuda版本編譯安裝
cuda9.0支持opencv3.4.0及之前的版本,opencv官網下載opencv,我選擇3.4.0,
下載解壓后進入目錄 cd opencv-3.4.0
安裝cmake 等一系列依賴包
$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev # 處理圖像所需的包
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
$ sudo apt-get install libxvidcore-dev libx264-dev # 處理視頻所需的包
$ sudo apt-get install libatlas-base-dev gfortran # 優化opencv功能
$ sudo apt-get install ffmpeg
創建新文件夾來編譯,否則會報錯 ,進入目錄
sudo mkdir build
cd build
編譯 (無cuda版本可按網上教程來,此處為cuda版本)
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.0/modules \#若出錯或無可去掉
-D PYTHON_EXCUTABLE=/usr/bin/python3\ #根據自己的Python版本確定,默認則安裝到2.7版本
-D WITH_CUDA=ON \ #使用CUDA
-D WITH_TBB=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D WITH_V4L=ON \
-D WITH_GTK=ON \ #不加ubuntu cmake可能會報錯
-D WITH_OPENGL=ON \
-D WITH_CUBLAS=ON \
-D DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" \
-D CUDA_ARCH_BIN="6.1" \ # [GPU計算能力](https://developer.nvidia.com/cuda-gpus)
-D CUDA_ARCH_PTX="" \ #線程并行計算`
-D BUILD_EXAMPLES=ON \
-D CUDA_GENERATION=Pascal .. #自己顯卡架構
完成后lscpu 查看電腦CPU核數
我的總共為4,接下來:
sudo make -j4
完成后安裝
sudo make install
測試,無報錯則安裝成功
xiaose@lenovo:~$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>>
提示找不到cv2模塊,安裝
sudo apt-get install python3-opencv
重新編譯報錯解決:刪除build同級目錄下cache文件
5.darknet/yolov3 編譯
YOLOv3官網【下載】
打開Makefile,更改參數,根據自己環境修改參數
GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
DEBUG=0
由于使用Pascal架構,需要在架構上加-gencode arch=compute_61,code=[sm_61,compute_61]
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_61,code=[sm_61,compute_61]
修改nvcc路徑,根據自己修改
NVCC=/usr/local/cuda-9.0/bin/nvcc
COMMON+,LDFLAGS+路徑可為默認cuda或改為cuda-9.0
ifeq ($(GPU), 1)
COMMON+= -DGPU -I/usr/local/cuda-9.0/include/
CFLAGS+= -DGPU
LDFLAGS+= -L/usr/local/cuda-9.0/lib64 -lcuda -lcudart -lcublas -lcurand
endif
修改完成后保存,執行
sudo make
若更改參數,重新編譯 make clean 后make
測試,darknet目錄下 ./darknet出現下圖,編譯成功
$ ./darknet
usage: ./darknet
二、訓練技巧、問題及解決辦法:
1.xml標注文件轉txt
可參考darknet源碼scripts/voc_labels.py文件
2.更改測試label,box線條粗細及標簽大小
image.c文件
3.訓練圖片集路徑問題
原作者是將txt文件生成訓練集路徑
實測:將目錄下圖像生訓練集路徑文件train_image_path.txt,并將txt文件放到圖片目錄下一一對應
4. .cfg文件修改
batch=64
subdivisions=16
batch,subdivisions根據自己顯存大小修改,并且batch/subdivisions最好為自己GPU數量的整數倍
learning_rate=0.001
burn_in=1000
多GPU訓練時:learning_rate=0.001/gpus burn_in=1000*gpus 對于YOLO層
[convolutional]
size=1
stride=1
pad=1
filters=42
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=9
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1
classes根據自己檢測類別數更改,對應上一層卷積層filters=3×(5+num[classes])
anchors可以根據自己的樣本聚類得到
5.cannot fopen ***.jpg/txt
檢查對應訓練集路徑
6.cuda error: out of memory
改小batch/增大sudbivisions,或者關閉多尺度訓練random=0
7.darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.
(1)有out of memory錯誤:檢查是否有圖像讀取錯誤或同6
(2)無out of memory 錯誤:Makefile中arch架構與自己顯卡架構不匹配,參照安裝方法重新編譯。
一般來說,也可能是類別數和yolo層filters不匹配
8.訓練開始一段時間后出現loss=nan 、IOU=nan ,其他參數全為0的情況
確保cfg文件是train模式,batch、subdivisions不全為1,查看自己訓練集txt是否為空
若為多GPU訓練,按上述設置參數,防止陷入局部極值點或loss及IOU計算錯誤。
9.obj和no obj同時下降
使用初始權重darknet53.conv.74或YOLOv3.weights訓練時,由于與作者訓練集樣本結構不同,為 正常現象,若全降為0后不上升,出現大片nan和0,根據多GPU訓練修改參數或將batch增大到128及以上
10.測試權重需要關閉訓練
11.修改cfg文件不需要重新編譯,修改源碼需要重新編譯
12.訓練權重在訓練的電腦上可以檢測出目標,但換一臺機器后無法檢測出目標的問題
確保gcc/g++降版本的時候刪掉了原來的連接,根據自己的顯卡,選擇相應的fermi/kepler/maxwell/pascal/turing架構,并根據計算能力選擇arch=xx后重新編譯
13. No input parameters supplied: Success darknet: ./src/utils.c:256: error: Assertion `0' failed.Aborted (core dumped)
首先加sudo權限,報錯找不到libcudart.so.9.0,【解決辦法】
若不能解決,則可能為darknet自身問題【參考】重新編譯darknet
優化
根據官方參考文檔
1. 在.cfg文件中設置random=1,可以增加檢測精度。
2. 增加input圖像尺寸,在.cfg文件中設置(height=608,heigh=608)以上,可以增加檢測精度
3. 對.cfg文件中的anchors重新進行聚類
4. 確保數據集中所有的class都有對應的label,檢測你的數據集可以使用https://github.com/AlexeyAB/Yolo_mark
5. 所使用的數據集包括同一物體在不同角度、光照、背景、大小下的圖片,并且確保訓練2000**classes個iterations以上。
6. 確保生成的txt文檔不為空
其他詳見官方參考文檔
參考:
總結
以上是生活随笔為你收集整理的iou画 yolov3_yolov3环境配置训练及优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis的备份与恢复
- 下一篇: 浙江大学概率论与数理统计第四版考研真题和