【faster rcnn 实现via的自动框人】使用detectron2中faster rcnn 算法生成人的坐标,将坐标导入via(VGG Image Annotator)中,实现自动框选出人的区域

前言

B站讲解视频
我的研究生毕业论文方向就是时空行为检测,所以,slowfast和ava是我重点搞的,我的博客主页也有很多这些相关内容。

终于,到了标注数据这一块了,为了更简单的标注数据,我要做的这部分的数据包含大量的人,每张图片有30到40个人,如果要手动框人,再做行为标注,那是非常大的工作量,为了减小工作量,先使用faster rcnn把人的坐标算出来,然后倒入via中,实现算法的自动框人。

1 准备

1.1 detectron2安装及faster rcnn运行

1.1.1 detectron2官方网站

  • detectron2项目地址
  • detectron2文档

1.1.2 安装步骤

安装:

pip install -U torch torchvision cython
pip install -U 'git+https://github.com/facebookresearch/fvcore.git' 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'
git clone https://github.com/facebookresearch/detectron2 detectron2_repo
pip install -e detectron2_repo

1.1.3 Faster RCNN目标检测

在终端输入:

python3 demo.py --config-file ../configs/COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml \--input ../img/1.jpg \--output ../img/1_1.jpg \--opts MODEL.WEIGHTS detectron2://COCO-Detection/faster_rcnn_R_50_FPN_3x/137849458/model_final_280758.pkl

1.1.4 参考

【Faster RCNN & detectron2】detectron2实现Faster RCNN目标检测

1.2 via的安装及使用

安装很简单,下载下来后,点开via.html就可以了

下载及使用指南:via官网

我下载的是2.0的版本,如下
在这里插入图片描述

2 faster rcnn 算法导出人类候选框为via格式

2.1 新建python脚本

在目录/detectron2_repo/demo/下新建一个python脚本,名字为:myvia.py

在这里插入图片描述
将下面的代码复制到myvia.py中

