源码:https://github.com/WongKinYiu/yolov7
论文:https://arxiv.org/abs/2207.02696

Yolov7搭建及使用_数据集

搭建环境,这里直接用conda按照源码requirements.txt安装就行。

  • 数据准备

现成数据(VisDrone)+配置脚本(yolov7.yaml等):

数据集:官方的VisDrone格式和yolov5的不同,要转换一下

制作自己数据集(lableme标注自己图片+labelme转yolo的脚本):

强烈建议用labelme

labelme格式标注完就是一张图对应一个json:

Yolov7搭建及使用_配置文件_02

yolo格式是一个图对应一个txt:

 

Yolov7搭建及使用_配置文件_03

我是把转化完的txt和json都同一个文件夹下:

Yolov7搭建及使用_人工智能_04

 

  • 标注软件:

labelme就一个exe文件50m左右,下载地址:8q3m,windows上下载后直接执行,非常方便

  • labelme转yolov5脚本:

(只写了检测的,labelme的分割、关键点等等脚本有机会写个总的)

import os
import json
import glob
#输入口,就是你图片和json存放的那个文件,输出的txt也在这个文件夹里
labelme_dir=r"C:\Users\ttao\Pictures\my_"
def get_labelme_data(labelme_dir):
    with open(labelme_dir) as f:
        j=json.load(f)
        out_data=[]
        img_h =j["imageHeight"]
        img_w =j["imageWidth"]
        for shape in j["shapes"]:
            label=shape["label"]
            points=shape["points"]
            x,y,x2,y2=points[0][0],points[0][1],points[1][0],points[1][1]
            x_c=(x+x2)//2
            y_c=(y+y2)//2
            w=abs(x-x2)
            h=abs(y-y2)
            out_data.append([label,x_c,y_c,w,h])
    return img_h,img_w,out_data
def rename_Suffix(in_,mode=".txt"):
    in_=in_.split('.')
    return  in_[0]+mode
def make_yolo_data(in_dir):
    json_list=glob.glob(os.path.join(in_dir,'*.json'))
    for json_ in json_list:
        json_path=os.path.join(in_dir,json_)
        json_txt=rename_Suffix(json_)
        img_h,img_w,labelme_datas=get_labelme_data(json_path)
        with open(os.path.join(in_dir,json_txt),'w+') as f:
            for labelme_data in labelme_datas:
                label=labelme_data[0]
                x_c=labelme_data[1]/img_w
                y_c=labelme_data[2]/img_h
                w=labelme_data[3]/img_w
                h=labelme_data[4]/img_h
                f.write("{} {} {} {} {}\n".format(label,x_c,y_c,w,h))
            f.close()
if __name__ == '__main__':
    make_yolo_data(labelme_dir)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 训练

配置:train.py+数据集配置文件(.yaml)+选择网络的配置文件(默认为yolov7.yaml)
Visdrone数据集
数据集是无人机角度拍摄的,中国各城市的,主要是各种汽车、人等数据集
我具体配置情况如下:

 

Yolov7搭建及使用_配置文件_05

train.py

–cfg 模型选择,这里默认是yolov7
–data 数据格式配置,我这里是自己的VisDrone数据格式,训练yolo的要改,看下面训练自己数据集
–hyp 超参数,先不管
–batch-size 这个yolov7我设高了容易爆,小点
  • 1.
  • 2.
  • 3.
  • 4.

 

Yolov7搭建及使用_数据集_06

Yolov7搭建及使用_json_07