日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

YOLO v3 安装并训练自己数据

發布時間:2025/3/11 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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行

<span style="color:#000000"><code class="language-shell"> sets<span style="color:#6272a4">=</span><span style="color:#999999">[</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'2012'</span>, <span style="color:#f1fa8c">'train'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2012'</span>, <span style="color:#f1fa8c">'val'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'train'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'val'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'test'</span><span style="color:#999999">)</span><span style="color:#999999">]</span> ``<span style="color:#ee9900"><span style="color:#ee9900">`</span>shell 將“<span style="color:#999999">(</span><span style="color:#f1fa8c">'2012'</span>, <span style="color:#f1fa8c">'train'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2012'</span>, <span style="color:#f1fa8c">'val'</span><span style="color:#999999">)</span>,”刪除掉,改為 <span style="color:#ee9900">`</span></span>``shellsets<span style="color:#6272a4">=</span><span style="color:#999999">[</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'train'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'val'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'test'</span><span style="color:#999999">)</span><span style="color:#999999">]</span> </code></span>

第二處
修改第9行

<span style="color:#000000"><code class="language-shell"> classes <span style="color:#6272a4">=</span> <span style="color:#999999">[</span><span style="color:#f1fa8c">"aeroplane"</span>, <span style="color:#f1fa8c">"bicycle"</span>, <span style="color:#f1fa8c">"bird"</span>, <span style="color:#f1fa8c">"boat"</span>, <span style="color:#f1fa8c">"bottle"</span>, <span style="color:#f1fa8c">"bus"</span>, <span style="color:#f1fa8c">"car"</span>, <span style="color:#f1fa8c">"cat"</span>, <span style="color:#f1fa8c">"chair"</span>, <span style="color:#f1fa8c">"cow"</span>, <span style="color:#f1fa8c">"diningtable"</span>, <span style="color:#f1fa8c">"dog"</span>, <span style="color:#f1fa8c">"horse"</span>, <span style="color:#f1fa8c">"motorbike"</span>, <span style="color:#f1fa8c">"person"</span>, <span style="color:#f1fa8c">"pottedplant"</span>, <span style="color:#f1fa8c">"sheep"</span>, <span style="color:#f1fa8c">"sofa"</span>, <span style="color:#f1fa8c">"train"</span>, <span style="color:#f1fa8c">"tvmonitor"</span><span style="color:#999999">]</span> </code></span>

修改為自己檢測目標類別名稱


完成修改以后可運行文件,生成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

第一處
文件開頭的配置文件可以按照下邊的說明進行修改

<span style="color:#000000"><code class="language-cfg"># Testing #batch=1 #subdivisions=1 # Training batch=64 //每次迭代要進行訓練的圖片數量 ,在一定范圍內,一般來說Batch_Size越大,其確定的下降方向越準,引起的訓練震蕩越小。 subdivisions=8 //源碼中的圖片數量int imgs = net.batch * net.subdivisions * ngpus,按subdivisions大小分批進行訓練 height=416 //輸入圖片高度,必須能被32整除 width=416 //輸入圖片寬度,必須能被32整除 channels=3 //輸入圖片通道數 momentum=0.9 //沖量 decay=0.0005 //權值衰減 angle=0 //圖片角度變化,單位為度,假如angle=5,就是生成新圖片的時候隨機旋轉-5~5度 saturation = 1.5 //飽和度變化大小 exposure = 1.5 //曝光變化大小 hue=.1 //色調變化范圍,tiny-yolo-voc.cfg中-0.1~0.1 learning_rate=0.001 //學習率 burn_in=1000 max_batches = 120200 //訓練次數 policy=steps //調整學習率的策略 steps=40000,80000 //根據batch_num調整學習率,若steps=100,25000,35000,則在迭代100次,25000次,35000次時學習率發生變化,該參數與policy中的steps對應 scales=.1,.1 //相對于當前學習率的變化比率,累計相乘,與steps中的參數個數保持一致; </code></span>

注意:如果修改max_batches總的訓練次數,也需要對應修改steps,適當調整學習率。
具體的含義可以查看YOLO網絡中參數的解讀
第二處
修改107行最后一個卷積層中filters,按照filter=5*(classes+5)來進行修改。如果類目為3,則為5*(3+5)=40。

<span style="color:#000000"><code class="language-cfg">[convolutional] size=1 stride=1 pad=1 filters=40 //計算公式為:filter=3*(classes+5) activation=linear </code></span>

第三處
修改類別數,直接搜索關鍵詞“classes”即可,全文就一個。

<span style="color:#000000"><code> classes=3 </code></span>

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文件進行參數測試。

<span style="color:#000000"><code class="language-shell">from voc_eval <span style="color:#8be9fd">import</span> voc_eval rec, prec, ap, fp, tp, nobj <span style="color:#6272a4">=</span> voc_eval<span style="color:#999999">(</span><span style="color:#f1fa8c">'/home/app/darknet/results/result_ {}.txt'</span>, <span style="color:#f1fa8c">'/home/app/darknet/scripts/VOCdevkit/VOC2007/Annotations/{}.xml'</span>,<span style="color:#f1fa8c">'/home/app/darknet/scripts/VOCdevkit/VOC2007/ImageSets/Main/test.txt'</span>, <span style="color:#f1fa8c">'Target1'</span>, <span style="color:#f1fa8c">'.'</span><span style="color:#999999">)</span> print<span style="color:#999999">(</span><span style="color:#f1fa8c">"class name: "</span> + classname<span style="color:#999999">)</span> print<span style="color:#999999">(</span><span style="color:#f1fa8c">"Average Precision: "</span> + str<span style="color:#999999">(</span>ap<span style="color:#999999">))</span> print<span style="color:#999999">(</span><span style="color:#f1fa8c">"True Positive: "</span> + str<span style="color:#999999">(</span>tp<span style="color:#999999">))</span> print<span style="color:#999999">(</span><span style="color:#f1fa8c">"False Positive: "</span> + str<span style="color:#999999">(</span>fp<span style="color:#999999">))</span> </code></span>

首先將上邊的命令新建一個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選項指定對應參數。
生成預測結果

<span style="color:#000000"><code>./darknet detector valid <data_cfg> <test_cfg> <weights> <out_file> </code></span>

<test_cfg>文件中batch和subdivisions兩項必須為1。
結果生成在<data_cfg>的results指定的目錄下以<out_file>開頭的若干文件中,若<data_cfg>沒有指定results,那么默認為<darknet_root>/results。
計算recall(執行這個命令需要修改detector.c文件,修改信息請參考“detector.c修改”)

<span style="color:#000000"><code class="language-shell">./darknet detector recall <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> </code></span>
  • ?

<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=nvcc </code></span>
  • ?

修改為下邊的格式:

<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 安装并训练自己数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。