Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果在Node而不是浏览器中运行不同的预测(使用相同的model_web - python转换模型)

如果在Node而不是浏览器中运行不同的预测(使用相同的model_web - python转换模型)
EN

Stack Overflow用户
提问于 2020-02-13 22:39:52
回答 1查看 490关注 0票数 0

对ML和tensorflow来说很新鲜!

我用http://cloud.annotations.ai创建了一个对象检测模型,允许训练和转换不同格式的模型,tfjs (model_web)也是如此。该网站还提供了在浏览器中运行模型的样板(react )。就像你做的一样--可能是相同的代码,没有花足够的时间。

所以我让这个模型在浏览器中运行,给出对照片中物体的预测,考虑到我给出的例子数量和预测分数(0.89),结果非常好。给定的包围盒也很好。

但是,不幸的是,我没有“一段视频”来分析浏览器中的一帧一帧,我有很多视频。因此,我决定切换到node.js,按原样移植代码。你猜怎么着?TF.js依赖于DOM和浏览器组件,几乎没有使用Node的示例。所以没什么大不了的,只是花了一个早上找出所有缺失的部分。最后,我能够在分割成帧的视频上以相当快的速度运行我的模型--尽管在我已经使用tfjs节点时有了"Hello,使用tfjs节点来获得速度“的横幅,但是结果似乎很奇怪。将同一张图片与相同的model_web文件夹进行比较,得到相同的预测,但得分较低(0.80而不是0.89)和不同的边界框,对象根本没有居中。

(TL;DR)

是否有不同的库实现(tfjs和tfjs -节点),以不同的方式使用同一模型?我认为这不可能是输入问题,因为经过长时间的搜索和斗争,我想出了两种方法将图像交给Node中的tf.browser.getPixel (我仍然想知道为什么要在tfjs内使用“浏览器”方法)。有人比较过吗?

所以..。这是我使用的代码,供您参考:

model_web正在加载tf.loadGraphModel("file://path/to/model_web/model.json");

转换JPG并使其与tf.browser.getPixel()一起工作的两种不同方法

代码语言:javascript
运行
AI代码解释
复制
const inkjet = require('inkjet');
const {createCanvas, loadImage} = require('canvas');

const decodeJPGInkjet = (file) => {
    return new Promise((rs, rj) => {
        fs.readFile(file).then((buffer) => {
            inkjet.decode(buffer, (err, decoded) => {
                if (err) {
                    rj(err);
                } else {
                    rs(decoded);
                }
            });
        });
    });
};

const decodeJPGCanvas = (file) => {
    return loadImage(file).then((image) => {
        const canvas = createCanvas(image.width, image.height);
        const ctx = canvas.getContext('2d');
        ctx.drawImage(image, 0, 0, image.width, image.height);
        const data = ctx.getImageData(0, 0, image.width, image.height);
        return {data: new Uint8Array(data.data), width: data.width, height: data.height};
    });
};

这就是使用加载模型进行预测的代码--在https://github.com/cloud-annotations/javascript-sdk/blob/master/src/index.js中找到的用于节点和浏览器的相同代码--在节点上不起作用,我用require("@tensorflow/tfjs-node");更改了require("@tensorflow/tfjs");,用fs.read替换了fetch

代码语言:javascript
运行
AI代码解释
复制
const runObjectDetectionPrediction = async (graph, labels, input) => {
    const batched = tf.tidy(() => {
        const img = tf.browser.fromPixels(input);
        // Reshape to a single-element batch so we can pass it to executeAsync.
        return img.expandDims(0);
    });

    const height = batched.shape[1];
    const width = batched.shape[2];

    const result = await graph.executeAsync(batched);

    const scores = result[0].dataSync();
    const boxes = result[1].dataSync();

    // clean the webgl tensors
    batched.dispose();
    tf.dispose(result);

    const [maxScores, classes] = calculateMaxScores(
        scores,
        result[0].shape[1],
        result[0].shape[2]
    );

    const prevBackend = tf.getBackend();
    // run post process in cpu
    tf.setBackend("cpu");
    const indexTensor = tf.tidy(() => {
        const boxes2 = tf.tensor2d(boxes, [result[1].shape[1], result[1].shape[3]]);
        return tf.image.nonMaxSuppression(
            boxes2,
            maxScores,
            20, // maxNumBoxes
            0.5, // iou_threshold
            0.5 // score_threshold
        );
    });
    const indexes = indexTensor.dataSync();
    indexTensor.dispose();
    // restore previous backend
    tf.setBackend(prevBackend);

    return buildDetectedObjects(
        width,
        height,
        boxes,
        maxScores,
        indexes,
        classes,
        labels
    );
};
EN

回答 1

Stack Overflow用户

发布于 2020-02-19 05:01:57

对不同使用相同模型的库(tfjs和tfjs-节点)执行不同的实现。

如果在浏览器和nodejs中都部署了相同的模型,则预测将是相同的。

