DeepLearning

【社工&信息捕获】有个姑娘网恋奔现发现自己被人卖了,跟她见面的是另一个人

大家好,我是凌云 十多天前,我接到一条线索,原本以为是一件很普通的事,当我追查的时候发现和暗网有牵连,自己不但暴露了还被对方反查到真实身份。 这件事得从今年的2月10日说起,那天我和平常一样登公众号后台看私信内容。 有个叫李琴的姑娘连续几天都在给我发信息——在网上谈了一男朋友,聊了一个多月他来见她,发现不是同一个人,还差点被下药。 我跟李琴说修图太过分也很正常啊,怎么不是一个人了? 她说不是,刚见面的时候他说话带着一股小沈阳的味道,在网上他给我发语音普通话很正,没带口音的。 我当时就留了个心眼,以前他跟我说过对西瓜过敏的,我那天故意给他点了杯西瓜汁,他喝了啥事都没有。 然后他就跟我说让我去酒店陪他放行李,当时我就不敢跟他去了,我跟他说我去个厕所先,然后给我闺蜜发了条信息告诉她现在的情况,在回来的时候我看到他拿着一瓶东西倒我杯子里。 幸好当时我闺蜜打电话问我啥情况,我就借着这个机会说我还有个朋友要来,我出去门口接她一下,就偷偷跑了。 我琢磨了一会之后,给李琴留了个微信,让她微信上详细聊。 很快她加上了我,我问了李琴一些能证明身份的话,以及让她整理一份事件经过、把对方的所有信息发到我邮箱上 那天晚上,李琴和我说:“他向我坦白了,说把我的信息卖给了另一个男的。” 听到这,心里一阵无语,这种东西也能卖的吗? 我的打算是从卖李琴信息的人开始调查,如果有机会的话还要揪出跟她见面的人。 只要对方有把柄落我手上,自然就能问到我需要的信息。 而李琴网恋对象的信息,我觉得参杂了很多水分,毕竟刚开始就没打算跟她在一起的,自然给的是假信息,所以我现在要核验哪些信息是真的,哪些是假的。 0x0x 核验信息 我托在通讯公司上班的朋友查他给李琴的手机号,但我朋友说:“这个手机机主姓名叫陈杰” 而跟李琴网恋的人叫黄文民,根本不符合,所以他给李琴的姓名是假的。 后来当我尝试追查微信的时候发现,该微信是从16年就已经注册了 从一些蜘丝马迹来看,这个号码原来主人应该是中年人使用的 不然历史头像不会用一盆花作为头像,所以能推断微信号是从号贩子那买来的。 但很奇怪的是——我追查他留给李琴的QQ号的时候,发现这是一个常用号码,QQ等级和使用时间都是很正常的,并不像他买的微信号那样透露着不对劲。 难道他会给李琴自己私人的QQ吗?立马去问她这QQ号码是怎么来的 李琴说是在快见面之前的时候,当时让他陪我打王者,因为我玩的是QQ区的,他玩的是微信区的,不同区的没法一起玩,得加QQ好友才行,然后他一直让我等等,我生气之后他马上给了我一个QQ。 王者荣耀一共有两大分区,分别是QQ和微信,而它们是不互通的。 我问李琴:“那他的王者是小号吗” 不是,他QQ区都打上钻石了 琢磨了一会之后得出一个大胆的猜测——当时李琴催的急,没时间买新的QQ或者是新号打王者会有新手指引,我就特烦这个指引,站在我的角度去思考,我认为,这个QQ就是他的私人号码 大胆猜测,小心求证,我去QQ安全中心选择忘记密码,通过密保手机验证看到的这个QQ绑定的手机号是152开头的,而他给李琴的手机号是130开头的,这个QQ还真有可能就是他的私人号码 综合以上的简单分析,我决定把调查方向转到他QQ上 0x02猜解手机号 用这个QQ号的邮箱去查了下注册了哪些帐号,我想尝试去猜解出绑定的手机号剩下的数字 搜索支付宝帐号,有个实名信息叫刘*俊的帐号,很幸运的是这个帐号绑定了手机,在忘记密码的时候选择手机号和银行卡验证拿到了最后两位数的号码。 想猜解手机号,必须要了解手机号的格式(前三位+四位归属地+随机位) 我现在还不知道他到底是哪个地区的,他跟李琴说是湖北人,我肯定是不信的,还得自己查。 检索他这个QQ号在网上遗留的痕迹时,我发现了他的贴吧帐号,没发过帖子,头像也是默认的,但在他关注里看到关注了亳州这个贴吧。 经验告诉我,他百分之九十五是安徽毫州人,那么现在能确认地区了,剩下就要猜解出剩下的五位手机号了。 手机号的结构是前三位+四位归属地+随机位,我在网上找了一个全国号码生成器查找安徽移动所有的开头为152的号码,一共有400个 然后把数据导入到通讯录里一个个筛选QQ的通讯录好友,和头像符合的QQ。 花了挺长一段时间,终于找到了和他QQ头像昵称符合的了。 第一轮调查后我知道了他的手机号,姓名和地区,再次整理并且筛选假信息,得到下图。 目前知道了他叫刘X俊,152的手机号和35开头的QQ都是他的私人号码。 0x03钓鱼攻击 琢磨了一会之后,着手搭建了一个钓鱼网站,我的计划是利用钓鱼网站去尝试拿到他的QQ号,希望能在他QQ里捕捉到买家的一些线索。 钓鱼网站搭建完之后去某个短信验证平台上给他手机发了一条106开头的短信,说他的QQ被人多次申诉,现在已经限制部分功能,要想解除得登录下面的链接。 点开短信的链接会跳转到我搭建的虚假页面中,提示他要登录QQ才可以操作。当他输入QQ帐号和密码之后会提示密码错误,其实这个设置还真有点贱,哈哈哈。 很快在钓鱼网站后台里看到了他的QQ帐号和密码 但是在登录他QQ的时候发现有设备锁,用以前的漏洞无法绕过,这时陷入了困境,点了一根烟开始思考该用哪个方法去绕过设备锁。 0x04入侵邮箱 很明显我当时钻了牛角尖,一拍大腿,我可以登录QQ邮箱啊,为了避免再出现异地登录的情况,这次我用代理了安徽的IP,这次很顺畅进去了他的邮箱。 我在他邮箱里看到最近三个月频繁给一个名:kon***@sina.com的新浪邮箱发邮件,而每封邮件里都有一个附件,打开附件的Word文档全是某个女生的个人信息,包括照片,姓名,身份,毕业学校,兴趣爱好,父母家人等非常详细的信息。 我还翻到了他出售李琴个人信息的邮件,标题非常龌蹉! 随后我尝试撞库攻击他的其他社交帐号,再次追查他手机号绑定了哪些社交帐号 我查到他在18年注册了OPPO的帐号,用刚刚钓鱼来的QQ密码试着登陆一下,还真是同一个密码! 突然想起OPPO手机有个查找手机功能,这是手机丢失后提供给用户找回手机功能的。 而我利用这个功能知道了他家的大概区域 安徽毫州拓佳欢乐广场附近 我并没有停止撞库攻击,尝试登陆他的12306帐号,嚯!没想到这厮连那么重要的网站都用同一个密码,赶紧点开个人信息查看。 那么目前已经知道他的真实身份,跟李琴网恋并且倒卖她信息的人叫刘*俊,26岁,住在安徽亳州某个广场附近,年龄在23岁 现在买家的线索也浮出了水面,我打算顺着刘X俊这条线索调查跟李琴见面的人是谁。 0x05 买家浮出水面 我保留了他贩卖信息的证据后,选择跟他聊一聊,换了张不记名的电话卡之后,给他打了个电话,但一直不肯接,要么就是直接挂断了,打了五六个我给他编辑了条短信。 我跟他说已经掌握了他犯罪的证据,问几个问题,老实说我就放过你,不然就送你进去。 我问他这些信息都是从哪来的那么详细,他说:“都是跟她们网恋慢慢钓出来的”。 我顺着问:“你把这些信息卖给了谁,你跟他从哪里认识的?“ 暗网的一个论坛上,他当时发了一个帖子,收网恋对象的信息。

低照度图像增强之卷积神经网络RetinexNet

转载请标注:https://blog.csdn.net/weixin_38285131 目录 一丶Retinex理论——图像分解 二丶RetinexNet卷积神经网络 1.训练数据说明 2.分解网络——Decom 3.增强网络——Relight 4.结果展示 低照度图像增强一直是计算机视觉领域的一个热门研究方向,之前传统的基于Retinex理论的研究方法已经出现很多,比如:MSR,MSRCR,MSRCP等,这些方法在低照度图像增强方面效果有明显提升,上一篇博客主要介绍了基于Retinex理论的集中图像增强方法,并给出了python代码。博客链接如下: [图像增强Retinex算法之python实现——MSR,MSRCR,MSRCP,autoMSRCR](https://blog.csdn.net/weixin_38285131/article/details/88097771) 但是基于传统的图像图像处理方法处理每一张图像会比较耗时,一副4000*8000的图像需要耗时十几分钟,这样就没法批量处理低照度图像,因此本文介绍一种基于Retinex理论的卷积神经网络模型——RetinexNet,该模型是北大的童鞋在2018年发表在BMVC上的,论文名字是——Deep Retinex Decomposition for Low-Light Enhancement [论文PDF] RetinexNet项目介绍,数据集,PPT等 一丶Retinex理论——图像分解 这个理论在上一篇博客中已有介绍,任何一幅图像可以分解为光照图像(illumination)和反射图像(reflectance),反射图像是物体的本身性质决定的即为不变的部分,光照图则受外界影响比较到,可以去除光照影响或者对光照图像进行校正,则可以达到增强图像的目的。如下图所示: 左边即为低照度图像,中间即为光照图,右边即为反射图像,原图S(x,y)=I(x,y)*R(x,y),将图像变换到log域则变成了相减,然后将光照图像减去即可达到增强图像的目的。 二丶RetinexNet卷积神经网络 摘抄自论文摘要: Retinex理论是一种有效的微光图像增强工具。假设观测图像可以分解为反射图像和照度图像。大多数现有的基于Retinex卢纶的方法都为这种高度不适定的分解精心设计了手工约束和参数,当应用于各种场景时,这些约束和参数可能会受到模型容量的限制。Retinex包括一个用于分解的分解网络(Decom)和一个用于照明调节(Relight)的增强网络。在分解网络的训练过程中,没有分解反射和光照的地面真值。该网络的学习只有关键的约束条件,包括低/正常光图像共享的一致反射率,以及光照的平滑度。在分解的基础上,利用增强网络增强网对光照进行后续的亮度增强,联合去噪对反射率进行去噪操作。视网膜网是端到端可训练的,学习分解的性质有利于亮度的调节。 理论整体路线即为下图所示: 输入:低照度图像 分解网络(Decom):对图像进行分解 增强网络(Relight):对图像进行增强和调整 输出:校正之后的图像 1.训练数据说明 数据主要是利用单反相机不同的光圈值和感光度拍摄同一个场景,作为图像对进行训练,也就是说同一场景拍摄一个低照度图像,然后在拍摄一个正常图像进行训练,具体数据如下图所示: 作图为正常拍摄图像,右图为低照度图像,大概拍摄了500张图像对作为训练数据 2.分解网络——Decom 文中的分解网络应该是一个五层的卷积神经网络,代码中是利用relu函数进行激活,没有什么特别的处理,具体结构如下: 可以看到将图像对中的低照度图像和正常图像作为输入数据送入卷积神经网络进行分解,最后得到光照图像和反射图像,根据Retinex理论反射图像基本接近,但是两者光照图像相差很大,这样把每一张训练图像进行分解,然后再送入后面的增强网络进行训练。 3.增强网络——Relight 增强网络,我看代码应该是一个九层的卷积神经网络,利用relu进行激活,中间还进行最邻近差值的resize操作,具体如下图: 对刚才分解的反射图像进行去噪音操作,他中间用了平滑,但是我觉得用了平滑之后降低了图像本身的锐度,图像变得模糊,个人觉得这一步还应该做一下增强处理,回头看看能不能修改一下这个中间处理操作。应该可以用拉普拉斯进行一下图像恢复吧,我觉得这一步降低图像锐度不太好,重建图像稍显模糊。 4.结果展示 中间即为校正之后的,右边为正常光照图像,虽然和正常图像比不了,但是已经很不错了, 最后与其他算法做了一些对比工作,感觉各有千秋吧,不过都有一定的亮度提升,还是很值得研究一哈的 做一下改进。 下一步,我准备用这个神经网络训练一下自己的数据,然后测试一下增强效果。 数据集百度网盘地址 github地址 转载请注明地址:https://blog.csdn.net/weixin_38285131