#Copyright (c) Facebook, Inc. and its affiliates.
import argparse
import glob
import multiprocessing as mp
import os
import time
import cv2
import tqdm
import osfrom detectron2.config import get_cfg
from detectron2.data.detection_utils import read_image
from detectron2.utils.logger import setup_loggerfrom predictor import VisualizationDemoimport csv
import pandas as pd  #导入pandas包
import re# constants
WINDOW_NAME = "COCO detections"def setup_cfg(args):# load config from file and command-line argumentscfg = get_cfg()# To use demo for Panoptic-DeepLab, please uncomment the following two lines.# from detectron2.projects.panoptic_deeplab import add_panoptic_deeplab_config  # noqa# add_panoptic_deeplab_config(cfg)cfg.merge_from_file(args.config_file)cfg.merge_from_list(args.opts)# Set score_threshold for builtin modelscfg.MODEL.RETINANET.SCORE_THRESH_TEST = args.confidence_thresholdcfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = args.confidence_thresholdcfg.MODEL.PANOPTIC_FPN.COMBINE.INSTANCES_CONFIDENCE_THRESH = args.confidence_thresholdcfg.freeze()return cfgdef get_parser():parser = argparse.ArgumentParser(description="Detectron2 demo for builtin configs")parser.add_argument("--config-file",default="configs/quick_schedules/mask_rcnn_R_50_FPN_inference_acc_test.yaml",metavar="FILE",help="path to config file",)parser.add_argument("--webcam", action="store_true", help="Take inputs from webcam.")parser.add_argument("--video-input", help="Path to video file.")parser.add_argument("--input",nargs="+",help="A list of space separated input images; ""or a single glob pattern such as 'directory/*.jpg'",)parser.add_argument("--output",help="A file or directory to save output visualizations. ""If not given, will show output in an OpenCV window.",)parser.add_argument("--confidence-threshold",type=float,default=0.5,help="Minimum score for instance predictions to be shown",)parser.add_argument("--opts",help="Modify config options using the command-line 'KEY VALUE' pairs",default=[],nargs=argparse.REMAINDER,)return parserif __name__ == "__main__":mp.set_start_method("spawn", force=True)args = get_parser().parse_args()setup_logger(name="fvcore")logger = setup_logger()logger.info("Arguments: " + str(args))#图片的输入和输出文件夹imgOriginalPath = './img/original/'imgDetectionPath= './img/detection'# 读取文件下的图片名字for i,j,k in os.walk(imgOriginalPath):# k 存储了图片的名字#imgInputPaths用于存储图片完整地址imgInputPaths = kcountI=0for namek in k:#循环将图片的完整地址加入imgInputPaths中imgInputPath = imgOriginalPath + namekimgInputPaths[countI]=imgInputPathcountI = countI + 1break#修改args里输入图片的里路径args.input = imgInputPaths#修改args里输出图片的路径args.output = imgDetectionPathcfg = setup_cfg(args)demo = VisualizationDemo(cfg)#创建csvcsvFile = open("./img/detection.csv", "w+",encoding="gbk") #创建写的对象CSVwriter = csv.writer(csvFile)     #先写入columns_name #写入列的名称CSVwriter.writerow(["filename","file_size","file_attributes","region_count","region_id","region_shape_attributes","region_attributes"])     #写入多行用CSVwriter#写入多行#CSVwriter.writerows([[1,a,b],[2,c,d],[3,d,e]])#csvFile.close()#https://blog.csdn.net/xz1308579340/article/details/81106310?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.controlif args.input:if len(args.input) == 1:args.input = glob.glob(os.path.expanduser(args.input[0]))assert args.input, "The input path(s) was not found"for path in tqdm.tqdm(args.input, disable=not args.output):# use PIL, to be consistent with evaluationimg = read_image(path, format="BGR")start_time = time.time()predictions,visualized_output = demo.run_on_image(img)#只要检测结果是人的目标结果mask = predictions["instances"].pred_classes == 0pred_boxes = predictions["instances"].pred_boxes.tensor[mask]#在路径中正则匹配图片的名称ImgNameT = re.findall(r'[^\\/:*?"<>|\r\n]+$', path)ImgName = ImgNameT[0]#获取图片大小(字节)ImgSize = os.path.getsize(path)#下面的为空(属性不管)img_file_attributes="{"+"}"#每张图片检测出多少人img_region_count = len(pred_boxes)#region_id表示在这张图中,这是第几个人,从0开始数region_id = 0#region_attributes 为空img_region_attributes = "{"+"}"#循环图中检测出的人的坐标,然后做修改,以适应viafor i in pred_boxes:#将i中的数据类型转化为可以用的数据类型(list)iList = i.cpu().numpy().tolist()#数据取整,并将坐标数据放入到img_region_shape_attributes = {"\"name\"" : "\"rect\"" , "\"x\"" : int(iList[0]) , "\"y\"" : int(iList[1]) ,"\"width\"" : int(iList[2]-iList[0]) , "\"height\"" : int(iList[3]-iList[1]) }#将信息写入csv中CSVwriter.writerow([ImgName,ImgSize,'"{}"',img_region_count,region_id,str(img_region_shape_attributes),'"{}"'])region_id = region_id + 1logger.info("{}: {} in {:.2f}s".format(path,"detected {} instances".format(len(predictions["instances"]))if "instances" in predictionselse "finished",time.time() - start_time,))if args.output:if os.path.isdir(args.output):assert os.path.isdir(args.output), args.outputout_filename = os.path.join(args.output, os.path.basename(path))else:assert len(args.input) == 1, "Please specify a directory with args.output"out_filename = args.outputvisualized_output.save(out_filename)else:cv2.namedWindow(WINDOW_NAME, cv2.WINDOW_NORMAL)cv2.imshow(WINDOW_NAME, visualized_output.get_image()[:, :, ::-1])if cv2.waitKey(0) == 27:break  # esc to quit#关闭csv    csvFile.close()

2.2 相关文件

2.2.1 img

在detectron2_repo/目录下新建img文件,这个文件用来存储输入和输出图片
在这里插入图片描述

2.2.2 original、detection、detection.csv

在img文件夹下创建original、detection、detection.csv

original用于存放输入的图片
detection用于存放检测后的图片
detection.csv是faster rcnn算法计算出来的人的坐标数据,然后转换为via可是别的csv文档
在这里插入图片描述

2.3 图片上传

在original文件夹中上传图片,注意顺序,这个顺序要和后面via图片顺序一致
在这里插入图片描述

2.4 运行

准备好上面的后,在终端进入/detectron2_repo的目录,输入下面的命令:

python3 ./demo/myvia.py --config-file configs/COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml  --opts MODEL.WEIGHTS detectron2://COCO-Detection/faster_rcnn_R_50_FPN_3x/137849458/model_final_280758.pkl

在这里插入图片描述

在这里插入图片描述

2.5 查看detection.csv

接下来查看csv文件,结果如下:
在这里插入图片描述

3 via自动标注

3.1 进入via

首先进入到via的界面

下图是从从官网下载的2.0版本的via,点开via.html
在这里插入图片描述
下图是进入via后的样子
在这里插入图片描述

3.2 导入图片

点击下图显示的 Add Files
在这里插入图片描述

