美文网首页
anaconda环境下实现SiamCAR

anaconda环境下实现SiamCAR

作者: 花卷呀花卷 | 来源:发表于2020-10-13 14:42 被阅读0次

    文章地址:http://openaccess.thecvf.com/content_CVPR_2020/html/Guo_SiamCAR_Siamese_Fully_Convolutional_Classification_and_Regression_for_Visual_Tracking_CVPR_2020_paper.html
    代码地址:https://github.com/ohhhyeahhh/SiamCAR

    【一】从github上下载代码

    image.png

    【二】通过conda进入项目

    image.png image.png image.png

    根据官方提供步骤,使用命令配置环境。
    由于大部分模块我已经安装好,直接根据requirement.txt提示安装相对应的模块就行。
    因此使用pip install XXX 安装原来环境中没有的模块

    【三】下载模型和数据集json文件

    image.png

    模型下载好后,项目文件下新建snapshot


    image.png

    数据集json文件下载后可以存放在pretrained_models下


    image.png

    文档训练提供的代码训练的是UAV123数据集,因此下载UAV123数据集。
    UAV123总共有13G,如果只是测试用,只用下最小的那个压缩包(1.8G)。
    这篇博文中有下载地址:https://blog.csdn.net/sinat_27318881/article/details/85211053

    image.png

    打开UAV123目录下的data_seq


    image.png

    然后随便选一个数据集,我选的是bike1


    image.png

    在SiamCAR同级目录下新建testing_dataset。

    image.png

    在testing_dataset新建文件夹UAV123,放入UAV123数据集和json文件


    image.png

    修改UAV123.json文件
    只测试bike1这个序列集,因此在UAV123.json中找到bike1


    image.png

    把bike1相关数据复制另存为一份新的json,并命名为UAV123.json,新保存的json文件一定要包含以下几个属性


    image.png

    为了提高测试速度,特地删了bike1文件下的图片,只保留了200张,因此,UAV123.json中的img_names也只保留200张图片名

    以下为更改后文件夹目录


    image.png

    【四】运行

    把tools下test.py复制一份到SiamCAR-master/test.py
    [图片上传中...(image.png-44d81c-1602570317165-0)]

    image.png

    运行时在官网提供文档的命令后面再加上 --vis 显示出视频


    image.png image.png

    【五】利用该算法跑自己的视频

    1.注释创建数据集的方法,复制test.py命名为test2.py,即SiamCAR-master/test2.py

    image.png

    2.用cv的方法读取视频帧,然后循环遍历帧,为每一帧画框

        # 读视频 分割成帧
        videoFile = 'E:/lqj/testing_dataset/garbage/garbage.mp4'
        capture = cv2.VideoCapture(videoFile)
        height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT)  # 视频高度
        width = capture.get(cv2.CAP_PROP_FRAME_WIDTH)  # 视频宽度
        count = capture.get(cv2.CAP_PROP_FRAME_COUNT)  # 视频总帧数
        fps = capture.get(cv2.CAP_PROP_FPS)  # 视频帧率
    
        print("count is %d , fps is %d " % (count, fps))
    
        out = cv2.VideoWriter('E:/lqj/testing_dataset/garbage/garbage_new.mp4', cv2.VideoWriter_fourcc('D', 'I', 'V', 'X'),
                              15, (np.int(width), np.int(height)), True)
        out_path = 'E:/lqj/testing_dataset/garbage/output/'
    
        if not os.path.isdir(out_path):
            os.makedirs(out_path)
    
        frameNum = 0
        model_name = args.snapshot.split('/')[-2] + str(hp['lr']) + '_' + str(hp['penalty_k']) + '_' + str(hp['window_lr'])
    
        
        i = 0
        #初始第一帧图片的位置和大小
        gt_bbox = [540, 0, 41, 45]
    
        while True:
            ret, frame = capture.read()
    
            #给将每一帧图片画框
            img = frame
    
            toc = 0
            pred_bboxes = []
            track_times = []
    
            tic = cv2.getTickCount()
    
            if i == 0:
                cx, cy, w, h = get_axis_aligned_bbox(np.array(gt_bbox))
                gt_bbox_ = [cx - (w - 1) / 2, cy - (h - 1) / 2, w, h]
                tracker.init(img, gt_bbox_)
                pred_bbox = gt_bbox_
                pred_bboxes.append(pred_bbox)
            else:
                outputs = tracker.track(img, hp)
                pred_bbox = outputs['bbox']
                pred_bboxes.append(pred_bbox)
            toc += cv2.getTickCount() - tic
            track_times.append((cv2.getTickCount() - tic) / cv2.getTickFrequency())
    
            i += 1
    
            if i == 0:
                cv2.destroyAllWindows()
    
            if args.vis and i > 0:
                if not any(map(math.isnan, gt_bbox)):
    
                    pred_bbox = list(map(int, pred_bbox))
    
                    cv2.rectangle(img, (pred_bbox[0], pred_bbox[1]),
                                  (pred_bbox[0] + pred_bbox[2], pred_bbox[1] + pred_bbox[3]), (0, 255, 255), 3)
                    cv2.putText(img, str(i), (40, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2)
                    cv2.imshow('garbage', img)
                    cv2.waitKey(1)
    
    
            frameNum = frameNum + 1
            if frameNum % 2 == 0:  # 调整帧数
                cv2.imwrite(out_path + 'vieo1_' + str(frameNum) + ".jpg", frame)  # 保存图片
    
            # if ret is True:
            #     cv2.imshow("video-input", frame)
            #     out.write(frame)
            #
            #     c = cv2.waitKey(50)
            #     if c == 27:  # ESC
            #         break
            #     else:
            #         break
    
        toc /= cv2.getTickFrequency()
    
    
        # save results
    
        model_path = os.path.join('results', 'garbage', model_name)
        if not os.path.isdir(model_path):
            os.makedirs(model_path)
        result_path = os.path.join(model_path, 'garbage.txt')
        with open(result_path, 'w') as f:
            for x in pred_bboxes:
                f.write(','.join([str(i) for i in x]) + '\n')
    
        #os.chdir(model_path)
        capture.release()
        out.release()
    
        print('well done')
    

    用画图工具获取第一帧图片中目标所在位置及大小(x, y, w, h)


    image.png

    3.运行看效果

    image.png image.png

    我修改的代码不是很好,还是有报错

    相关文章

      网友评论

          本文标题:anaconda环境下实现SiamCAR

          本文链接:https://www.haomeiwen.com/subject/fdxvpktx.html