<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【深度學(xué)習(xí)】從0學(xué)習(xí)YOLOV5:科大訊飛X光安檢檢測(cè)

          共 7039字,需瀏覽 15分鐘

           ·

          2022-07-09 07:12

          賽事背景

          X光安檢是目前在城市軌交、鐵路、機(jī)場(chǎng)、物流業(yè)廣泛使用的物檢手段。使用人工智能技術(shù),輔助一線安檢員進(jìn)行X光安檢判圖,可以有效降低因?yàn)榘矙z員經(jīng)驗(yàn)、能力或工作狀態(tài)造成的錯(cuò)漏檢問題。在實(shí)際場(chǎng)景中,因待檢測(cè)物品的多樣性、成像角度、重疊遮擋等問題,X光安檢圖像檢測(cè)算法研究存在一定挑戰(zhàn)。

          比賽鏈接:http://challenge.xfyun.cn/topic/info?type=Xray-2022&ch=ds22-dw-zmt05

          賽事任務(wù)

          本賽事的任務(wù)是:基于科大訊飛提供的真實(shí)X光安檢圖像集構(gòu)建檢測(cè)模型,對(duì)X光安檢圖像中的指定類別的物品進(jìn)行檢測(cè)。

          評(píng)審規(guī)則

          數(shù)據(jù)說(shuō)明

          此次比賽提供帶標(biāo)注的訓(xùn)練數(shù)據(jù),即待檢測(cè)物品在包裹中的X光圖像及其標(biāo)注文件。

          本次比賽標(biāo)注文件中的類別為8類,包括:

          刀(knife)、剪刀(scissors)、打火機(jī)(lighter)、優(yōu)盤(USBFlashDisk)、壓力容器(pressure)、帶噴嘴塑料瓶(plasticBottleWithaNozzle)、公章(seal)、電池(battery)。

          待識(shí)別物品的X光成像示意圖如圖所示。

          比賽提供的X光圖像及其矩形框標(biāo)注的文件按照數(shù)據(jù)來(lái)源存放在不同的文件夾中,圖像文件采用jpg格式,標(biāo)注文件采用xml格式,各字段含義參照voc數(shù)據(jù)集。voc各字段含義對(duì)應(yīng)表為:

          • filename 文件名
          • size 圖像尺寸
            • width 圖像寬度
            • height 圖像高度
            • depth 圖像深度
          • object 圖像中的目標(biāo),可能有多個(gè)
            • name 該目標(biāo)的標(biāo)簽名稱
            • bndbox 該目標(biāo)的標(biāo)注框
            • xmin 該目標(biāo)的左上角寬度方向坐標(biāo)
            • ymin 該目標(biāo)的左上角高度方向坐標(biāo)
            • xmax 該目標(biāo)的右下角寬度方向坐標(biāo)
            • ymax 該目標(biāo)的右下角高度方向坐標(biāo)

          評(píng)估指標(biāo)

          評(píng)測(cè)方式采用計(jì)算mAP(IoU = 0.5)的方式。首先計(jì)算每個(gè)類的AP:

          • 根據(jù)預(yù)測(cè)框和標(biāo)注框的IoU是否達(dá)到閾值0.5判斷該預(yù)測(cè)框是真陽(yáng)性還是假陽(yáng)性;
          • 每個(gè)預(yù)測(cè)框的置信度進(jìn)行從高到低排序;
          • 計(jì)算精確率和召回率,計(jì)算PR值;
          • 繪制PR曲線并計(jì)算AP值。
          • 然后計(jì)算mAP:把所有類的AP值求平均得到mAP。

          作品提交要求

          選手需要提交json格式文件,詳情見示例。其中,坐標(biāo)值必須為大于0的正數(shù)且不能超過(guò)圖像的寬高。

          按照賽題數(shù)據(jù)頁(yè)面2022gamedatasettest1.txt里面的順序組織json

          提交文件需按序排列,首先按圖片順序排列,然后按類別順序排列,置信度順序隨意。圖片順序,請(qǐng)按照?qǐng)D片編號(hào)順序。

          (b) 類別順序,請(qǐng)參照下列順序:{'knife': 1, 'scissors': 2, 'lighter': 3, 'USBFlashDisk': 4, 'pressure': 5, 'plasticBottleWithaNozzle': 6, 'seal': 7, 'battery': 8}

          初賽結(jié)束后進(jìn)入決賽的選手需要提交模型文件和詳細(xì)的實(shí)驗(yàn)過(guò)程說(shuō)明文檔。其中,模型大小不能超過(guò)600MB,鼓勵(lì)使用模型壓縮和輕量化方法,并酌情加分;提交的模型須為單模型,禁止使用多模型融合方法;說(shuō)明文檔須實(shí)事求是、清晰明了,本領(lǐng)域研究者可據(jù)此復(fù)現(xiàn)結(jié)果。建議參賽者在參加初賽過(guò)程中記錄實(shí)驗(yàn)過(guò)程。

          數(shù)據(jù)下載

          文件名下載
          X光安檢圖像檢測(cè)挑戰(zhàn)賽2022一階段公開數(shù)據(jù).zip點(diǎn)擊下載
          2022gamedatasettest1.txt點(diǎn)擊下載

          解題過(guò)程

          賽題是一個(gè)典型的物體檢測(cè)賽題,接下來(lái)我們講解具體的訓(xùn)練和解題過(guò)程。我們選擇使用YOLOV5來(lái)訓(xùn)練和進(jìn)行預(yù)測(cè)。

          步驟1:讀取并轉(zhuǎn)換數(shù)據(jù)集

          首先我們需要讀取所有的圖片路徑,并嘗試將圖片轉(zhuǎn)換為YOLO格式。

          train_anns = glob.glob('訊飛研究院-X光安檢圖像檢測(cè)挑戰(zhàn)賽2022公開數(shù)據(jù)/訓(xùn)練集/*/XML/*.xml')
          train_paths = glob.glob('訊飛研究院-X光安檢圖像檢測(cè)挑戰(zhàn)賽2022公開數(shù)據(jù)/訓(xùn)練集/*/*.jpg')

          Yolo標(biāo)注格式保存在.txt文件中,一共5個(gè)數(shù)據(jù),用空格隔開,舉例說(shuō)明如下圖所示:

          假設(shè)圖像的高和寬分別為h, w,bbox的左上角坐標(biāo)為(x1, y2),右下角坐標(biāo)為(x2, y2),則可求得bbox中心坐標(biāo)(x_c, y_c)為:

          假設(shè)Yolo的5個(gè)數(shù)據(jù)分別為:, , , , ,則有對(duì)應(yīng)關(guān)系:

          具體的從XML轉(zhuǎn)換為Yolo格式的代碼為:

          # -*- coding: utf-8 -*-
          import xml.etree.ElementTree as ET
          import os
          from os import getcwd

          classes = ["knife"'scissors''lighter''USBFlashDisk''pressure''plasticBottleWithaNozzle''seal''battery']   # 改成自己的類別
          abs_path = os.getcwd()
          print(abs_path)

          def convert(size, box):
              dw = 1. / (size[0])
              dh = 1. / (size[1])
              x = (box[0] + box[1]) / 2.0 - 1
              y = (box[2] + box[3]) / 2.0 - 1
              w = box[1] - box[0]
              h = box[3] - box[2]
              x = x * dw
              w = w * dw
              y = y * dh
              h = h * dh
              return x, y, w, h

          def convert_annotation(in_path, out_path):
              in_file = open(in_path, encoding='UTF-8')
              out_file = open(out_path, 'w')
              tree = ET.parse(in_file)
              root = tree.getroot()
              size = root.find('size')
              w = int(size.find('width').text)
              h = int(size.find('height').text)
              for obj in root.iter('object'):
                  cls = obj.find('name').text
                  if cls not in classes:
                      continue
                  cls_id = classes.index(cls)
                  xmlbox = obj.find('bndbox')
                  b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
                       float(xmlbox.find('ymax').text))
                  b1, b2, b3, b4 = b
                  # 標(biāo)注越界修正
                  if b2 > w:
                      b2 = w
                  if b4 > h:
                      b4 = h
                  b = (b1, b2, b3, b4)
                  bb = convert((w, h), b)
                  out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')

          存儲(chǔ)的數(shù)據(jù)文件夾參考:

          - xray
              -image
                  - train#存放訓(xùn)練圖片
                      - x.jpg
                  - val##存放驗(yàn)證圖片
              -label
                  - train#存放訓(xùn)練label
                      - x.txt
                  - val#存放驗(yàn)證label

          步驟2:定義yaml

          在Yolo中數(shù)據(jù)集(需要提前下載https://github.com/ultralytics/yolov5)配置通過(guò)yaml格式給出,可以參考如下的格式:

          # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
          path: ../datasets/xray  # dataset root dir
          train: images/train  # train images (relative to 'path') 128 images
          val: images/val  # train images (relative to 'path') 128 images

          # Classes
          nc: 8  # number of classes
          names: ["knife", 'scissors', 'lighter', 'USBFlashDisk', 'pressure', 'plasticBottleWithaNozzle', 'seal', 'battery']  # class names

          注意此時(shí)的yaml里面的path需要xray文件夾寫為相對(duì)路徑。

          步驟3:訓(xùn)練模型

          • batch:訓(xùn)練時(shí)batch size
          • epoch:訓(xùn)練輪數(shù)
          • data:yaml文件路徑
          python3 train.py --img 640 --batch 2 --epochs 30 --data data/xunfei-xray2022.yaml --weights yolov5x.pt

          步驟4:模型預(yù)測(cè)

          save-txt:表示將預(yù)測(cè)結(jié)果寫為txt

          python3 detect.py --weights runs/train/exp7/weights/best.pt --source test1/domain1/ --save-txt

          最終將預(yù)測(cè)結(jié)果轉(zhuǎn)換為比賽需要的json格式即可,比賽的json格式為制定文件順序,并在每個(gè)文件的列表內(nèi)部寫每個(gè)類別的預(yù)測(cè)結(jié)果。



          往期精彩回顧




          瀏覽 173
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  HD国产人妖TS另类视频 | 大香蕉国产三级 | 亚洲无码男人的天堂 | 午夜色视频 | 国产精品久久久久久久久久中字幕 |