选择多个图片

在这里插入图片描述

导入图片后的样子
在这里插入图片描述

3.4 修改detection.csv

使用notpad++(其它编译器也可以)打开detection.csv,如下图

在这里插入图片描述
使用替换功能,把全文的单引号全部删除(我使用替换功能,把 ’ 替换为 空),如下图所示
在这里插入图片描述

3.3 导入detection.csv

在Annotation中选择 Import Annotations (from csv),在这里把detection.csv添加
在这里插入图片描述
导入csv后,就应该出现如下结果:

在这里插入图片描述

在这里插入图片描述
这些人就被自动框出来了。

任何程序错误,以及技术疑问或需要解答的,请添加

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员精美简历Top榜—面试必备

听说你最近打算换工作&#xff1f;听说你和好工作之间&#xff0c;只差一个漂亮的简历模板&#xff1f; 不管是主动离职&#xff0c;还是“被离职”&#xff08;稳住&#xff0c;我们能赢&#xff01;&#xff09;&#xff0c;趁着大好时光和对新年的憧憬&#xff0c;再找一个…

失败创业者的告白:初创团队应有一位绝对领导者

做了两年的项目失败了&#xff0c;我们的项目做的是数码3C的优惠信息&#xff0c;我是一个80后&#xff0c;小硕一枚;我们的1号创始人是90后&#xff0c;有激情、有梦想;在十八岁那年带上他的梦想千里北上&#xff0c;找我们的开复老师指点一二;但那时&#xff0c;开复老师正为…

【ffmpeg裁剪视频faster rcnn自动检测 via】全自动实现ffmpeg将视频切割为图片帧,再使用faster rcnn将图片中的人检测出来,最后将检测结果转化为via可识别的csv格式

目录 前言一&#xff0c;ffmpeg 自动裁剪 1.1 目录结构1.2 cutVideoToImage.sh1.2 myVideo1.3 myVideo15mins1.5 myFrames1.6 运行1.7 查看结果二&#xff0c;detectron2中的faster rcnn检测 2.1 img2.2 myvia.py2.3 运行2.4 结果展示三&#xff0c;via标注 3.1 csv文件修改&am…

ubuntu20.10(Linux)在wine下用pyinstaller打包python程序在window系统运行 交叉编译

1.安装wine 在终端中输入&#xff1a; sudo apt-get install wine2.安装pip 在https://pypi.org/project/pip/#files下载pip-21.0.tar.gz&#xff0c;在压缩包上右键提取到此处&#xff0c;打开解压的文件夹pip-21.0 在该文件夹中打开终端安装pip-21.0.tar.gz&#xff1a; wi…

JVM(六)为什么新生代有两个Survivor分区?

本文会使用排除法的手段&#xff0c;来讲解新生代的区域划分&#xff0c;从而让读者能够更清晰的理解分代回收器的原理&#xff0c;在开始之前我们先来整体认识一下分代收集器。 分代收集器会把内存空间分为&#xff1a;老生代和新生代两个区域&#xff0c;而新生代又会分为&a…

【slowfast复现 训练】训练过程 制作ava数据集 复现 SlowFast Networks for Video Recognition 训练 train

目录 前言一&#xff0c;ava相关文件准备 1.1 空间准备&#xff08;500G&#xff09;1.2 整体ava文件结构1.3 frames文件1.4 frame_lists 文件1.5 annotations 文件二&#xff0c;预训练模型三&#xff0c;配置文件 3.1 创建新的yaml文件3.2 yaml文件解释四&#xff0c;训练前言…

Qt6 在线安装图文步骤

说明&#xff1a; Qt 自从5.15版本开始&#xff0c;对非商业版本&#xff0c;也就是开源版本&#xff0c;不提供已经制作好的离线exe安装包&#xff0c;自这个版本开始你只有两种选择&#xff1a; 1、编译源码 例如qt-everywhere-src-5.15.2.zip 编译步骤繁琐&#xff0c;需严…

【slowfast 减少ava数据集】将ava数据集缩小到2个,对数据集做训练,然后进行检测,为训练自己的数据集做准备

目录 前言一&#xff0c;数据文件结构 1.1 myava1.2 annotations1.3 annotations文件处理1.4 frame_lists1.5 frames二&#xff0c;预训练模型四&#xff0c;配置文件 4.1 创建新的yaml文件4.2 yaml文件解释五&#xff0c;训练六&#xff0c;结果查看前言 b站讲解 ava的数据集…

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。

2019独角兽企业重金招聘Python工程师标准>>> 首先必须明一点 Field类主要是用来辅助获取和操作类的属性的&#xff01; 1.怎么通过反射获取类的属性 先来看JDK提供的方法有如下几种&#xff1a; a)Class.getDeclaredField(String name); 返回一个 Field 对象&#x…

