精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用YOLO進行目標檢測 原創

發布于 2024-12-31 12:45
瀏覽
0收藏

前言

本章的學習內容,將以目標檢測為切入口,了解目標檢測流程,包括:數據標準、模型訓練以及模型預測。

圖片分類vs目標檢測

通過查看YOLO網站的task目錄,我們可以看到:在計算機視覺領域中,常見的任務包括目標檢測(detect)、語義分割(segment)、圖像分類(classify)、人體姿態估計(pose)、以及有向邊界框(Oriented Bounding Box,OBB)等。

  • 圖像分類(classify)

    a. 輸出是圖像所屬的類別或標簽,通常以概率分布的形式(例如:[0.2, 0.5, 0.1, 0.2])表示每個類別的概率。

    b. 模型會輸出每個類別的概率值,最終選擇概率最高的類別作為預測結果。

    c. 輸入是一張圖像,通常是固定大小的RGB圖像。

    d. 定義:圖片分類是指根據圖像的內容將其分為不同的類別或標簽。

    e. 輸入:

    f. 輸出:

  • 目標檢測(detect)

    a. 輸出是圖像中檢測到的所有物體的邊界框和類別信息。

    b. 通常是一個包含物體位置、類別和置信度的列表。

    c. 輸入是一張圖像,同樣是RGB圖像。

    d. 定義:目標檢測是指在圖像中檢測和定位物體的任務,同時識別物體的類別。

    e. 輸入:

    f. 輸出:

目標檢測的問題

使用YOLO進行目標檢測-AI.x社區

通過上圖可以看到,目標檢測會遇到以下問題:

  • 圖片中包含多個動物,并不能簡單的分類這張圖是長頸鹿還是斑馬;
  • 圖片中的動物所在的位置也是大小不同,位置不同;
  • ...

傳統算法的解決思路

在利用深度學習做物體檢測之前,傳統算法對于目標檢測通常分為3個階段:區域選取、特征提取和體征分類。

  • 區域選取:首先選取圖像中可能出現物體的位置,由于物體位置、大小都不固定,因此傳統算法通常使用滑動窗口(Sliding Windows)算法,但這種算法會存在大量的冗余框,并且計算復雜度高。

使用YOLO進行目標檢測-AI.x社區

  • 特征提取:在得到物體位置后,通常使用人工精心設計的提取器進行特征提取,如SIFT和HOG等。由于提取器包含的參數較少,并且人工設計的魯棒性較低,因此特征提取的質量并不高。

使用YOLO進行目標檢測-AI.x社區

  • 特征分類:最后,對上一步得到的特征進行分類,通常使用如SVM、AdaBoost的分類器。

深度學習的解決思路

Anchor-based(基于錨框)

定義:Anchor-based 方法通過在圖像上生成一組預定義的錨框(Anchor Boxes),然后利用這些錨框進行目標檢測。 流程

  1. 生成錨框:在圖像上生成一組不同尺寸和長寬比的錨框。
  2. 特征提取:通過卷積神經網絡提取圖像特征(套種圖片中的物體)。
  3. 預測:對每個錨框預測偏移量和目標類別信息。
  4. 篩選:通過非極大值抑制(NMS)等方法篩選出最終的檢測結果。

核心思想

  • 死框+修正量

20×20的錨框

使用YOLO進行目標檢測-AI.x社區

40×40的錨框

使用YOLO進行目標檢測-AI.x社區

80×80的錨框

使用YOLO進行目標檢測-AI.x社區

優點

  • 相對容易實現和訓練。
  • 可以處理多尺度目標和不同長寬比的目標。

缺點

  • 需要預定義大量的錨框,增加了計算復雜度和訓練難度。
  • 對于不規則形狀的目標可能不夠靈活。

Anchor-free(無錨框)

定義:Anchor-free 方法不依賴于預定義的錨框,而是直接預測目標的位置和類別信息。 流程

  1. 中心點檢測:首先,在圖像上“撒豆子”(也稱為“CenterNet”),即在圖像的每個位置(像素)處預測目標中心點的存在概率。這些中心點通常表示可能存在目標的位置。
  2. 邊界框預測:對于每個被預測為目標中心點的位置,模型會進一步預測目標的邊界框(向上下左右生長,套住要預測的問題)。
  3. 后處理:通過后處理算法(如非極大值抑制)來篩選和優化檢測結果,以獲得最終的目標檢測結果。

核心思想

  • 中心點 + 四個方向的生長

使用YOLO進行目標檢測-AI.x社區

優點

  • 更加靈活,可以適應各種目標形狀和尺度。
  • 減少了預定義錨框帶來的計算復雜度。

缺點

  • 相對 Anchor-based 方法,Anchor-free 方法可能需要更多的訓練數據和更復雜的網絡結構。
  • 在處理小目標或密集目標時可能性能略遜于 Anchor-based 方法。

目前,目標檢測基本使用anchor-free的方法。

目標檢測的兩種策略

目標檢測具體的開展策略有兩種:

方式

過程

代表

方式1

1. 先對輸入圖像進行切片。

