YOLOv4 物體/目標(biāo)檢測(cè)之實(shí)戰(zhàn)篇(Windows系統(tǒng)、Python3、TensorFlow2版本)

      網(wǎng)友投稿 1893 2025-03-31

      前言


      基于YOLO進(jìn)行物體檢測(cè)、對(duì)象識(shí)別,在搭建好開(kāi)發(fā)環(huán)境后,先和大家進(jìn)行實(shí)踐應(yīng)用中,體驗(yàn)YOLOv4物體/目標(biāo)檢測(cè)效果和魅力;同時(shí)逐步了解YOLOv4的不足和優(yōu)化思路。

      YOLOv4 在COCO上,可達(dá)43.5% AP,速度高達(dá) 65 FPS!YOLOv4相對(duì)YOLOv3沒(méi)有算法層面的創(chuàng)新,主要是訓(xùn)練技巧的更新。YOLOv4比 Efficient Det快兩倍并且性能相當(dāng)。將YOLOV3的AP和FPS分別提高了10%和12%。

      目錄

      一、開(kāi)發(fā)環(huán)境參數(shù)

      二、YOLOv4 的物體/目標(biāo)檢測(cè)效果:

      三、體驗(yàn)YOLOv4物體/目標(biāo)檢測(cè)

      1)下載代碼,打開(kāi)工程

      2)下載權(quán)重文件

      3)權(quán)重文件應(yīng)用到工程

      4)圖片目標(biāo)檢測(cè)

      5)視頻文件目標(biāo)檢測(cè)

      6)攝像頭實(shí)時(shí)目標(biāo)檢測(cè)

      四、核心代碼之調(diào)用YOLOv4模型

      五、分析YOLOv4目標(biāo)檢測(cè)

      1)相對(duì)YOLOv3改進(jìn)方面

      2)YOLOv4訓(xùn)練的技巧

      3)YOLOv4框架

      一、開(kāi)發(fā)環(huán)境參數(shù)

      系統(tǒng):Windows? ? ???編程語(yǔ)言:Python 3.8

      深度學(xué)習(xí)框架:TensorFlow 2.3? ? ? ??整合開(kāi)發(fā)環(huán)境:Anaconda? ? ? ??開(kāi)發(fā)代碼IDE:PyCharm

      主要使用TensorFlow2.3、opencv-python4.4.0、Pillow、matplotlib?等依賴(lài)庫(kù)。

      詳情請(qǐng)參考我的另一篇博客:YOLO實(shí)踐應(yīng)用之搭建開(kāi)發(fā)環(huán)境(Windows系統(tǒng)、Python 3.8、TensorFlow2.3版本)

      二、YOLOv4 的物體/目標(biāo)檢測(cè)效果:

      1)有一只小狗被檢測(cè)出來(lái):

      使用綠色的框框,把小狗的所在位置框出來(lái),并在框框上方注釋標(biāo)簽(類(lèi)別 置信度)。比如小狗檢測(cè)出的標(biāo)簽是dog,置信度是0.99,即有99%的把握認(rèn)為是dog?狗。

      在左上角有Track Total、Track Count 這是用來(lái)統(tǒng)計(jì)跟蹤目標(biāo)的,由于是圖片的目標(biāo)檢測(cè),所以它們是為0的;如果是視頻或?qū)崟r(shí)目標(biāo)檢測(cè),能顯示跟蹤目標(biāo)的信息。

      2)兩位橄欖球運(yùn)動(dòng)員同時(shí)被檢測(cè)出來(lái):

      左邊運(yùn)動(dòng)員被檢測(cè)出是person,0.95;有95%的把握認(rèn)為是person?人;

      右邊運(yùn)動(dòng)員被檢測(cè)出是person,0.98;有98%的把握認(rèn)為是person?人;

      3)在復(fù)雜的十字路口,有許多行人、車(chē)輛、自行車(chē)、交通燈被檢測(cè)出來(lái)了:

      大家可以看到大部分的行人、汽車(chē)是被檢測(cè)出來(lái)了,存在小部分沒(méi)有被檢測(cè)出來(lái);哈哈看到廣告牌上的汽車(chē),也被識(shí)別為car 汽車(chē)(83%的把握)。如果是做特定場(chǎng)景的目標(biāo)檢測(cè),建議大家后續(xù)采購(gòu)特定場(chǎng)景的數(shù)據(jù),重新訓(xùn)練網(wǎng)絡(luò),生成穩(wěn)定且高精度的模型,保存權(quán)重文件,便于后續(xù)使用。

      看左上角的統(tǒng)計(jì)信息,能看到汽車(chē)檢測(cè)到5輛,行人檢測(cè)到14位,自行車(chē)檢測(cè)到1輛,交通燈設(shè)備3臺(tái),太陽(yáng)傘3把,手提包1個(gè)。

      4)下面是玩滑板的場(chǎng)景,能看到人和滑板都被檢測(cè)出來(lái)了:

      YOLOv4 物體/目標(biāo)檢測(cè)之實(shí)戰(zhàn)篇(Windows系統(tǒng)、Python3、TensorFlow2版本)

      看左上角的統(tǒng)計(jì)信息,能看到人檢測(cè)到5位,滑板4個(gè)。

      三、體驗(yàn)YOLOv4物體/目標(biāo)檢測(cè)

      1)下載代碼,打開(kāi)工程

      先到githug下載代碼,然后解壓工程,然后使用PyCharm工具打開(kāi)工程;

      github代碼-:

      https://github.com/guo-pu/Deep-Sort-YOLOv4-master_V1.0

      送人玫瑰,手留余香;各位大佬點(diǎn)一下github項(xiàng)目的星星Star,那就太感謝了(●ˇ?ˇ●)

      使用PyCharm工具打開(kāi)工程:

      打開(kāi)后的頁(yè)面是這樣的:

      【選擇開(kāi)發(fā)環(huán)境】

      文件(file)——>設(shè)置(setting)——>項(xiàng)目(Project)——>Project Interpreters? ?選擇搭建的開(kāi)發(fā)環(huán)境;

      然后先點(diǎn)擊Apply,等待加載完成,再點(diǎn)擊OK;

      2)下載權(quán)重文件

      在我網(wǎng)盤(pán)取以下紅色框的三個(gè)文件:

      market1501.pb、mars-small128.pb 這兩個(gè)是目標(biāo)檢測(cè)的特征文件(必須)

      yolov4.weights 是網(wǎng)絡(luò)的權(quán)重文件,由它生成yolov4.h5的。

      鏈接:https://pan.baidu.com/s/1qsi_rSqkWw0-pS3CPe-Mfg?? ? 提取碼:11d0

      下載好的文件,放到工程的model_data 目錄中

      3)權(quán)重文件應(yīng)用到工程

      在Pycharm的命令終端,執(zhí)行如下命令,把訓(xùn)練好的權(quán)重進(jìn)行轉(zhuǎn)換,并應(yīng)用到工程中。

      【yolov4.weights】

      python convertToH5.py --input_size 608 --min_score 0.3 --iou 0.5 --model_path model_data/yolov4.h5 --weights_path model_data/yolov4.weights

      執(zhí)行命令成功后,能看到生成yolov4.h5

      4)圖片目標(biāo)檢測(cè)

      1)檢測(cè)圖片中的目標(biāo):

      python detect_image.py --picture test_picture/dog.png --min_score 0.6 --model_yolo model _data/yolov4.h5 --model_feature model_data/market1501.pb

      注意:min_score 設(shè)置置信度過(guò)濾,低于0.6置信度不會(huì)顯示在圖片中,能過(guò)濾低置信度目標(biāo)物體;這個(gè)參數(shù)根據(jù)項(xiàng)目需求來(lái)設(shè)定。例如想盡可能檢測(cè)出多些物體,那可以設(shè)置為 min_score 0.3 ;如果只想看到90%或以上置信度的物體,那可以設(shè)置為 min_score 0.9.

      model_feature 目標(biāo)檢測(cè)特征模型文件,如果是檢測(cè)小物體的建議使用mars-small128.pb,如果是中、大型物體建議使用market1501.pb

      運(yùn)行結(jié)果:

      看左上角的統(tǒng)計(jì)信息,能看到檢測(cè)到一只小狗;

      2)檢測(cè)街道的目標(biāo):

      python detect_image.py --picture test_picture/street.png --min_score 0.3 --model_yolo mo del_data/yolov4.h5 --model_feature model_data/market1501.pb

      看左上角的統(tǒng)計(jì)信息,能看到汽車(chē)檢測(cè)到5輛,行人檢測(cè)到14位,自行車(chē)檢測(cè)到1輛,交通燈設(shè)備3臺(tái),太陽(yáng)傘3把,手提包1個(gè)。

      5)視頻文件目標(biāo)檢測(cè)

      python detect_video_tracker.py --video test.mp4 --min_score 0.6 --model_yolo model_data/yolov4.h5 --model_feature model_data/market1501.pb

      備注:test.mp4 是要檢測(cè)的視頻文件名稱(chēng)

      6)攝像頭實(shí)時(shí)目標(biāo)檢測(cè)

      python detect_video_tracker.py --video 0 --min_score 0.6 --model_yolo model_data/yolov4.h5 --model_feature model_data/market1501.pb

      備注:0 電腦默認(rèn)的攝像頭設(shè)備號(hào),如果電腦有兩個(gè)攝像頭,那么系統(tǒng)自帶的是0,外接攝像頭是1

      四、核心代碼之調(diào)用YOLOv4模型

      detect_image.py 代碼:??# yolov4?對(duì)圖片進(jìn)行目標(biāo)檢測(cè)

      #! /usr/bin/env python # -*- coding: utf-8 -*- "目標(biāo)檢測(cè)主代碼 使用YOLOv4 檢測(cè)圖片中的不同目標(biāo)物體,默認(rèn)權(quán)重支持識(shí)別80種目標(biāo)" import time import cv2 import argparse import numpy as np from PIL import Image from yolo4.yolo import YOLO4 from deep_sort import preprocessing from deep_sort import nn_matching from deep_sort.detection import Detection from deep_sort.tracker import Tracker from deep_sort import generate_detections # 執(zhí)行命令 python detect_image.py --picture test.jpg --min_score 0.6 --model_yolo model_data/yolov4.h5 --model_feature model_data/market1501.pb # 外部參數(shù)配置 ''' picture 輸入圖片的名稱(chēng)( .jpg 或 .png 等格式的圖片) min_score 設(shè)置置信度過(guò)濾,低于0.6置信度不會(huì)顯示在圖片中,能過(guò)濾低置信度目標(biāo)物體;這個(gè)參數(shù)根據(jù)項(xiàng)目需求來(lái)設(shè)定 model_yolo 權(quán)重文件轉(zhuǎn)為模型H5文件 model_feature 目標(biāo)跟蹤模型文件,如果是檢測(cè)小物體的建議使用mars-small128.pb,如果是中大物體建議使用market1501.pb ''' parser = argparse.ArgumentParser() parser.add_argument('--picture', type=str, default='test.jpg', help='picture file.') parser.add_argument('--min_score', type=float, default=0.6, help='Below this score (confidence level) is not displayed.') parser.add_argument('--model_yolo', type=str, default='model_data/yolo4.h5', help='Object detection model file.') parser.add_argument('--model_feature', type=str, default='model_data/market1501.pb', help='target tracking model file.') ARGS = parser.parse_args() box_size = 2 # 邊框大小 font_scale = 0.45 # 字體比例大小 if __name__ == '__main__': # Deep SORT - encoder = generate_detections.create_box_encoder(ARGS.model_feature, batch_size=1) metric = nn_matching.NearestNeighborDistanceMetric("cosine", ARGS.min_score, None) tracker = Tracker(metric) # 載入模型 yolo = YOLO4(ARGS.model_yolo, ARGS.min_score) # 讀取圖片 frame = cv2.imread(ARGS.picture) # 圖片轉(zhuǎn)換識(shí)別 image = Image.fromarray(frame) # bgr to rgb boxes, scores, classes, colors = yolo.detect_image(image) # 特征提取和檢測(cè)對(duì)象列表 features = encoder(frame, boxes) detections = [] for bbox, score, classe, color, feature in zip(boxes, scores, classes, colors, features): detections.append(Detection(bbox, score, classe, color, feature)) # 運(yùn)行非最大值抑制 boxes = np.array([d.tlwh for d in detections]) scores = np.array([d.score for d in detections]) indices = preprocessing.non_max_suppression(boxes, 1.0, scores) detections = [detections[i] for i in indices] # 追蹤器刷新 tracker.predict() tracker.update(detections) # 遍歷繪制跟蹤信息 track_count = 0 track_total = 0 for track in tracker.tracks: if not track.is_confirmed() or track.time_since_update > 1: continue y1, x1, y2, x2 = np.array(track.to_tlbr(), dtype=np.int32) # cv2.rectangle(frame, (y1, x1), (y2, x2), (255, 255, 255), box_size//4) cv2.putText( frame, "No. " + str(track.track_id), (y1, x1 - 5), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (255, 255, 255), box_size//2, lineType=cv2.LINE_AA ) if track.track_id > track_total: track_total = track.track_id track_count += 1 # 遍歷繪制檢測(cè)對(duì)象信息 totalCount = {} for det in detections: y1, x1, y2, x2 = np.array(det.to_tlbr(), dtype=np.int32) caption = '{} {:.2f}'.format(det.classe, det.score) if det.classe else det.score cv2.rectangle(frame, (y1, x1), (y2, x2), det.color, box_size) # 填充文字區(qū) text_size = cv2.getTextSize(caption, 0, font_scale, thickness=box_size)[0] cv2.rectangle(frame, (y1, x1), (y1 + text_size[0], x1 + text_size[1] + 8), det.color, -1) cv2.putText( frame, caption, (y1, x1 + text_size[1] + 4), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (50, 50, 50), box_size//2, lineType=cv2.LINE_AA ) # 統(tǒng)計(jì)物體數(shù) if det.classe not in totalCount: totalCount[det.classe] = 0 totalCount[det.classe] += 1 # 跟蹤統(tǒng)計(jì) trackTotalStr = 'Track Total: %s' % str(track_total) cv2.putText(frame, trackTotalStr, (10,20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (50, 0, 255), 1, cv2.LINE_AA) # 跟蹤數(shù)量 trackCountStr = 'Track Count: %s' % str(track_count) cv2.putText(frame, trackCountStr, (10,40), cv2.FONT_HERSHEY_SIMPLEX, 0.4, (50, 0, 255), 1, cv2.LINE_AA) # 識(shí)別類(lèi)數(shù)統(tǒng)計(jì) totalStr = "" for k in totalCount.keys(): totalStr += '%s: %d ' % (k, totalCount[k]) cv2.putText(frame, totalStr, (10,60), cv2.FONT_HERSHEY_SIMPLEX, 0.4, (50, 0, 255), 1, cv2.LINE_AA) # 保存檢測(cè)后圖片 filename = "output" + ARGS.picture cv2.imwrite(filename, frame) # 顯示目標(biāo)檢測(cè)效果 cv2.namedWindow("video_reult", cv2.WINDOW_AUTOSIZE) cv2.imshow("video_reult", frame) # waitkey代表讀取鍵盤(pán)的輸入,括號(hào)里的數(shù)字代表等待多長(zhǎng)時(shí)間,單位ms。 0代表一直等待 k = cv2.waitKey(0) if k == 27 & 0xFF == ord('q'): # 鍵盤(pán)上Esc鍵的鍵值 或輸入q鍵 # 任務(wù)完成后釋放所有內(nèi)容 cv2.destroyAllWindows()

      五、分析YOLOv4目標(biāo)檢測(cè)

      YOLOv4 在COCO上,可達(dá)43.5% AP,速度高達(dá) 65 FPS!YOLOv4相對(duì)YOLOv3沒(méi)有算法層面的創(chuàng)新,主要是訓(xùn)練技巧的更新。YOLOv4比 Efficient Det快兩倍并且性能相當(dāng)。將YOLOV3的AP和FPS分別提高了10%和12%。

      YOLOv4: Optimal Speed and Accuracy of Object Detection

      論文地址:https://arxiv.org/abs/2004.10934

      代碼地址:https://github.com/AlexeyAB/darknet

      1)相對(duì)YOLOv3改進(jìn)方面

      馬賽克數(shù)據(jù)增強(qiáng)。

      自對(duì)抗訓(xùn)練:對(duì)圖像做改變擾動(dòng),然后在這個(gè)圖像上訓(xùn)練。

      改進(jìn) attention方式。

      改進(jìn)通道的組合方式。

      Cross mini-batch Normal。

      等等

      總結(jié):使用 加權(quán)殘差連接(WRC),跨階段部分連接(CSP),交叉微型批處理規(guī)范化(CmBN),自對(duì)抗訓(xùn)練(SAT),Mish激活(Mish-activation),馬賽克數(shù)據(jù)增強(qiáng)(Mosaic data augmentation),CmBN,DropBlock正則化(DropBlock regularization)和CIoU損失函數(shù)(CIoU loss),并結(jié)合其中的一些功能來(lái)實(shí)現(xiàn)最新的結(jié)果:43.5%AP,MS COCO數(shù)據(jù)集的實(shí)時(shí)速度約為65 FPS,如下圖所示:

      YOLOv4 在COCO上,可達(dá)43.5% AP,速度高達(dá) 65 FPS。

      2)YOLOv4訓(xùn)練的技巧

      用于backbone的BoF:CutMix和Mosaic數(shù)據(jù)增強(qiáng),DropBlock正則化,Class label smoothing

      用于backbone的BoS:Mish激活函數(shù),CSP,MiWRC

      用于檢測(cè)器的BoF:CIoU-loss,CmBN,DropBlock正則化,Mosaic數(shù)據(jù)增強(qiáng),Self-Adversarial 訓(xùn)練,消除網(wǎng)格敏感性,對(duì)單個(gè)ground-truth使用多個(gè)anchor,Cosine annealing scheduler,最佳超參數(shù),Random training shapes

      用于檢測(cè)器的Bos:Mish激活函數(shù),SPP,SAM,PAN,DIoU-NMS

      YOLOv4部分組件——交叉小批量標(biāo)準(zhǔn)化(Cross mini-Batch Normalization)

      3)YOLOv4框架

      YOLOv4 =?CSPDarknet53+SPP+PAN+YOLOv3

      Backbone:CSPDarknet53

      Neck:SPP,PAN

      Head:YOLOv3

      希望對(duì)你有幫助。( ?? ω ?? )?

      YOLO物體/目標(biāo)檢測(cè)系列??https://blog.csdn.net/qq_41204464/category_10425913.html

      Python TensorFlow

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:如何加入空白腳注(加完腳注之后下別留有空白)
      下一篇:【億碼當(dāng)先,云聚金陵】華為云MVP胡宇輝:做難而正確的事
      相關(guān)文章
      亚洲最大无码中文字幕| 日本中文一区二区三区亚洲| 亚洲日本天堂在线| 精品亚洲国产成人| 亚洲综合精品一二三区在线| 亚洲av中文无码乱人伦在线咪咕| 亚洲成AV人网址| 国产偷国产偷亚洲高清在线| 久久精品国产亚洲av瑜伽| 亚洲欧美在线x视频| 亚洲Av永久无码精品黑人| 亚洲国产精品无码第一区二区三区| 亚洲一区AV无码少妇电影| 亚洲欧美黑人猛交群| 亚洲av无码一区二区三区天堂| 亚洲av无码片区一区二区三区| 亚洲va乱码一区二区三区| 亚洲精品亚洲人成在线播放| 亚洲精品第一国产综合野| 亚洲午夜成人精品无码色欲| 亚洲国产精品无码久久98| 欧美日韩亚洲精品| 亚洲精品乱码久久久久久不卡| 亚洲一区二区三区国产精品| 亚洲午夜国产精品无码| 久久夜色精品国产亚洲| 亚洲嫩模在线观看| 亚洲国产精品成人综合久久久 | 99人中文字幕亚洲区| 亚洲经典在线中文字幕| 亚洲乱码一区av春药高潮| 亚洲kkk4444在线观看| 亚洲国产成人AV在线播放| 亚洲国产av玩弄放荡人妇| 妇女自拍偷自拍亚洲精品| 国产亚洲精品拍拍拍拍拍| 亚洲大尺度无码专区尤物| 亚洲视频一区在线观看| 国产亚洲精品bv在线观看| 国产亚洲精品美女2020久久| 曰韩亚洲av人人夜夜澡人人爽|