YOLO v3 视频检测(检测特定类别)

YOLO v3的安装可以使用参考博客:YOLO v3 安装并训练自己数据 - quanwei的博客

文章目录

  • 检测视频
  • 检测固定类别
    • 确定检测类别的id
    • 修改`./darknet/src/image.c`
    • 重新编译

检测视频

在这篇博客中我们将介绍如果使用YOLO V3进行视频检测。其实在darknet官网中我们已经看到了作者关于使用YOLO v3的视频接口对视频进行检测,现在使用模型对自己本地的视频进行检测。

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <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

这样就是可以进行检测的.

你可能感兴趣的:(深度实战,YOLO,视频检测)