2. 對每一片進行特征提取。

3. 對提取的特征進行分類和回歸。

MTCNN

方式2

1. 先對輸入圖像進行特征提取。

2. 對提取的特征進行切片。

3. 對每一片進行分類和回歸。

YOLO

兩個例子

獲取視頻頭內容進行目標檢測

from ultralytics import YOLO
import cv2

# 加載YOLO模型
model = YOLO("yolov8n.pt")

cap = cv2.VideoCapture(0)

while cap.isOpened():
# 讀取視頻幀
    ret, frame = cap.read()
ifnot ret:
break

# 使用YOLO模型檢測物體
    results = model(frame)

# 繪制預測結果
    img = results[0].plot()

# 顯示檢測結果
    cv2.imshow("frame", img)

if cv2.waitKey(1)==ord("q"):
break

# 釋放資源
cap.release()
cv2.destroyAllWindows()

運行以上代碼,YOLO可以將攝像頭中的視頻按幀逐幀檢測物體。

讀取圖片進行目標檢測

import cv2
from ultralytics import YOLO
import os

# 設置環境變量,解決OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized的問題
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

# 加載模型
model = YOLO("yolov8n.pt")# 使用預訓練模型權重

# 讀取圖片
image = cv2.imread("animal.png")

# 預測
results = model(image)

result = results[0]
img = result.plot()

from matplotlib import pyplot as plt

# 對對象進行可視化,從RGB轉換為BGR
plt.imshow(X=img[:,:,::-1])

運行結果:

使用YOLO進行目標檢測-AI.x社區

通過查看??result??的內容,可以得到:

使用YOLO進行目標檢測-AI.x社區

??cls??: 表示檢測到的物體類別,是一個包含類別標識號的張量。

例如:上例分別為類別22、22、22、23和0。這意味著模型在圖像中檢測到了不同類別的物體。

??conf??: 表示置信度,即模型對檢測結果的信心程度,是一個包含置信度值的張量。

例如:上例分別為[0.9189, 0.9098, 0.8850, 0.8815, 0.2930]表示模型對每個檢測結果的置信度,置信度值越高,表示模型對該檢測結果的信心程度越高。

??data??: 包含了檢測結果的詳細數據,如邊界框坐標、置信度、類別等信息。

例如:第一行數據[7.6884e+02, 5.6770e+02, 9.7418e+02, 7.7100e+02, 9.1892e-01, 22]表示一個邊界框的左上角和右下角坐標、置信度和類別。

??shape??: 結果張量的形狀。

例如:[5, 6]表示這個張量是一個二維張量,上圖中一共預測了5個目標檢測結果。

??xywh??: 表示邊界框的中心坐標、寬度和高度。

例如:[[871.5070, 669.3497, 205.3398, 203.3070], [322.5407, 673.7639, 251.3661, 181.0720], ...]表示了每個檢測結果的邊界框信息。

??xyxy??: 表示邊界框的左上角和右下角坐標。

例如:[[768.8371, 567.6962, 974.1769, 771.0032], [196.8576, 583.2280, 448.2238, 764.2999], ...]表示了每個檢測結果的邊界框的左上角和右下角坐標。

自定義模型訓練

以上的目標檢測都是基于預先訓練好的模型,如果想自主實現一個模型的訓練以及目標檢測,具體流程如下:

數據準備

為了更加接近實戰,我計劃在天池及飛槳社區找一份數據集進行目標檢測的模型訓練。

數據集地址:https://aistudio.baidu.com/datasetdetail/91732 

數據集簡述: 一個理想的智能零售結算系統應當能夠精準地識別每一個商品,并且能夠返回完整地購物清單及顧客應付的實際商品總價格。這是一份智能零售柜識別的圖片數據集,非常適用于進行目標檢測。

使用YOLO進行目標檢測-AI.x社區

數據分析

由于該數據集采用VOC格式,其內容形式與YOLOv8的格式不同,所以我們需要做相關的處理。

VOC數據集目錄格式:

我有一個VOC的目標檢測數據集,其目錄結構為:

VOC
|-Annotations
|-ori_000_XYGOC20200313162026456_1.xml
|-ori_000_XYGOC20200313162953549_1.xml
|-ori_001_11_0.xml
|-ori_001_4_0.xml
|-ori_001_6_0.xml
|-ori_t1_TEST20191101164758498_1.xml
|-ori_t1_TEST20191101164829232_1.xml
|-...
|-JPEGImages
|-ori_000_XYGOC20200313162026456_1.jpg
|-ori_000_XYGOC20200313162953549_1.jpg
|-ori_001_11_0.jpg
|-ori_001_4_0.jpg
|-ori_001_6_0.jpg
|-ori_t1_TEST20191101164758498_1.jpg
|-ori_t1_TEST20191101164829232_1.jpg
|-...
|-labels.txt
|-test_list.txt
|-train_list.txt
|-val_list.txt

# labels.txt的內容格式為如下:
3+2-2
3jia2
aerbeisi
anmuxi
aoliao
asamu
baicha
baishikele
...

