地质矿物相关的数据接触的比较少,也没有什么经验,今天正好有时间,就想着基于人工生成的数据集来开发构建目标检测系统,首先看下效果图:
数据集是人工合成的,所以看起来比较突兀,如下:
核心方法就是PIL的paste,组合使用的好的话,可以做出来各种各样的数据集。
YOLO格式数据标注文件如下:
VOC格式数据标注文件如下:
数据集随机划分代码如下:
pic_ids_list = [
one.split(".")[0].strip() for one in os.listdir(dataDir + "labels/")
]
print("pic_ids_list_length: ", len(pic_ids_list))
train_num = int(train_ratio * len(pic_ids_list))
train_list = random.sample(pic_ids_list, train_num)
test_list = [one for one in pic_ids_list if one not in train_list]
print("train_list_length: ", len(train_list))
print("test_list_length: ", len(test_list))
# 创建存储目录-测试集
testImgDir = saveDir + "images/test/"
testTxtDir = saveDir + "labels/test/"
if not os.path.exists(testImgDir):
os.makedirs(testImgDir)
if not os.path.exists(testTxtDir):
os.makedirs(testTxtDir)
for one_id in test_list:
if id_flag:
new_id = str(uuid.uuid4())
else:
new_id = one_id
shutil.copy(dataDir + "images/" + one_id + ".jpg", testImgDir + new_id + ".jpg")
shutil.copy(dataDir + "labels/" + one_id + ".txt", testTxtDir + new_id + ".txt")
print(
"================================Test Dataset Build Success================================"
)
"""
关注微信公众号
pythonAI之路
获取第一手学习更新进度
"""
# 创建存储目录-训练集
trainImgDir = saveDir + "images/train/"
trainTxtDir = saveDir + "labels/train/"
if not os.path.exists(trainImgDir):
os.makedirs(trainImgDir)
if not os.path.exists(trainTxtDir):
os.makedirs(trainTxtDir)
for one_id in pic_ids_list:
if id_flag:
new_id = str(uuid.uuid4())
else:
new_id = one_id
shutil.move(
dataDir + "images/" + one_id + ".jpg", trainImgDir + new_id + ".jpg"
)
shutil.move(
dataDir + "labels/" + one_id + ".txt", trainTxtDir + new_id + ".txt"
)
print(
"================================Train Dataset Build Success================================"
)
默认参数训练100次,结果如下:
【F1】
数据可视化
【PR曲线】
训练可视化:
batch实例:
可视化推理实例如下: