ScaleFace —— 尺度友好人脸检测

本文介绍了一种尺度友好的人脸检测方法,利用ResNet网络的不同阶段分支处理不同尺度的人脸,通过实验确定了人脸尺度范围并针对性训练,实现了在保持较高检测性能的同时,能有效处理不同大小的人脸。
摘要由CSDN通过智能技术生成

一篇关于如何处理多尺度人脸检测的文章。 从核心方法上来说和SSD没有本质的区别,只不过在实现细节上做了一些更为细致的工作。

文章链接: 《Face Detection through Scale-Friendly Deep Convolutional Networks》

1. 方法介绍

这里写图片描述

如上图,采用ResNet网络,输入单张图片。 在网络不同阶段引出分支,然后后接RPN和Fast R-CNN。 共有3个分支,每个分支只负责检测对应范围的人脸。

2. 要点介绍

(1)网络结构与检测目标尺度的关系

文章做了下面的对比实验:使用不同层级的特征检测指定尺度范围的人脸。

在C#中操作CAD软件(如AutoCAD)的面域对象进行放大,通常需要使用AutoCAD的.NET API。以下是使用AutoCAD的.NET API将CAD中面域对象以某个点为基点进行放大的基本步骤: 1. 首先,你需要创建一个AutoCAD的.NET API环境,这通常是通过加载AutoCAD类型库,并创建一个新的应用程序类来实现的。 2. 加载面域对象到内存中,这需要使用`Database`类中的方法。 3. 确定放大的基点,这将作为放大的参考点。 4. 使用`Matrix3d`类来创建一个放大的矩阵。这个矩阵需要将基点平移至原点,进行缩放,然后再将基点平移回原来的位置。 5. 将面域对象乘以这个矩阵,实现放大效果。 6. 最后,你需要将这个更改更新到CAD图形中,以使改动生效。 这是一个简化的代码示例,用于说明如何在C#中实现上述功能: ```csharp using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; public class CadUtils { [CommandMethod("ScaleFace")] public void ScaleFaceAtPoint() { Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { BlockTable acBlkTbl; BlockTableRecord acBlkTblRec; // 打开块表记录模型空间以写入 acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; // 选择面域对象 PromptEntityOptions peo = new PromptEntityOptions("\n选择面域对象进行放大:"); peo.SetRejectMessage("\n必须选择面域对象!"); peo.AddAllowedClass(typeof(Face), false); PromptEntityResult per = acDoc.Editor.GetEntity(peo); if (per.Status != PromptStatus.OK) return; // 获取选择的面域对象 Face acFace = acTrans.GetObject(per.ObjectId, OpenMode.ForRead) as Face; // 指定基点 Point3d basePoint = new Point3d(0, 0, 0); // 这里可以修改为实际的基点坐标 Matrix3d scaleMatrix = Matrix3d.Displacement(basePoint.GetAsVector()) * Matrix3d.Scaling(2.0) * Matrix3d.Displacement(-basePoint.GetAsVector()); // 假设放大倍数为2 // 创建一个新的面域,因为在.NET中对象不可修改 Face newAcFace = acFace.Clone() as Face; newAcFace.TransformBy(scaleMatrix); // 将新对象添加到块表记录和事务中 acBlkTblRec.AppendEntity(newAcFace); acTrans.AddNewlyCreatedDBObject(newAcFace, true); // 保存新对象 acTrans.Commit(); } } } ``` 在上面的代码中,我们定义了一个命令`ScaleFaceAtPoint`,它会提示用户选择一个面域对象,并且以模型空间中的原点作为基点,将选择的面域放大到指定的倍数。实际使用时,你可能需要根据实际情况调整放大倍数和基点坐标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值