Python3自带HTTP文件传输服务(局域网文件共享)

一行命令搭建一个基于python3的http文件传输服务 WIN10系统下&#xff0c;打开打算要分享传输的文件夹&#xff08;文件夹内存放分享的文件&#xff0c;建议以压缩包形式存放&#xff09;&#xff0c;shift鼠标右键&#xff0c;出现如下图&#xff0c;选择“在此处打开Powershe…

90% 的人都会答错的面试题 == 和 equals 的区别

和 equals 的区别是什么&#xff1f; 解读对于基本类型和引用类型&#xff0c; 的作用效果是不同的&#xff0c;如下所示&#xff1a;基本类型&#xff1a;比较的是值是否相同&#xff1b;引用类型&#xff1a;比较的是引用是否相同&#xff1b;代码示例&#xff1a;String x …

【slowfast 训练自己的数据集】自定义动作,制作自己的数据集,使用预训练模型进行训练,并检测其结果

目录 前言一&#xff0c;视频的处理 1.1 视频准备1.2 切割视频为图片1.3 使用faster rcnn自动框人1.4 via标注图片二&#xff0c;数据集文件 2.1 数据集文件总览2.2 annotations 2.2.1 ava_train_v2.2.csv2.2.2 ava_val_v2.2.csv2.2.3 ava_val_excluded_timestamps_v2.2.csv2.…

windows Secure CRT使用SSH访问Linux服务器被拒绝,winscp访问Linux服务器被拒绝

我们在windows上使用Secure CRT、PUTTY等工具SSH连接到Linux服务器时&#xff0c;会出现linux服务器拒绝访问情况。 可能是Linux系统上没有安装SSH服务&#xff1b; 在终端输入&#xff1a; ssh localhost若出现&#xff1a; ssh: connect to host localhost port 22: Conne…

【代码收集】提前载入贴图

2019独角兽企业重金招聘Python工程师标准>>> 在进入一个比较大的场景的时候&#xff0c;我们一般都会提前load场景的贴图&#xff0c;使游戏更加流畅&#xff0c;一边加载一边显示游戏的加载的进度 具体的方法实现如下&#xff1a; CCTextureCache::sharedTextureCa…

Jetson nano上部署自己的Yolov5模型(TensorRT加速)onnx模型转engine文件

Jetson nano上部署自己的Yolov5模型&#xff08;TensorRT加速&#xff09;onnx模型转engine文件 背景 在主机上训练自己的Yolov5模型&#xff0c;转为TensorRT模型并部署到Jetson Nano上&#xff0c;用DeepStream运行。 硬件环境&#xff1a; RTX 2080TI主机 Jetson Nano 4…

程序员专属精美简历合集—第二弹

找工作除了技能之外最重要的就是简历&#xff0c;从某种意义上来说简历有时候比能力更重要&#xff01;为什么简历如此重要&#xff1f;根据拉勾的招聘调研报告显示&#xff0c;大约有 80% 的简历通不过主筛。所以简历就是一堆 0 之前的那个 1&#xff0c;如果简历通不过筛选&a…

CDH6报错解决全记录

一、服务器准备 1、服务器配置 准备3台服务器&#xff0c;建议最低配置如下&#xff08;阿里云大约每台每月六百多&#xff09;&#xff1a; centos7.4 8c 16G 39.101.192.109 node001 39.101.179.3 node002 39.99.236.205 node003 为服务器开启外网端口访问 7180、8900 2…

QT5动态创建多个按钮控件并关联信号槽函数

创建QT对话框工程&#xff0c;动态创建多个按钮&#xff0c;把动态创建的按钮存放在QList中&#xff0c;并关联同一个信号槽函数&#xff0c;在该槽函数中根据按钮对象名称各自进行其他事项处理。 在mainwindow.h文件添加 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include…

Java 200+ 面试题补充 ThreadLocal 模块

让我们每天都有进步&#xff0c;老王带你打造最全的 Java 面试清单&#xff0c;认真把一件事做到极致。 本文是前文《Java 最常见的 200 面试题》的第一个补充模块。 1.ThreadLocal 是什么&#xff1f; ThreadLocal 是一个本地线程副本变量工具类。主要用于将私有线程和该线程…

如何在CDH5.16.2中部署海豚调度器Apache Dolphin Scheduler 1.2.0

Apache Dolphin Scheduler 组件介绍 分布式易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 官网 : https://dolphinscheduler.apache.org/en-us/ Github : https://github.com/apache…