如果预测值不同,则可能与用于预测的张量有关。从图像到张量的处理可能不同,从而导致不同的张量用于预测,从而导致输出不同。

-我想出了两种方法在节点中将图像交给tf.browser.getPixel (我仍然想知道为什么要在tfjs-节点内使用“浏览器”方法)。

画布包使用系统图形创建可以由nodejs使用的浏览器(如画布环境)。这使得使用tf.browser命名空间成为可能,特别是在处理图像转换时。但是,仍然可以直接使用nodejs缓冲区来创建张量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60221268

复制
相关文章
Google Play商店推广那些事
Play商店是Android的官方商店,虽然在大陆无法访问,但是这里依旧是重要的版本发布市场,尤其是对于那些国际化的产品。对于拓宽海外市场,付费推广就是一部分不可忽视的措施。而Android付费推广必然就是Play商店推广。本文主要从技术方面讲解,如何统计推广数据,以及在开发过程中遇到的一些疑问和困惑。
技术小黑屋
2018/09/05
3.8K0
Google Play商店推广那些事
你,渴望 Google Play 商店吗?
由于一些众所周知而又不可描述的原因,我们的安卓手机想使用Google Play商店还是很麻烦的,需要解决环境问题,还需要解决网络问题,总之,各种问题。
课代表
2018/12/18
2.2K0
Google Play商店现17款DawDropper银行恶意软件
7月29日,趋势科技发布了一份报告,揭露了在Google Play应用商店内的一系列银行类恶意软件活动。 报告主要分析了17款伪装成生产力工具和实用应用程序的滴管应用程序,它们被统称为DawDropper。根据报告描述,这17款应用包括了文档扫描仪、VPN 服务、二维码阅读器和通话记录器等多种类型,共携带了四个银行木马系列,包括 Octo、Hydra、Ermac和TeaBot。它们都使用第三方云服务 Firebase Realtime Database 来逃避检测并动态获取有效载荷下载地址,并在 GitHu
FB客服
2023/03/30
1.5K0
Google Play商店现17款DawDropper银行恶意软件
【Google Play】从 Android 应用中跳转到 Google Play 中 ( 跳转代码示例 | Google Play 页面的链接格式 | Google Play 免安装体验 )
首先 , 创建 Intent , 设置其 Action 为 “android.intent.action.VIEW” ,
韩曙亮
2023/03/30
6.3K0
首款采用Kotlin语言编写的恶意APP现身Google Play商店
“用指尖改变世界” 趋势科技的安全研究人员在上周发现了一款名为“Swift Cleaner”的恶意应用程序,他们认为这可能是首款使用开源Kotlin编程语言开发的Android手机恶意软件。 根据趋势科技在1月9日发布的博客文章,该应用程序已经被下载了1000到5000次之间。它伪装成手机系统清理工具,描述为可以提供系统和缓存清理以及内存优化等实用功能。 但实际上,它能够执行恶意远程命令、信息窃取、未经授权的SMS发送和URL转发以及点击或广告诈骗。同时,它还能够在未经许可的情况下,给受害者注册高级
企鹅号小编
2018/02/07
1.7K0
首款采用Kotlin语言编写的恶意APP现身Google Play商店
新型银行木马正通过Google Play商店攻击英国银行用户
据Security Affairs消息,荷兰安全公司Threat Fabric的研究人员发现了一种名为 Xenomorph的新 Android 银行木马,目前已通过谷歌官方应用商店官方 Google Play下载安装了超5万次。
FB客服
2022/04/11
7380
新型银行木马正通过Google Play商店攻击英国银行用户
间谍软件潜入Google Play
研究人员发现了第一个已知的间谍软件,它建立在Ahmyth开源恶意软件的基础上,并绕过了谷歌的应用审查过程。这个恶意的应用程序叫做RadioBalouch,又称RBMusic,实际上是一个为Balouchi音乐爱好者提供的流媒体应用程序,而它的关键在于窃取用户的个人数据。该应用两次悄悄地进入了Android官方应用商店,但在我们向谷歌发出警告后,都被谷歌迅速删除。
FB客服
2019/09/17
1.4K0
间谍软件潜入Google Play
【Google Play】Google Play 签名维护 ( 签名机制 | Google Play 签名机制选择 | 签名更新 )
【Google Play】创建 Google 开发者账号 ( 注册邮箱账号 | 创建开发者账号 ) 【Google Play】创建并设置应用 ( 访问权限 | 内容分级 | 受众群体 | 类别及联系方式 | 商品详情 )
韩曙亮
2023/03/29
10.1K0
【Google Play】Google Play 签名维护 ( 签名机制 | Google Play 签名机制选择 | 签名更新 )
Google Play遭禁止,俄罗斯打造专属手机应用商店,实现“国产替代”
“国产化替代”势在必行。 作者 | 来自镁客星球的王饱饱 据外媒最新消息,"数字平台"组织正在基于Android开发一个名为NashStore的类似Google Play的应用程序商店,从而让俄罗斯的用户可以正常使用手机上的应用程序。 根据该组织的项目主管弗拉基米尔·齐科夫(Vladimir Zykov)的说法,这款国产应用商店预计将在今年5月9日(这一天是俄罗斯庆祝二战胜利的全国性节日)正式上线。 弗拉基米尔·齐科夫指出,创建NashStore的原因是俄罗斯人目前使用Google Play时已经遇到不少困
镁客网
2022/03/31
1.8K0
Google Play遭禁止,俄罗斯打造专属手机应用商店,实现“国产替代”
Google Play中止俄罗斯用户付费应用程序下载更新
Bleeping Computer 网站披露,谷歌将禁止俄罗斯用户和开发者从 Google Play 商店下载或更新付费应用程序。
FB客服
2022/06/08
1K0
Google Play中止俄罗斯用户付费应用程序下载更新
JSoup/NSoup对CSS类名称中含空格的处理
而在这处理过程中,JSoup是经常常用的库。(Nsoup是Jsoup的.net开发版本)
sparkexpert
2022/05/07
1.1K0
Google Play商店漏洞:黑客可远程在你的安卓手机上安装恶意APP
安全研究人员发现Google Play商店中两个严重安全漏洞,可以允许攻击者远程在用户的安卓设备上安装并下载恶意APP(应用)。 Metasploit框架的技术领导Tod Beardsley在Rapid7上提醒说: 一个X-Frame-Options(XFO)漏洞结合一个最近的安卓WebView(Jelly Bean)漏洞,就可以创造出一种新的攻击方式——通过该方式黑客可以利用google play商店悄无声息地向受害者的安卓设备安装任何恶意APP,即使没有征得用户允许。 受影响的用户 该漏洞影响安卓4
FB客服
2018/02/05
2K0
Google Play商店漏洞:黑客可远程在你的安卓手机上安装恶意APP
对接google play支付
设置开发者帐号后,您必须发布包含 Google Play 结算库的应用版本。如需在 Google Play 管理中心启用结算相关功能(如配置您要销售的商品),必须执行此步骤。
崔哥
2022/09/08
2.3K0
使用 Jetpack Compose 提升 Play 商店的用户体验
作者 / Google Play 技术负责人 Andrew Flynn 和 Jon Boekenoogen
Android 开发者
2022/04/02
3.2K0
使用 Jetpack Compose 提升 Play 商店的用户体验
Google Play In-app Billing
应用程序内部付费机制(Google Play In-app Billing, 以下简称应用内支付)是Google Play的一项服务,这种服务为应用内购买提供支付流程。
阳光岛主
2019/02/19
4.2K0
Google Play In-app Billing
Google Play 封杀第三方支付
摘要:北京时间2012年8月2日,Google Android Play应用商店管理团队发布公告称,该公司将对“开发人员应用政策”作出调整,调整的内容包括支付政策、应用命名、隐私安全等。
阳光岛主
2019/02/19
2.9K0
Google Play 封杀第三方支付
google play 支付签名验证
app端支付成功会有一个Purchase对象,里面有购买令牌(purchaseToken)和其他参数,如下
崔哥
2022/09/07
2.3K0
google play 支付签名验证
如何切换google play地区?
后来我使用我的 Nexus 6 手机注册:设置->帐号->添加帐号->Google->创建帐号,成功注册。
崔哥
2022/09/08
2.3K0
恶意应用程序上架谷歌商店,下载竟超1000万次
近期,来自Dr. Web的防病毒团队在Google Play商店中发现了一批充斥着广告软件和恶意软件的Android应用程序,令人惊讶的不是这些应用程序是如何通过审核的,而是这些应用程序已在移动设备上安装了近 1000万次。 这些应用程序通常会伪装成图像编辑工具、虚拟键盘、系统优化工具、壁纸更换工具等。但是,它们的目的是推送侵入性广告、为用户订阅高级服务或窃取受害者的社交媒体帐户。虽然谷歌及时删除了绝大多数此类应用程序,仍有一些漏网之鱼,截至目前仍有三类应用程序可通过Google Play商店下载和安装。如
FB客服
2023/03/30
7850
恶意应用程序上架谷歌商店,下载竟超1000万次
Linux中删除特殊名称文件的多种方式
我们都知道,在linux删除一个文件可以使用rm命令,但是有一些特殊名称的文件使用普通的rm方式却没法删除,本文介绍linux中删除特殊名称文件的多种方式。
编程珠玑
2019/09/02
5.5K0

相似问题

如何在选中单元格后停止DataGridView编辑?

21

如何在UItableview中选中单元格进行图像显示

21

变换后在元素上进行移位/跳转

10

集合单元格在选中后不会不被选中

22

选中/取消选中单元格CheckBox后,RadGridView更改行颜色

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档