基于yolo提取车和人的检测与图像裁剪

本文介绍了如何在YOLO算法基础上,针对Ubuntu16.04环境,利用CUDA和OpenCV进行车和人的目标检测,并剔除其他标签。作者分享了在draw_detections函数中筛选人和车的方法,以及如何将一维数组转换为二维图像进行裁剪,以满足实验室的姿势识别需求。
摘要由CSDN通过智能技术生成

   这次换一个严谨的写作风格。因为之前在做yolo算法移植到ros上面,已经成功了,但是实验室老师又出了做姿势识别的幺蛾子。我真是一万个。。。。无语了。感觉,对深度学习只有一个简单的了解,现在还在读很多有关的论文,一边看cs231n的课程,在自学着入门。但是奈何自己的实战能力太差,实战经验太少了,只是学过那一年的c,很多关于指针的操作什么的,真的太差了,现在还在教一个小孩c语言,我都不好意思教人家了,决定从这星期开始,每天刷一些c的基础知识题,真的得好好补补了。

    回到正题,环境仍然是ubuntu16.04+cuda9.0+NVIDIA GTX1050+OPENCV3.4.1,首先解决第一个问题,在yolo的基础上,提取人和车,其他的标签过滤掉。有两个解决方法,一个是自己训练车和人的训练库,另一个就是在程序中剔除出人和车以外的标签。第一个方法原来想做一下,但是看网上真正做过的,可能要训练一个星期,而且可能需要在服务器上训练,因为真的没做过,时间催的很紧,只能采取第二种方法了,等后面有时间了,一定自己训练一下,试一下,真正做过才能有话语权。那就来说一下,是怎么在程序里面实现的剔除其他标签的。首先,要明确是在,image.c里面的draw_detections这个函数里面去改动。

for(i = 0; i < num; ++i){
        char labelstr[4096] = {0};
        int class = -1;
        for(j = 0; j < classes; ++j){
            if (probs[i][j] > thresh){
            printf("probs:%f\n", probs[i][j]);
                if (class < 0) {
                    strcat(labelstr, names[j]);
                    class = j;
                } else {
                    strcat(labelstr, ", ");
                    strcat(labelstr, names[j]);
                }
                printf("%s: %.0f%%\n", names[j], probs[i][j]*100);
            }

        }

    在这个for循环里,num是检测到的物体个数,classes是能够检测的物体种类,这里的classes是80,说明yolov2能检测80个种类的物体,这里的for循环在筛选概率大于阈值然后输出概率的类别和大小。

int left  = (b.x-b.w/2.)*im.w;
            int right = (b.x+b.w/2.)*im.w;
   

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值