# train_list.txt內容格式如下:
JPEGImages/ori_XYGOC2021042115092870201IK-4_0.jpg Annotations/ori_XYGOC2021042115092870201IK-4_0.xml
JPEGImages/ori_XYGOC2021010413165585501IK-3_0.jpg Annotations/ori_XYGOC2021010413165585501IK-3_0.xml

YOLOv8數據集的目錄結構

|-images
|-train
|-ori_000_XYGOC20200313162026456_1.jpg
...
|-val
|-ori_t1_TEST20191101164758498_1.jpg
...
|-lables
|-train
|-ori_000_XYGOC20200313162026456_1.txt
|-val
|-ori_t1_TEST20191101164829232_1.txt

數據轉換

1. 創建Dataset根目錄

import os

# 創建Dataset根目錄,同時按照YOLO的格式分別創建train和val目錄
defcreate_directories(base_dir):
    dirs =[
        os.path.join(base_dir,"images/train"),
        os.path.join(base_dir,"images/val"),
        os.path.join(base_dir,"labels/train"),
        os.path.join(base_dir,"labels/val")
]
fordirin dirs:
        os.makedirs(dir, exist_ok=True)

2. 讀取classes類別

def read_classes(classes_file):
"""
    從類別文件中讀取類別名稱,并返回類別名稱與索引的映射字典。

    參數:
    - classes_file (str): 類別文件路徑

    返回:
    - classes (dict): 類別名稱與索引的映射字典
    """
    classes ={}
withopen(classes_file,"r")as f:
        lines = f.readlines()
for index, line inenumerate(lines):
            class_name = line.strip()
            classes[index]= class_name
return classes

3. 讀取xml文件并轉換為yolo格式

def parse_xml(xml_path, classes_dict):
"""
    解析XML文件,獲取圖像的寬度、高度以及對象的類別和邊界框坐標。

    參數:
    - xml_path (str): XML文件路徑

    返回:
    - width (int): 圖像寬度
    - height (int): 圖像高度
    - objects (list): 包含對象信息的列表,每個對象信息包括類別和邊界框坐標
    """
    tree = ET.parse(xml_path)
    root = tree.getroot()
    size = root.find("size")
    width =int(size.find("width").text)
    height =int(size.find("height").text)
    objects =[]
for obj in root.findall("object"):
        name = obj.find("name").text
        label_index = get_label_index(name, classes_dict)
        bndbox = obj.find("bndbox")
        xmin =int(bndbox.find("xmin").text)
        ymin =int(bndbox.find("ymin").text)
        xmax =int(bndbox.find("xmax").text)
        ymax =int(bndbox.find("ymax").text)
        objects.append({"label_index": label_index,"xmin": xmin,"ymin": ymin,"xmax": xmax,"ymax": ymax})
return width, height, objects

defconvert_to_yolo_format(width, height, obj):
"""
    將對象信息轉換為適合YOLO格式的坐標。

    參數:
    - width (int): 圖像寬度
    - height (int): 圖像高度
    - obj (dict): 包含對象信息的字典,包括類別和邊界框坐標
    """
    x_center =(obj["xmin"]+ obj["xmax"])/2/ width
    y_center =(obj["ymin"]+ obj["ymax"])/2/ height
    w =(obj["xmax"]- obj["xmin"])/ width
    h =(obj["ymax"]- obj["ymin"])/ height
return x_center, y_center, w, h

4. 將xml文件轉換為txt文件

def write_txt_file(file_path, content):
"""
    創建或寫入內容到.txt文件
    
    參數:
    - file_path (str): 目標.txt文件路徑
    - content (str): 寫入文件的內容
    """
try:
ifnot os.path.exists(file_path):
open(file_path,'w').close()# 創建空的目標文件

withopen(file_path,"a")as f:
            f.write(content)
print(f"成功寫入文件 {file_path}")
exceptExceptionas e:
print(f"寫入文件時發生異常: {e}")


defprocess_VOC_data(root_dir, train_list_file, images_dst, labels_dst, classes_dict):
"""
    從VOC數據集中讀取訓練列表文件,解析xml文件并將圖像復制到目標目錄中,并將類別和bbox信息寫入標簽文件中。

    參數:
    - root_dir (str): VOC數據集的根目錄
    - train_list_file (str): 訓練列表文件路徑
    - image_folder (str): 圖像文件夾的相對路徑
    - images_dst (str): 圖像目標目錄
    - labels_dst (str): 標簽目標目錄
    """
withopen(train_list_file,"r")as f:
        lines = f.readlines()
# 逐行讀取列表文件
for line in lines:
            line = line.strip()
            image_path, xml_path = line.split(" ")
# 獲取xml文件絕對路徑
            xml_path = os.path.join(root_dir, xml_path)
# 獲取image文件絕對路徑
            image_path = os.path.join(root_dir, image_path)

            width, height, objects = parse_xml(xml_path, classes_dict)

            copy_image(image_path, images_dst)

