YOLO v3 安装并训练自己数据
文章目錄
- 1. 安裝
- 1.1 模型安裝
- 1.2 運行Demo
- 2.訓練自己的數據集
- 2.1數據集準備
- 2.2修改配置文件
- 2.2.1修改cfg/voc.data
- 2.2.2修改data/voc.names
- 2.2.3修改cfg/yolo-voc.cfg
- 2.3 訓練
- 3. 測試
- 3.1 單張圖像測試
- 3.2多張圖像測試
- 3.3 測試數據集測試mAP、recall等參數
- 命令參數總結
- 訓練模型
- 單GPU訓練
- 多GPU訓練
- 測試圖片
- Error
- /bin/sh: 1: nvcc: not found
- ./darknet: error while loading shared libraries: libcurand.so.10.0: cannot open shared object file: No such file or directory
- 參考
?
1. 安裝
1.1 模型安裝
YOLO v3的安裝與YOLO v2的安裝方法一樣
<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">git</span> clone https://github.com/pjreddie/darknet </code></span>直接使用上邊的命令下載YOLO安裝包。下載完以后,打開進入到安裝包路徑內
<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">cd</span> darknet </code></span>如果機器有使用GPU加速的環境,以及安裝OPENCV了,需要做一下修改
<span style="color:#000000"><code class="language-shell">gedit Makefile </code></span>使用gedit打開編譯文件,將文件前幾行中,對應的GPU、CUDNN、OPENCV由0變為1;
<span style="color:#000000"><code class="language-shell">GPU<span style="color:#6272a4">=</span>1 CUDNN<span style="color:#6272a4">=</span>1 OPENCV<span style="color:#6272a4">=</span>1 </code></span>對Makefile修改結束以后,就可以進行安裝。
<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">make</span> -j </code></span>下載YOLO v3權重
<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">wget</span> https://pjreddie.com/media/files/yolov3.weights </code></span>1.2 運行Demo
運行Demo查看運行是否成功。
<span style="color:#000000"><code class="language-shell"> ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg </code></span>2.訓練自己的數據集
2.1數據集準備
首先將自己的數據集生成為VOC數據集的格式,至少生成如下格式的文件夾
<span style="color:#000000"><code class="language-shell">Annotations ImageSets--Main--test.txt--train.txt--trainval.txt--val.txt JPEGImages </code></span>接著將上邊四個文件夾放在/darknet/scripts/VOCdevkit/VOC2007內,這個文件夾需要自己來創建一個。接著對/darknet/scripts/voc_label.py進行修改。
第一處
修改第7行
第二處
修改第9行
修改為自己檢測目標類別名稱
完成修改以后可運行文件,生成YOLO訓練時使用的labels
<span style="color:#000000"><code class="language-shell">python voc_label.py </code></span>運行結束以后,可以在/darknet/scripts/VOCdevkit/VOC2007文件夾內看到labels文件夾,并且在/darknet/scripts文件夾內會生成2007_train.txt、2007_test.txt、2007_val.txt三個文件。到此,數據準備完成。
2.2修改配置文件
<span style="color:#000000"><code class="language-shell">./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23 </code></span>上邊是進行訓練的命令,可以按照上邊的命令對文件進行修改。
2.2.1修改cfg/voc.data
<span style="color:#000000"><code class="language-shell">classes<span style="color:#6272a4">=</span> 3 //修改為訓練分類的個數 train <span style="color:#6272a4">=</span> /home/ws/darknet/scripts/2007_train.txt //修改為數據階段生成的2007_train.txt文件路徑 valid <span style="color:#6272a4">=</span> /home/ws/darknet/scripts/2007_val.txt //修改為數據階段生成的2007_val.txt文件路徑 names <span style="color:#6272a4">=</span> data/voc.names backup <span style="color:#6272a4">=</span> backup </code></span>2.2.2修改data/voc.names
在上邊修改的文件內有一個data/voc.names文件,里邊保存目標分類的名稱,修改為自己類別的名稱即可。
2.2.3修改cfg/yolo-voc.cfg
第一處
文件開頭的配置文件可以按照下邊的說明進行修改
注意:如果修改max_batches總的訓練次數,也需要對應修改steps,適當調整學習率。
具體的含義可以查看YOLO網絡中參數的解讀
第二處
修改107行最后一個卷積層中filters,按照filter=5*(classes+5)來進行修改。如果類目為3,則為5*(3+5)=40。
第三處
修改類別數,直接搜索關鍵詞“classes”即可,全文就一個。
2.3 訓練
<span style="color:#000000"><code class="language-shell">./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23 <span style="color:#6272a4">>></span> log.txt </code></span>輸入上邊的指令就可以進行訓練,在命令最后的命令>> log.txt是將輸出的日志保存到log.txt文件內,這樣便于后期訓練結果的查看。
3. 測試
3.1 單張圖像測試
<span style="color:#000000"><code class="language-shell">./darknet detect cfg/yolo-voc.cfg backup/yolo-voc_final.weights data/dog.jpg </code></span> <span style="color:#000000"><code class="language-shell">./darknet detect <span style="color:#999999">[</span>訓練cfg文件路徑<span style="color:#999999">]</span> <span style="color:#999999">[</span>權重文件路徑<span style="color:#999999">]</span> <span style="color:#999999">[</span>檢測圖片的路徑<span style="color:#999999">]</span> </code></span>按照上邊的規整進行填寫即可。
3.2多張圖像測試
由于博主能力有限,修改YOLO內部文件失敗,只能使用shell寫命令來進行重復單張測試的命令
<span style="color:#000000"><code class="language-shell">input_data_folder<span style="color:#6272a4">=</span><span style="color:#f1fa8c">"./data/VOCdevkit/VOC2007/JPEGImages/"</span> output_data_folder<span style="color:#6272a4">=</span><span style="color:#f1fa8c">"./results/CD8"</span> file_name_tmp<span style="color:#6272a4">=</span><span style="color:#ee9900"><span style="color:#ee9900">`</span><span style="color:#8be9fd">ls</span> $input_data_folder<span style="color:#ee9900">`</span></span>file_names<span style="color:#6272a4">=</span><span style="color:#999999">(</span><span style="color:#ee9900"><span style="color:#ee9900">$(</span><span style="color:#ff79c6">echo</span> $file_name_tmp<span style="color:#ee9900">)</span></span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#ff79c6">for</span> filename <span style="color:#ff79c6">in</span> <span style="color:#ee9900">${file_names[@]}</span> <span style="color:#ff79c6">do</span><span style="color:#ff79c6">echo</span> <span style="color:#f1fa8c">"testing <span style="color:#ee9900">$file</span> ..."</span>./darknet detector <span style="color:#8be9fd">test</span> cfg/inst25.data cfg/yolo-voc.cfg backup/yolo-voc_final.weights <span style="color:#ee9900">$input_data_folder</span><span style="color:#ee9900">$filename</span> -thresh .3 -gpu 0,1 <span style="color:#6272a4">>></span> result.txt<span style="color:#8be9fd">mv</span> predictions.png ./results/CD8_final_thresh_0.3/<span style="color:#ee9900">$filename</span><span style="color:#f1fa8c">'.png'</span><span style="color:#ff79c6">done</span> </code></span>修改相應自己存儲圖片的路徑就可以進行測試 。
3.3 測試數據集測試mAP、recall等參數
<span style="color:#000000"><code class="language-shell">./darknet detector valid cfg/voc.data cfg/voc.cfg backup/voc_final.weights -out result_ -gpu 0 -thresh .5 </code></span> <span style="color:#000000"><code>./darknet detector valid [data路徑] [cfg路徑] [權重文件路徑] -out [生成txt文件前綴] -gpu [GPU的ID號] -thresh [門限的大小] </code></span>按照上邊的規則對測試數據集進行測試,會在result文件夾內生成相應的相應檢測結果的文件。
下邊借助Faster R-CNN中voc_eval.py文件進行參數測試。
首先將上邊的命令新建一個python文件,同時將Faster R-CNN中voc_eval.py文件放在一個文件夾內,這個文件可以能在Github中不能找到,可以去CSDN下載。
命令參數總結
訓練模型
單GPU訓練
<span style="color:#000000"><code class="language-shell">./darknet -i <span style="color:#6272a4"><</span>gpu_id<span style="color:#6272a4">></span> detector train <span style="color:#6272a4"><</span>data_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>train_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>weights<span style="color:#6272a4">></span> </code></span>舉例:
<span style="color:#000000"><code class="language-shell">./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 </code></span>多GPU訓練
格式為:
<span style="color:#000000"><code class="language-shell">./darknet detector train <span style="color:#6272a4"><</span>data_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>model_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>weights<span style="color:#6272a4">></span> -gpus <span style="color:#6272a4"><</span>gpu_list<span style="color:#6272a4">></span> </code></span>舉例
<span style="color:#000000"><code class="language-shell">./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1,2,3 </code></span>測試圖片
測試單張圖片
<span style="color:#000000"><code class="language-shell">./darknet detector <span style="color:#8be9fd">test</span> <span style="color:#6272a4"><</span>data_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>test_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>weights<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>image_file<span style="color:#6272a4">></span> </code></span><test_cfg>文件中batch和subdivisions兩項必須為1。
測試時還可以用-thresh和-hier選項指定對應參數。
生成預測結果
<test_cfg>文件中batch和subdivisions兩項必須為1。
結果生成在<data_cfg>的results指定的目錄下以<out_file>開頭的若干文件中,若<data_cfg>沒有指定results,那么默認為<darknet_root>/results。
計算recall(執行這個命令需要修改detector.c文件,修改信息請參考“detector.c修改”)
- ?
<test_cfg>文件中batch和subdivisions兩項必須為1。
輸出在stderr里,重定向時請注意。
RPs/Img、IOU、Recall都是到當前測試圖片的均值。
detector.c中對目錄處理有錯誤,可以參照validate_detector對validate_detector_recall最開始幾行的處理進行修改。
Error
/bin/sh: 1: nvcc: not found
當安裝在CUDA10.1的情況下會報下邊的錯誤,這時候需要將Makefile文件中的NVCC
- ?
修改為下邊的格式:
<span style="color:#000000"><code class="language-txt">NVCC=/usr/local/cuda-10.1/bin/nvcc </code></span>- ?
./darknet: error while loading shared libraries: libcurand.so.10.0: cannot open shared object file: No such file or directory
使用下邊的命令進行修正
<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">sudo</span> <span style="color:#8be9fd">cp</span> /usr/local/cuda-10.0/lib64/libcudart.so.10.0 /usr/local/lib/libcudart.so.10.0 <span style="color:#6272a4">&&</span> <span style="color:#8be9fd">sudo</span> ldconfig <span style="color:#8be9fd">sudo</span> <span style="color:#8be9fd">cp</span> /usr/local/cuda-10.0/lib64/libcublas.so.10.0 /usr/local/lib/libcublas.so.10.0 <span style="color:#6272a4">&&</span> <span style="color:#8be9fd">sudo</span> ldconfig <span style="color:#8be9fd">sudo</span> <span style="color:#8be9fd">cp</span> /usr/local/cuda-10.0/lib64/libcurand.so.10.0 /usr/local/lib/libcurand.so.10.0 <span style="color:#6272a4">&&</span> <span style="color:#8be9fd">sudo</span> ldconfig</code></span>參考
YOLOv3: 訓練自己的數據 - CSDN博客
總結
以上是生活随笔為你收集整理的YOLO v3 安装并训练自己数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python设置网卡自己封装的Inter
- 下一篇: 1-3.Win10系统利用Pycharm