YOLO v3 視頻檢測(檢測特定類別)

YOLO v3的安裝可以使用參考博客:YOLO v3 安裝並訓練自己數據 - quanwei的博客

檢測視頻

在這篇博客中我們將介紹如果使用YOLO V3進行視頻檢測。其實在darknet官網中我們已經看到了作者關於使用YOLO v3的視頻接口對視頻進行檢測,現在使用模型對自己本地的視頻進行檢測。

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <File Name>

上邊就是進行視頻檢測接口,直接將最後半段的<File Name>換成自己的模型即可。

在這裏插入圖片描述

上邊就是我進行檢測的結果,我使用顯卡型號是1080Ti,使用YOLO v3原始權重,Resize以後的圖片大小爲608*608,這樣檢測速度可以達到平均20幀/秒。

檢測固定類別

有很多小夥伴不想檢測所有的類別,只想檢測某幾個類別,這裏我們來簡單介紹一下如何修改.

確定檢測類別的id

我們此次視頻目標檢測使用的是coco.data索引,所以應該在./darknet/data/coco.names文件夾中找到需要檢測目標種類的索引.

person
bicycle
car
motorbike
...

如上邊所示,如果我們只需要檢測人的話,只需要記住人的索引號爲0(行數-1),如果需要檢測幾個種類我們需要記住幾個類別的索引.

修改./darknet/src/image.c

確定類別的index以後,就需要修改程序,在./darknet/src/image.c文件中draw_detections()函數中,將下邊的內容

void draw_detections(image im, detection *dets, int num, float thresh, char **names, image **alphabet, int classes)
{
    int i,j;
    char save_txt;
    for(i = 0; i < num; ++i){
        char labelstr[4096] = {0};
        int class = -1;
        for(j = 0; j < classes; ++j){
            if (dets[i].prob[j] > thresh){
                ...

修改爲:

 for(i = 0; i < num; ++i){
        char labelstr[4096] = {0};
        int class = -1;

        for(j = 0; j < classes; ++j){

            // Select classes Detection
            if((j != 0)&&(j!=5){                     //person
                continue;
            }
            
            if (dets[i].prob[j] > thresh){
                if (class < 0) {

其實十分簡單,就是將不是屬於我們需要檢測的類別直接跳過,不進行檢測.

重新編譯

重新進行

make clean
make -j

這樣就是可以進行檢測的.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章