1. 程式人生 > >YOLOv3 學習筆記:大神好貼彙總+自身經驗記錄

YOLOv3 學習筆記:大神好貼彙總+自身經驗記錄

轉載自可愛的實驗室大神師姐,原文地址:https://blog.csdn.net/u011649150/article/details/81038645


一、學習 YOLOv3

YOLOv3論文

YOLOv3:An Incremental Improvement 全文翻譯

【目標檢測簡史】進擊的 YOLOv3,目標檢測網路的巔峰之作

語言生動易懂,適合新手學習,有很多實測的圖,效果非常好,展示了 YOLOv3 的強大!

總結了 YOLOv3 的改進之處,並對下一代 YOLO 提出展望

【目標檢測簡史】YOLOv3 的實景大片兒(含原始碼)

實測看效果,用 YOLOv3 檢測一段視訊,擷取部分幀展示 YOLOv3 在小物體或者遠處的物體識別、重疊遮擋物體的識別、運動模糊物體的識別、高密度汽車的識別、密集人群識別的效果。

目標檢測網路之 YOLOv3

具體講解了 YOLOv1 到 v2 到 v3 的改進之處,值得學習

如何評價最新的 YOLOv3?

知乎話題,一些回答挺好的,各種總結、圖表、文章連結

 

二、實踐 YOLOv3

YOLOv3官方linux程式碼

YOLOv3官方網站

圖表展示了 YOLOv3 的優勢,講解了如何搭建 Darknet、下載預訓練模型、測試影象、測試視訊、用 VOC 資料集訓練模型、用 COCO 資料集訓練模型

YOLOv3: 訓練自己的資料

詳細講解了如何製作 VOC 格式的資料集,將 VOC 格式的 xml 檔案轉換成 YOLO 格式的 txt 檔案,修改訓練相關的配置檔案,如何訓練自己的模型,如何進行測試,論文閱讀

YOLO 配置檔案理解

詳細講解了 YOLOv3 配置檔案每個引數的意義,以及原始碼中如何使用這些引數

 

三、修改 YOLOv3


YOLOv3 批量測試圖片並儲存在自定義資料夾下

講解了如何批量測試圖片並儲存在自定義資料夾下,給出了程式碼

YOLOv3 使用筆記——計算 mAP、recall

講解了 YOLOv3 如何計算 mAP、recall 來衡量模型效果

 

四、自己使用問題總結

1、執行 test,recall,vaild 命令時,<test_cfg> 檔案中 batch 和 subdivisions 兩項必須為 1。否則會出現測試檢測不到目標、計算 recall 為 0,驗證沒有產生結果檔案。訓練時候根據 GPU 情況調大 batch 和 subdivisions,官方 cfg 中兩者值分別為 64 和 16。

2、測試標籤上如何新增置信值

由於官方程式碼測試只標註了類別,標籤文字較大。使用過程中希望減小標籤,並加上檢測的置信值。

修改 src/image.c 檔案 draw_detections 函式,前面部分程式碼修改如下:

  int i,j;
 
    for(i = 0; i < num; ++i){
        char labelstr[4096] = {0};
        int class = -1;
    char possible[2];//存放檢測的置信值
        for(j = 0; j < classes; ++j){
      sprintf(possible,"%.2f",dets[i].prob[j]);//置信值擷取小數點後兩位賦給possible
            if (dets[i].prob[j] > thresh){
                if (class < 0) {
                    strcat(labelstr, names[j]);
            strcat(labelstr, possible);//標籤中加入置信值
                    class = j;
                } else {
                    strcat(labelstr, ", ");
                    strcat(labelstr, names[j]);
            strcat(labelstr, possible);//標籤中加入置信值
                }
                printf("%s: %.0f%%\n", names[j], dets[i].prob[j]*100);
            }
        }

///////////////////////////後面保持不變//////////////////////////////////////////////
修改 src/image.c 檔案 draw_detections 函式中 get_label 函式呼叫的引數

image label = get_label(alphabet, labelstr, (im.h*.02));

原始碼中為 0.03,修改為 0.02 後,標籤文字減小,可以根據需要調整。

修改程式碼後需要使用 make clean,make 重新編譯。

加入置信值,減小標籤大小後的檢測效果圖!                        

3、使用多 GPU 訓練時,由於並行處理,訓練迭代次數會一次跳過幾輪,導致某些整數次迭代的模型沒有儲存。

修改 example/detector.c 檔案中的第 148 行

原始碼為:if(i%10000==0 || (i<1000 && i%100==0))// 迭代小於 1000 次,每 100 次儲存模型,大於 1000 次,每 10000 次儲存模型。

可以根據需要修改訓練多少輪儲存一個模型,if(i%1000==0 || (i<1000 && i%100==0)),大於 1000 次,每 1000 次儲存模型。