計(jì)算機(jī)視覺技術(shù)實(shí)戰(zhàn) 課件 項(xiàng)目3 目標(biāo)檢測:基于YOLOv8的口罩識(shí)別_第1頁
計(jì)算機(jī)視覺技術(shù)實(shí)戰(zhàn) 課件 項(xiàng)目3 目標(biāo)檢測:基于YOLOv8的口罩識(shí)別_第2頁
計(jì)算機(jī)視覺技術(shù)實(shí)戰(zhàn) 課件 項(xiàng)目3 目標(biāo)檢測:基于YOLOv8的口罩識(shí)別_第3頁
計(jì)算機(jī)視覺技術(shù)實(shí)戰(zhàn) 課件 項(xiàng)目3 目標(biāo)檢測:基于YOLOv8的口罩識(shí)別_第4頁
計(jì)算機(jī)視覺技術(shù)實(shí)戰(zhàn) 課件 項(xiàng)目3 目標(biāo)檢測:基于YOLOv8的口罩識(shí)別_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

項(xiàng)目3目標(biāo)檢測:基于YOLOv8的口罩識(shí)別教學(xué)目標(biāo)能力目標(biāo)(1)掌握目標(biāo)檢測數(shù)據(jù)集的預(yù)處理和可視化。(2)掌握數(shù)據(jù)標(biāo)注工具的安裝和使用。(3)掌握YOLOv8目標(biāo)檢測模型的訓(xùn)練操作。(4)掌握YOLOv8目標(biāo)檢測模型的推理操作。知識(shí)目標(biāo)(1)掌握解決目標(biāo)檢測任務(wù)的基本步驟和實(shí)際操作技能。(2)了解YOLOv8的原理與發(fā)展歷史。工程目錄

+--Project3_ObjectDetection/|+--dataset/||+--label_sample/

#標(biāo)注樣例數(shù)據(jù)|||+--images/|||+--json/

#xml標(biāo)簽文件目錄|||+--labels/

#yolo標(biāo)簽文件目錄||+--maskdataset/

#樣本數(shù)據(jù)集目錄|||+--images/|||+--label/

#xml標(biāo)簽文件目錄|||+--labels/

#yolo標(biāo)簽文件目錄|||--mask_detect.yaml|+--maskDetection_logs/|+--model/|

|--yolov8s.pt|--xml2yolo.py

#代碼3-1|--copy_txt_files.py

#代碼3-2|--data_load_and_show.ipynb

#代碼3-3|--json2yolo.py

#代碼3-4|--split_train_val.py

#代碼3-5|--create_yaml.py

#代碼3-6|--yolov8.ipynb

#代碼3-7、3-8右圖是項(xiàng)目的主要文件和目錄結(jié)構(gòu)。其中,dataset為存放數(shù)據(jù)集的目錄,model為存放模型文件的目錄,maskDetection_log為存放訓(xùn)練和評(píng)估日志文件的目錄。yolov8.ipynb本項(xiàng)目的模型訓(xùn)練與推理代碼文件,其余文件為數(shù)據(jù)處理文件。目錄2認(rèn)識(shí)YOLOv8框架1認(rèn)識(shí)數(shù)據(jù)集和數(shù)據(jù)標(biāo)注3模型訓(xùn)練與評(píng)估目錄2認(rèn)識(shí)YOLOv8框架3模型訓(xùn)練與評(píng)估1認(rèn)識(shí)數(shù)據(jù)集和數(shù)據(jù)標(biāo)注1.認(rèn)識(shí)數(shù)據(jù)集和數(shù)據(jù)標(biāo)注

任務(wù)目標(biāo)(1)了解virus-mask-dataset數(shù)據(jù)集的來源、收集方式和可視化展示。(2)掌握數(shù)據(jù)標(biāo)注工具的安裝和使用。1.1數(shù)據(jù)集介紹