for obj in objects:
                label_name = os.path.splitext(os.path.basename(image_path))[0]+".txt"
                label_dst = os.path.join(labels_dst, label_name)
                yolo_format = convert_to_yolo_format(width, height, obj)
                content =f"{obj['label_index']} {yolo_format[0]} {yolo_format[1]} {yolo_format[2]} {yolo_format[3]}\n"
                write_txt_file(label_dst, content)

5. 保存.txt文件到新目錄下,同時拷貝圖像

def copy_image(image_path, images_dst):
"""
    將圖像從原路徑復制到目標路徑。

    參數:
    - image_path (str): 原圖像路徑
    - images_dst (str): 目標圖像路徑
    """
    image_name = os.path.basename(image_path)
    image_dst = os.path.join(images_dst, image_name)

ifnot os.path.exists(image_path):
print(f"原圖像路徑 '{image_path}' 未找到文件")
return

if os.path.exists(image_dst):
print(f"目標路徑 '{image_dst}' 中已存在同名圖像文件")
return

try:
        shutil.copy(image_path, image_dst)
print(f"成功復制圖像 {image_name} 到目標目錄")
exceptExceptionas e:
print(f"拷貝圖像時發生異常: {e}")

完整代碼如下:

import xml.etree.ElementTreeas ET
import shutil
import os

# 創建Dataset根目錄,同時按照YOLO的格式分別創建train和val目錄
defcreate_directories(base_dir):
    dirs =[
        os.path.join(base_dir,"images/train"),
        os.path.join(base_dir,"images/val"),
        os.path.join(base_dir,"labels/train"),
        os.path.join(base_dir,"labels/val")
]
fordirin dirs:
        os.makedirs(dir, exist_ok=True)

defget_label_index(name, classes_dict):
"""
    根據類別名稱從類別字典中獲取對應的序號。

    參數:
    - name (str): 類別名稱
    - classes_dict (dict): 包含類別名稱和對應序號的字典

    返回:
    - label_index (int): 類別名稱對應的序號,如果不存在則返回-1
    """
    label_index =-1
for key, value in classes_dict.items():
if value == name:
            label_index = key
break
return label_index

defparse_xml(xml_path, classes_dict):
"""
    解析XML文件,獲取圖像的寬度、高度以及對象的類別和邊界框坐標。

    參數:
    - xml_path (str): XML文件路徑

    返回:
    - width (int): 圖像寬度
    - height (int): 圖像高度
    - objects (list): 包含對象信息的列表,每個對象信息包括類別和邊界框坐標
    """
    tree = ET.parse(xml_path)
    root = tree.getroot()
    size = root.find("size")
    width =int(size.find("width").text)
    height =int(size.find("height").text)
    objects =[]
for obj in root.findall("object"):
        name = obj.find("name").text
        label_index = get_label_index(name, classes_dict)
        bndbox = obj.find("bndbox")
        xmin =int(bndbox.find("xmin").text)
        ymin =int(bndbox.find("ymin").text)
        xmax =int(bndbox.find("xmax").text)
        ymax =int(bndbox.find("ymax").text)
        objects.append({"label_index": label_index,"xmin": xmin,"ymin": ymin,"xmax": xmax,"ymax": ymax})
return width, height, objects

defconvert_to_yolo_format(width, height, obj):
"""
    將對象信息轉換為適合YOLO格式的坐標。

    參數:
    - width (int): 圖像寬度
    - height (int): 圖像高度
    - obj (dict): 包含對象信息的字典,包括類別和邊界框坐標
    """
    x_center =(obj["xmin"]+ obj["xmax"])/2/ width
    y_center =(obj["ymin"]+ obj["ymax"])/2/ height
    w =(obj["xmax"]- obj["xmin"])/ width
    h =(obj["ymax"]- obj["ymin"])/ height
return x_center, y_center, w, h

defcopy_image(image_path, images_dst):
"""
    將圖像從原路徑復制到目標路徑。

    參數:
    - image_path (str): 原圖像路徑
    - images_dst (str): 目標圖像路徑
    """
    image_name = os.path.basename(image_path)
    image_dst = os.path.join(images_dst, image_name)

ifnot os.path.exists(image_path):
print(f"原圖像路徑 '{image_path}' 未找到文件")
return

if os.path.exists(image_dst):
print(f"目標路徑 '{image_dst}' 中已存在同名圖像文件")
return

try:
        shutil.copy(image_path, image_dst)
print(f"成功復制圖像 {image_name} 到目標目錄")
exceptExceptionas e:
print(f"拷貝圖像時發生異常: {e}")

defwrite_txt_file(file_path, content):
"""
    創建或寫入內容到.txt文件
    
    參數:
    - file_path (str): 目標.txt文件路徑
    - content (str): 寫入文件的內容
    """
try:
ifnot os.path.exists(file_path):
open(file_path,'w').close()# 創建空的目標文件

withopen(file_path,"a")as f:
            f.write(content)
print(f"成功寫入文件 {file_path}")
exceptExceptionas e:
print(f"寫入文件時發生異常: {e}")


