我正在尝试使用OpenCV拼接器类来拼接立体设置中的多个帧,其中两个摄像机都不移动.在跨多个帧运行时,我的拼接结果很差.我尝试了几种不同的方法,我将在这里解释一下.
运用 stitcher.stitch( )
给定一对立体视图,我为一些帧运行了以下代码(VideoFile是OpenCV VideoCapture对象的自定义包装器):
VideoFile f1( ... );
VideoFile f2( ... );
cv::Mat output_frame;
cv::Stitcher stitcher = cv::Stitcher::createDefault(true);
for( int i = 0; i < num_frames; i++ ) {
currentFrames.push_back(f1.frame( ));
currentFrames.push_back(f2.frame( ));
stitcher.stitch( currentFrames, output_mat );
// Write output_mat, put it in a named window, etc...
f1.next_frame();
f2.next_frame();
currentFrames.clear();
}
Run Code Online (Sandbox Code Playgroud)
这给每个帧提供了非常好的结果,但由于参数估计放在视频中的每个帧,您可以看到参数略有不同的拼接的小差异.
使用estimateTransform( )&composePanorama( )
为了解决上述方法的问题,我决定尝试仅在第一帧上估计参数,然后用于composePanorama( )缝合所有后续帧.
for( int i = 0; i < num_frames; i++ ) {
currentFrames.push_back(f1.frame( )); …Run Code Online (Sandbox Code Playgroud) 我正在使用Opencv的K-means实现来聚类一大组8维向量.它们聚集很好,但我找不到任何方法来查看聚类过程创建的原型.这甚至可能吗?OpenCV似乎只能访问集群索引(或标签).
如果没有,我想是时候进行自己的实施了!
我正在尝试在 TypeScript 下为我的 React Router 配置创建页面映射。由于每个页面将由不同的组件类型生成,并且这些不同的组件将具有不同的属性,因此我想使用通用容器,但保留组件与其 props 接口之间的语义链接。
我希望地图的每个元素都由几个字段定义,名义上是名称、显示页面的组件以及该组件的相关道具。我认为泛型似乎是解决此问题的明智方法:
type PageDef<T> = {
name: string;
component: FunctionComponent<T>;
props: T;
}
Run Code Online (Sandbox Code Playgroud)
(注意:我也试过这个作为接口,但有同样的问题。)
对于这个例子,让我们假设我已经定义了两个 props 接口和两个相应的功能组件(实际上还有很多......):
export interface PropsOne {
test_1: string
}
export interface PropsTwo {
test_2: number
}
function ComponentOne(props: PropsOne) {
return <div> {props.test_1} </div>
}
function ComponentTwo(props: PropsTwo) {
return <div> {props.test_2} </div>
}
Run Code Online (Sandbox Code Playgroud)
然后我像这样创建一个页面映射:
type SupportedPages = PageDef<PropsOne> | PageDef<PropsTwo>;
const pages: Array<SupportedPages> = [
{
name: "Page one",
component: ComponentOne,
props: {
test_1: "Hello, …Run Code Online (Sandbox Code Playgroud) 我正在尝试优化我们的一些计算机视觉算法,并决定cv::connectedComponents对cv::findContours(和cv::drawContours) 进行基准测试以实现类似的结果。
本质上,我们需要做的就是在二值图像中找到斑点,然后选择最大的斑点 - 这是一个相当标准的操作。
我对 OpenCV 的效率有点不太了解,过去几年我只将它用于 Python 中的算法原型设计,所以我决定运行上述两种方法的基准测试。
我对我的结果有点困惑,因为这个评论似乎表明findContours应该慢得多,这与我观察到的相反(结果在帖子的下方)。我怀疑,事实上我的结果表明,findContours在二进制图像上使用,然后将每个轮廓绘制为不同的索引比运行完整的连接组件分析要快一些。
他们还表明,仅计算这些轮廓的面积,而不是计算完整的统计数据,速度connectedComponentsWithStats要快得多。
我是否误解了这里发生的事情?我希望这两种方法会产生相似的结果。
计时结果:
Starting simple benchmark (100000 iterations) ...
2668ms to run 100000 iterations of findContours
3358ms to run 100000 iterations of connectedComponents
Starting area calculation benchmark (100000 iterations) ...
2691ms to run 100000 iterations of findContours
11285ms to run 100000 iterations of connectedComponentsWithStats
AVERAGE TIMES (ms):
findContours: 0.0267
connectedComps: 0.0336
findContours (areas): 0.0269
connectedComps …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Graphcore 的PopART 框架(Poplar API 的一部分)来实现一个基本的流水线模型,以加速我的模型,该模型被拆分到多个处理器上。
我正在关注他们的示例代码,但我注意到该示例没有使用在pipelineStage()他们的其他一些应用程序(即Bert)中使用的调用,而是使用virtualGraph()定义操作应该运行的处理器。
以下示例的一小段:
# Dense 1
W0 = builder.addInitializedInputTensor(
init_weights(num_features, 512))
b0 = builder.addInitializedInputTensor(init_biases(512))
with builder.virtualGraph(0):
x1 = builder.aiOnnx.gemm([x0, W0, b0], debugPrefix="gemm_x1")
x2 = builder.aiOnnx.relu([x1], debugPrefix="relu_x2")
# Dense 2
W1 = builder.addInitializedInputTensor(init_weights(512, num_classes))
b1 = builder.addInitializedInputTensor(init_biases(num_classes))
with builder.virtualGraph(1):
x3 = builder.aiOnnx.gemm([x2, W1, b1], debugPrefix="gemm_x3")
x4 = builder.aiOnnx.relu([x3], debugPrefix="relu_x4")
Run Code Online (Sandbox Code Playgroud)
相反,Bert 示例似乎创建了一个结合virtualGraph()了pipelineStage()以下内容的上下文:
self.stack.enter_context(self.builder.pipelineStage(self.pipelineStage))
Run Code Online (Sandbox Code Playgroud)
我不确定哪种应该是首选样式。只使用有什么影响virtualGraph()吗?
我正在尝试在Docker容器中启动一个Neo4j 3.1实例(通过Docker-Compose),在OSX(El Capitan)上运行.一切都很好,除非我尝试将Neo可用的最大堆空间增加到默认值512MB以上.
根据文档,这可以通过添加环境变量来实现NEO4J_dbms_memory_heap_maxSize,然后使服务器包装器脚本相应地更新neo4j.conf文件.我已经检查过,它正在按照人们的预期进行更新.
问题是,当我运行docker-compose up旋转容器时,Neo4j实例崩溃了137状态代码.一个小小的研究告诉我,这是一个基于堆大小最大限制的linux硬崩溃.
$ docker-compose up
Starting elasticsearch
Recreating neo4j31
Attaching to elasticsearch, neo4j31
neo4j31 | Starting Neo4j.
neo4j31 exited with code 137
Run Code Online (Sandbox Code Playgroud)
我的问题:
我的docker-compose.yml如下:
---
version: '2'
services:
# ---<SNIP>
neo4j:
image: neo4j:3.1
container_name: neo4j31
volumes:
- ./docker/neo4j/conf:/var/lib/neo4j/conf
- ./docker/neo4j/mnt:/var/lib/neo4j/import
- ./docker/neo4j/plugins:/plugins
- ./docker/neo4j/data:/data
- ./docker/neo4j/logs:/var/lib/neo4j/logs
ports:
- "7474:7474"
- "7687:7687"
environment:
- NEO4J_dbms_memory_heap_maxSize=4G
# ---<SNIP>
Run Code Online (Sandbox Code Playgroud) 我试图从这里运行代码,这是使用 keras python 的生成对抗网络的实现。我按照说明安装了所有要求。然后我尝试运行DCGAN的代码。但是,库的兼容性似乎存在一些问题。我在运行代码时收到以下消息:
AttributeError: 'module' 对象没有属性 'leaky_relu'
File "main.py", line 176, in <module>
dcgan = DCGAN()
File "main.py", line 25, in __init__
self.discriminator = self.build_discriminator()
File "main.py", line 84, in build_discriminator
model.add(LeakyReLU(alpha=0.2))
File "/opt/libraries/anaconda2/lib/python2.7/site-packages/keras/models.py", line 492, in add
output_tensor = layer(self.outputs[0])
File "/opt/libraries/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 617, in __call__
output = self.call(inputs, **kwargs)
File "/opt/libraries/anaconda2/lib/python2.7/site-packages/keras/layers/advanced_activations.py", line 46, in call
return K.relu(inputs, alpha=self.alpha)
File "/opt/libraries/anaconda2/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py", line 2918, in relu
x = tf.nn.leaky_relu(x, alpha)
Run Code Online (Sandbox Code Playgroud)
我正在使用 kerasVersion: 2.1.3而 …
为什么我像下面的命令一样指定ipu4并且ipu4_ex都在 docker 中使用 ipu 设备?
docker run --device=/dev/**ipu4**:/dev/ipu4 --device=/dev/**ipu4_ex**:/dev/ipu4_ex -ti graphcore/tools gc-inventory
Run Code Online (Sandbox Code Playgroud) 我正在尝试找出最好的方法来搜索"Tracklet"类型的向量(我自己构建的一个类)来查找其变量之一的给定值的第一个和最后一个出现.例如,我有以下类(本例简化):
class Tracklet {
TimePoint *start;
TimePoint *end;
int angle;
public:
Tracklet(CvPoint*, CvPoint*, int, int);
}
class TimePoint {
int x, y, t;
public:
TimePoint(int, int, int);
TimePoint(CvPoint*, int);
// Relevant getters and setters exist here
};
Run Code Online (Sandbox Code Playgroud)
我有一个向量" vector<Tracklet> tracklets",我需要搜索结束时间点给定值为"t"的任何tracklet.矢量按结束时间(即tracklet.end->t)排序.
我很乐意编写一个搜索算法,但我不确定采用哪种路由.我不确定二进制搜索是否合适,因为我似乎记得它不一定会找到第一个.我正在考虑一种方法,我使用二进制搜索来找到具有正确时间的元素的索引,然后迭代返回以找到第一个和前进以找到最后一个.我确信有更好的方法,因为它通过迭代浪费二进制搜索O(log n).
希望这是有道理的:我努力解释一下!干杯!
c++ ×4
opencv ×4
docker ×2
ipu ×2
popart ×2
poplar ×2
python ×2
class ×1
heap-memory ×1
k-means ×1
keras ×1
neo4j ×1
python-3.x ×1
reactjs ×1
search ×1
tensorflow ×1
typescript ×1
vector ×1