virus-mask-dataset是一個(gè)公開在Github上的口罩檢測數(shù)據(jù)集,可用于檢測人員是否佩戴口罩。該數(shù)據(jù)集包含超過3500張已標(biāo)注的圖片,其中包括兩類標(biāo)簽:mask(佩戴口罩)和nomask(未佩戴口罩);標(biāo)簽文件格式為xml。virus-mask-dataset數(shù)據(jù)集是在全球新型冠狀病毒肆虐期間由開源者基于互聯(lián)網(wǎng)資源采集建立,并向社會(huì)開放,為實(shí)現(xiàn)當(dāng)時(shí)及今后可能的類似公共衛(wèi)生安全事件的智能管控,積累了數(shù)據(jù)資源。數(shù)據(jù)集來源本項(xiàng)目數(shù)據(jù)集的引用License如下:TheMITLicense(MIT)Copyright?[2020]akou,/hikariming/virus-mask-dataset/blob/master/LICENSE1.1數(shù)據(jù)集介紹

標(biāo)簽文件格式轉(zhuǎn)換defconvert(w,h,xmin,ymin,xmax,ymax):

"""

根據(jù)輸入的標(biāo)簽坐標(biāo)屬性轉(zhuǎn)換為YOLO標(biāo)注格式

args:w(float):圖片size的寬

h(float):圖片size的高

xmin(float):目標(biāo)矩形框的x軸最小值

ymin(float):目標(biāo)矩形框的y軸最小值

xmax(float):目標(biāo)矩形框的x軸最大值

ymax(float):目標(biāo)矩形框的y軸最大值

return:(tuple):YOLO標(biāo)注格式——?dú)w一化后的標(biāo)注矩形框中心坐標(biāo)(x,y)和標(biāo)注矩形框?qū)捀撸╳,h)

"""

......

defxml2yolo(xml_file_path,yolo_save_dir):

"""

把輸入的xml格式標(biāo)簽文件轉(zhuǎn)換為yolo格式標(biāo)簽文件并保存到指定路徑

args:xml_file_path(str):xml格式標(biāo)簽文件路徑

yolo_save_dir(str):yolo格式標(biāo)簽文件保存路徑

output:

在指定的輸出目錄中生成輸出文件

"""

......因?yàn)榭谡謾z測數(shù)據(jù)集的標(biāo)簽文件格式為xml,在進(jìn)行YOLOv8模型訓(xùn)練之前需要將標(biāo)簽文件轉(zhuǎn)換為yolo格式。xml2yolo.py代碼文件將數(shù)據(jù)集的所有xml格式的標(biāo)簽文件轉(zhuǎn)換為yolo格式的標(biāo)簽文件。重點(diǎn)理解xml2yolo和convert函數(shù),前者實(shí)現(xiàn)把輸入的xml格式標(biāo)簽文件轉(zhuǎn)換為yolo格式標(biāo)簽文件并保存到指定路徑,后者把根據(jù)輸入的標(biāo)簽坐標(biāo)屬性轉(zhuǎn)換為YOLO標(biāo)注格式。1.1數(shù)據(jù)集介紹

數(shù)據(jù)樣例展示data_load_and_show.ipynb代碼文件實(shí)現(xiàn)了以YOLO標(biāo)簽文件格式為例,對任務(wù)3-2所標(biāo)注的數(shù)據(jù)樣例的展示。輸出結(jié)果如下圖所示,目標(biāo)檢測的對象是由一個(gè)矩形框給標(biāo)注出來,并在上方顯示標(biāo)簽名稱。1.2數(shù)據(jù)標(biāo)注工具應(yīng)用

LabelMe是一款廣泛用于計(jì)算機(jī)視覺領(lǐng)域的開源圖像標(biāo)注工具。LabelMe支持多種標(biāo)注類型,包括矩形框、多邊形、點(diǎn)標(biāo)記等。這使得它適用于各種不同類型的圖像標(biāo)注任務(wù),如目標(biāo)檢測、語義分割和關(guān)鍵點(diǎn)檢測。LabelMe提供了用戶友好的圖形用戶界面,使標(biāo)注變得容易上手。同時(shí),LabelMe支持多個(gè)操作系統(tǒng),包括Windows、Linux和macOS。LabelMe簡介與安裝執(zhí)行下面的安裝命令進(jìn)行LabelMe的安裝。其中,最后一行的意思是也可以從官方網(wǎng)站下載單獨(dú)的可執(zhí)行文件。condacreate--name=labelmepython=3condaactivatelabelmepipinstalllabelme#orinstallstandaloneexecutable/appfrom:#/wkentaro/labelme/releases

labelme安裝完成后,執(zhí)行下面的命令啟動(dòng)LabelMe界面:1.2數(shù)據(jù)標(biāo)注工具應(yīng)用