defprocess_VOC_data(root_dir, train_list_file, images_dst, labels_dst, classes_dict):
"""
    從VOC數據集中讀取訓練列表文件,解析xml文件并將圖像復制到目標目錄中,并將類別和bbox信息寫入標簽文件中。

    參數:
    - root_dir (str): VOC數據集的根目錄
    - train_list_file (str): 訓練列表文件路徑
    - image_folder (str): 圖像文件夾的相對路徑
    - images_dst (str): 圖像目標目錄
    - labels_dst (str): 標簽目標目錄
    """
withopen(train_list_file,"r")as f:
        lines = f.readlines()
# 逐行讀取列表文件
for line in lines:
            line = line.strip()
            image_path, xml_path = line.split(" ")
# 獲取xml文件絕對路徑
            xml_path = os.path.join(root_dir, xml_path)
# 獲取image文件絕對路徑
            image_path = os.path.join(root_dir, image_path)

            width, height, objects = parse_xml(xml_path, classes_dict)

            copy_image(image_path, images_dst)

for obj in objects:
                label_name = os.path.splitext(os.path.basename(image_path))[0]+".txt"
                label_dst = os.path.join(labels_dst, label_name)
                yolo_format = convert_to_yolo_format(width, height, obj)
                content =f"{obj['label_index']} {yolo_format[0]} {yolo_format[1]} {yolo_format[2]} {yolo_format[3]}\n"
                write_txt_file(label_dst, content)

defread_classes(classes_file):
"""
    從類別文件中讀取類別名稱,并返回類別名稱與索引的映射字典。

    參數:
    - classes_file (str): 類別文件路徑

    返回:
    - classes (dict): 類別名稱與索引的映射字典
    """
    classes ={}
withopen(classes_file,"r")as f:
        lines = f.readlines()
for index, line inenumerate(lines):
            class_name = line.strip()
            classes[index]= class_name
return classes

defgenerate_coco8_yaml_content(dataset_root, train_images, val_images, classes):
"""
    生成類似COCO8數據集配置文件的內容
    
    參數:
    - dataset_root (str): 數據集根目錄路徑
    - train_images (str): 訓練圖像相對于根目錄的路徑
    - val_images (str): 驗證圖像相對于根目錄的路徑
    - classes (dict): 類別名稱與索引的映射字典
    
    返回:
    - content (str): COCO8數據集配置文件內容
    """
    content =f"path: ../datasets/{dataset_root} # dataset root dir\n"
    content +=f"train: {train_images} # train images (relative to 'path') 4 images\n"
    content +=f"val: {val_images} # val images (relative to 'path') 4 images\n"
    content +="test: # test images (optional)\n\n"
    content +="# Classes\n"
    content +="names:\n"

for index, class_name in classes.items():
        content +=f"  {index}: {class_name}\n"

return content

defwrite_yaml_file(file_path, content):
"""
    創建或寫入內容到.yaml文件
    
    參數:
    - file_path (str): 目標.yaml文件路徑
    - content (str): 寫入文件的內容
    """
try:
ifnot os.path.exists(file_path):
open(file_path,'w').close()# 創建空的目標文件

withopen(file_path,"w")as f:
            f.write(content)
print(f"成功寫入文件 {file_path}")
exceptExceptionas e:
print(f"寫入文件時發生異常: {e}")


if __name__ =="__main__":
# VOC數據集根目錄
    root_dir ="VOC"
    train_list_file = os.path.join(root_dir,"train_list.txt")
    test_list_file = os.path.join(root_dir,"val_list.txt")
    classes_file ="VOC/labels.txt"

# 設置轉換后YOLO的圖像和標簽目錄
    dataset_root ="cabinet"
    train_images ="images/train"
    train_labels ="labels/train"
    val_images ="images/val"
    val_labels ="labels/val"
    yaml_file_name ="cabinet.yaml"

    images_dst_train = os.path.join(dataset_root, train_images)
    labels_dst_train = os.path.join(dataset_root, train_labels)

    images_dst_test = os.path.join(dataset_root, val_images)
    labels_dst_test = os.path.join(dataset_root, val_labels)

    yaml_file = os.path.join(dataset_root, yaml_file_name)

# 創建YOLO數據集目錄
    create_directories(dataset_root)
# 讀取類別文件
    classes = read_classes(classes_file)

# 轉換訓練數據集
    process_VOC_data(root_dir, train_list_file, images_dst_train, labels_dst_train, classes)
# 轉換測試數據集
    process_VOC_data(root_dir, test_list_file, images_dst_test, labels_dst_test, classes)

# 生成COCO8.yaml文件

    content = generate_coco8_yaml_content(dataset_root, train_images, val_images, classes)
    write_yaml_file(yaml_file, content)

以上轉換后的數據,我也打包上傳到網盤,可直接使用。 網盤地址:https://pan.baidu.com/s/1DyoK7r_74OzrRdoogrtTKw?pwd=q4ww

模型訓練

第一步:拷貝數據到YOLO的datasets目錄下

使用YOLO進行目標檢測-AI.x社區

第二步:拷貝cabinet.yaml文件到YOLO的cfg\datasets目錄下

使用YOLO進行目標檢測-AI.x社區

