YOLOv3只检测人

解决办法:

  1. 修改源码只输出人一类。实际上会检测另外79类。
  2. 重新训练。

参考文献:

  1. (法一,简单高效)yolov3 修改 只识别一类(person) - Limbos的博客 - CSDN博客 https://blog.csdn.net/limbos/article/details/81949591
  2. (法二,麻烦完美)yolov3算法检测单类物体 - z649431508的博客 - CSDN博客 https://blog.csdn.net/z649431508/article/details/82191036

文献1是针对C下的YOLOv3,本文针对Python Keras下的YOLOv3:

法一:
修改yolo.py第135行,添加如下代码即可:

            #Just detect person
            if predicted_class != 'person':
                continue

在这里插入图片描述

法二:

一、源码地址

qqwweee/keras-yolo3: A Keras implementation of YOLOv3 (Tensorflow backend) https://github.com/qqwweee/keras-yolo3

二、预训练权重

https://pjreddie.com/media/files/yolov3.weights

三、数据集

https://download.csdn.net/download/z649431508/10638245

此处为博主z649431508收集的数据集,放在代码同一目录下解压

四、修改yolo.cfg

  • classes修改为1(3处)
  • filters=255修改为filters=18(3处),值的公式为(classes+5)*3

五、修改voc_annotation.py

classes修改成classes = ["person"]
在这里插入图片描述

六、修改model_data文件夹下的coco_class.txt和voc_class.txt

只留下person
在这里插入图片描述
在这里插入图片描述

七、生成训练、验证、测试文件

  • 运行python voc_annotation.py
  • 看到生成三个文件:2007_train.txt2007_test.txt2007_val.txt
  • 将三个文件分别改名,去掉前缀2007_
    在这里插入图片描述

八、转换预训练权重成.h5

python convert.py -w yolov3.cfg yolov3.weights model_data/yolo_weights.h5

九、训练

python train.py

训练过程会出现val_loss: nan的情况,解决办法:

  • 调大epoch修改train.py),50代后开始降低
  • 调大batch(修改yolov3.cfg)

在这里插入图片描述

训练完成后权重.h5文件放在logs/000

十、更换权重

  • logs/000/trained_weights_stage_1.h5移动到model_data
  • 修改yolo.py中的默认权重路径"model_path"trained_weights_stage_1.h5

十一、测试

随便找个带有人的mp4放进去测试

python yolo_video.py --input 1.mp4

将结果保存到本地
python yolo_video.py --input test.mp4 --output test1.mp4

在这里插入图片描述

十二、备注

  • 仅训练50代效果远远没有官方提供的权重好
展开阅读全文

没有更多推荐了,返回首页