LabelMe標(biāo)注演示--選擇需要標(biāo)注的目錄1.2數(shù)據(jù)標(biāo)注工具應(yīng)用

LabelMe標(biāo)注演示--更改標(biāo)簽文件的保存目錄1.2數(shù)據(jù)標(biāo)注工具應(yīng)用

LabelMe標(biāo)注演示--開始矩形框標(biāo)注1.2數(shù)據(jù)標(biāo)注工具應(yīng)用

LabelMe標(biāo)注演示--開始矩形框標(biāo)注1.2數(shù)據(jù)標(biāo)注工具應(yīng)用

LabelMe標(biāo)注演示--設(shè)置自動(dòng)保存并點(diǎn)擊下一張標(biāo)簽文件格式轉(zhuǎn)換defconvert(w,h,xmin,ymin,xmax,ymax):

"""

根據(jù)輸入的標(biāo)簽坐標(biāo)屬性轉(zhuǎn)換為YOLO標(biāo)注格式

args:w(float):圖片size的寬

h(float):圖片size的高

xmin(float):目標(biāo)矩形框的x軸最小值

ymin(float):目標(biāo)矩形框的y軸最小值

xmax(float):目標(biāo)矩形框的x軸最大值

ymax(float):目標(biāo)矩形框的y軸最大值

return:(tuple):YOLO標(biāo)注格式——?dú)w一化后的標(biāo)注矩形框中心坐標(biāo)(x,y)和標(biāo)注矩形框?qū)捀撸╳,h)

"""

......

defjson2yolo(json_file_path,yolo_save_dir):

"""

把輸入的json格式標(biāo)簽文件轉(zhuǎn)換為yolo格式標(biāo)簽文件并保存到指定路徑

args:json_file_path(str):json格式標(biāo)簽文件路徑

yolo_save_dir(str):yolo格式標(biāo)簽文件保存路徑

output:

在指定的輸出目錄中生成輸出文件

"""

......標(biāo)注完畢后,因?yàn)長abelMe默認(rèn)的標(biāo)簽保存格式為JSON,通過json2yolo.py代碼文件將JSON格式標(biāo)簽轉(zhuǎn)換為YOLO格式。1.2數(shù)據(jù)標(biāo)注工具應(yīng)用

目錄3模型訓(xùn)練與評(píng)估1認(rèn)識(shí)數(shù)據(jù)集和數(shù)據(jù)標(biāo)注2認(rèn)識(shí)YOLOv8框架2.認(rèn)識(shí)YOLOv8框架

任務(wù)目標(biāo)(1)了解YOLOv8框架的基本原理。(2)掌握YOLOv8框架的安裝。2.1YOLOv8目標(biāo)檢測框架簡介

YOLOv8由ultralytics公司在2023年1月10號(hào)開源,目前支持圖像分類、目標(biāo)檢測、實(shí)例分割和關(guān)鍵點(diǎn)檢測任務(wù)。按照官方描述,YOLOv8是一個(gè)SOTA模型,在以前YOLO版本的成功基礎(chǔ)上,進(jìn)行了改進(jìn)并引入了新的功能,進(jìn)一步提升了性能和靈活性。同時(shí),YOLOv8提供在COCO數(shù)據(jù)集上預(yù)訓(xùn)練的不同規(guī)模參數(shù)的預(yù)訓(xùn)練檢測模型,可以滿足不同場景的需求,如下表所示。模型名稱尺寸(像素)mAPval50-95速度(毫秒)CPUONNX速度(毫秒)A100TensorRT參數(shù)量(M)每秒浮點(diǎn)運(yùn)算次數(shù)(B)YOLOv8n64037.380.40.993.28.7YOLOv8s64044.9128.41.211.228.6YOLOv8m64050.2234.71.8325.978.9YOLOv8l64052.9375.22.3943.7165.2YOLOv8x64053.9479.13.5368.2257.82.1YOLOv8目標(biāo)檢測框架簡介

YOLOv8采用的是Mosaic數(shù)據(jù)增強(qiáng)方法。Mosaic數(shù)據(jù)增強(qiáng)的基本思想是將四張不同的圖像拼接成一張新的圖像,作為模型的輸入。拼接的過程中,需要保證每張圖像的目標(biāo)標(biāo)簽不變,同時(shí)調(diào)整目標(biāo)的位置和尺寸(代碼已集成),如圖3-8所示。圖3-8

