【密集人群检测】Detection in Crowded Scenes: One Proposal, Multiple Predictions例程实现

1.简介

旷世研究院在CVPR2020上发表的论文《Detection in Crowded Scenes: One Proposal, Multiple Predictions》,提出了一种非常简单而有效的基于提议的对象检测器,它是专门为拥挤实例检测而设计的。
在这里插入图片描述

其源论文及开源代码参考实现。代码分为Pytorch版本和旷世天元(megengine)版本,此处仅介绍Pytorch版本(github上star数量高自有其道理,别问我是怎么知道的)。下面就介绍如何在自己电脑上跑通该算法。

2.环境搭建

Github上已明确了需要的环境依赖:

  1. Requirements:
    * python 3.6.8, pytorch 1.5.0, torchvision 0.6.0, cuda 10.1

很简单,但实际配置还是有些坑。一一踩完后(T_T)将步骤总结如下(首先确保电脑支持cuda!):

## 1.建立Anaconda环境
* 用anaconda装,不把本机python环境搞坏了
* 从anaconda历史版本库https://repo.anaconda.com/archive/
* 下载Anaconda3-5.2.0-Linux-x86_64.sh
* ./Anaconda3-5.2.0-Linux-x86_64.sh安装

## 2.更改源
* 修改成清华镜像源,加快后续依赖项的下载速度,参考下方网址:  https://mirror.tuna.tsinghua.edu.cn/help/anaconda/
* 修改下载的timeout,避免网络时好时坏的情况下容易下载失败
	conda config --set remote_read_timeout_secs 600.0

## 3.创建detect环境
	cd CrowdDet
	source ~/anaconda3/bin/activate  进入anaconda环境,命令行左侧显示(base)
	conda create -n detect python==3.6.8 创建detect环境
	conda activate detect   命令行左侧显示(detect)

### tips:
	conda env list  --显示已安装的conda环境
	conda remove *  --移除某环境
	source activate detect --从新终端直接进入detect环境

## 4.安装依赖
	conda install pytorch==1.5.0 torchvision==0.6.0 cudatoolkit=10.1 -c pytorch
	conda install --channel https://conda.anaconda.org/menpo opencv

### tips:
	conda clean --packages --tarballs  --删除缓存包重新下载
	找个网好的地方下载

这样就将环境配置好了,下一步就是跑通给的例程。

3.运行例程

首先下载项目到本地:

git clone https://github.com/Purkialo/CrowdDet.git

虽然github上的例程步骤是:(1)trainging,(2)testing,(3)inference。但对于急于验证算法效果的童鞋来说最希望的还是直接进行inference(至少我是),毕竟已经提供了训练好的网络权重:
在这里插入图片描述
下面就来介绍如何直接进行inference

(1)先把权重文件下载到本地(由于是存放在Google driver,因此需要连接vpn才能下载…)。可以只下载其中的部分权重,比如我就只下了效果最好——即AP/JI越大效果越好,MR越小越好,具体含义参见论文的 rcnn_emd_refine_mge.pth(已上传到csdn,点击即可下载)和相对较差的rcnn_fpn_baseline.pth进行比较。

(2)权重下载完毕后,根据CrowdDet/tools/inference.py文件的内容,建立相关文件路径:

cd CrowdDet/model/rcnn_emd_refine/
mkdir outputs && cd outputs
mkdir model_dump

将rcnn_emd_refine_mge.pth放置到model_dump文件夹下,并重命名为dump-40.pth。

(3)准备一张测试图片,比如我将图片7.jpg如下放在和inference.py同一文件夹下
7.jpg

接着运行

##进入CrowdDet/tools/文件夹下开启新终端
source activate detect #进入conda环境(终端左侧显示detect)
python inference.py -md rcnn_emd_refine -r 40 -i 7.jpg

稍等运行片刻,没有报错的话(应该没有)就成功了,此时在文件夹下生成了一个outputs/文件夹,进入后发现有一张图片也叫7.jpg,啪的一下点开,喔!原来是检测结果:
outputs/7.jpg

类似的,也可以对另一个效果较差的权重文件rcnn_fpn_baseline.pth进行验证,得到的结果如下:
outputs/7.jpg

我们可以找一下有什么区别。不难看出,对于有遮挡的密集人群场景,对应论文提出的最优方法的权重文件rcnn_emd_refine_mge.pth检测效果确实要好不少。

至此就把算法的inference例程跑通了,舒服~

总结

配置环境虽然会问题很多,但也能逐渐理解各个部分是如何相关联。另外一点就是未必要完全按照官方给定的指南(README.md)按部就班,可以根据自己的需求进行调整进度。希望大家也有所收获!

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
实现歌词的滚动效果,可以通过以下步骤: 1. 将歌词文本按照时间轴分割成多个段落,每个段落对应一句歌词。 2. 在页面中创建一个容器,用来显示当前正在播放的歌词。 3. 使用 JavaScript 监听音乐播放的时间轴,每当音乐时间轴与某个歌词段落的时间范围重合时,将该歌词段落显示在容器中。 4. 实现歌词滚动的效果,可以使用 CSS 动画或 JavaScript 操作 DOM 的方式,将当前歌词段落滚动到容器的中央或者上方,并且将已经显示完的歌词段落从容器中移除。 以下是一个简单的 JavaScript 实现示例: ```html <div id="lyrics-container"></div> <script> const lyrics = [ { time: 0, text: "Verse 1" }, { time: 10, text: "I'm looking at an empty screen" }, { time: 15, text: "Everything is quiet, not a thing to be seen" }, { time: 22, text: "Suddenly a message pops up on my phone" }, { time: 30, text: "It's you, I'm glad you're not alone" }, { time: 36, text: "Chorus" }, { time: 40, text: "We're all connected, even when we're far apart" }, { time: 47, text: "Our hearts beat as one, it's a symphony of the heart" }, { time: 54, text: "We're all connected, even when we're miles away" }, { time: 61, text: "Our love is like a river, it flows stronger every day" }, { time: 68, text: "Verse 2" }, { time: 72, text: "I'm sitting in a crowded room" }, { time: 77, text: "People are talking, but I'm feeling the gloom" }, { time: 84, text: "Suddenly I hear a voice that sounds like home" }, { time: 92, text: "It's you, I'm glad you're not alone" }, { time: 98, text: "Chorus" }, { time: 102, text: "We're all connected, even when we're far apart" }, { time: 109, text: "Our hearts beat as one, it's a symphony of the heart" }, { time: 116, text: "We're all connected, even when we're miles away" }, { time: 123, text: "Our love is like a river, it flows stronger every day" }, ]; const container = document.getElementById("lyrics-container"); // 当播放时间发生改变时触发的事件 const onTimeUpdate = (event) => { const currentTime = event.target.currentTime; // 查找当前时间对应的歌词段落 const currentLyric = lyrics.find((lyric) => { return lyric.time <= currentTime && lyric.time + 5 > currentTime; }); // 如果找到了歌词段落,则更新容器中的内容 if (currentLyric) { container.innerHTML = currentLyric.text; } }; // 监听音乐播放时间的变化 document.getElementById("music-player").addEventListener("timeupdate", onTimeUpdate); </script> ``` 这个示例中,我们将歌词分割成多个对象,每个对象有一个时间属性和一个文本属性,用来表示当前时间段的歌词内容。在页面中创建了一个用来显示歌词的容器,然后使用 `addEventListener` 方法监听音乐播放时间的变化,每当时间发生改变时,就查找当前时间对应的歌词段落,并将其显示在容器中。具体的歌词滚动效果可以根据实际需求进行修改。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值