第三步:使用命令行訓練模型

from ultralytics import YOLO
import cv2

model = YOLO("yolov8n.yaml")

if __name__ =='__main__':
    result = model.train(data="cabinet.yaml",
                        epochs=10,
                        imgsz=640,
                        device='cuda',# 設備類型,這里是使用CUDA加速
# batch=2,           # 批量大小
                        workers=8# 數據加載的工作進程數
    )

訓練時顯存占用情況

使用YOLO進行目標檢測-AI.x社區

訓練結果: 訓練完畢后,在run\train*目錄下生成對應的訓練結果

使用YOLO進行目標檢測-AI.x社區

查看其中的驗證集顯示內容,看起來結果是正常的

使用YOLO進行目標檢測-AI.x社區

由于時間原因,本次就沒有開發相關的前端頁面來進行模型加載和圖片識別,但是可以想象:如果模型加載后同時開啟智能柜的攝像頭,那么就可以實時對售賣柜內的商品進行目標檢測。

內容小結

  • 目標檢測理論

     a. 在計算機視覺領域中,常見的任務包括目標檢測(detect)、圖像分類(classify)

     b. 目標檢測輸入是一張圖像,輸出是圖像中檢測到的所有物體的邊界框和類別信息

     c. 目標檢測在深度學習下有了新的發展,有??Anchor-based(基于錨框)???和??Anchor-free(無錨框)??兩種解決思路

     d. Anchor-based的核心思想是:??死框+修正量???,Anchor-free的核心思想是:??中心點 + 四個方向的生長??

     e. 相對 Anchor-based 方法,Anchor-free 方法可能需要更多的訓練數據和更復雜的網絡結構。

  • 目標檢測使用

     a. 使用YOLO進行目標檢測后,結果保存在results中,results中有??cls???(物體類別)、??conf???(表示置信度)、??data??(詳細數據,如邊界框坐標等)

     b. 如果要自定義數據集訓練,可以按照coco8的目錄結構和yaml文件準備數據

     c. 訓練數據集可以通過labelimg來進行標注,使用前需要建立獨立的虛擬環境

     d. 如果從網上下載的訓練集是VOC格式,需要對其進行轉換后訓練?


本文轉載自公眾號一起AI技術 作者:熱情的Dongming