Mosaic數(shù)據(jù)增強(qiáng)方法示例圖(來自于YOLOv4論文)2.2YOLOv8目標(biāo)檢測的性能指標(biāo)

(1)IoU(IntersectionoverUnion):交并比,是衡量算法產(chǎn)生的目標(biāo)候選框(candidatebound)與原標(biāo)記框(groundtruthbound)重疊程度的一個(gè)指標(biāo)。IoU的計(jì)算公式為

IoU=Intersection/Union,其中Intersection表示目標(biāo)候選框與真實(shí)目標(biāo)框(原標(biāo)記框)的交集區(qū)域的面積,Union表示二者的并集區(qū)域的面積,具體如圖3-9所示。圖3-9

IoU計(jì)算公式圖示2.2YOLOv8目標(biāo)檢測的性能指標(biāo)

(2)P-R曲線:以精確率(Precision)作為縱坐標(biāo)、召回率(Recall)作為橫軸坐標(biāo)的二維曲線。P-R曲線所圍起來的面積就是AP(AveragePrecision)值,AP值越高代表模型精度越高。(3)mAP(meanAveragePrecision):平均精確率的均值,是目標(biāo)檢測中最常用的一個(gè)綜合性能指標(biāo)。它首先計(jì)算每個(gè)類別的AP(AveragePrecision),然后取所有類別的AP的均值作為最終的mAP。mAP能夠更全面地評(píng)估模型在不同類別上的檢測性能。如圖3-10所示為YOLOv8訓(xùn)練器產(chǎn)生的P-R曲線圖,圖中顯示了每個(gè)類別的P-R曲線和AP值,其中“allclasses0.696mAP@0.5”表示在IoU閾值為0.5的情況下綜合所有類別的mAP值為0.696。圖3-10

YOLOv8訓(xùn)練器產(chǎn)生的P-R曲線圖(0代表mask,1代表nomask)2.3YOLOv8的安裝

YOLOv8的安裝非常簡單,執(zhí)行以下命令安裝即可(建議安裝前先激活虛擬環(huán)境):pipinstallultralytics目錄3模型訓(xùn)練與評(píng)估1認(rèn)識(shí)數(shù)據(jù)集和數(shù)據(jù)標(biāo)注2認(rèn)識(shí)YOLOv8框架3.模型訓(xùn)練與評(píng)估

任務(wù)目標(biāo)(1)掌握標(biāo)簽文件xml格式轉(zhuǎn)yolo格式的用法。(2)掌握手動(dòng)劃分圖像數(shù)據(jù)集的方法。(3)掌握生成YOLOv8配置文件的方法。(4)掌握YOLOv8目標(biāo)檢測的訓(xùn)練和調(diào)參。(5)掌握YOLOv8目標(biāo)檢測的推理。3.1數(shù)據(jù)準(zhǔn)備

劃分訓(xùn)練驗(yàn)證對#定義圖片數(shù)據(jù)文件路徑current_directory=os.path.dirname(__file__)img_dir=os.path.join(current_directory,r"dataset\maskdataset\images")

#把所有的圖片數(shù)據(jù)文件以4:1比例劃分訓(xùn)練驗(yàn)證對total_img_lst=os.listdir(img_dir)train_percent=0.8num=len(total_img_lst)train_num=int(num*train_percent)train_img_list=random.sample(total_img_lst,train_num)#隨機(jī)取八成數(shù)據(jù)為訓(xùn)練集val_img_list=[imgforimgintotal_img_lstifimgnotintrain_img_list]

#分別保存train.txt和val.txttrain_txt_dir=r"dataset\maskdataset\train.txt"val_txt_dir=r"dataset\maskdataset\val.txt"train_txt_path=os.path.join(current_directory,train_txt_dir)val_txt_path=os.path.join(current_directory,val_txt_dir)withopen(train_txt_path,'w',encoding='utf8')astrain_txt:

forimgintrain_img_list:img_path=os.path.join(img_dir,img)#保存絕對路徑

train_txt.write(img_path+'\n')

withopen(val_txt_path,'w',encoding='utf8')asval_txt:

forimginval_img_list:img_path=os.path.join(img_dir,img)#保存絕對路徑