(1) [Nature15] Deep Learning

计划完成深度学习入门的126篇论文第一篇,摘自Yann LeCun和Youshua Bengio以及Geoffrey Hinton三人合著发表在nature2015的论文,同时也算是DeepLearning这本书的序文。 摘要Abstract 深度学习是使用multiple processing layers即多层网络来学习数据的内涵表示。这些方法极大程度上提高了state-of-art在语音识别speech recognition, 图像识别visual object recognition, 目标检测object detection,以及药物发现drug discovery和基因学genomics。通过使用反向传播算法backpropagation algorithm来改变内部参数internal parameters。而深度网络DCNN带来在图像、音频、语音方面的重大突破,特别是RNN在连续型数据像文本和语音有重大突破。 Deep learning allows computational models that are composed of multiple processing layers to learn representations of data with multiple levels of abstraction. These methods have dramatically improved the state-of-the-art in speech recognition, visual object recognition, object detection and many other domains such as drug discovery and genomics. Deep learning discovers intricate structure in large data sets by using the backpropagation algorithm to indicate how a machine should change its internal parameters that are used to compute the representation in each layer from the representation in the previous layer.

DeepFake——学习资料

文章目录 教你用200行Python代码“换脸” dlib 的68个关键点 传统算法和深度学习的结合和实践,解读与优化 deepfake 深度解密换脸应用Deepfake Exploring DeepFakes 玩深度学习选哪块英伟达 GPU? CPU、GPU、CUDA,CuDNN 简介 Deepfake技术教学,现场教你用深度学习换一张脸 Floyd学习 nvidia driver、CUDN、CUDNN homebrew配置 Fake APP 1、An Introduction to DeepFakes 3、How To Install FakeApp 4、A Practical Tutorial for FakeApp ——FakeApp的实用教程。 5、An Introduction to Neural Networks and Autoencoders 6、Understanding the Technology Behind DeepFakes 阿里云基础知识学习 教你用200行Python代码“换脸” 介绍 本文将介绍如何编写一个只有200行的Python脚本,为两张肖像照上人物的“换脸”。 这个过程可分为四步: 检测面部标记。 旋转、缩放和转换第二张图像,使之与第一张图像相适应。 调整第二张图像的色彩平衡,使之与第一个相匹配。 把第二张图像的特性混合在第一张图像中。 完整的源代码可以从这里下载: https://github.com/matthewearl/faceswap/blob/master/faceswap.py 1.使用dlib提取面部标记 该脚本使用dlib的Python绑定来提取面部标记: 用Dlib实现了论文One Millisecond Face Alignment with an Ensemble of Regression Trees中的算法(http://www.csc.kth.se/~vahidk/papers/KazemiCVPR14.pdf,作者为Vahid Kazemi 和Josephine Sullivan) 。算法本身非常复杂,但dlib接口使用起来非常简单:

机器学习GPU环境搭建+惠普暗影精灵+win10+GTX1060+VS2015+CUDA8.0.61+xgboost GPU

Win10+GTX 1060显卡安装CUDA8.0 1. 下载visual studio 2015并安装 Visual Studio Professional 2015简体中文版(专业版)下载地址: http://download.microsoft.com/download/B/8/9/B898E46E-CBAE-4045-A8E2-2D33DD36F3C4/vs2015.pro_chs.iso SHA1: 629E7154E2695F08A3C692C0B3F6CE19DF6D3A72 激活密钥:HMGNV-WCYXV-X7G9W-YCX63-B98R2 (引用博客:https://www.cnblogs.com/bwlluck/p/5514424.html) 安装注意: VS2015 一定注意安装Win10 SDK,如下图: (引用博客:https://blog.csdn.net/u012348774/article/details/78711777?locationNum=2&fps=1) 2. 下载CUDA8.0.61并安装 下载CUDA8.0.61 下载地址1:https://developer.nvidia.com/cuda-80-ga2-download-archive (官网地址,下载到99%左右时,易连接失败,我放弃了官网下载) 下载地址2:百度网盘链接:https://pan.baidu.com/s/1JKJ6m9htjGZcc39NZDqV1A 密码:d44h (引用博客:https://blog.csdn.net/congcong7267/article/details/80634858) 安装NVIDIA图形显卡驱动时,出现黑屏很长时间(可达1h),解决办法是: 卸载已安装的NVIDIA图形显卡驱动,如下图中的该驱动,然后再运行安装CUDA8.0.61就可以了 安装cuda8.0,去勾选visual studio integration,否则,容易失败,如下图所示: 验证cuda8.0是否安装成功 : 进入cmd,输入 nvcc -V 命令,如下图所示:验证cuda8.0是否安装成功 : 进入cmd,输入 nvcc -V 命令,如下图所示: Win10+GTX 1060显卡安装XGBoost 引用博客:https://blog.csdn.net/m0_37327467/article/details/81324690 这篇博客已经写的比较清楚了,但是安装过程中仍有点问题,因此将自己的完整过程写下来以备忘。 1. 下载xgboost源码 下载地址:https://github.com/dmlc/xgboost 2. 下载xgboost.dll文件 下载地址:http://ssl.picnet.com.au/xgboost/ 支持GPU版已编译好的DLL文件,并放在第一步下载好的文件xgboost-master/python-package/xgboost目录下。 3. 安装xgboost 以管理员身份打开git bash(第一次安装未用管理员身份,则安装失败),并进入上一步的xgboost-master/python-package/目录,然后在git bash命令行窗口运行如下命令:python setup.py install 如下图所示: 4. 检查xgboost是否安装成功 在git bash中,进入\xgboost-master\tests\benchmark目录下,执行 python benchmark_tree.py –tree_method gpu_hist命令;