原文鏈接:??https://mp.weixin.qq.com/s/ZhO7bNRyRyfYq3ncpCcvJw???

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
已于2024-12-31 14:30:48修改
收藏
回復
舉報
回復
相關推薦
亚洲a视频在线| gv天堂gv无码男同在线观看| 国产黄在线观看| 久久久精品五月天| 在线免费看av不卡| 九九九九九九九九| 青草在线视频| 久久毛片高清国产| 国产中文字幕91| 少妇人妻丰满做爰xxx| 国产91精品入| 欧美天堂亚洲电影院在线播放| 日韩高清dvd| 国产精品毛片一区视频播| 欧美视频网站| 亚洲性生活视频在线观看| 国产一伦一伦一伦| 亚洲1卡2卡3卡4卡乱码精品| 国产成人啪免费观看软件| 97精品一区二区三区| 调教驯服丰满美艳麻麻在线视频| 韩国一区二区三区视频| 亚洲高清视频在线| 亚洲高清视频在线观看| 免费国产黄色片| 久久精品久久久精品美女| 欧美成人精品xxx| 免费中文字幕av| 亚洲精品成a人ⅴ香蕉片| 夜夜嗨av一区二区三区四季av | 欧美三根一起进三p| 久久草在线视频| 欧美视频你懂的| 国产www免费| 国产永久免费高清在线观看视频| 国产一区二区调教| 97香蕉久久超级碰碰高清版 | 一卡二卡三卡视频| av午夜在线| 99国产精品99久久久久久| 国产精品视频免费在线| 日韩三级视频在线播放| 精品国产乱码久久久| 日韩国产中文字幕| 你懂得在线视频| 国产suv精品一区| 精品国偷自产国产一区| 日本wwwwwww| 91久久精品无嫩草影院| 日韩一区二区在线观看视频播放| 日本美女视频一区| 亚洲一区二区av| 欧美日韩国产一级| 亚洲综合激情视频| 国产麻豆一区二区三区| 91精品欧美福利在线观看| 在线观看国产一级片| 高清在线一区| 欧美人妇做爰xxxⅹ性高电影| 三级在线视频观看| 四虎国产精品免费久久5151| 欧美日高清视频| 国产精品igao网网址不卡| 精品一区二区三区免费看| 欧美一区二区三区人| 特种兵之深入敌后| 国产精品黄网站| 国产午夜精品久久久| av黄色免费网站| 欧美综合一区| 久久福利视频导航| 日本三级理论片| 销魂美女一区二区三区视频在线| 国产精品久久久久久久7电影| 在线观看中文字幕av| 国产在线视频不卡二| 国产精品久久久久久久久久直播| 亚洲av毛片成人精品| 久久精品人人做人人综合| 一区二区视频国产| 青春草免费在线视频| 色综合一个色综合亚洲| 四季av一区二区三区| 91成人午夜| 国产亚洲xxx| 欧美又粗又大又长| 性色一区二区三区| 国产综合香蕉五月婷在线| 亚洲国产精品久久久久久久 | 51午夜精品国产| 精品1卡二卡三卡四卡老狼| 亚洲区小说区| 久久亚洲精品国产亚洲老地址| 久久网中文字幕| 日韩高清在线一区| 91久久国产自产拍夜夜嗨| 青青色在线视频| 亚洲丝袜制服诱惑| 国产精品宾馆在线精品酒店| 伊人久久大香伊蕉在人线观看热v| 日韩欧美在线网站| 尤物视频最新网址| 欧美激情综合色综合啪啪| 国产精品91视频| а√天堂资源在线| 中文字幕精品在线不卡| 国产aaa免费视频| 欧美性生活一级| 亚洲精品有码在线| 欧美激情精品久久| 日本在线播放一区二区三区| 粉嫩av一区二区三区免费观看| yw视频在线观看| 五月婷婷综合网| 中文字幕12页| 成人黄色小视频| 97精品一区二区视频在线观看| 国产精品视频一区在线观看| 久久99精品视频| 日韩av一区二区三区美女毛片| 青青草视频在线免费直播| 欧美久久一二区| 免费网站在线高清观看| 中国女人久久久| av色综合网| 免费的黄网站在线观看| 色乱码一区二区三区88| 亚洲国产欧美视频| 狠狠色丁香久久综合频道| 成人乱人伦精品视频在线观看| 国产69久久| 日韩欧美中文在线| 熟女人妻在线视频| 国产精品久久久久久模特| 超碰97在线播放| 在线中文免费视频| 欧美一区二区三区免费大片| 欧美肥妇bbwbbw| 久热成人在线视频| 亚洲色图自拍| 开心久久婷婷综合中文字幕| 影音先锋欧美精品| 日本一区二区免费电影| 久久综合色天天久久综合图片| 欧美视频免费看欧美视频| 成人午夜888| 久热精品视频在线免费观看| 国产伦精品一区二区三区视频痴汉| 中文字幕av一区二区三区免费看| 国内外免费激情视频| 日韩电影在线观看完整免费观看| 久久久久久久久国产| 亚洲精华国产精华精华液网站| 亚洲人成伊人成综合网小说| 午夜免费福利视频在线观看| 日本道不卡免费一区| 成人h视频在线观看播放| 毛片在线不卡| 日韩欧美三级在线| 日本少妇做爰全过程毛片| 91在线精品一区二区| 国产美女三级视频| 精品国产欧美日韩| 国产综合色香蕉精品| av在线免费网站| 欧美成人a在线| 欧美福利视频一区二区| 久久久久久亚洲综合影院红桃| 久久久久国产精品熟女影院| 欧美日韩国产一区二区三区不卡 | 久久亚洲欧美日韩精品专区 | 操bbb操bbb| 中文字幕视频精品一区二区三区| 国产综合在线视频| 青青草视频在线观看| 欧美体内she精视频| 蜜臀久久精品久久久用户群体| 国产不卡视频一区| 能在线观看的av| 欧美电影免费| 国产精品久久久久免费| 欧美日韩123区| 在线观看国产成人av片| 99视频在线观看免费| 精品国产91久久久久久| 99在线视频免费| 懂色av中文一区二区三区| 激情五月开心婷婷| 日韩大片在线观看| 成人片在线免费看| 亚洲成人人体| 欧美激情乱人伦| chinese偷拍一区二区三区| 日韩精品综合一本久道在线视频| 五月天综合激情| 18涩涩午夜精品.www| 欧美大片免费播放器| 久久精品国产**网站演员| 久久99久久久久久| 国产最新精品| 国产精品久久久久久久免费大片| 欧美日韩在线精品一区二区三区激情综合 | 国产精品国产三级国产专业不 | 黄色av电影在线播放| 日韩av在线不卡| 国产精品永久久久久久久久久| 欧美日韩亚洲天堂| 中文字幕在线有码| 日本一区二区三区国色天香| 无码av免费精品一区二区三区| 热久久一区二区| 欧美在线观看www| 国产精品magnet| 制服诱惑一区| 狠狠操综合网| 精品中文字幕一区| 亚洲第一二区| 成人疯狂猛交xxx| 国产另类xxxxhd高清| 国产+人+亚洲| 欧美hdxxxxx| 理论片在线不卡免费观看| 成人在线高清视频| 亚洲精品影视在线观看| 天堂成人在线观看| 欧美v日韩v国产v| 97人妻精品一区二区三区动漫| 欧洲av在线精品| 国产三级精品三级在线观看| 亚洲国产精品视频| 久久网中文字幕| 一区二区三区久久久| 国产suv精品一区二区68| 国产精品久久久久三级| 先锋影音av在线| 国产嫩草影院久久久久| 无码国产69精品久久久久同性| 99国产精品国产精品久久| 无码精品一区二区三区在线播放| 不卡一区二区三区四区| 国产av一区二区三区传媒| 国产成人免费在线视频| 欧美老女人bb| 国产999精品久久久久久绿帽| 国产精品久久久久久久99| 韩国午夜理伦三级不卡影院| 在线观看免费av网址| 紧缚奴在线一区二区三区| 女同激情久久av久久| 国产又粗又猛又爽又黄91精品| 最新av免费在线观看| 精品一区二区三区免费毛片爱| 久久6免费视频| 国产精品亚洲第一区在线暖暖韩国| 亚洲黄色片免费看| 国产精品538一区二区在线| 欧洲成人午夜精品无码区久久| 国产精品资源在线看| 中文字幕久久久久久久| av在线播放一区二区三区| 国产精品无码电影| 久久精品欧美日韩| 99精品中文字幕| 一区二区三区四区中文字幕| 久久久综合久久| 精品久久久国产| 一区二区三区麻豆| 欧美绝品在线观看成人午夜影视| 国产肥老妇视频| 亚洲精品suv精品一区二区| 欧洲免费在线视频| www.亚洲免费视频| 久久大胆人体| 茄子视频成人在线| 欧美日韩va| 国产精品视频在线免费观看| 视频一区欧美| 欧美h视频在线观看| 亚洲日本黄色| 精品久久久久久中文字幕2017| 精品无人区卡一卡二卡三乱码免费卡 | 日韩av在线不卡| 97超碰人人在线| 久久久久女教师免费一区| 欧美电影免费观看| 91精品视频观看| 夜夜躁狠狠躁日日躁2021日韩| 亚洲电影免费| 中文在线一区| 久久久精品高清| 久久这里只有精品视频网| 性生交大片免费全黄| 午夜精品福利一区二区三区av| 亚洲一区二区三区高清视频| 欧美xxx久久| av电影在线观看一区二区三区| 久久91亚洲精品中文字幕| 欧美黑人一区| 国产精品永久入口久久久| 色琪琪久久se色| 又粗又黑又大的吊av| 国产一区二区三区免费播放| 黄色正能量网站| 一区二区三区在线观看国产| 国产精品第六页| 亚洲国产精品久久久久久| 老司机av在线免费看| 欧美在线一级视频| 77成人影视| 亚洲欧美日韩国产yyy| 国产精品免费看| 无码国产精品久久一区免费| 国产精品不卡一区二区三区| 日韩在线视频免费播放| 精品少妇一区二区三区在线视频| 成人在线高清视频| 日本中文字幕成人| 开心激情综合| 91视频 - 88av| 国产综合久久久久久久久久久久 | 欧美一二区在线观看| 国产免费黄色小视频| 国产精品综合视频| 男人晚上看的视频| 欧美图区在线视频| 国产污视频在线| 国产91网红主播在线观看| 嫩草国产精品入口| 日韩欧美国产综合在线| 国产精品夜夜嗨| 2025国产精品自拍| 91精品欧美综合在线观看最新 | 久久久久久久久国产精品| 清纯唯美激情亚洲| 欧美日韩中文字幕在线播放| 精品亚洲国内自在自线福利| 欧美日韩国产黄色| 欧美色图在线观看| 成人jjav| 国产欧美日韩亚洲精品| 欧美日韩在线播放视频| 91香蕉视频污版| 欧美极品美女视频| 成年人晚上看的视频| 国产一区二区三区丝袜| 日韩中文影院| 婷婷久久青草热一区二区| 国产一区二区你懂的| 亚洲av无码一区二区二三区| 欧美日韩国产一中文字不卡| 神马久久久久| 国产精品99久久久久久久久| 国产欧美日韩| 日韩中文字幕a| 亚洲欧美日韩国产一区二区三区 | 精品国产乱码久久| sm捆绑调教国产免费网站在线观看| 国产精品一区而去| 亚洲欧美久久久| 国产免费看av| 欧美日韩精品一区二区三区蜜桃 | 国产精品无av码在线观看| 日韩欧美二区| 麻豆传媒在线看| 午夜精品在线看| 国产资源在线看| 成人福利网站在线观看| 中出一区二区| av网页在线观看| 在线观看国产日韩| 国产在线激情视频| 国产欧美一区二区视频| 香蕉久久夜色精品国产| 成人信息集中地| 精品久久久久久最新网址| 卡通欧美亚洲| 午夜啪啪免费视频| 成人av在线一区二区三区| 亚洲 欧美 中文字幕| 久久精品小视频| 久久午夜影院| 最新天堂中文在线| 一区二区三区国产精品| 免费黄色在线视频网站| 成人福利免费观看| 国产亚洲精品久久久久婷婷瑜伽| 1024手机在线观看你懂的| 欧美成人猛片aaaaaaa| 美女网站视频一区| 国产资源第一页| 久久综合狠狠综合久久激情 | jizz内谢中国亚洲jizz| 亚洲综合激情五月| 91香蕉视频mp4| 国产精品一区二区av白丝下载 | 亚洲va在线观看| 久久91精品国产| 日韩欧美字幕| 国产三级国产精品| 欧美一级免费大片|