val_txt.write(img_path+'\n')print("總文件數(shù):",len(total_img_lst))print("訓(xùn)練文件數(shù):",len(train_img_list))print("驗(yàn)證文件數(shù):",len(val_img_list))通過代碼split_train_val.py對數(shù)據(jù)集進(jìn)行訓(xùn)練驗(yàn)證對劃分,同時(shí)把對應(yīng)的文件路徑保存到訓(xùn)練文件train.txt和訓(xùn)練文件val.txt,為下一步訓(xùn)練任務(wù)做準(zhǔn)備。輸出結(jié)果:總文件數(shù):

3539訓(xùn)練文件數(shù):

2831驗(yàn)證文件數(shù):

7083.1數(shù)據(jù)準(zhǔn)備

創(chuàng)建yaml配置文件通過代碼create_yaml.py創(chuàng)建yaml配置文件,YOLOv8模型訓(xùn)練時(shí)則根據(jù)此配置文件設(shè)置訓(xùn)練文件路徑、驗(yàn)證文件路徑、標(biāo)簽類別的數(shù)量和標(biāo)簽名稱列表。importosimportrandom

current_directory=os.path.dirname(__file__)#如果是在交互式環(huán)境中運(yùn)行,也可以使用下面的方式獲取當(dāng)前目錄#current_directory=os.getcwd()yaml_file=r"dataset\maskdataset\mask_detect.yaml"yaml_file_path=os.path.join(current_directory,yaml_file)

train_txt_dir=r"dataset\maskdataset\train.txt"val_txt_dir=r"dataset\maskdataset\val.txt"train_txt_path=os.path.join(current_directory,train_txt_dir)val_txt_path=os.path.join(current_directory,val_txt_dir)

withopen(yaml_file_path,'w',encoding='utf8')asdata_yaml:data_yaml.write('train:'+train_txt_path+'\n')

#指定訓(xùn)練文件路徑

data_yaml.write('val:'+val_txt_path+'\n')#指定驗(yàn)證文件路徑

data_yaml.write('nc:2'+'\n')#指定標(biāo)簽類別的數(shù)量

data_yaml.write("names:['0','1']"+'\n')#指定標(biāo)簽名稱列表3.2模型訓(xùn)練

在YOLOv8目標(biāo)檢測框架中,模型訓(xùn)練過程已被封裝為訓(xùn)練函數(shù)train(),操作相對簡單。fromultralyticsimportYOLO

model=YOLO('yolov8s.pt')

#加載從官網(wǎng)下載的s規(guī)模預(yù)訓(xùn)練模型文件data_yaml=r"dataset\maskdataset\mask_detect.yaml"#定義數(shù)據(jù)集配置文件路徑results=model.train(data=data_yaml,

task='detect',

#訓(xùn)練任務(wù)為目標(biāo)檢測

epochs=5,#訓(xùn)練迭代次數(shù)設(shè)置為5

imgsz=640,#圖片大小設(shè)置為640

batch=16,#batch_size設(shè)置為16

device='cpu',

#設(shè)置訓(xùn)練設(shè)備為cpu

project='maskDetection_logs',

#設(shè)置訓(xùn)練日志保存的路徑名稱

optimizer='auto'#優(yōu)化算法設(shè)置為自動(dòng)選擇)3.3模型推理

加載訓(xùn)練完的最佳模型對測試數(shù)據(jù)進(jìn)行推理:model=YOLO(r'maskDetection_logs\train5\weights\best.pt')#加載訓(xùn)練的最佳模型results=model('./dataset/label_sample/images',#待推理預(yù)測圖片

project='maskDetection_logs',#設(shè)置訓(xùn)練日志保存的路徑名稱

save=True,#保存推理結(jié)果圖片

save_txt=True,#保存推理結(jié)果到標(biāo)簽文件

save_conf=True,#保存置信度到標(biāo)簽文件(每行最后的小數(shù))

imgsz=640,#resize圖片大小,越大預(yù)測效果越好,但推理時(shí)長越長

conf=0.4#只輸出超過置信度的推理結(jié)果)輸出結(jié)果:image1/3D:\CV\Preject3_ObjectDetection\project3\dataset\label_sample\images\20231122153125.jpg:640x48010,408.1msimage2/3D:\CV\Preject3_ObjectDetection\project3\dataset\label_sample\images\20231122153253.jpg:640x48010,459.3msimage3/3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論