YOLOv5シリーズ 1.独自のデータセットを作成する

YOLOv5 シリーズ 1. 独自のデータセットを作成する
YOLOv5 シリーズ 2. yolov5 を使用して独自のデータを識別する



序文

この記事で使用しているYolov5はバージョン6.1、GPUバージョンは(プロテスト用CPUも動作しますが速度はかなり遅くなります)、使用環境はtorch1.7.1+cuda10.1です。


1.ラベルミーをダウンロード

Labelme のインストールは、コマンド ラインで直接インストールする場合、非常に簡単です。

pip install labelme

Anaconda の仮想環境に labelme をインストールする場合は、まず仮想環境に入り、次に以下をインストールする必要があります。

activate 自己的想安装的环境名称
pip install labelme

Anaconda を使用して Labelme の仮想環境を個別にインストールする場合:

conda create -n labelme python=3.6
activate labelme
pip install labelme

2.Labelmeの使用手順

1.Labelmeを開く

最初の手順のインストール場所に従って、コマンド ラインを使用して、対応する場所に labelme を直接入力して開きます。

labelme

ここに画像の説明を挿入
直接インストールしたので仮想環境には入りませんでした。開くと、次のインターフェイスが自動的にポップアップします。
ここに画像の説明を挿入
上記のマークは、マークするメイン関数です。まず、Open dir を使用して、画像データが配置されているフォルダーを開きます。
ここに画像の説明を挿入

2.ラベル名ラベルデータセット

こちらはkaggleからダウンロードしたマスク検出用のデータセットですが、Yolov5で作成しているのでCreate Polygonsをクリックし、画像上で右クリックしてcreate Rectangleを選択してマスクを枠に入れます。
ここに画像の説明を挿入
次に [OK] をクリックし、次のマスクのマークを続けます。すべてのマスクがマークされたら、次のマスクをクリックするか、[保存] をクリックします。
ここに画像の説明を挿入

3. json形式で保存

ここに画像の説明を挿入
.json 形式で直接保存し (保存名は写真の名前と同じです)、最後までマークを付けるだけです。

3. json形式をtxt形式に変換する

yolov5 には写真と txt 形式が必要なので、取得した json ファイルを直接使用することはできません。まず json を txt 形式に変換する必要があります。次のコードは json を txt に変換するものです:

import json
import os

name2id = {
    
    'Mask': 0,}  #具体自己数据集类别
               
def convert(img_size, box):
    dw = 1./(img_size[0])
    dh = 1./(img_size[1])
    x = (box[0] + box[2])/2.0 - 1
    y = (box[1] + box[3])/2.0 - 1
    w = box[2] - box[0]
    h = box[3] - box[1]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)
 
def decode_json(json_floder_path,json_name):
    #转换好txt的标签路径
    txt_name = 'E:\\BaiduNetdiskDownload\\PyTorch-YOLOv3\\data\\custom\\labels\\' + json_name[0:-5] + '.txt'    
    txt_file = open(txt_name, 'w')
 
    json_path = os.path.join(json_floder_path, json_name)
    data = json.load(open(json_path, 'r', encoding='gb2312'))
 
    img_w = data['imageWidth']
    img_h = data['imageHeight']
 
    for i in data['shapes']:
        
        label_name = i['label']
        if (i['shape_type'] == 'rectangle'):
 
            x1 = int(i['points'][0][0])
            y1 = int(i['points'][0][1])
            x2 = int(i['points'][1][0])
            y2 = int(i['points'][1][1])
 
            bb = (x1,y1,x2,y2)
            bbox = convert((img_w,img_h),bb)
            txt_file.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\n')
    
if __name__ == "__main__":
    #原始json标签路径
    json_floder_path = 'E:\\BaiduNetdiskDownload\\PyTorch-YOLOv3\\data\\custom\\json\\'
    json_names = os.listdir(json_floder_path)
    for json_name in json_names:
        decode_json(json_floder_path,json_name)

ここでは、yolov5 に必要な txt 形式のラベル ファイルを取得しました。


4. 独自の Yolov5 データセットを作成する

今回作成したデータセットフォルダーの場所は以下のとおりです。

--MaskDataSet
	--train
		--images
		--labels
	--test
		--images
		--labels
	--valid
		--images
		--labels
	--data.yaml
--yolov5源码位置

このうち、画像はピクチャに配置され、ラベルは対応する txt ラベル ファイルに配置されます。data.yaml ファイルの内容は次のとおりです。

train: ../MaskDataSet/train/images
test: ../MaskDataSet/test/images
val: ../MaskDataSet/valid/images	
#如果按照上述方式建立文件夹,则上面train、test和val地址可以不变

nc: 1   							#标签类别个数
names: ['Mask',]  					#标签名
#上面nc和names可以根据自己的数据集进行修改

最後に、データセットが正常に作成されました。次に、ラベル付きデータセットのトレーニングを開始できます~

おすすめ

転載: blog.csdn.net/fjlaym/article/details/123992962