<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      AI訓練過程

      conda虛擬環(huán)境安裝以及數(shù)據(jù)標注軟件安裝

      image-20250422172821517

      創(chuàng)建虛擬環(huán)境
      conda create -n 名稱 python==3.8.5
      激活環(huán)境
      conda activate 名稱
      
      列出所有環(huán)境
      conda info --envs 或 conda env list
      
      退出虛擬環(huán)境
      conda deactivate
      
      刪除環(huán)境
      conda env remove --name 名稱
      
      下載資源包
      pip install 名稱 
      
      
      如果慢的情況下,可用鏡像源
      pip install package_name -i https://mirrors.aliyun.com/pypi
      這些常用的國內的鏡像包括:
      阿里云:https://mirrors.aliyun.com/pypi
      清華大學:https://pypi.tuna.tsinghua.edu.cn/simple
      中國科技大學:https://pypi.mirrors.ustc.edu.cn/simple/
      豆瓣(Douban):https://pypi.douban.com/simple/
       https://pypi.doubanio.com/simple
      

      店鋪牌匾識別系統(tǒng)需求文檔

      一、概述(作為了解的)

      項目背景:隨著店鋪數(shù)量的不斷增加,人工審核牌匹信息的工作量是巨大的而且容易出錯。
      為了提高效率和準確性,引入人工智能技術進行自動識別和分類。
      目標:開發(fā)一個基于人工智能的牌匾識別系統(tǒng),能夠自動識別和分類不同店鋪的牌圖片,提取關鍵信息(如:店鋪名稱提取、電話、營業(yè)時間、商場招牌名稱、自適應判斷、名稱判斷相關性判斷)。

      二、項目目標

      主要目標:
      1.自動識別牌匾上的文字。
      2.提取并存儲關鍵信息(如:店鋪名稱提取、電話、營業(yè)時間、商場招牌名稱、自適應判斷、名稱判斷相關性判斷)。
      3.生成結構化數(shù)據(jù),便于后續(xù)處理和分析。

      次要目標:
      1.提供友好的用戶界面,方便操作。
      2.支持多語言的識別。
      3.提供錯誤糾正和反饋機制。

      三、功能需求

      核心功能:
      圖片上傳:支持用戶上傳牌匾圖片。
      自動識別:自動識別圖片中的文字,并提取關鍵信息。
      信息展示:在界面上展示識別出的信息,供用戶確認和修正,信息存儲:將識別出的信息存儲到數(shù)據(jù)庫中。
      錯誤反饋:提供錯誤反饋機制,用戶可以手動糾正識別錯誤。

      擴展功能:
      批量處理:支持批量上傳和處理圖片。
      多語言支持:支持多種語言的識別和處理。
      歷史記錄:記錄每次識別的操作日志,便于追蹤和審計。

      四、數(shù)據(jù)需求

      數(shù)據(jù)來源:
      從公開數(shù)據(jù)集中獲取樣本數(shù)據(jù)(可花錢買)

      從實際業(yè)務中收集牌匾圖片數(shù)據(jù)。

      數(shù)據(jù)預處理:

      清洗和標注數(shù)據(jù)

      數(shù)據(jù)格式:
      圖片格式:jpg、jpeg、png

      標注格式:JSON、XML

      五、驗收標準

      功能驗收:
      系統(tǒng)能夠正確識別并提取牌匾上的文字。
      系統(tǒng)能夠處理多種語言的牌匾圖片。
      系統(tǒng)能夠批量處理圖片。
      系統(tǒng)能夠生成結構化數(shù)據(jù),并存儲在數(shù)據(jù)庫中。

      性能驗收:
      識別的準確率:95%以上。
      處理速度:每分鐘處理100圖片以上。

      用戶體驗:
      界面優(yōu)化,操作簡單。
      錯誤反饋機制完善,用戶可以手動糾正錯誤。

      六、項目進度

      階段規(guī)劃:
      需求分析:1周

      數(shù)據(jù)準備:2周

      模型訓練:4周

      系統(tǒng)開發(fā):8周

      系統(tǒng)測試:2周

      上線部署:1周

      店鋪牌匾識別系統(tǒng)-標注規(guī)則

      備注:判斷某一個東西的邏輯是:先排除

      一、品牌詞判斷(判斷一個品牌詞是不是一個真正的品牌)

      品牌詞判斷可根據(jù)招牌特征,是否 是連鎖,是否加入大眾點評。

      第一步:首先,應該判斷給出的示例圖片中的門店名稱是否與品牌詞對應。不對應,則當前圖片為無效數(shù)據(jù),不可參考,查看其他示例圖片。

      第二步:根據(jù)品牌詞、參數(shù)圖片,滿足以下幾點中的任意一個,判為“不是品牌”。

      1.「無專名」是地方小吃類的詞,如雞蛋灌餅、老媽蹄花、牛肉板面、煎餅果子、一元一串等,這一類詞一定不是品牌;
      2.「無專名」的菜品類、經(jīng)營范圍類的詞,如:早點攤、小酒館、麻辣龍蝦、蔬菜水果等,這一類詞一定不是品牌;
      3.「無特色的專名」,如:“誠信”、“陽光”、“好吃”、“實惠”、“電白”等之類常見的形容詞作為專名,這一類詞一定不是品牌;

      第三步:若不滿足第二步的任何條件,再根掘參考招牌圖片,滿足1-3個條件中的任意一個,判為“是品牌”
      1.招牌圖片上有明確的R標和TM標識。

      2.招牌有“xx店”標識的分店

      3.給定的參考圖中,有兩張有效的參考圖中的招牌是一模一樣的,則可以直接認為是連鎖品牌

      第四步:若給的參考圖多于一張,并且每一張品牌門店招牌圖的牌匾都不相同,則可以認為當前品牌為“非品牌詞”。

      第五步:如果給定的有效招牌只有一張,則可以查詢大眾點評,大眾點評查詢后有超過一家的門店,發(fā)現(xiàn)查詢結果滿足下面1和2任意一種就屬于品牌。

      1.名稱相同,而且首圖或者logo相同

      2.名稱相同,而且門店招牌特征一致

      第六步:如果大眾點評查詢后只有一家門店或查不到,則參考有無公眾號判斷是否是品牌。

      二、品牌分類判斷(判斷品牌所屬類型)

      判斷品牌屬于“父品牌”、“子品牌”、“獨立品牌”
      1.百度檢索對應的品牌詞的專名,查詢是否有官,查詢不到對應官網(wǎng),可以直接認為是獨立品牌。

      2.有官網(wǎng),根據(jù)官網(wǎng)中的集團介紹,品牌介紹等等入口,判斷當前品牌詞屬于父品牌還是子品力牌。

      三、品牌詞名稱規(guī)范(根據(jù)招牌提取品牌詞主名稱)

      1.根據(jù)POI招牌,規(guī)則提取品牌詞名稱(專名+通名),招牌無通名可以不提取通名,但必須有專名。

      2.5個示例POI,至少2張門臉圖、招牌,設計一致,方可提取對應品牌詞名稱。
      3.若5個示例都不一致,則無需提取,備注:無法規(guī)范。

      四、電話

      規(guī)則一:如果店鋪只有手機號,則只需填寫手機號。

      規(guī)則二:如果一個店鋪有多個手機號或座機,必須將此店鋪的所有座機和手機號全部填寫。

      前置的需求文檔+標注規(guī)則都結束后

      數(shù)據(jù)標注

      備注:不是ai訓練師要干的事情,但是要懂,因為后面要涉及到驗收(質檢)的操作。
      數(shù)據(jù)標注分類:文本標注、圖像標注、語音標注數(shù)據(jù)標注工具:

      圖像標注:labelimg、labelme
      

      1.1 labelimg工具介紹

      image-20250506144734774

      快速截圖快捷鍵:w

      保存當前操作:s

      VOC:xml

      YoLo:txt

      mL:json

      1.2 有關于標注的目錄結構

      外層文件夾:dianpu
       內層:image:數(shù)據(jù)集
            label:標注
      

      數(shù)據(jù)源問題

      問題點:當數(shù)據(jù)集中的某些“圖片“可能不符合要求(當添加到labelimg中,無效)【文件名稱或者后綴名】不符合要求,我們要統(tǒng)一文件名和后綴名該怎么辦?

      利用代碼統(tǒng)一生成文件名和后綴格式

      圖片轉換成jpg格式

      若提示沒有CV2,那么就運行:

      安裝cv2:pip install opencv-python

      import os
      import os.path as osp
      import numpy as np
      import cv2
       
      def cv_imread_chinese(file_path):
          cv_img = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), cv2.IMREAD_COLOR)
          return cv_img
       
      def folder_rename(src_folder_path, target_folder_path):
          os.makedirs(target_folder_path, exist_ok=True)
          file_names = os.listdir(src_folder_path)
          for i, name in enumerate(file_names):
              try:
                  print("{}:{}".format(i, name))
                  src_name = osp.join(src_folder_path, name)
                  src_img = cv_imread_chinese(src_name)
                  target_path = osp.join(target_folder_path, "yolo_data_{}.jpg".format(i))
                  cv2.imwrite(target_path, src_img)
              except Exception as e:
                  print(f"處理文件 {name} 時出錯: {e}")
       
      if __name__ == '__main__':
          folder_rename("demo/images/test", "newdemo/img")
      

      ?

      xml格式轉成txt

      ? 若提示沒有CV2,那么就運行:

      ? 安裝cv2:pip install opencv-python

      import xml.etree.ElementTree as ET
      import os
       
      def convert_xml_to_txt(xml_file, class_mapping):
          # 解析 XML 文件
          tree = ET.parse(xml_file)
          root = tree.getroot()
       
          # 獲取圖像的寬度和高度
          size = root.find('size')
          img_width = int(size.find('width').text)
          img_height = int(size.find('height').text)
       
          txt_lines = []
          # 遍歷所有的對象
          for obj in root.findall('object'):
              # 獲取類別名稱
              class_name = obj.find('name').text
              if class_name not in class_mapping:
                  continue
              class_id = class_mapping[class_name]
       
              # 獲取邊界框坐標
              bbox = obj.find('bndbox')
              xmin = float(bbox.find('xmin').text)
              ymin = float(bbox.find('ymin').text)
              xmax = float(bbox.find('xmax').text)
              ymax = float(bbox.find('ymax').text)
       
              # 計算 YOLO 格式的坐標
              x_center = ((xmin + xmax) / 2) / img_width
              y_center = ((ymin + ymax) / 2) / img_height
              width = (xmax - xmin) / img_width
              height = (ymax - ymin) / img_height
       
              # 添加到 TXT 文件的行中
              txt_lines.append(f"{class_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}")
       
          return txt_lines
       
      def convert_folder(xml_folder, txt_folder, class_mapping):
          # 創(chuàng)建 TXT 文件保存的文件夾
          if not os.path.exists(txt_folder):
              os.makedirs(txt_folder)
       
          # 遍歷 XML 文件夾中的所有文件
          for xml_file in os.listdir(xml_folder):
              if xml_file.endswith('.xml'):
                  xml_path = os.path.join(xml_folder, xml_file)
                  # 生成對應的 TXT 文件路徑
                  txt_file = os.path.splitext(xml_file)[0] + '.txt'
                  txt_path = os.path.join(txt_folder, txt_file)
       
                  # 轉換 XML 文件
                  txt_lines = convert_xml_to_txt(xml_path, class_mapping)
       
                  # 寫入 TXT 文件
                  with open(txt_path, 'w') as f:
                      for line in txt_lines:
                          f.write(line + '\n')
       
      if __name__ == "__main__":
          # 定義類別映射,根據(jù)實際情況修改
          class_mapping = {
              "cat": 0,
              "dog": 1
          }
          # 這里修改為實際存放 XML 文件的文件夾路徑
          xml_folder = "newdemo/img"
          # 這里修改為實際要存放轉換后 TXT 文件的文件夾路徑
          txt_folder = "demo"
          convert_folder(xml_folder, txt_folder, class_mapping)
      

      驗收和質檢

      可視化檢查--抽樣檢查

      抽樣檢查==》單個驗收

      # 單張可視化圖片查看
      import cv2
      import xml.etree.ElementTree as ET
      
      
      def visualize_annotations(image_path, annotation_path):
          image = cv2.imread(image_path)
          tree = ET.parse(annotation_path)
          root = tree.getroot()
          for obj in root.findall('object'):
              bbox = obj.find('bndbox')
              xmin = int(bbox.find('xmin').text)
              ymin = int(bbox.find('ymin').text)
              xmax = int(bbox.find('xmax').text)
              ymax = int(bbox.find('ymax').text)
      
              label = obj.find('name').text
              color = (0, 255, 0)  # Green color for bounding box
              thickness = 2
              cv2.rectangle(image, (xmin, ymin), (xmax, ymax), color, thickness)
              cv2.putText(image, label, (xmin, ymin - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, color, thickness)
          cv2.imshow('Annotated Image', image)
          cv2.waitKey(0)
          cv2.destroyAllwindows()
      
      
      if __name__ == '__main__':
          visualize_annotations('./newdemo/yolo_data_1.jpg', './label/yolo_data_1.xml')
      
      

      抽樣檢查==》全部驗收

      # 全部可視化圖片查看
      import cv2
      import xml.etree.ElementTree as ET
      import os
      
      def visualize_all_annotations(image_dir, annotation_dir):
        for filename in os.listdir(image_dir):
            if filename.endswith('.jpg') or filename.endswith('.png'):
              image_path =os.path.join(image_dir, filename)
              annotation_filename=os.path.splitext(filename)[0]+'.xml'
              annotation_path = os.path.join(annotation_dir, annotation_filename)
      
              if os.path.exists(annotation_path):
                  visualize_annotations(image_path, annotation_path)
              else:
                  print(f"No annotation found for {filename}")
      
      
      def visualize_annotations(image_path,annotation_path):
          image = cv2.imread(image_path)
          tree = ET.parse(annotation_path)
          root = tree.getroot()
          for obj in root.findall('object'):
              bbox = obj.find('bndbox')
              xmin = int(bbox.find('xmin').text)
              ymin = int(bbox.find('ymin').text)
              xmax = int(bbox.find('xmax').text)
              ymax = int(bbox.find('ymax').text)
      
              label = obj.find('name').text
              color = (0, 255, 0)  # Green color for bounding box
              thickness = 2
              cv2.rectangle(image, (xmin, ymin), (xmax, ymax), color, thickness)
              cv2.putText(image, label, (xmin, ymin - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, color, thickness)
          cv2.imshow('Annotated Image', image)
          cv2.waitKey(0)
          cv2.destroyAllWindows()
      
      
      if __name__ == '__main__':
          image_directory='./newdemo'
          annotation_directory='./label'
          visualize_all_annotations(image_directory,annotation_directory)
      
      

      備注:可視化檢查和labelimg工具檢查的區(qū)別:
      如果有覆蓋的情況:labelimg很難直觀看到,可視化工具會讓有更加直觀的標注標簽顯示,labelimg沒有

      總結:可視化工具質檢銷量超過labelimg工具質檢。

      目標檢測

      連接服務器

      基于算力服務器訓練模型

      將訓練的項目導入服務器中

      如將項目導入data目錄下

      conda activate lisi

      安裝過程

      1.進入到data項目目錄下,創(chuàng)建虛擬環(huán)境

      conda createn lisi(名稱) python==3.8.5
      

      2.進入虛擬環(huán)境

      conda activate lisi
      

      3.安裝GPU

      conda install pytorch==1.10.0 torchvision torchaudio cudatoolkit=11.3
      

      4.安裝項目所需依賴

      pip install -v -e
      

      5.安裝更新:torch torchvision

      pip install --upgrade torch torchvision
      

      例子(目標檢測:yolov8)

      搭建環(huán)境

      一、創(chuàng)建虛擬環(huán)境

      第一步:通過終端命令進入到【yolov8項目】中
      第二步:創(chuàng)建標注工具環(huán)境

      conda create -n demo8 python==3.8.5
      

      第三步:進入環(huán)境

      conda activate demo8
      

      二、配置環(huán)境

      流程一:配置環(huán)境
      1.把【yolov8】項目拖到【pycharm】工具中在

      【Pycharm】工具,右下角點擊

      image-20250508141726487

      image-20250508141754545

      image-20250508141822888

      image-20250508141928803

      三、安裝依賴

      以上配置完畢后,接著要安裝依賴:打開終端**

      pip install -v -e .
      

      image-20250508142330224

      下載完成后,彈窗可關閉

      image-20250514111931725

      四、測試配置環(huán)境是否正常

      驗證搭建的環(huán)境有沒有問題,在pycharm終端輸入以下命令

      yolo task=detect mode=predict model=pretrained/yolov8l.pt source=ultralytics/assets device=CPU
      
      備注:
      task=detect:執(zhí)行目標檢測任務。
      
      mode=predict:正確指定推理模式。(mode=train:訓練模式(模型訓練),mode=val:驗證模式(模型性能評估),mode=predict:推理模式(對新數(shù)據(jù)進行預測),mode=export:導出模式(將模型轉換為其他格式,如 ONNX、TensorRT,mode=test:測試模型)
      
      model=pretrained/yolov8l.pt:使用預訓練的 YOLOv8 Large 模型。
      
      source=ultralytics/assets:輸入數(shù)據(jù)路徑(官方示例資源)。
      
      device=CPU:在 CPU 上運行推理
      
      
      
      
      

      image-20250514165922888

      項目目錄結構說明

      訓練模型默認參數(shù)

      C:\Users\shuto\Desktop\yolov8\ultralytics\cfg\default.yaml
      

      基礎模型

      C:\Users\shuto\Desktop\yolov8\pretrained\xx.pt
      

      訓練集的目錄

      C:/Users/shuto/Desktop/yolov8/ultralytics/cfg/datasets
      

      訓練的過程

      模型預測

      yolo task=detect mode=predict model=pretrained/yolov8l.pt source=ultralytics/assets device=CPU
      

      模型訓練

      yolo task=detect mode=train model=pretrained/yolov8l.pt data=ultralytics/cfg/datasets/A_my_data.yaml batch=32 epochs=100 imgsz=100 workers=0 device=CPU cache=True
      

      模型驗證

      yolo task=detect mode=val model=pretrained/yolov8l.pt data=ultralytics/cfg/datasets/A_my_data.yaml batch=32 device=CPU plots=True
      

      模型測試

      yolo task=detect mode=predict model=pretrained/yolov8l.pt source=ultralytics/images/test device=CPU  
      

      訓練結果

      一、weights文件夾:模型權重文件

      img

      best.pt是整個訓練過程中,性能最好的模型權重文件。最終我們要的就是這個文件。我們可以拿它進行實際業(yè)務的AI預測或繼續(xù)微調。

      last.pt是最后一次訓練的模型權重文件。一般來說,訓練越久效果也越好。但有時它也會和best.pt不一致。這意味著最后一次訓練的結果,并不是最好的。

      二、results.png:訓練總圖要略

      這張圖片包含訓練過程中的各種評估指標,比如損失函數(shù)、精度、召回率、mAP等的圖表繪制。這個圖表可以直觀地看到模型訓練過程中性能的變化情況。

      img

      loss系列:

      train/box_loss和val/box_loss
      
      train/cls_loss和val/cls_loss
      
      train/dfl_loss和val/dfl_loss
      

      這幾組前面的train表示訓練集,val是驗證集。訓練集是用于訓練學習的,相當于書本的例題。而驗證集則用于考試,相當于試卷的試題。學得好不一定就考得好,主要還得看考題是不是有關聯(lián)性。不過他們更重要的相同點,好像在于都有l(wèi)oss。

      loss是算法中一個常見的概念。翻譯成“損失”這個詞,其實很形象。生活中,對于能量轉化,我們常常用到損失。我們說100單位的電能轉化為80單位的動能,能量損失了20%。如果實現(xiàn)了百分百轉化,那么損失就是0。

      應用到算法中也一樣。在有監(jiān)督訓練中,我們是先標記再訓練。

      對于訓練集和驗證集,AI本身是知道這個區(qū)域標的是什么,位置在哪兒。因此,它會先猜測結論,然后跟正確答案做對比。它的猜測行為稱為“推理”或者“預測”。它自己的推理結果和人工標記的答案之間的差異,稱為“損失”。那么,損失越小越好,損失為0則說明AI的推理和正確答案之間沒有差異,即預測100%命中。

      我們看下圖,這次訓練過程也是如此。這幾個train系列的loss都是降低的,X軸表示訓練輪次,Y軸表示損失的值。

      ? img

      我們看到loss的值都是降低,這說明很好。但是第一個box_loss好像還有下降的趨勢。但是中間的cls_loss在50輪時就已經(jīng)趨于穩(wěn)定了,而dfl_loss好像在75輪附近才慢慢穩(wěn)定。

      img

      在看這個圖,幾乎都沒有明顯的下降趨勢和穩(wěn)定趨勢,就證明還需要進行更多輪訓練。

      這些指標都代表什么?有什么意義呢?

      box_loss 邊界框損失:衡量畫框

      box_loss全稱是bounding box loss,表示邊界框損失。它表明AI通過訓練和學習之后,對于邊界框的預測和標準答案之間的損失。

      img

      正常情況下,隨著訓練的進行,損失是越降越低的。如果它是長期忽高忽低,或者一直不明顯收斂,那說明訓練存在問題。如果box_loss的損失不斷降低,而后持續(xù)穩(wěn)定,則說明訓練沒有問題,也沒有必要再投入資源訓練了。

      但是box_loss表現(xiàn)優(yōu)秀,僅僅說明它對物體區(qū)域(畫框)的識別情況。就算這一項100分,整體效果也不一定就好。因為光會畫框意義不大,我們還要知道框里的物體是什么。

      于是就引入另一個cls_loss指標。

      cls_loss 分類損失:判斷框里的物體

      它叫分類損失,全稱為classification loss。它衡量的是預測類別和真實類別之間的差異。

      我們看下面的圖,它不但框出了物體。而且標注出了這個框里是人,那個框里是車,哪個是細菌,哪個是垃圾。

      img

      對于框里物體是什么的評價,就用到了cls_loss指標。從這里可以看出,其實目標檢測技術,已經(jīng)包含了圖片分類的技術。圖片分類很基礎。

      如果你認為它僅憑哪個區(qū)域、什么物體兩項指標就結束了,那么確實是小看YOLO算法了。它還有第三項細化指標dfl_loss。

      dfl_loss 分布式焦點損失:精益求精

      dfl_loss全稱是Distribution Focal Loss,中文名稱為“分布式焦點損失”。 它輔助box_loss,提供額外的信息,通過對邊界框位置的概率分布進行優(yōu)化,進一步提高模型對邊界框位置的細化和準確度。

      img

      如上圖所示,AI模型成功預測出了①的位置。但是紅、藍、綠3個框中的①,好像哪個都沒錯。因此dfl_loss提供了一個可信度,表明哪一個焦點跟標準答案相比,會更加精確。

      val驗證集:學得好,不一定考得好

      上面是訓練集的loss。下面說說驗證集的loss。

      從規(guī)范上講,驗證集和訓練集是永遠不見面的。這么做是為了驗證AI是否真正學到了數(shù)據(jù)的特征和精髓,而非是靠死記硬背所見過的數(shù)據(jù)。

      也就是說模型在經(jīng)過幾番訓練集數(shù)據(jù)的學習之后,將面對從來沒有見過的驗證集數(shù)據(jù)。它將給出預測答案,然后再去對照標準答案。兩個答案的差異,就是驗證集的損失。

      看下面這個驗證集曲線的趨勢。

      img

      相比訓練集的平滑趨勢,驗證集似乎是有些反復。

      其實,這是一種常見現(xiàn)象。只要驗證集損失沒有顯著上升,整體趨勢在變好,且與訓練集損失的差距不是特別大,這一般是正常的。

      不過,要留意以下細節(jié):

      • 樣本數(shù)據(jù)的變異:驗證集可能包含一些與訓練集不同風格的樣本,這會導致?lián)p失不穩(wěn)定。好比你拿著泰迪狗做識別訓練,最后讓模型去認識哈士奇狗,模型有點迷糊,拿不準。

      • 模型的過擬合:如果驗證集的樣本數(shù)據(jù)正常。模型在訓練集上的損失表現(xiàn)很好,但是驗證集表現(xiàn)不穩(wěn)定。那么可能是模型記住了訓練集的細節(jié),也就是過于死記硬背,只抓住形沒有抓住神。這叫過擬合。

      如果遇到比較嚴重的問題,或者你感覺有問題,該怎么辦呢?

      可以調整超參數(shù),比如調小學習率,或者使用提前停止策略來防止過擬合。也可以調整batch大小,增加一個批次數(shù)量,讓它見多識廣。

      同時,增加訓練數(shù)據(jù)量或使用數(shù)據(jù)增強技術,可以使模型更好地泛化,減少驗證損失的波動。

      大家不要小看驗證集的指標,這是衡量模型效果的第一道關卡。因為訓練集的結果指標頂多算是自娛自樂,這有點像學校內部的月考、期末考試。而驗證集則更像是高考。因此,對于驗證集的檢測,還有更多指標。

      精度和召回率:又準又全的考量

      img

      之所以說他們是同一類,看表頭就知道,他們的名字前面帶metrics,后面帶(B)。

      metrics表示模型是在驗證集上的評估指標。(B)呢,在目標檢測任務中表示Bounding Box,即邊界框的檢測結果。

      首先看左上角的第一個precision。precision是精度,或者稱為“精確率”。請注意,是精確率,不是準確率。準確率有專門的名詞accuracy。兩者不一樣。

      準確率表示預測正確的占比。比如1000件產品中,900件合格。我的AI模型全都找出來了,這時準確率是100%。

      準確率存在一個問題,尤其對于少數(shù)個體而言不公平。比如預測絕癥,100個人預測對了90個人是健康的,預測錯了10個病危的人。雖然準確率是90%,但這屬于嚴重事故。于是,精確率的可以解決這個問題。

      精確率會從100個里隨便抽出10條數(shù)據(jù),如果預測錯了5個,那么精確率就是50%。高準確率保證的是多數(shù)都正確,而高精確率是保證每一個都不出錯。

      我們看到第一個精確率的圖表,大約30輪左右趨于穩(wěn)定了,而且向1(100%)靠攏。這說明效果不錯。

      精確率就沒有問題嗎?也有問題!

      精確率考核的是出錯率,只要不出錯,哪怕只干好一件事,也是100%。如果精確率指標它挑活干,那么就完犢子了。工作、生活中也有這類情況,就是揀著好做的工作去做,結果干得很漂亮。

      因此,這時又引入了另一個指標,也就是第二幅圖中的召回率recall。召回率的口號是:“寧可做錯一千,絕不漏掉一個”。鼓勵大家搶著做,誰眼里沒活就打低分。這樣就解決了那些少干活、揀活干的情況。

      其實召回率recall和精確率precision是矛盾的。兩者的值很難都高。因為既要臟活、累活、雜活都攬下,還要不允許出錯。這對于機器或者人類都是很大的挑戰(zhàn)。

      但是,考核指標就是要這樣的。就要想盡一切辦法堵住漏洞。我們看第二幅圖中召回率也是在提高的,這說明檢測范圍在不斷擴大,大約在0.8處浮動。因此從前兩張圖我們可以說,這次訓練precision精度是0.9,召回率recall為0.8。

      關于P(precision)和R(recall)之間的數(shù)據(jù)趨勢,這里面也有具體的圖示。

      img

      P_curve.png:

      runs\detect\train下面有P_curve.png,這是每項精度的曲線。

      img

      R_curve.png

      這是每項召回率的曲線。

      img

      PR_curve.png

      則是兩者互相妥協(xié)的曲線。這個PR圖怎么看呢?越接近正方形效果越好。都接近正方形,說明整體效果又準又全。

      img

      看上圖,藍色總線接近正方形。但是具體到分類為8的目標,有些拖后腿。

      results.png系列還剩兩張圖片,那就是mAP50與mAP50-95。這倆是一類(也是看名稱很像)。

      mAP50要拆開看,拆成mAP-50,mAP表示mean Average Precision,稱為平均精度。50則是在IoU閾值為50%的情況下的值。

      img

      這些個預測出的框框兒,可能是物體的全部,也可能只是中心部分,還或許僅僅是物體的一個角。不管如何,這都是算法通過學習特征計算出來的。誰是誰非,看你怎么選擇。

      如果預測出的面積(藍框)能占到實際區(qū)域(紅框)的50%以上,那么我們就說IoU為50。重合度能到50%,其實能說明AI大體猜中了。因為IoU為100就是完全重合。

      mAP50是重合度以50%為界限的平均精度。而mAP50-95則是IoU閾值從50%到95%范圍內的平均值。這個更加嚴格一些。因此,我們看到圖里面mAP50-95的值確實也低一些。

      img

      從這里能看出啥信息呢?

      mAP50這個指標相對寬松,能夠展示模型在較低嚴格度下的整體性能。它更適用于那些對定位要求不是特別嚴格的應用場景。

      mAP50-95則意味著在嚴格的IoU條件下也能準確檢測和定位目標。它適用于那些對定位要求較高的應用場景,如自動駕駛、醫(yī)療影像分析等。

      因此,完全看你的需求。如果覺得現(xiàn)在的模型識別效果不好,對精度要求又不高能大體定位就行,其實可以調低IoU的值。反正,各類表現(xiàn)都告訴你了。

      results.csv:圖表里的數(shù)據(jù)明細

      img

      runs\detect\train下有一個results.csv表格文件。其實這是上面剛剛講的很多圖表的數(shù)字版本。

      如果你想查詢某次訓練某項指標的具體值,可以從這個表格中查找。

      三、labels文件:分類標簽的分布

      img

      看上圖第一項,很明顯有一個問題。那就是第13分類的樣本數(shù)太少。這也導致比如上面的P曲線、R曲線沒有第13分類的信息(沒注意可以滑上去再看看)。這是因為樣本過少,被淹沒、忽略了。

      下面是是混淆矩陣的歸一化版本,對應的圖片是confusion_matrix_normalized.png。這里可以更清晰地展示模型在各類別上的性能表現(xiàn)。我們也可以看到第13類別數(shù)據(jù)為空。

      img

      注意:如果報錯torchvision,請安裝

       pip install torchvision
      
      posted @ 2025-06-06 10:31  沒事別找我  閱讀(85)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产成人久久精品流白浆| 日韩丝袜人妻中文字幕| 亚洲国产精品线观看不卡| 亚洲精品欧美综合二区| 99精品久久毛片a片| 中文字幕在线日韩| 久久精品成人无码观看免费| 亚洲国产av区一区二| 国产精品国三级国产av| 日韩理伦片一区二区三区| 虎白女粉嫩尤物福利视频| 丁香五月亚洲综合在线国内自拍| 久久91精品牛牛| 久久精品国产亚洲av电影| 日本高清成本人视频一区| 男人的天堂av一二三区| 国产精品国产三级国产专| 少妇愉情理伦片丰满丰满午夜| 性做久久久久久久久| 亚洲欧洲日产国产 最新| 粉嫩在线一区二区三区视频| 麻豆国产成人AV在线播放| 中文字幕日韩区二区三区| 国产精品二区中文字幕| 太康县| 一亚洲一区二区中文字幕| 国产明星精品无码AV换脸| 国产欧美精品aaaaaa片| 夜色资源站www国产在线视频 | 塔河县| 国产精品三级爽片免费看| 在线 国产 欧美 专区| 丰满少妇内射一区| 极品美女自拍偷精品视频| 国产午夜亚洲精品久久| 国产亚洲精品aaaa片app| 粉嫩av蜜臀一区二区三区| 看免费的无码区特aa毛片| 欧美色欧美亚洲高清在线视频| 和黑人中出一区二区三区| 亚洲www永久成人网站|