两个都是好东西,不多说,说坑:
pycocotools装不上
到git上下载下来,进入setup.py,然后两行命令:
D:\pyenv\yolo5\Scripts\python.exe setup.py build_ext --inplace
D:\pyenv\yolo5\Scripts\python.exe setup.py build_ext install
数据格式转化
bdd的标注是这样的:
yolo的是这样的:
奉上转化代码:
class Bdd2yolo:
def __init__(self):
self.bdd_lab = "../BDD100k/labels_bdd/train"
self.yolo_lab = "../BDD100k/labels/train"
os.makedirs(self.bdd_lab,exist_ok=True)
os.makedirs(self.yolo_lab,exist_ok=True)
self.used_names=["person", "rider", "car", "bus", "truck", "bike", "motor", "train"]
@property
def all_names(self):
return ["person", "rider", "car", "bus", "truck", "bike", "motor", "traffic light", "traffic sign",
"train"]
def bdd2yolo5(self,categorys, file):
strs = ""
name=file.replace(".json","")
readpath=f"{self.bdd_lab}/{file}"
writepath=f"{self.yolo_lab}/{name}.txt"
print (readpath,writepath)
f = open(readpath)
info = json.load(f)
# print(len(info))
# print(info["name"])
write = open(writepath, 'w')
for obj in info["frames"]:
# print(obj["objects"])
for objects in obj["objects"]:
# print(objects)
if objects["category"] in categorys:
dw = 1.0 / 1280
dh = 1.0 / 720
strs += str(categorys.index(objects["category"]))
strs += " "
strs += str(((objects["box2d"]["x1"] + objects["box2d"]["x2"]) / 2.0) * dw)[0:8]
strs += " "
strs += str(((objects["box2d"]["y1"] + objects["box2d"]["y2"]) / 2.0) * dh)[0:8]
strs += " "
strs += str(((objects["box2d"]["x2"] - objects["box2d"]["x1"])) * dw)[0:8]
strs += " "
strs += str(((objects["box2d"]["y2"] - objects["box2d"]["y1"])) * dh)[0:8]
strs += "\n"
write.writelines(strs)
write.close()
print("%s has been dealt!" % info["name"])
if __name__ == "__main__":
b=Bdd2yolo()
fileList = os.listdir(b.bdd_lab)
for file in fileList:
# 自己需要从BDD数据集里提取的目标类别
b.bdd2yolo5(b.used_names, file)
yaml文件改
这个网络上有,改两个data和models下的,其中models下主要是识别类别数量变了。
计算机性能
这个数据集比较大,市场爆出内存不足错误,一般的电脑,我看还是算了,动辄以周月计算。