將yolov3的標籤轉化為yolov5格式的標籤

2021-10-20 19:45:49 字數 2837 閱讀 3026

一般yolov3的資料集標籤格式為xml,其中bbox為xyxy格式

如圖:

每行乙個obj,第乙個欄位是name,後面4個字段是normalized xywh格式的bbox。

如下圖:

為了能用yolov3的資料訓練yolov5,所以需要乙個轉格式的**:

# 將xml格式的標籤轉換為txt格式,並且將bbox的格式由xyxy轉換為normalized xywh的格式。

import os

import xml.etree.elementtree as et

classes =

["crackle"

]# 輸入缺陷名稱,必須與xml標註名稱一致

f1 =

'e:/yolo/yolov4-pytorch-master/vocdevkit/voc2007/annotations'

# 原標籤位址

f2 =

'e:/yolo/yolov4-pytorch-master/vocdevkit/voc2007/imagexml.txt'

# 存放xml名稱的txt

txtflie =

open

(f2,

'w')

filename =

[i for i in os.listdir(f1)

]for i in filename:

txtflie.write(

str(i)

.strip(

'.xml')+

'\n'

)txtflie.close(

)def

convert

(size, box)

: dw =1.

/ size[0]

dh =1.

/ size[1]

x =(box[0]

+ box[1]

)/2.0 y =

(box[2]

+ box[3]

)/2.0 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)

defconvert_annotation

(image_id)

: in_file =

open

('e:/yolo/yolov4-pytorch-master/vocdevkit/voc2007/annotations/%s.xml'

%(image_id)

)# 讀取xml檔案路徑

out_file =

open

('e:/yolo/yolov4-pytorch-master/vocdevkit/voc2007/yolov5_ann/%s.txt'

%(image_id)

,'w'

)# 需要儲存的txt格式檔案路徑

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'):

cals = obj.find(

'name'

).text

if cals not

in classes:

# 檢索xml中的缺陷名稱

continue

cls_id = classes.index(cals)

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)

) bb = convert(

(w, h)

, b)

out_file.write(

str(cls_id)

+" "

+" "

.join(

[str

(a)for a in bb])+

'\n'

)image_ids_train =

open

(f2)

.read(

).strip(

).split(

)# 讀取xml檔名索引

for image_id in image_ids_train:

convert_annotation(image_id)

yolov3的缺點 yolov3特點總結

p1,yolov3,簡單總結下比較特別的地方 1.bounding box 中心值x,y的 是通過乙個sigmoid 函式,來 在每乙個單元 cell 的相對位置。而不像普通那種 乙個相對於anchor的offset。然後bbox 損失是用的mse 一般都是用smooth l1 3.類別 沒有使用s...

YOLOv3生成中文標籤

前提 本文的yolov3為alexeyab的版本。step1 生成標籤 生成標籤的 借鑑了 先在data labels下建立python程式,寫入以下 其中label.names為自定義分類的彙總,如京滬 晉贛 g hqr 39儲存為txt,之後執行以下python程式 import os impo...

yolo v3模型測試及測試結果轉化

訓練完成生成模型後,進行模型測試。對測試集資料進行檢測,得到檢測結果 像製作訓練集時生產2019 train.txt 檔案內容為包含所有訓練的路徑和檔名 一樣,製作2019 test.txt檔案 檔案內容為包含所有測試的路徑和檔名 採用以下程式來生成測試集的 test.txt 檔案,其中包含每個測試...