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可以根据自己的数据集进行修改
最後に、データセットが正常に作成されました。次に、ラベル付きデータセットのトレーニングを開始できます~