【实践】广告ctr模型之Deep cross network (dcn)

广告ctr模型可用的深度模型其本质架构都一样(可见https://blog.csdn.net/dengxing1234/article/details/79916532),这也是限制了模型的发展路线。Deep cross network在广告ctr模型也是应用很常见,它聚焦于解决特征工程的问题,对比paper中提到:【DNN可以自动地学习特征地交互作用,然而,它们隐式地的生成所有的特征交互,这对于学习所有类型的交叉特征不一定有效。于是提出了一种能够保持深度神经网络良好收益的深度交叉网络(DCN),除此之外,它还引入了一个新的交叉网络,更有效地学习在一定限度下的特征相互作用,更有甚,DCN在每一层确切地应用交叉特征而不需要人工特征工程,这相比于DNN模型增加地额外地复杂度可以忽略不计】。自己按照paper和高级的tensorflow api,实现l一版dcn,源码文件3个都已共享。希望有问题各位同行人能指出交流。 原版paper:https://arxiv.org/abs/1708.05123 my_core.py from tensorflow.python.framework import tensor_shape from tensorflow.python.layers import base from tensorflow.python.ops import init_ops from tensorflow.python.ops import standard_ops from tensorflow.python.framework import ops class CrossLayer(base.Layer): def __init__(self, use_bias=True, kernel_initializer=None, bias_initializer=init_ops.zeros_initializer(), kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None, trainable=True, name=None, **kwargs): super(CrossLayer, self).__init__(trainable=trainable, name=name, activity_regularizer=activity_regularizer, **kwargs) self.use_bias = use_bias self.kernel_initializer = kernel_initializer self.bias_initializer = bias_initializer self.kernel_regularizer = kernel_regularizer self.bias_regularizer = bias_regularizer self.kernel_constraint = kernel_constraint self.bias_constraint = bias_constraint self.input_spec = base.

深度学习AI美颜系列—人像审美

美颜是个常见的话题,暗藏了一个基础性的问题,什么是美,也就是人像之审美。 中国人审美的标准: 1,面部轮廓——“三庭五眼”; 2,人脸正中垂直轴上——“四高三低”; 3,人脸正中水平轴上——“丰”; 4,五官精致 符合上述三个条件,即中国人眼中的美貌了。 下面我们来具体分析: ①三庭五眼 世界各国普遍认为“瓜子脸、鹅蛋脸”是最美的脸形,从标准脸形的美学标准来看,面部长度与宽度的比例为1.618∶1,也就是黄金分割比例。 我们中国人所谓的三庭五眼,是人的脸长与脸宽的一般标准比例,从额头顶端发际线到眉毛、从眉毛到鼻子、从鼻子到下巴,各占1/3,这就是“三庭”;脸的宽度以眼睛的宽度为测量标准,分成5个等份,这就是“五眼”,具体如下图所示: ②四高三低 所谓“四高”是指: 第一高点,额部; 第二个高点,鼻尖; 第三高点,唇珠; 第四高点,下巴尖; 所谓“三低”是指: 第一低,两个眼睛之间,鼻额交界处必须是凹陷的; 第二低,在唇珠的上方,人中沟是凹陷的,美女的人中沟都很深,人中脊明显; 第三低,在下嘴唇唇的下方,有一个小小的凹陷; “四高三低”在头侧面相上最明确,如下图所示: ③“丰”字审美 “丰”是指人脸正中横轴上符合“丰”字审美准则。在人的面部上画上一个“丰”字,来判断美丑。先作面部的中轴线,再通过太阳穴(颞部)作一条水平线,通过两侧颧骨最高点作一条平行线,再通过口角到下颌角作一条平行线。形成一个“丰”字。在“丰”字的三横上面,颞部不能太凹陷,也不能太突起;如下图所示: ④五官精致 五官精致包含一下几个方面: 1、眼睛美: 双眼对称,眼窝深浅适中 2、鼻子美: 鼻根与双眼皮位置等高 3、耳廓美: 双耳对称,大小及形态相同 4、口唇美: 上唇下1/3部微向前翘 5、牙齿美: 静止状态时上前牙覆盖下前牙形1/3;正中上前牙与面形相同,牙齿整齐,洁白;微笑时露出双侧尖牙; 上面这些就是我们东方人所认为的貌美审美观,也是本人根据网络资源所做的一些总结。当然这只是一种大众认可,而并非所有人。对于真正的美女,不单单是这些内容,还要有形体与身材的审美等。 本文这里给大家普及的内容,主要是作为美颜算法研究的知识储备,所谓知己知彼,只有我们更了解什么是美,那么,我们的美颜算法才能更上一层楼!

win10 安装 GPU+Tensorflow

安装环境: 惠普暗影精灵4 1050Ti Win10 cpu的安装极其容易,pip或者conda均可 gpu的安装: pip安装极其缓慢。采用清华大学的镜像文件,倒是光速下载,但是在引入包的时候遇到ddl缺失的问题,在tensorflow官网上没有找到合适的解决办法,但是问题被列出来了。。详见https://github.com/tensorflow/tensorflow/issues/22794。。 决定改用conda安装。基本思想参考了这位大佬https://www.pugetsystems.com/labs/hpc/The-Best-Way-to-Install-TensorFlow-with-GPU-Support-on-Windows-10-Without-Installing-CUDA-1187/。。conda安装不需要单独安装cuda和cudnn。甚至于这篇博文都有些落伍了。现在几乎一条指令完事。 conda install tensorflow-gpu 会根据你的python版本自动下载相应的tensorflow,cuda和cudnn。 cuda和cudnn无需手动安装,无疑是太方便了。基本原理是通过conda创造了一个虚拟环境,conda自动在则会个环境里帮你解决了包的依赖问题。

深度学习笔记(4):1.1-1.3 边缘检测(edge detection)

第四课开始,我们开始学习卷积神经网络。 1.1 计算机视觉(computer vision) 深度学习在计算机视觉方面的应用非常振奋人心,一方面是该应用使许多不可能变成了可能,另一方面是深度学习在计算机视觉方面的应用能够给深度学习在其他方面的应用带来一些方法的改进和思考,比如语音识别等。 计算机视觉包含哪些问题呢?如下图所示: 比如图片分类,判断一个图片是否是猫;或者目标识别,比如在无人驾驶任务中,识别路上其他的车以及距离,以便无人驾驶能够安全执行;还有就是图片风格转化,比如我们有一个美女的照片(是吴老师的妻子,哈哈)和一个毕加索的绘画,把二者融合起来,就可以得到人像的轮廓和毕加索的风格。 比如在图片分类中,我们使用的图片可能是小图片,比如像素是64*64,加上颜色的三个channel(RGB channels),该图片作为输入是一个64*64*3=12288维的向量,还好。但若是大图片呢?比如一个像素为1000*1000的图片,那该图片作为输入就是3m(3百万)维的向量,假设第一层隐藏节点有1000个,且在完全连接的情况下,第一层的权重矩阵就是1000*3m维的矩阵,相当于第一层有30亿的权重,这时很难有足够多的样本去训练这么多的权重,容易发生过拟合,同时这么多的权重还会对内存有一定要求,而且我们不想仅限于处理小图片。为了解决衍生出来的这么多问题,我们需要使用卷积运算,见下节。 1.2 边缘检测例子(edge detection example) 卷积运算是卷积神经网络最基本的组成部分。这节课我们通过边缘检测例子来学习卷积运算,如下图所示: 在神经网络模型中,前几层神经网络能检测到边界,后几层可能检测到物体小部分,再后面几层可能检测到具体的物体,在这个例子中就是人脸。接下来我们讲如何在图片中识别边界,也就是为何神经网络前几层能够检测到图片中的边界。 假设我们有上图中这样一个照片,我们可以通过垂直边缘检测器和水平边缘检测器分别检测出图片中的垂直和水平边缘,检测器检测出的结果如上图所示。但是这些检测器是如何工作的呢?我们以垂直检测器为例。在介绍垂直检测器之前,我们先介绍一种运算,卷积运算(Convolution operation),如下图所示: 假设我们的图片如上图左侧矩阵所示,这是一个6*6的矩阵,因为我们没有考虑彩色,这仅仅是一个黑白图片,所以不存在RGB通道,这里图片是6*6*1的向量,接下来我们对其作卷积运算。 首先介绍一下中间的3*3矩阵,我们称之为‘核(kernel)’或‘过滤器(filter)’,中间‘*’号表示卷积运算,这与我们在程序中使用方法不同,一般‘*’在程序中都表示乘法,或者说是element-wise的乘法。 那么卷积运算怎么做呢?我曾在深度学习书中看过这样一种比喻,我觉得比较恰当,在这里跟大家分析一下,想象你是一个探险家,在黑暗中找到一幅画卷,为了仔细看清画卷内容,于是你打开手电筒从画的左上角还是扫描直至画的右下角,过滤器做的就是类似手电筒的工作。计算也非常简单,就是element-wise,首先将filter对应于左上角九宫格,然后按上图中红色式子进行计算,就是对这两个3*3矩阵进行element-wise乘法再求和,我们得到-5,写于右侧矩阵的(1,1)位置,就这样从左到右,从上到下,最终得到一个4*4的矩阵,其中最后(4,4)位置对应的-16是由左侧紫色框内矩阵和filter做卷积计算所得。 了解了卷积运算,接下来我们介绍垂直边缘检测器,如下图所示: 同样是做卷积运算,不过我们在这里对filter做了‘手脚’,使其能够检测出图片中的垂直边界,怎么说呢? 在原图中,也就是左矩阵中,我们用0来表示灰色(或者你认为黑色都可以),10来表示白色,即数值越大颜色越亮,我们想检测出白色和灰色中间那条边界,怎么做呢?我们使用了一个3*3的filter,它的第一列都为1,第二列为0,第三列为-1,经过卷积运算我们得到了一个4*4的矩阵,中间两列值都为30,两边为0,即我们清晰地找出了边界。 首先为什么能够找出边界,背后的思想我们可以这样认为,边界两侧的数值肯定是有很大差异的,不是边界的数值差异不大,所以kernel这样取值就能使数值差异不大的地方通过卷积运算得出来的值近似为0,而当数值有很大差异时,使用该kernel就无法抵消,这样就可以找出边界,当然这里要注意我们设置kernel的维度要注意原图的维度以及边界的宽度,比如这里最后的出来的边界看起来很宽,那是因为原图太小了,仅仅是6*6,如果是1000*1000,边界效果就会很好了。 1.3 更多边缘检测内容(more edge detection) 这小节我们将学习更多边缘检测的内容,比如学会如何区分正边和反边,也就是区分由亮到暗和由暗到亮的区别,如下图所示: 还是之前那个例子,假设我们将图片左右翻转一下,现在左侧是暗的,右侧是亮的,但是我们还使用同一个filter,所以自然会得到一个相反的数值,如上图所示,表示边界的值由30变为-30,这里数值的变化就就能够告知我们一些准确的信息,比如30告诉我们这个边界是正边,即颜色是由亮到暗,而-30就告诉我们这个边界是负边,及颜色是由暗到亮,当然如果你不care正边还是负边可以直接对卷积计算结果取绝对值,即只确定边界并不考虑其颜色是如何变化的。 除了垂直边缘检测,我们还可以进行水平边缘检测,如下图所示: 思想很简单,将垂直边缘检测的kernel作转置我们就可以得到水平边缘检测的kernel了。套用在例子中如上图所示,假设我们现在有一个这样的6*6矩阵,其对应图片为左下部和右上部偏暗,显然这个图片既存在水平边缘也存在垂直边缘,现在我们使用水平边缘检测的kernel去检测水平边缘,结果如上图所示,10和-10的出现在这里是因为垂直边缘的影响,同样,因为我们这里举例子的图片太小(6*6),所以这里显得10和-10占了很大比重,如果我们是1000*1000的图片,结果就可以不考虑10和-10的影响了。 对于kernel中的数值选取,很多学者在文献中公平地讨论过该如何搭配数据才是合理的,如下图所示: 除了第一列都是1,第三列都是-1这种filter,我们还可以对数据做其他改变,比如第二行都乘上2,我们称之为sobel filter,相当于在原来基础上进行了加权,它的优点在于增加了中间一行的权重,也就是处在中间的像素,这样可以增加结果的鲁棒性(robust),还有另一种filter,将第一行和第三行都乘上3,第二行乘上10,我们称之为scharr filter,这样改变也会改进一些性能。 但实际中,我们一般将这九个值设为九个参数,然后通过神经网络的反向传播去学习,为啥呢么这样做呢?首先是之前的filter过于简单,针对的仅仅是垂直或水平边缘的情况,即90度,且数值是实验前已经设定好的,不一定适合每个问题,而实际问题要复杂得多,比如上图中所示的情况,所以我们希望filter中的数值能够作为参数从数据集中学习而得到,这样一方面是准确,一方面是我们可以应对任何复杂的情况,不论是45度、70度或是73度的边缘我们都可以检测出来。 通过反向传播去学习kernel中的参数已经成为计算机视觉中最有效的思想之一。接下来我们会学习如何使用反向出传播去学习这九个参数,但在此之前,我们会先学习一下有关卷积运算的基础知识,详见下节。 版权声明:尊重博主原创文章,转载请注明出处https://blog.csdn.net/kkkkkiko/article/details/81812841

目标检测网络的知识蒸馏

“Learning Efficient Object Detection Models with Knowledge Distillation”这篇文章通过知识蒸馏(Knowledge Distillation)与Hint指导学习(Hint Learning),提升了主干精简的多分类目标检测网络的推理精度(文章以Faster RCNN为例),例如Faster RCNN-Alexnet、Faster-RCNN-VGGM等,具体框架如下图所示: 教师网络的暗知识提取分为三点:中间层Feature Maps的Hint;RPN/RCN中分类层的暗知识;以及RPN/RCN中回归层的暗知识。具体如下: 具体指导学生网络学习时,RPN与RCN的分类损失由分类层softmax输出与hard target的交叉熵loss、以及分类层softmax输出与soft target的交叉熵loss构成: 由于检测器需要鉴别的不同类别之间存在样本不均衡(imbalance),因此在L_soft中需要对不同类别的交叉熵分配不同的权重,其中背景类的权重为1.5(较大的比例),其他分类的权重均为1.0: RPN与RCN的回归损失由正常的smooth L1 loss、以及文章所定义的teacher bounded regression loss构成: 其中Ls_L1表示正常的smooth L1 loss,Lb表示文章定义的teacher bounded regression loss。当学生网络的位置回归与ground truth的L2距离超过教师网络的位置回归与ground truth的L2距离、且大于某一阈值时,Lb取学生网络的位置回归与ground truth之间的L2距离,否则Lb置0。 Hint learning需要计算教师网络与学生网络中间层输出的Feature Maps之间的L2 loss,并且在学生网络中需要添加可学习的适配层(adaptation layer),以确保guided layer输出的Feature Maps与教师网络输出的Hint维度一致: 通过知识蒸馏、Hint指导学习,提升了精简网络的泛化性、并有助于加快收敛,最后取得了良好的实验结果,具体见文章实验部分。 以SSD为例,KD loss与Teacher bounded L2 loss设计如下: # -*- coding: utf-8 -*- import torch import torch.nn as nn import torch.nn.functional as F from ..box_utils import match, log_sum_exp eps = 1e-5 def KL_div(p, q, pos_w, neg_w): p = p + eps q = q + eps log_p = p * torch.