基于jetson nano和yolov5 的 车行人检测(一)

毕业设计ing,但中途要出去一波。做个记录,备忘。

基于jetson nano和yolov5 的 车行人检测。

目前已经做的工作:

1、数据集的制作,原本是用的老师给的自己拍的一些数据(含夜间),但效果一般。更换BDD100K的智能驾驶数据集。

但智能驾驶的数据集的分类有10种,还有一些比较小的目标,不能直接拿过来用。

这里的工作进行了数据清洗,将小目标去除(小于图片的千分之一),将非人和车的标签去除,并将其转化成yolo格式数据集。

参考两位博主的代码:

【玩转yolov5】使用bdd100k数据集训练行人和全车模型,链接:https://blog.csdn.net/ChuiGeDaQiQiu/article/details/113415081

 bdd100k数据集制作用于YOLOv3训练,链接:https://blog.csdn.net/fly_wt/article/details/98957748

我整合了一下生成了试用我自己的。(保留夜间)

import json

# 这里是我需要的10个类别
categorys = ['car', 'bus', 'person', 'bike', 'truck', 'motor', 'train', 'rider', 'traffic sign', 'traffic light']

##但我想归类 将 car bus truck  0 1 4归为一类  0     2 person归为一类  1


def parseJson(jsonFile):
    '''
      params:
        jsonFile -- BDD00K数据集的一个json标签文件
      return:
        返回一个列表的列表,存储了一个json文件里面的方框坐标及其所属的类,
    '''
    objs = []
    obj = []
    info = jsonFile
    name = info['name']
    objects = info['labels']
    for i in objects:
        if (i['category'] in categorys):
            obj.append(int(i['box2d']['x1']))
            obj.append(int(i['box2d']['y1']))
            obj.append(int(i['box2d']['x2']))
            obj.append(int(i['box2d']['y2']))
            obj.append(i['category'])
            objs.append(obj)
            obj = []
    # print("objs",objs)
    return name, objs


# test

f = open("labels/train/bdd100k_labels_images_train.json")
info = json.load(f)
objects = info
n = len(objects)  ##图片个数
thr=0.001
for i in range(n):  #每一张图片的操作
    name, result = parseJson(objects[i])  ##result一张图片的所有个标注信息
    yolotxt = open('F:/data/bdd100k/images/labels2/train/'+name.replace('.jpg','')+'.txt', mode='w')##新建的txt
    stryolos=''  ##txt格式内容
    for j in range(len(result)):
        cls_id = categorys.index(result[j][4])
        ##归类
        if( cls_id not in [0,1,2,4]):
            continue
        if (cls_id in [0,1,4]):
            cls_id=0
        if(cls_id == 2):
            cls_id=1

        cx=(result[j][0]+result[j][2])/2

        cy = (result[j][1] + result[j][3]) / 2

        w=abs(result[j][0]-result[j][2])

        h=abs(result[j][1]-result[j][3])
        ##标记图像太小删除
        if(w*h<thr * 1280*720):
            continue

        if([cx,cy,w,h].count(0)>0):
            continue
        h=h/720
        cx = cx/ 1280
        w = w / 1280
        cy = cy/ 720

        stryolo= str(cls_id)+ ' '+str(format(cx,'.6f'))+' '+str(format(cy,'.6f'))+' '+str(format(w,'.6f'))+' '+str(format(h,'.6f'))+'\n'

        stryolos+=stryolo
    print(stryolos)
    yolotxt.write(stryolos)
    # print(len(result))
import json

# 这里是我需要的10个类别
categorys = ['car', 'bus', 'person', 'bike', 'truck', 'motor', 'train', 'rider', 'traffic sign', 'traffic light']

##但我想归类 将 car bus truck  0 1 4归为一类  0     2 person归为一类  1


def parseJson(jsonFile):
    '''
      params:
        jsonFile -- BDD00K数据集的一个json标签文件
      return:
        返回一个列表的列表,存储了一个json文件里面的方框坐标及其所属的类,
    '''
    objs = []
    obj = []
    info = jsonFile
    name = info['name']
    objects = info['labels']
    for i in objects:
        if (i['category'] in categorys):
            obj.append(int(i['box2d']['x1']))
            obj.append(int(i['box2d']['y1']))
            obj.append(int(i['box2d']['x2']))
            obj.append(int(i['box2d']['y2']))
            obj.append(i['category'])
            objs.append(obj)
            obj = []
    # print("objs",objs)
    return name, objs


# test

f = open("labels/train/bdd100k_labels_images_train.json")
info = json.load(f)
objects = info
n = len(objects)  ##图片个数
thr=0.001
for i in range(n):  #每一张图片的操作
    name, result = parseJson(objects[i])  ##result一张图片的所有个标注信息
    yolotxt = open('F:/data/bdd100k/images/labels2/train/'+name.replace('.jpg','')+'.txt', mode='w')##新建的txt
    stryolos=''  ##txt格式内容
    for j in range(len(result)):
        cls_id = categorys.index(result[j][4])
        ##归类
        if( cls_id not in [0,1,2,4]):
            continue
        if (cls_id in [0,1,4]):
            cls_id=0
        if(cls_id == 2):
            cls_id=1

        cx=(result[j][0]+result[j][2])/2

        cy = (result[j][1] + result[j][3]) / 2

        w=abs(result[j][0]-result[j][2])

        h=abs(result[j][1]-result[j][3])
        ##标记图像太小删除
        if(w*h<thr * 1280*720):
            continue

        if([cx,cy,w,h].count(0)>0):
            continue
        h=h/720
        cx = cx/ 1280
        w = w / 1280
        cy = cy/ 720

        stryolo= str(cls_id)+ ' '+str(format(cx,'.6f'))+' '+str(format(cy,'.6f'))+' '+str(format(w,'.6f'))+' '+str(format(h,'.6f'))+'\n'

        stryolos+=stryolo
    print(stryolos)
    yolotxt.write(stryolos)
    # print(len(result))

2:放入yolov5 训练...(没啥好说的)试用yolov5s模型。

放几张结果图:效果还行,后期不行再换模型,加数据。我这只用了10000张图片。

 

emmm,有点长,下一篇讲jetson nano上的工作。

 

 

 

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
YOLOv5是一种目标检测深度学习算法,它在推理速度和精度上都有较好的性能。要在Jetson Nano上部署YOLOv5目标检测,可以按照以下步骤进行操作: 1. 首先,需要将训练好的YOLOv5s权重文件转换为wts文件格式。然后,使用build工具将wts文件转换为TensorRT的engine文件。这样就可以对输入的Tensors进行加速处理并得到推理的输出结果。\[2\] 2. 在Jetson Nano上部署YOLOv5目标检测,还需要修改文件夹DeepStream-Yolo/external/yolov5/nvdsinfer_custom_impl_Yolo下的文件yololayer.h和yololayer.cu,以使其可以在YOLOv5 V4.0上正常工作。\[3\] 通过以上步骤,你就可以在Jetson Nano上成功部署YOLOv5目标检测算法了。希望对你有所帮助! #### 引用[.reference_title] - *1* *2* [Jetson Nano 部署(1):YOLOv5 目标检测实战介绍](https://blog.csdn.net/weixin_38346042/article/details/126399006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Jetson Nano部署实现(一)——Yolov5目标检测-Jetson Nano部署](https://blog.csdn.net/qq_40305597/article/details/117320573)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值