精华内容
下载资源
问答
  • 多角度物体
    万次阅读
    2018-08-16 16:19:22

    在做项目时,很多时候可能需要做旋转功能,这个很简单,直接使用Rotate方法即可,如果在加上一个限制旋转角度,可不是简单的判断下角度就可以了。在Unity中,角度在它内部是用四元数表示的,这个我也弄不清楚,所以,在面板展示和你实际打印出来的localEulerAngles不一样!!可能你只是想改变x的角度,但是你转着转着可能看到变成x,y,z三个值都变了。

    之前在网上看到一个解决方案,说是拿取localEulerAngles之后,对角度做一个变化:

    float CheckAngle(float value){
    	float angle = value - 180;
    	if (angle > 0){
    		return angle - 180;
    	}
    	return angle + 180;
    }

    这个虽然可以解决部分问题,但是我这里还是遇到了一个很奇特的问题,有时候突然变成反向的了。

    我自己加了一个方法:

    float angle = 0;
            Vector3 axis = Vector3.left;
            rotateXAnim.localRotation.ToAngleAxis(out angle, out axis);

    这个可以得到某一个轴的角度,然后在根据axis的方向,就能得到实际的角度

    angle = CheckAngle(angle*axis.x);
    
            if (angle > 90){
                angle = 90;
                rotateXAnim.localEulerAngles = new Vector3(angle, 0, 0);
            }else if (angle < -90){
                angle = -90;
                rotateXAnim.localEulerAngles = new Vector3(angle, 0, 0);
            }

    结合起来,也能解决大部分问题。

    可是,今天又出现一个奇怪问题,就是我前面说的,突然变成反向的角度,而且只有第一次出现,之后旋转都是正常的。

    思来想去,最后想到一个曲线解决方案:

    我们在初始化物体时,是知道物体的旋转角度的,那么我们就可以存储一个临时的欧拉角度,在需要旋转角度时,直接用这个临时的欧拉角度进行计算,计算得到结果之后,直接先判断角度是否超过我们给定的值,这样就不用经过四元数那一层计算了,那么也就不会出现万向锁和我上面说的问题了。

    void MapRotating(Vector3 tempPosition){
    		Vector3 tempAngle = Vector3.zero;
    		tempAngle.x = tempPosition.y * 15f / scaleTrans.localScale.x;
    		tempAngle.y = -tempPosition.x * 15f / scaleTrans.localScale.x;
    		nowRotate += tempAngle;
    		nowRotate.x = ClampAngle(nowRotate.x, -90, 90);
    		SetNowRotValue(nowRotate.x, nowRotate.y, true);
    	}
    	static float ClampAngle(float angle, float min, float max) {
            if (angle < -360){
                angle += 360;
            }
            if (angle > 360){
                angle -= 360;
            }
            return Mathf.Clamp(angle, min, max);
        }

    哈哈,想问题真的进入到一个思维死角里面去了,反而忘记后面这个最简单的方式了-

    更多相关内容
  • 电信设备-一种物体多角度图像信息获取方法.zip
  • 根据Timer事件,每次都更改Degree,重新绘制图片的位置,然后不断的调用事件,给人的视觉上是在不断的旋转。
  • 针对复杂的室内环境,提出一种新的动态...通过大量实验,从自然路标变化、目的区域变化、手绘地图偏差等多角度验证该方法的鲁棒性.实验结果表明,该导航方法操作简单高效,并具有人机交互性强、动态环境下适应能力高的优点
  • 只需对超声波传感器模块进行少量修改,该雷达就可以在每次ping时检测物体。 硬件部件: Arduino Nano R3 × 1个 28byj-48步进电机× 1个 BOOSTXL-ULN2003 ULN2003A双步进电机BoosterPack × 1个 超声波传感器-HC-...
  • 以上就是我的问题,有点,或许是因为这个旋转方法我使用的不对,如果不这样做,有什么方法可以让物体以一定的速度旋转一个角度呢? 还请大佬指点一下,我将不胜感激。我的wx是: Y2548962922
  • opencv12-计算物体旋转角度

    千次阅读 2017-08-16 11:48:39
    求取的角度是负值,我在图中画了一个垂直的形状,得出的结果是0 ,原因大家自己去理解。 废话不说,直接上代码: #include #include #include #include #include #include using namespace std; using ...

    求取的角度是负值,我在图中画了一个垂直的形状,得出的结果是0 ,原因大家自己去理解。

    废话不多说,直接上代码:

    #include <iostream>
    #include <vector>
    #include <opencv2/opencv.hpp> 
    #include <opencv2/core/core.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv2/highgui/highgui.hpp>
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	// Read image
    	RNG rng(12345);
    	Mat pSrcImage = imread("11.jpg", CV_LOAD_IMAGE_UNCHANGED);
    	if (!pSrcImage.data)
    		return 0;
    	imshow("Image", pSrcImage);
    
    	// 转为2值图
    	threshold(pSrcImage, pSrcImage, 200, 255, cv::THRESH_BINARY_INV);
    	
    	imwrite("binary.jpg", pSrcImage);
    
    	vector<std::vector<cv::Point>> contours;
    	Mat canny_output;
    	Canny(pSrcImage, canny_output, 80, 255, 3);
    	imshow("Canny Image",canny_output);
    	
    	vector<Vec4i> hierarchy;
    	findContours(canny_output, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
    
    	/// 对每个找到的轮廓创建可倾斜的边界框和椭圆
    	vector<RotatedRect> minRect(contours.size());
    	for (unsigned int i = 0; i < contours.size(); i++)
    	{
    		minRect[i] = minAreaRect(Mat(contours[i]));
    	}
    	
    	/// 绘出轮廓及其可倾斜的边界框
    	CvBox2D  End_Rage2D;
    	CvPoint2D32f rectpoint[4];
    	Point2f rect_points[4];
    	
    	Mat drawing = Mat::zeros(canny_output.size(), CV_8UC3);
    	for (unsigned int i = 0; i< contours.size(); i++)
    	{
    		
    		End_Rage2D = minAreaRect(Mat(contours[i]));
    		Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
    		// contour
    		drawContours(drawing, contours, i, color, 1, 8, vector<Vec4i>(), 0, Point());
    		// rotated rectangle
    		Point2f rect_points[4]; minRect[i].points(rect_points);
    		for (unsigned int j = 0; j < 4; j++)
    		{
             line(drawing, rect_points[j], rect_points[(j + 1) % 4], color, 1, 8);
    		 cout << "坐标点:"<<rect_points[j] << "........" << rect_points[(j + 1) % 4] << endl;
    		}
    		
    		
    		int a = 0, b = 0, k = 0;
    		a = (int)sqrt((pow((rect_points[0].x - rect_points[1].x), 2) + pow((rect_points[0].y - rect_points[1].y), 2)));
    		b = (int)sqrt((pow((rect_points[0].x - rect_points[3].x), 2) + pow((rect_points[0].y - rect_points[3].y), 2)));
    
    		if (a<b)
    			{
    				k = a;
    				a = b;
    				b = k;
    			}
    		printf("最小外接矩形的长为:%d,宽为:%d。\n\n", a, b);
    		cout << " angle:\n" << 90+(float)End_Rage2D.angle << std::endl;      //旋转角度 
    	}    
    
    	namedWindow("Contours1", CV_WINDOW_AUTOSIZE);
    	imshow("Contours1", drawing);
    	
    	waitKey(0);
    	return 0;
    
    }
    实验图:

    实验结果:



    展开全文
  • 物体自动排列

    2018-02-02 16:21:05
    ,一个环形排列物体,围绕某个中心物体。另一个是直线排列物体,可以调节之间的位置,也可以调节旋转角度。 使用的时候拖到物体上,不需要的时候删掉
  • 在曝光过程中绕光轴旋转相机,可探测到由一系列旋转不同角度后的瞬时散斑叠加而成的一张散斑图像。在满足散斑旋转去相关的条件下,这些瞬时散斑之间非相关。至此,对应不同时刻、不同视角的一系列瞬时散斑路复用于...
  • 具体来说,我们先学习一个预测物体抓取角度的神经网络,该网络会对前向通过的物体给出一个抓取角度预测,并且我们要求不管是来自源域还是目标域的物体,只要抓取角度相似,它们在特征空间上也应该相近。从源域学得的...
  • 本文则从光学技术角度结合力学原理利用CCD传感实现了对物体的动态实时测量。  2 测量原理  CCD对物体进行测量的原理如图1所示。平面镜的转动支点为O,且垂线OW交透镜轴为W点。W点位于f′(焦距)与
  • Unity 区域内生成个不穿透的物体

    千次阅读 2022-04-14 15:13:31
    红色区域内生成个互相不穿透的物体 1、四周的边界需创建大尺寸的Collider防止穿透 并且Rigidbody2d需进行如下设置,设置Constraints锁定固定物体的位置和旋转角度,防止被生成的物体挤出 2、设置要生成的...

    红色区域内生成多个互相不穿透的物体 

    1、四周的边界需创建大尺寸的Collider防止穿透

    并且Rigidbody2d需进行如下设置,设置Constraints锁定固定物体的位置和旋转角度,防止被生成的物体挤出

    2、设置要生成的物体的Collider和Rigidbody2d,这里我锁定了旋转

    3、代码如下:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using UnityEngine;
    
    public class BallCtrl : ReusableObject
    {    
        Rigidbody2D _rigidbody;//物体的刚体    
    
        private void Awake()
        {
            _rigidbody = transform.GetComponent<Rigidbody2D>();
        }
    
        //物体的缩放
        public void Scale()
        {
            //这里是重点!!!
            //判断生成的物体是否与其它物体发生重合
            //因为我用的是圆形碰撞,所以用OverlapCircleAll
            var colliders = Physics2D.OverlapCircleAll(transform.position, transform.GetComponent<CircleCollider2D>().radius * transform.localScale.x - 0.1f);
            bool scale = true;
            for (int i = 0; i < colliders.Length; i++)
            {
                if (colliders[i].gameObject == gameObject)
                {
                    //物体第一个碰到的永远是自己,跳过
                    continue;
                }
                else
                {
                    scale = false;
                }
            }
            if (scale)
            {
                transform.localScale += Vector3.one * Time.deltaTime * Const.BallScaleSpeed;
            }        
        }
    
        //物体的移动
        public void MovePosition(Vector2 worldPos)
        {
            // 修改为刚体控制移动 --> 则不会被穿透了
            _rigidbody.MovePosition(worldPos);
           
        }   
        
    }
    

    最终效果如下:实现了点击屏幕生成物体,物体一边放大一边移动,并且不会超过区域外,每个物体之间不会发生重叠

    展开全文
  • 提出了利用曝光数字散斑技术取代干板照相技术记录物体运动轨迹的研究方法,根据杨氏条纹模型详细分析了该方法的基本原理,给出了物体的面内运动和小角度转动两种运动轨迹的测量结果,对影响实验结果的因素进行了...
  • 本文则从光学技术角度结合力学原理利用CCD传感实现了对物体的动态实时测量。  2 测量原理  CCD对物体进行测量的原理如图1所示。平面镜的转动支点为O,且垂线OW交透镜轴为W点。W点位于f′(焦距)与
  • 对于小物体检测而言,降低网络的下采样率也许是最为简单的提升方式,通常的做法是直接去掉 Pooling 层,但这样虽然减小了下采样率,却会导致后续层的感受野与原有模型不同,如果使用预训练模型进行微调,则模型不能...

    多尺度检测

    降低下采样率与空洞卷积

    • 对于小物体检测而言,降低网络的下采样率也许是最为简单的提升方式,通常的做法是直接去掉 Pooling 层,但这样虽然减小了下采样率,却会导致后续层的感受野与原有模型不同,如果使用预训练模型进行微调,则模型不能很好地收敛,因此可以使用空洞卷积,在保证不改变网络分辨率的前提下增加网络的感受野。需要注意的是,采用空洞卷积也不能保证修改后与修改前的感受野完全相同,但能够最大限度地使感受野在可接受的误差内
      在这里插入图片描述

    Anchor 设计

    • Anchor 通常是多个不同大小与宽高的边框,这个大小与宽高是一组超参数,需要我们手动配置。在不同的数据集与任务中,由于物体的尺度、大小会有差距,例如行人检测的数据集中,行人标签宽高比通常为 0.41,与通用物体的标签会有所区别,这时就需要相应地调整 Anchor 的大小与宽高。另外,Anchor 的大小对于小物体的检测也尤为重要,如果 Anchor 过大,即使小物体全部在 Anchor 内,也会因为其自身面积小导致 IoU 低,从而造成漏检。因此,如果 Anchor 设计的不合理,与数据集中的物体分布存在差距,则会给模型收敛带来较大的困难,影响模型的精度,甚至不会收敛
    • 通常来讲,可以从以下两个角度考虑如何设计一组好的 Anchor
      • (1) 统计实验: 利用训练集的标签与设计的 Anchor 进行匹配试验,试验的指标是所有训练标签的召回率,以及正样本的平均 IoU 值。当然,也可以增加每个标签的正样本数、标签的最大 IoU 等作为辅助指标。为了方便地匹配,在此不考虑 Anchor 与标签的位置偏移,而是把两者的中心点放在一起,仅仅利用其宽高信息进行匹配。这种统计实验实际是通过手工设计的方式,寻找与标签宽高分布最为一致的一组 Anchor
      • (2) 边框聚类: 在训练集的标签上直接聚类出一组合适的 Anchor (YOLO v2 就是使用了 K-means 算法进行边框聚类)。由于一组 Anchor 会出现在特征图的每一个位置上,因此没有位置区别,可以只关注标签里的物体宽高,而没必要关心物体出现的位置

    多尺度训练 (Multi Scale Training,MST)

    • 关于多尺度,我们首先可以联想到数字图像处理中的图像金字塔,即将输入图片缩放到多个尺度下,每一个尺度单独地计算特征图,并进行后续的检测。这种方式虽然一定程度上可以提升检测精度,但由于多个尺度完全并行,耗时巨大
    • 当前的多尺度训练通常是指设置几种不同的图片输入尺度,训练时从多个尺度中随机选取一种尺度,将输入图片缩放到该尺度并送入网络中,是一种简单又有效的提升多尺度物体检测的方法。虽然一次迭代时都是单一尺度的,但每次都各不相同,增加了网络的鲁棒性,又不至于增加过多的计算量。而在测试时,为了得到更为精准的检测结果,也可以将测试图片的尺度放大,例如放大 4 倍,这样可以避免过多的小物体
      • 多尺度训练是一种十分有效的 trick,放大了小物体的尺度,同时增加了多尺度物体的多样性,在多个检测算法中都可以直接嵌入,在不要求速度的场合或者各大物体检测竞赛中尤为常见

    特征融合

    在这里插入图片描述

    尺度归一化: SNIP (Scale Normalization for Image Pyramids)

    Image Classification at Multiple Scales

    • SOTA 的目标检测方法一般是在 800 × 1200 800\times 1200 800×1200 的分辨率下训练,但推理却是在图像金字塔上进行的,其中检测小物体时使用的分辨率达到了 1400 × 2000 1400\times2000 1400×2000,因此这样的训练和推理方式带来了 domain shift. 作者下面就分析了 domain shift 带来的影响

    在这里插入图片描述

    • Naive Multi-Scale Inference (CNN-B;高分辨率训练,低分辨率测试): 首先将 ImageNet 中的图像下采样为 48 × 48 48\times48 48×48, 64 × 64 64\times64 64×64, 80 × 80 80\times80 80×80, 96 × 96 96\times96 96×96 128 × 128 128\times128 128×128 的低分辨率图像,然后将它们上采样为 224 × 224 224\times224 224×224 后输入 CNN-B,其中 CNN-B 是在 224 × 224 224\times224 224×224 的分辨率上训练的。实验结果表明,训练和推理时的图像分辨率差距越大,模型性能越差
      在这里插入图片描述
    • Resolution Specific Classifiers (CNN-S;低分辨率训练,低分辨率测试): 基于上述观察,一种简单的提高模型小物体检测性能的方法就是让模型在低分辨率图像上训练,这就需要在网络架构中使用更小的 stride。实验表明, 48 × 48 48\times48 48×48 96 × 96 96\times96 96×96 分辨率下分别训练的两个 CNN-S 性能都超过了 CNN-B,因此对于低分辨率图像的检测,专门预训练一个针对低分辨率图像的 backbone 网络可能会提升模型性能
    • Fine-tuning High-Resolution Classifiers (CNN-B-FT;高分辨率训练,低分辨率微调,低分辨率测试): 另一种简单的提升小物体检测性能的方法就是在上采样后的低分辨率图像上对 CNN-B 做微调,实验表明这种方法的性能最好,因此可以不改变模型架构,而是采取这种在高分辨率上训练,低分辨率上微调的方式来提升模型小物体检测性能
      在这里插入图片描述

    Data Variation or Correct Scale?

    以下实验均基于 Deformable-RFCN (D-RFCN),因此可以输入不同尺寸的图片进行目标检测。Deformable-RFCN 基于 R-FCN,它在 conv5 层添加了可变形卷积来动态调整网络感受野以适应物体的不同大小,同时将位置敏感 RoI 池化替换为了可变形位置敏感 RoI 池化

    • 下面的对比试验都在 1400 × 2000 1400\times2000 1400×2000 分辨率的图像上测试检测小物体的性能

    • Training at different resolutions (Fig 5.1): 分别在 800 × 1400 800\times1400 800×1400 1400 × 2000 1400\times2000 1400×2000 分辨率下使用所有训练样本进行训练 (i.e. 80 0 a l l 800_{all} 800all, 140 0 a l l 1400_{all} 1400all)。和前面的结论一致, 140 0 a l l 1400_{all} 1400all 的性能超过了 80 0 a l l 800_{all} 800all,但提升并不明显。对此,作者认为在更高分辨率下训练虽然能提升小物体检测性能,但也让大物体尺寸过大而难以检测,模型需要同时检测尺度差距很大的物体,加重了模型负担,进而限制了模型性能
    • Scale specific detectors (Fig 5.2): 有了上述观察,作者进一步在 1400 × 2000 1400\times2000 1400×2000 分辨率下仅使用小于 80 像素点的训练样本进行训练 (i.e. 140 0 < 80 p x 1400_{<80px} 1400<80px),但却发现模型性能反而降低了。对此,作者认为丢弃大物体样本降低了样本的多样性,这会对模型性能产生更大的损伤
    • Multi-Scale Training (MST) (Fig 5.3): 多尺度训练将样本随机缩放到不同分辨率下进行训练,这保证了模型能在多个分辨率下观察物体。然而,MST 的性能却只与 80 0 a l l 800_{all} 800all 接近,对此,作者认为应该使用适当缩放的物体样本进行训练,同时也要保证足够的样本多样性 (Fig 5.4)
      在这里插入图片描述在这里插入图片描述

    Object Detection on an Image Pyramid

    • Scale Normalization for Image Pyramids: SNIP 是 MST 的改进版本,当图像被缩放到不同分辨率时,只有与预训练数据集分辨率尺寸 (typically 224 × 224 224\times224 224×224) 接近的物体才被用于训练。这样既保证了数据的多样性,又不会因为过大/过小物体难以检出而导致模型性能下降
    • 具体而言,在训练分类器时,先用所有 GT 框给 proposals 分配标签,然后丢弃那些尺寸过大或过小的 proposals 和 GT 框。同样地,在训练 RPN 时,也是先用所有 GT 框给所有锚框分配标签,然后将过大或过小 GT 框设为无效 GT 框,丢弃与无效 GT 框 IoU 超过 0.3 的锚框;推理时,则在不同分辨率下分别输出预测框,然后丢弃过大或过小的预测框 (注意,是丢弃预测框而非 proposals),最后使用 soft NMS 输出最终的预测框
      在这里插入图片描述

    三叉戟: TridentNet


    • TridentNet 的作者首先分析了不同大小的感受野对于检测结果的影响。实验分别采用了 ResNet-50 及 ResNet-101 作为 Backbone,仅仅改变最后一个阶段的每个 3 × 3 3×3 3×3 卷积的空洞数,这也得益于空洞卷积可以在相同的结构、参数量与下采样率时,改变网络的感受野。实验结果如下表所示:
      在这里插入图片描述其中, A P s AP_s APs A P m AP_m APm A P l AP_l APl 分别代表小、中、大 3 个不同尺度的评测子集。从结果可以很直观地看出,不同尺度的检测性能与感受野呈正相关,即大的感受野对于大物体更友好,小的感受野对于小物体更友好。基于此结论,进一步联想,能否将这 3 种不同的检测性能结合,实现优势互补呢?
    • 基于此,作者将这 3 种不同的感受野网络并行化,提出了如下图所示的检测框架。采用 ResNet 作为 Backbone,前三个 stage 沿用原始的结构,在第四个 stage 使用了三个感受野不同的并行网络 (Trident Block):
      在这里插入图片描述其中,由于 3 个分支要检测的内容是相同的、要学习的特征也是相同的,只不过是形成了不同的感受野来检测不同尺度的物体,因此,3 个分支共享权重,这样既充分利用了样本信息,学习到更本质的物体检测信息,也减少了参数量与过拟合的风险 (RPN 和 RCNN 网络也是共享的)
      在这里插入图片描述
    • Scale-Aware Training: TridentNet 还借鉴了 SNIP 的思想,在每一个分支内只训练一定尺寸范围内的样本,避免了过大与过小的样本对于网络性能产生影响
    • Fast Inference Approximation: 在测试时,由于没有先验的标签来选择不同的分支并且中间分支对较小和较大物体的检测性能都比较好,因此只保留了一个中间一个分支进行前向计算。这种前向方法只有少量的精度损失,同时还增加了模型推理速度

    拥挤与遮挡

    • 与通用的物体检测相比,遮挡问题在行人的检测中更为普遍,该问题也是行人检测中最为棘手的问题之一。本节将会从行人检测的角度,介绍遮挡问题的背景,以及如何解决行人检测中的遮挡问题

    行人检测问题

    Faster RCNN 由于其两阶的设计,在行人检测领域比 SSD 等一阶网络更有优势,通常作为行人检测的基础结构

    行人检测的数据集

    • (1) Caltech: 一个规模较大的行人检测数据集,其包含了大约 25 万张图片,2300 个行人标签,是一个十分常用的行人检测数据集
    • (2) CityPersons: 在 Cityscape 城市数据集的基础上,标注了更为全面的行人标签,从行人的数量、小物体、遮挡的丰富性来讲,都胜过以往的数据集,现已成为行人检测领域的首选性能评测数据集

    多尺度检测

    • 在行人检测中,多尺度检测的问题同样严重,因此使用上采样、降低下采样率、SNIP、特征融合等,也可以有效提升行人检测的性能
    • 尤其需要指出的是,由于行人具有特殊的形状,其高宽比集中在 2.41 左右,因此设计针对性更强的 Anchor,也可以有效提升检测的精度

    行人遮挡情景

    • (1) 行人之间的自遮挡: 行人之间的自遮挡会严重影响检测的性能,主要体现在 (i) 定位不准确:在提取行人的特征时,遮挡会带来特征的缺失,并且距离很近的行人特征会相互影响,带来干扰,这都会降低行人定位的准确性;(ii) 对 NMS 的阈值更为敏感
      在这里插入图片描述
    • (2) 行人被其他物体遮挡: 这种遮挡会导致大面积的信息缺失,即使肉眼也不容易判断行人的边框具体位置,进而带来较高的行人漏检
      在这里插入图片描述

    解决行人遮挡问题

    在这里插入图片描述

    • (1) 改进 NMS:Soft NMS、IoU-Net…
    • (2) 增加语义信息:遮挡会造成行人部分信息的缺失,因此可以尝试引入额外的特征,如分割信息、梯度和边缘信息等,详细方法可见 CVPR 2017 中的 HyperLearner
    • (3) 划分多个 part 处理:由于行人之间的形状较为相似,因此可以利用这个先验信息,将行人按照不同部位,如头部、上身、手臂等划分为多个 part 进行单独处理,然后再综合考虑,可以在一定程度上缓解遮挡带来的整体信息缺失

    排斥损失: Repulsion Loss


    • 当物体靠得太近时,周围物体会对真实物体的回归造成干扰。基于此,作者提出 Repulsion Loss缓解物体之间的相互影响。Repulsion Loss 的回归损失如下式所示:
      在这里插入图片描述
      • Attraction Term L a t t r L_{attr} Lattr 代表当前样本预测框与真值的吸引回归损失,沿用了 Faster RCNN 的 s m o o t h L 1 smooth_{L_1} smoothL1 函数
        在这里插入图片描述其中, P ∈ P + P\in \mathcal P_+ PP+ 为 positive proposal, G A t t r P = arg max ⁡ G ∈ G I o U ( G , P ) G_{Attr}^P=\argmax_{G\in\mathcal G}IoU(G,P) GAttrP=GGargmaxIoU(G,P) B P B^P BP 为由 proposal P P P 回归得到的预测框
      • Repulsion Term (RepGT) L R e p G T L_{RepGT} LRepGT 表示当前预测框与周围真实物体的排斥损失,目的是让当前预测框尽可能远离周围的标签物体 G R e p P G_{Rep}^P GRepP,也就是除了预测框本身要回归的物体之外,与该预测框有最大 IoU 的物体标签
        在这里插入图片描述受 IoU Loss 的启发,这里衡量预测框与周围物体标签的距离使用了 IoG (Intersection over GroundTruth) 函数
        在这里插入图片描述可以看出, I o G ( B , G ) ∈ [ 0 , 1 ] IoG(B,G)\in[0,1] IoG(B,G)[0,1],且 IoG 的分母是常量,减小 IoG 只能通过减小 B B B G G G 的重叠面积。如果这里采用 IoU 作为距离函数来优化的话,由于分母不是常量,简单地增大预测框的面积也可以达到减小 IoU 的目的,这与我们的期望并不一致,会带来模型优化不稳定的问题。最终,RepGT 被定义为
        在这里插入图片描述在这里插入图片描述其中, σ ∈ [ 0 , 1 ) \sigma\in[0,1) σ[0,1) 为平滑超参, S m o o t h l n Smooth_{ln} Smoothln ( 0 , 1 ) (0,1) (0,1) 上连续可微
        在这里插入图片描述
      • Repulsion Term (RepBox) L R e p B o x L_{RepBox} LRepBox 表示当前预测框与周围其他预测框之间的排斥损失,目的是避免本属于两个物体的预测框,其中一个被 NMS 抑制掉。根据图像中的物体标签,我们可以将最后的预测框划分为多个组,同组之间的预测框回归的是同一个物体标签,不同组之间的预测框对应的是不同的物体标签。假设有 g g g 个物体,则划分形式如下式所示:
        在这里插入图片描述然后,对于不同组之间的预测框 P i ∈ P i P_i\in\mathcal P_i PiPi P j ∈ P j P_j\in\mathcal P_j PjPj,我们希望 B P i B^{P_i} BPi B P j B^{P_j} BPj 之间的重叠区域越小越好:
        在这里插入图片描述
      • 上述 3 部分损失使用了 α α α β β β 来调节损失权重,实验表明, α α α β β β 都为 0.5 时,检测性能最佳

    OR-CNN (Occlusion-aware R-CNN)


    聚集损失:Aggregation Loss

    • OR-CNN 基于 Faster RCNN。它在 RPNRCNN 阶段都加入了聚集损失来使得多个匹配到同一个物体标签的 Anchor 尽量地靠近 (locate closely and compactly to the ground-truth object),以免误检到周围临近的行人。聚集损失 L a g g \mathcal L_{agg} Lagg
      在这里插入图片描述其中, i i i 为 mini-batch 中 proposal 的索引, p i p_i pi t i t_i ti 为预测的分类得分和坐标, p i ∗ p^*_i pi t i ∗ t^*_i ti 为真值, β \beta β 为平衡两个损失项的超参
    • 回归损失 L r e g \mathcal L_{reg} Lreg 使得 proposals 与 GT 框尽量接近,沿用了 Faster RCNN 的 s m o o t h L 1 smooth_{L_1} smoothL1 损失函数
      在这里插入图片描述其中, N r e g N_{reg} Nreg 为总的 proposal 数, Δ ( t i − t i ∗ ) \Delta(t_i-t_i^*) Δ(titi) s m o o t h L 1 smooth_{L_1} smoothL1 损失
    • 紧密损失 (Compactness Loss) L c o m \mathcal L_{com} Lcom 使得要回归到同一个物体标签的所有 Anchor 尽可能靠的更近
      在这里插入图片描述其中, ρ = N c o m \rho=N_{com} ρ=Ncom 为有多个 Anchors 对应的 GT 框数量。假设 GT 框 i i i 有多个 Anchors 与之对应,则 t ~ i ∗ \tilde t_i^* t~i 为这些 Anchors 对应的坐标真值, Φ i \Phi_i Φi 为这些 Anchors 的索引集, 1 ∣ Φ i ∣ ∑ j ∈ Φ i t j \frac{1}{|\Phi_i|}\sum_{j\in\Phi_i}t_j Φi1jΦitj 为这些 Anchors 的位置均值, Δ ( ⋅ ) \Delta(\cdot) Δ() s m o o t h L 1 smooth_{L_1} smoothL1 损失函数

    行人部位拆解的池化:PORoI Pooling (Part Occlusion-aware RoI Pooling)

    • 将行人分多个部位拆解,分别提取不同部位的特征,再融合检测,这是较为常见的处理遮挡问题的解决办法。OR-CNN 借鉴了该思想,并将这种思想融合到了 RoI Pooling 的过程中,提出了 PORoI Pooling
    • 首先,PORoI Pooling 利用行人的先验知识,将行人 (i.e. proposal Q Q Q) 分成了 5 个部位 ( P 1 , . . . , P 5 ) (P_1,...,P_5) (P1,...,P5),5 个部位的大小与行人的宽、高为固定的比例关系。接着用 RoI Pooling 得到特征 ( F 1 , . . . , F 5 ) (F_1,...,F_5) (F1,...,F5) 然后输入遮挡处理单元得到可见度得分 (visibility score) ( o 1 , . . . , o 5 ) (o_1,...,o_5) (o1,...,o5)。除此之外,还直接对 proposal Q Q Q 使用 RoI Pooling 得到整体特征 F \mathcal F F。最后通过逐元素加来获得最终的特征为 F ⊕ ( o 1 ⋅ F 1 ) ⊕ ( o 2 ⋅ F 2 ) ⊕ ( o 3 ⋅ F 3 ) ⊕ ( o 4 ⋅ F 4 ) ⊕ ( o 5 ⋅ F 5 ) \mathcal{F} \oplus\left(o_{1} \cdot F_{1}\right) \oplus\left(o_{2} \cdot F_{2}\right) \oplus(o_{3}\cdot F_3)\oplus(o_{4}\cdot F_4)\oplus(o_{5}\cdot F_5) F(o1F1)(o2F2)(o3F3)(o4F4)(o5F5)
      在这里插入图片描述其中,遮挡处理单元需要输入每个部分的可见度得分真值 o ∗ o^* o 作为训练时的标签然后使用交叉熵损失 (i.e. L o c c \mathcal L_{occ} Locc) 进行训练。如果该部分的一半是可见的,则 o ∗ = 1 o^*=1 o=1,反之为 0,这就要求事先对哪些像素是可见的,哪些是不可见的进行标注

    综上所述,OR-CNN 的 RPN 部分损失为:
    在这里插入图片描述RCNN 部分损失为:
    在这里插入图片描述

    参考文献

    • 《深度学习之 PyTorch 物体检测实战》
    展开全文
  • 网上关于物体旋转的方法非常,但大都是单一轴旋转,或指定的角度旋转比如:(Vector3.up 或(0,90,0)); 由于旋转的坑太,会发现将代码套用在我们的需求下后产生一种问题,即在单一轴旋转时其他两个轴的旋转...
  • 有时场景中需要让固定物体或Canvas生成在角色正前方(VR中比较常用)
  • 想要做一个 通过cv定位物体坐标,通过python运行输出坐标和角度,控制舵机也旋转多少度,达到,自动校正物体的目标,从而对杂乱的物体摆放进行后续操作。 1、编写物体识别的类(文件名叫:圈出物体的轮廓 .py,...
  • 提出一种新型轮廓拼接技术...实践表明,应用该方法物体只需在4个角度0°、90°、180°、270°进行旋转,就能快速得到物体360°轮廓,它不仅可以用于普通连续面形的测量,又可以用于含有间断的面形即自由曲面的测量。
  • OpenCV轮廓检测,计算物体旋转角度

    万次阅读 热门讨论 2015-02-27 00:54:37
    //代入cvMinAreaRect2这个函数得到最小包围矩形 这里已得出被测物体角度,宽度,高度,和中点坐标点存放在CvBox2D类型的结构体中, //主要工作基本结束。 for(int i = 0;i;i++) { //CvArr* s=(CvArr*)&...
  • 专家们想了想,利用类似红外线来检测,买了很高级设备,厂家花了很钱,终于把这件事解决了。可是另外一个厂,他们是将电风扇放在流水线前面,利用吹风,把轻的空盒子吹掉,来解决这一问题。  上面的故事对
  • Unity 绕物体旋转两种方式

    千次阅读 2021-04-25 10:49:39
    Unity 绕物体旋转两种方式前言第一种方式第二种方式 前言 项目上遇到一个要绕物体旋转的问题,还要可以动态修改旋转中心和旋转半径。 第一种方式 使用Unity自带的API RotateAround 有两个问题 物体移动的时候无法...
  • unity中实现物体在一定角度范围内来回旋转 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Rotate : ... unity检测鼠标是点击在UI上还是物体上 void Update() { if...
  • 【Unity3D Debug】如何在不改变物体自身Transform的情况下,令其绕特定物体进行旋转(含方法可行性证明)问题引入 问题引入 这个问题或许有人会觉得很奇怪:为什么要绕这么大一个弯子,直接改变该物体的Transform,...
  • 总结一些物体惯性旋转方式,项目中用到了第二种,也推荐旋转相机,可以用一个单独的相机照射模型。另外,触控屏获取 Input.GetAxis(“Mouse X”) 获取不到,使用 Input.touches[0].deltaPosition.x 来代替。 物体...
  • ARFoundation之路-3D物体识别之一

    千次阅读 热门讨论 2019-08-14 14:02:37
    3D物体跟踪技术的基础也是图像识别,但比前述图像识别跟踪要复杂得,原因在于现实世界中的物体是三维的,从不同角度看到的物体形状、纹理都不一样,在进行图像对比时需要的数据比2D图像识别要。   在...
  • 网格密集度:网格越密集检测的越精细,发射的射线就越,消耗性能就越 视野角度与视野半径分别控制着扇形模式与圆形,圆锥模式的视野角度 视野距离:调整检测距离 目标Tag: 只有这个标签的物体可以被检测
  • unity3D拾取物体

    千次阅读 2021-05-11 11:41:57
    今天虚拟现实课程实验中需要用到使用物理射线来实现拾取物体的操作,借由老师的代码修改并从自己的角度理解和梳理; 首先 下面展示一些 内联代码片。 public class shiqu : MonoBehaviour { public float smooth = ...
  • 看最近物体识别互动桌比较火 本人就自己开发了一套物体识别底层开发包,以Unity插件的形式调用 CSDN好像放不了视频 先看效果!案例视频均为基于此开发包开发的程序,案列视频链接: ...
  • matlab转换java代码软件演示 TLDR; 使用从不同视点拍摄的一系列图像生成对象的3D模型的软件。 可以在不同的分辨率级别上生成并可视化生成的模型。 可以使用不同类型的体素来...下图显示了成对的物体和以不同角度(0

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,436
精华内容 27,374
关键字:

多角度物体