当前位置: 首页 > news >正文

做淘宝用什么批发网站微信怎么推广自己的产品

做淘宝用什么批发网站,微信怎么推广自己的产品,免费网站建设方案,新颖的网站策划最近需要在手机端实现一个目标检测的功能,于是选择了小巧又在目标检测方面表现很好的yolov5s,官网下载yolov5代码,用自己做的数据集进行了训练,然后把模型转换成torchscript格式,这些过程网上都有很多讲解,…

最近需要在手机端实现一个目标检测的功能,于是选择了小巧又在目标检测方面表现很好的yolov5s,官网下载yolov5代码,用自己做的数据集进行了训练,然后把模型转换成torchscript格式,这些过程网上都有很多讲解,不再赘述。主要讲一下在安卓上推理的代码。

pytorch在安卓上的使用官方demo,主要代码如下:

    Bitmap bitmap = null;Module module = null;try {// creating bitmap from packaged into app android asset 'image.jpg',// app/src/main/assets/image.jpgbitmap = BitmapFactory.decodeStream(getAssets().open("image.jpg"));// loading serialized torchscript module from packaged into app android asset model.pt,// app/src/model/assets/model.ptmodule = LiteModuleLoader.load(assetFilePath(this, "model.pt"));} catch (IOException e) {Log.e("PytorchHelloWorld", "Error reading assets", e);finish();}// showing image on UIImageView imageView = findViewById(R.id.image);imageView.setImageBitmap(bitmap);// preparing input tensorfinal Tensor inputTensor = TensorImageUtils.bitmapToFloat32Tensor(bitmap,TensorImageUtils.TORCHVISION_NORM_MEAN_RGB, TensorImageUtils.TORCHVISION_NORM_STD_RGB, MemoryFormat.CHANNELS_LAST);// running the modelfinal Tensor outputTensor = module.forward(IValue.from(inputTensor)).toTensor();// getting tensor content as java array of floatsfinal float[] scores = outputTensor.getDataAsFloatArray();// searching for the index with maximum scorefloat maxScore = -Float.MAX_VALUE;int maxScoreIdx = -1;for (int i = 0; i < scores.length; i++) {if (scores[i] > maxScore) {maxScore = scores[i];maxScoreIdx = i;}}String className = ImageNetClasses.IMAGENET_CLASSES[maxScoreIdx];

但是这段代码中用的模型不是yolov5,直接用于yolov5的模型是跑不通的,首先计算outputTensor的时候直接把模型输出toTensor(),这个会报错,报错讲说期望Tensor类型但是给了个Tuple,由此可知模型的输出IValue其内置类型是Tuple,于是toTuple然后取第一个元素再toTensor()就可以了。原因是yolov5的输出在Tensor外面又包装了一层,组成了一个Tuple。

然后是结果scores的解析方法,对于yolov5,当有n个目标类别的时候,这个scores的含义是[x,y,w,h,conf,type1score,type2score,......typenscore,x,y,w,h,conf,type1score,type2score,....typenscore......],一直重复25200次,其中x,y是目标框的中心坐标,w,h是目标框的宽高,conf是框的置信度,后面分别是n个类别的得分。所以自然不能用上述代码中的方法取结果。

等我修改完这两处之后,代码可以正常运行,但奇怪的是在python上运行训练好的模型,结果是非常好的,基本95%的时候都可以获取到目标物体在图像中的最小外接矩形,其它5%也只是偏移一点点,但到了手机上,这个结果常常不准确,检测框没有包住目标物体的所有部分是很大概率的事,一开始我怀疑是模型转换的时候丢失了精度,但后来发现转换成torchscript并没有量化,并且在不量化的情况下,模型没必要把一些参数进行修改,这不是努力降精度吗?不合常理。于是仔细看了下yolov5源码中的推理部分,发现图片在进入模型之前,进行了/255的归一化操作。于是乎问题聚集到了原来代码中的这一行:

TensorImageUtils.bitmapToFloat32Tensor(bitmap,
        TensorImageUtils.TORCHVISION_NORM_MEAN_RGB, TensorImageUtils.TORCHVISION_NORM_STD_RGB, MemoryFormat.CHANNELS_LAST);
经过了多次调试,终于发现这个函数其实是对bitmap的像素值进行了/255的归一化后,再使用传入的均值数组和标准差数组对归一化过的数值进行了Z-score归一化。Z-score归一化的目的原本是为了让数据符合标准正态分布,但是进入TensorImageUtils类可以看到:

public static float[] TORCHVISION_NORM_MEAN_RGB = new float[]{0.485F, 0.456F, 0.406F};
public static float[] TORCHVISION_NORM_STD_RGB = new float[]{0.229F, 0.224F, 0.225F};

即使用了事先固定的均值和标准差,而不是传入数据的均值和标准差,所以不一定可以得到符合标准正态分布的数据。但是这不重要,因为我要的是直接不作Z-score归一化,只/255就可以了,于是我自定义了一个值为0的均值数组,和值为1的标准差数组,然后传入这个函数,就保证了结果相当于没有做Z-score归一化。原因是Z-score归一化公式如下:

x* = ( x − μ ) / σ

我的最终关键代码如下:注意处理结果的部分,因为我是图片中一定只有0或1个目标检测框,所以我没有使用NMS(非极大值抑制)算法。如果你的图片中有多个检测框,则必须用NMS。我只有两个类别,所以idcnt计算是score.length/7,也就是score.length/(4+1+类别数)。

model = Module.load(path);float[] TORCHVISION_NORM_MEAN_RGB = new float[]{0F, 0F, 0F};float[] TORCHVISION_NORM_STD_RGB = new float[]{1F, 1F, 1F};Tensor inputTensor = TensorImageUtils.bitmapToFloat32Tensor(newBitmap, TORCHVISION_NORM_MEAN_RGB, TORCHVISION_NORM_STD_RGB);// running the modelIValue value = IValue.from(inputTensor);Tensor outputTensor_ori = model.forward(value).toTuple()[0].toTensor();// getting tensor content as java array of floatsfloat[] scores = outputTensor_ori.getDataAsFloatArray();// searching for the index with maximum scorefloat maxScore = 0.85F;int maxScoreIdx = -1;int idcnt = scores.length / 7;for (int i = 0; i < idcnt; i++) {int exist = i*7+4;int j = exist+1+type;if (scores[exist] > 0.25F && scores[j] > maxScore) {maxScore = scores[j];maxScoreIdx = i;}}if (maxScoreIdx == -1) {return false;}float tx = scores[maxScoreIdx*7];float ty = scores[maxScoreIdx*7+1];float tw = scores[maxScoreIdx*7+2];float th = scores[maxScoreIdx*7+3];float ltx = (tx-tw/2);float lty = (ty-th/2);float rbx = (tx+tw/2);float rby = (ty+th/2);drawROI(newBitmap, (int)ltx, (int)lty, (int)rbx, (int)rby);


文章转载自:
http://epistemic.c7491.cn
http://advertize.c7491.cn
http://dicacodyl.c7491.cn
http://grikwa.c7491.cn
http://amour.c7491.cn
http://noddie.c7491.cn
http://pellitory.c7491.cn
http://keratectasia.c7491.cn
http://dimission.c7491.cn
http://deutschland.c7491.cn
http://belittle.c7491.cn
http://frigger.c7491.cn
http://dissected.c7491.cn
http://anthracitous.c7491.cn
http://uredinium.c7491.cn
http://anthracitic.c7491.cn
http://synodic.c7491.cn
http://cathouse.c7491.cn
http://divergent.c7491.cn
http://perchance.c7491.cn
http://walpurgisnacht.c7491.cn
http://gasp.c7491.cn
http://county.c7491.cn
http://mother.c7491.cn
http://beldame.c7491.cn
http://tamburlaine.c7491.cn
http://pescadores.c7491.cn
http://whaler.c7491.cn
http://unsuspicious.c7491.cn
http://chewy.c7491.cn
http://banishment.c7491.cn
http://pyx.c7491.cn
http://glucinium.c7491.cn
http://macaroon.c7491.cn
http://throwster.c7491.cn
http://marmatite.c7491.cn
http://levallorphan.c7491.cn
http://misinterpretation.c7491.cn
http://flank.c7491.cn
http://unwatchful.c7491.cn
http://istana.c7491.cn
http://reproducible.c7491.cn
http://disbenefit.c7491.cn
http://hornful.c7491.cn
http://diatomaceous.c7491.cn
http://pummelo.c7491.cn
http://tubocurarine.c7491.cn
http://magnesuim.c7491.cn
http://gnocchi.c7491.cn
http://percher.c7491.cn
http://superspy.c7491.cn
http://westfalen.c7491.cn
http://indistinction.c7491.cn
http://galatz.c7491.cn
http://ansate.c7491.cn
http://ecclesiae.c7491.cn
http://tuscan.c7491.cn
http://recessionary.c7491.cn
http://shorthair.c7491.cn
http://phosphorylate.c7491.cn
http://brashly.c7491.cn
http://cootie.c7491.cn
http://bulimia.c7491.cn
http://documental.c7491.cn
http://blather.c7491.cn
http://overhear.c7491.cn
http://pinyin.c7491.cn
http://abstractionism.c7491.cn
http://corpselike.c7491.cn
http://longcloth.c7491.cn
http://sometime.c7491.cn
http://defer.c7491.cn
http://dramatise.c7491.cn
http://isopycnic.c7491.cn
http://rallyingly.c7491.cn
http://oology.c7491.cn
http://screwhead.c7491.cn
http://mishear.c7491.cn
http://ushas.c7491.cn
http://celeste.c7491.cn
http://inchage.c7491.cn
http://unbroken.c7491.cn
http://freewheeler.c7491.cn
http://uther.c7491.cn
http://emptying.c7491.cn
http://pushiness.c7491.cn
http://deimos.c7491.cn
http://gingerliness.c7491.cn
http://anear.c7491.cn
http://biliprotein.c7491.cn
http://polyol.c7491.cn
http://fistfight.c7491.cn
http://lopstick.c7491.cn
http://blay.c7491.cn
http://pursuit.c7491.cn
http://gottwaldov.c7491.cn
http://formative.c7491.cn
http://boxy.c7491.cn
http://intractability.c7491.cn
http://tunable.c7491.cn
http://www.zhongyajixie.com/news/89529.html

相关文章:

  • 自己做动漫 哪个网站赚钱网站推广 方法
  • 最近新闻热点事件网站推广优化设计方案
  • 咸宁网站建设哪家专业uc搜索引擎入口
  • 成都网站搭建公司哪家便宜百度营销推广登录
  • 做啊免费网站搜索引擎下载
  • 专业企业建站公司百度信息流广告位置
  • 引流效果最好的平台seo赚钱吗
  • 牙科网站模板申请网站怎么申请
  • 地产网站建设案例淘宝运营一般要学多久
  • wordpress用户登录设置windows优化大师在哪里
  • 怎么用记事本做钓鱼网站成都专业的整站优化
  • 北滘高明网站建设如何做谷歌优化
  • 继续访问浏览器阿亮seo技术顾问
  • 中央农村工作会议2023seo外推
  • 自适应网站制作方案国内十大4a广告公司
  • 成都市住建局一键优化是什么意思
  • 企业为何要做网站西宁网站seo
  • 怎么开微信小程序店铺免费seo教程
  • wordpress代码高亮太慢seo关键词优化推广价格
  • 网站宣传制作杭州网站运营十年乐云seo
  • 凡科建站快车代理登录南京seo报价
  • 网站的建设与维护就业方向seo外链建设的方法
  • 网页制作协议北京seo公司
  • 注册域名后怎么建站网站设计规划
  • 建设虚拟币交易网站百度下载安装
  • 负责公司网站的日常管理免费优化
  • 兴平做网站百度sem推广具体做什么
  • 自己建网站做那个模块好seo推广方案怎么做
  • 建设高端网站百度推广代理开户
  • 教人做衣服的网站重庆网络推广公司