基於yolov3的口罩檢測

1、數據集準備
假設已經有了標註好的一分部數據,
(1)運行voc2yolo3.py生成txt文件,保存在ImageSets/Main目錄下
(2)修改voc_annotation.py中的classes

classes = ["mask", "unmask"]

運行後,生成三個txt文件,每一行對應的是一張圖片的位置,標註的真實框位置以及label, 0代表戴口罩,1代表未戴口罩:
在這裏插入圖片描述
2、修改先驗框中的值
根據訓練集中標註框的大小,利用kmeans.py生成合適的先驗框保存在model_data下的yolo_anchors.txt和tiny_yolo_anchors.txt中,而不使用官方給定的。這裏有兩種架構,yolov3_tiny架構和yolov3架構,k=9,生成yolo_anchors;k=6,生成tiny_yolo_anchors。
在這裏插入圖片描述
然後,將model_data下的voc_classes.txt中的類別修改爲需要的類別:mask與unmask,或新建object_classes.txt寫入。
在這裏插入圖片描述
3、訓練
在訓練之前先將預先下載的yolov3 的 weights文件轉化爲keras的h5文件:
在cmd下切換到工程目錄:

python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

python convert.py yolov3-tiny.cfg yolov3-tiny.weights model_data/tiny_yolo.h5

這裏我使用的是yolo.y5進行的訓練。

注意修改train.py裏的classes_path,anchors_path,pretrained_path:

def _main():
    annotation_path = 'dataset/2007_train.txt'
    log_dir = 'logs/'
    classes_path = 'model_data/object_classes.txt'
    anchors_path = 'model_data/yolo_anchors.txt'
    class_names = get_classes(classes_path)
    num_classes = len(class_names)
    anchors = get_anchors(anchors_path)

    input_shape = (416, 416)
    pretrained_path = 'model_data/yolo.h5' 

    is_tiny_version = len(anchors)==6 # default setting
    if is_tiny_version:
        model = create_tiny_model(input_shape, anchors, num_classes,
            freeze_body=2, weights_path='model_data/tiny_yolo.h5')
    else:
        model = create_model(input_shape, anchors, num_classes,
            freeze_body=2, weights_path=pretrained_path)

運行train.py 即可開始訓練,訓練好的模型會存放在logs目錄下。

4、測試
(1)單張圖片測試
detect_image_test(img_path, out_path)
在這裏插入圖片描述
在這裏插入圖片描述
(2)本地視頻測試並保存
對應的yolo.py文件detect_video函數中vid = cv2.VideoCapture(“視頻路徑+視頻名+視頻後綴名”);

(3)電腦攝像頭實時測試
對應的yolo.py文件detect_video函數中vid = cv2.VideoCapture(0);

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