搭建公司网站需要多少钱,php如何自己做网站,惠州网站制作策划,wordpress 登录代码yolov2检测网数据集标注_labelme使用_json2txt格式转换 一、安装Anaconda二、创建labelme虚拟环境三、使用labelme标注健康非健康猫狗数据3.1 打开数据集所在文件夹3.2 进行标注数据集3.3 json2txt3.4 按文件目录和训练测试数据集重分配 四、数据喂给服务器网络参考链接 一、安… yolov2检测网数据集标注_labelme使用_json2txt格式转换 一、安装Anaconda二、创建labelme虚拟环境三、使用labelme标注健康非健康猫狗数据3.1 打开数据集所在文件夹3.2 进行标注数据集3.3 json2txt3.4 按文件目录和训练测试数据集重分配 四、数据喂给服务器网络参考链接 一、安装Anaconda
下载anacondahttps://www.anaconda.com/download/
选择自己电脑相应的版本即可具体的安装过程可自行百度。
二、创建labelme虚拟环境
打开Anaconda Prompt或者将anaconda添加到系统环境cmd命令打开也可可参考链接1。
conda create --namelabelme python3.6conda activate labelmepip install pyqt5
pip install labelme在该环境下输入labelme具体的使用方法可以参考链接2
三、使用labelme标注健康非健康猫狗数据
labelme的标注快捷键 W——新建标注框 A——上一张 D——下一张 ctrlD——复制标签选中需要复制的标签ctrlD新复制的标签重叠在原标签上拉出来就好了 ctrlS——保存 ctrl滑动鼠标——放大缩小
3.1 打开数据集所在文件夹 3.2 进行标注数据集
标签对应0 healthy_cat 300张1 unhealthy_cat 300张2 healthy_dog 300张 3 unhealthy_dog 300张
按照训练集验证集测试集 811点击Create Polygons — 鼠标放在图片上按右键选create rectangle 一定需要是矩形按两个点矩形不能旋转一定就要正矩形
因为健康非健康猫狗的区分特征主要是身体毛色等信息所以我们需要标注整体动物个体如上图所示。
说明label按照上面所提的标签进行标注Group ID可以不用填写。 为了实现标注后自动保存点击左上角的File找到Save Automatically并点击上做完标注后后自动生成json文件保存在放图片的文件夹下面成功生成后右下角小框会打勾。 可以在file list中点下一张图片也可以左边点next image为了更快标注使用快捷键A(上一张) 或 D(下一张) 进行切换图片进行标注。
3.3 json2txt
因为我们使用的是yolo检测框架其训练环境为darknet我们需要将前面得到的json标注文件转换为训练框架能够识别的格式具体格式要求如下所示
darknet标注信息的数据格式如下
Class id center_x center_y w h
对数据格式解释如下
Class id:表示标注框的类别从0开始计算当前只要手部1类检测物体故Class id全为0
center_x:表示归一化后的手部框中心点坐标的X值。归一化坐标 实际坐标 / 整个图片宽
center_y:表示归一化后的手部框中心点坐标的Y值。归一化坐标 实际坐标 / 整个图片高
w:表示归一化后的手部框的宽。归一化长度 实际长度 / 整个图片宽
h:表示归一化后的手部框的高。归一化长度 实际长度 /整个图片高下面是labelme的json格式转换为darknet所需的txt格式程序
import os
import json
import numpy as np
from PIL import Imagedef json2txt(path_json,path_txt,path_image):img Image.open(path_image)w img.width #图片的宽h img.height #图片的高with open(path_json,r, encodinggb18030) as path_json:jsonxjson.load(path_json)with open(path_txt,w) as ftxt:for shape in jsonx[shapes]:xynp.array(shape[points])seq []#print(xy[1][1]) #xy[1]表示第二个点的坐标xy[1][1]表示第四个值即第二点的y坐标center_x (xy[0][0] xy[1][0])/2/w #归一化后的中心点坐标的X值center_y (xy[0][1] xy[1][1])/2/h #归一化后的中心点坐标的Y值pet_w abs(xy[0][0] - xy[1][0])/w #归一化后的宽pet_h abs(xy[0][1] - xy[1][1])/h # 归一化后的高# for m,n in xy:# seq.append(str(m) str(n))#info 0 center_x center_y pet_w pet_h# 0健康猫 1非健康猫 2健康狗 3非健康狗ftxt.writelines( 2 %.5f %.5f %.5f %.5f % (center_x, center_y, pet_w, pet_h) \n) ## ftxt.writelines( .join(seq)\n) #\n换行#join(),str -;举例seq (a, b, c); # 字符串序列 print str.join( seq ); 结果a-b-cdir_json C:/Users/tanhui/Desktop/code/cat_dog_dataset/user_json/3_unhealthy_dogs/ #json路径
dir_txt C:/Users/tanhui/Desktop/code/cat_dog_dataset/user_txt/3_unhealthy_dogs/ #存取的txt路径
dir_image C:/Users/tanhui/Desktop/code/cat_dog_dataset/user_jpg/3_unhealthy_dogs/ #图片的路径if not os.path.exists(dir_txt):os.makedirs(dir_txt)
list_json os.listdir(dir_json)
list_image os.listdir(dir_image)for cnt,json_name in enumerate(list_json):path_json dir_json json_namepath_image dir_image list_image[cnt] #image_namelist_image[cnt]print(cnt%d,name%s,image%s % (cnt, json_name, list_image[cnt]))path_txt dir_txt json_name.replace(.json,.txt)json2txt(path_json, path_txt, path_image)
3.4 按文件目录和训练测试数据集重分配
如图是训练集和测试集文件夹结构 JPEGImages放的是原始图像labels放的是json2txt后的darknet标注格式信息list存放的是原始图像的全局路径放在服务器上的路径 接下来给出写入原始图像路径到list中的程序
import os# 指定图片所在路径
img_dir rcat_dog_dataset\training_dataset\JPEGImages# 自定义输出文件路径和文件名
output_file rcat_dog_dataset\training_dataset\list\cat_dog_train.txt# 自定义写入txt文件的内容
txt_path /home/nicta100-s12/ai/cat_dog_detect/training_dataset/JPEGImages #服务器绝对路径# 写入文件
with open(output_file, w) as f:# 循环遍历所在路径下所有文件for filename in os.listdir(img_dir):filepath os.path.join(img_dir, filename)path os.path.join(txt_path, filename)path path.replace(\\, /) # 将路径中的反斜杠替换为正斜杠# 判断是否为图片文件if os.path.isfile(filepath) and (filepath.endswith(.jpg) or filepath.endswith(.png)):# 将图片路径写入输出文件中f.write(path \n)
四、数据喂给服务器网络
# test_dataset为测试数据
# training_dataset为训练数据
# JPEGImages目录下是需要进行训练的数据集图片
# labels目录下的txt是JPEGImages目录下对应图片所标注的labels
# list目录下的hand_train.txt文件中保存的是JPEGImages目录下所有图片的绝对路径。
# 注意所有的txt文件都必须是linux格式的可以使用 dos2unix 工具进行文件格式的转换
# 使用方法 dos2unix filename 如果还不知道如何使用可上网咨询度娘注意所有的txt文件都必须是linux格式的(包括了标签txt)可以使用 dos2unix 工具进行文件格式的转换
使用方法 dos2unix filename 如果还不知道如何使用可上网咨询度娘
sudo apt-get install dos2unix # 如果服务器没有dos2unix这个软件的话执行这条命令先进行安装dos2unix hand_test.txt # 修改某个文件的文件格式dos2unix * # 修改该目录下的所有文件的文件格式DOS2UNIX 安装与使用简介 (gnss.help)
参考链接 Anaconda3安装深度学习标记工具labelme 数据标注软件labelme详解