yolov3实现之coco数据集目标检测准备

17 篇文章 0 订阅
6 篇文章 1 订阅

coco数据集不仅可以用于做目标检测还可以用于进行语义分割,这里主要讲解基于yolov3进行目标检测的数据准备。由于coco数据集的标签信息是以.json的格式存储的,因此有必要转换为具体的格式来进行模型训练与评估。具体的实现方式如下:

# -*- coding: utf-8 -*-
"""
Created on Tue Jul  2 11:41:44 2019

@author: Administrator
"""
#from __feature__ import print_function
import os,sys,zipfile
import json
import glob


def convert(size,box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = box[0] + box[2] / 2.0
    y = box[1] + box[3] / 2.0
    w = box[2]
    h = box[3]
    
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    
    return (x,y,w,h)


def get_coco_data(path):
    
    data = json.load(open(path,'r'))
    imgs = data['images']
    annotations = data['annotations']
    
    print(len(imgs))
    
    
    for img in imgs:
        filename = img['file_name']
        img_w = img['width']
        img_h = img['height']
        img_id = img['id']
        ana_txt_name = filename.split('.')[0] + '.txt'
        
        f_txt = open(os.path.join('./labels',ana_txt_name),'w')
        for ann in annotations:
            if ann['image_id'] == img_id:
                box = convert((img_w,img_h),ann['bbox'])
                f_txt.write('%s %s %s %s %s\n'%(ann['category_id'],box[0],box[1],box[2],box[3]))
        
        f_txt.close()
    




def get_file_name(path,save_name):
    
    filenames = list(glob.iglob(os.path.join(path,'*.txt')))
    
    print('file_len = ',len(filenames))
  
    f_txt = open(save_name,'w')
    for filename in filenames:
        img_name = filename.split('.')[1]
        img_name = img_name.split('\\')[-1]
        f_txt.write('%s\n'%(img_name))
    
    f_txt.close()
    




def get_img_name(path,save_name):

    imgnames = list(glob.iglob(os.path.join(path,'*.jpg')))
    print('img_len = ',len(imgnames))
    
    f_txt = open(save_name,'w')
    for imgname in imgnames:
        imgname = imgname.split('.')[-2]
        imgname = imgname.split('\\')[-1]
        f_txt.write('%s\n'%(imgname))
    
    f_txt.close()
    



def save_img_path(path,save_name):
    
    filenames = list(glob.iglob(os.path.join(path,'*.jpg')))
    
    f_txt = open(save_name,'w')
    for filename in filenames:
        filename0 = filename.split('\\')[0]
        filename1 = filename.split('\\')[-1]
        filename2 = filename0 + '/' + filename1
        f_txt.write('%s'%(filename2))
    
    f_txt.close()




if __name__ == '__main__':
    
    #存储数据的类别和标签信息,每张图片对应一个txt文件
    #path = 'F:/dataset/coco2017/annotations/instances_val2017.json'
    #get_coco_data(path)
    
    
    
    #保存图像的具体路径信息
    save_img_path('F:/dataset/coco2017/train2017/images','train.txt')
    #save_img_path('F:/dataset/coco2017/val2017/images','val.txt')

具体可以根据自己的数据集路径,对上面的代码做适当的修改就可以获取v3模型训练与评估所需要的格式了。

这里的存储如下:

images的内容,仅展示部分:

labels的内容,仅展示部分:

具体的标签信息,以第一个为例:

水平有限,若有不当之处,请指教,谢谢!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值