Awesome Web Security – ZH �� Curated list of Web Security materials and resources.
Needless to say, most websites suffer from various types of bugs which may eventually lead to vulnerabilities. Why would this happen so often? There can be many factors involved including misconfiguration, shortage of engineers’ security skills, etc. To combat this, here is a curated list of Web Security materials and resources for learning cutting edge penetrating techniques, and I highly encourage you to read this article “So you want to be a web security researcher?
1.在项目中涉及到了数据库的操作时,我们需要添加一个连接池启动器,例如
com.alibaba druid-spring-boot-starter 1.1.6 当然,springboot有一个默认的数据库连接池启动器,追光者HikariCP,我们可以直接使用这个默认配置,无需添加其他的依赖.
在配置application.yml时,只需要按照以下做一个通用的配置即可
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/heima30 username: root password: 123 2.由于springboot中没有mybatis依赖,所以我们需要自己到mybatis官网寻找
org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2 在application.yml中可以有选择的配置以下属性
# mybatis 别名扫描 mybatis.type-aliases-package=com.heima.pojo # mapper.xml文件位置,如果没有映射文件,请注释掉 mybatis.mapper-locations=classpath:mappers/*.xml 这时对于mapper包扫描,我们可以使用两种方法
a.在mapper接口上使用@Mapper注解
@Mapper public interface UserMapper { } b.在启动类上添加扫描包注解:
@SpringBootApplication @MapperScan("cn.itcast.demo.mapper") public class Application { public static void main(String[] args) { // 启动代码 SpringApplication.run(Application.class, args); } } 3.对于通用mapper,可以引入下面这个依赖
tk.mybatis mapper-spring-boot-starter 2.0.2 使用时,只需要将mapper接口继承Mapper<>即可,例:
public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User>{ } 当然,对于启动类上的包扫描的导入的包需要切换
凹凸贴图简介 凹凸贴图是纹理的一种应用,它主要用来实现类似砖块、墙体的那种凹凸不平的效果,相较于一般的纹理映射,它并不是通过纹理映射来改变材质本身的颜色,而是改变或扰动其法线的方向,而法线的方向被用在光线模型中,改变法线的方向就可以影响物体表面光照的明暗效果。因此,凹凸贴图实际上是一种欺骗式的手段,它并没有改变顶点的位置,让物体本身的模型变得凹凸不平,而是影响用户的视觉效果,让用户以为模型是凹凸不平的。凹凸贴图的实现只需要2个三角形,而不是用户误以为的复杂的模型。
凹凸贴图(Bump Mapping)的实现方法有多种,这里记录三种实现方法:法线贴图(Normal Mapping)、视差贴图(Parallax Mapping)、浮雕贴图(Relief Mapping)
切线空间 在法线贴图中,需要提供两张纹理——材质纹理和法线纹理,而在视差贴图和浮雕贴图中,还需要提供一张高度图纹理。法线纹理的作用是提供一个法线信息,纹理中对应的rgb的颜色值分别代表法线向量的分量,但是,这个向量是在什么空间下的向量?首先可以设想一下,这个向量如果是世界坐标系下的合不合理?很显然,在实际的渲染中,物体是有可能作变换的,如果一个物体进行了旋转变换,那么它的法线也要作相应的变换,法线纹理存的信息就不可以直接使用,要做相应的变换。似乎这种想法并不是最优的,但如果场景中有很多静态的物体也可以考虑使用。还有一种想法是存储在模型空间下的向量,这种想法似乎可行,并且比世界坐标系下的要好很多,但是这种方法太过于依赖模型本身的细节,如果模型发生了形变,这个向量依旧需要做变换,而且复用率不高,一个模型的法线纹理不好用在其他的模型上。
那么一种更好的方式,也是绝大多数凹凸贴图中的实现方式是让法线纹理存储在切线空间下的坐标,切线空间,肯定是跟切线有关的一个空间。对于一个顶点,它的法线方向是已知的,现在需要构造一个坐标系,让这个法线方向为Z轴,再选取两条过该点的切线,作为另外两个轴,其中一条称为Tangent,另一条称为Bit-Tangent,即切线空间的基为TBN,问题是,如何选这两条切线?与法线垂直的直线有无数条,构成了一个切平面,应该选取这个平面上哪两条互相垂直的直线?对于三角网络,可以想到利用纹理坐标(u,v)来构造,关于具体的构造方法我查阅的相关资料似乎都略有不同,具体探讨可见为什么要有切线空间(Tangent Space),它的作用是什么?。
使用切线空间的好处:
1.自由度高,独立于模型而存在,可以尝试用在不同的网格模型上
2.可以复用,例如一个正方体的六个面完全可以使用相同的切线坐标
3.纹理可压缩,切线空间下的Z坐标往往都是正值,因此可以在内存中只存储X、Y的坐标值,通过模长为1来计算Z的坐标值
事实上,无论采用哪种空间,只要最终能够让视线向量、光线向量、法线向量统一在一个线性空间下做与光照相关的运算就可以了,因此也没有必要拘泥于到底是哪个空间下好。但这并不意味着最终统一在哪个空间下不重要,注意这里所说的是法线信息存储在哪个空间下并不需要太钻牛角尖,而实际运算中,究竟是要将这三者统一在切线空间还是世界空间下,或者别的空间下是非常重要的。
法线贴图原理及实现 如前文所述,法线贴图的原理就是直接指定顶点在切线空间下的法线位置,用在材质纹理下的颜色信息和法线纹理下的法线信息来做光照的相关运算。实际编码最重要的一个环节就是将视线、法线、光线统一到一个空间下。有两种方式:一是将切线空间下的法线变换到世界空间下,然后直接利用世界空间下的光线、视线做运算,这种方法比较简明,但是性能略显不足,注意对于每一个像素的法线信息都是要靠插值求得的,也就是说,这样处理每个像素的法线都要做一次线性变换到世界空间下,它的计算是逐像素的;另一种方法是将世界空间下的视线、光线都变换到切线空间下,这种处理只需要逐顶点计算。
下面我们采用第一种方式来计算,比较好处理:
现在假设我们有了TBN的值,构造了如下矩阵 [
T
x
B
x
N
x
T
y
B
y
N
y
T
z
B
z
N
z
]
\begin{bmatrix} Tx & Bx & Nx \\ Ty & By & Ny \\ Tz & Bz & Nz \end{bmatrix}
⎣⎡TxTyTzBxByBzNxNyNz⎦⎤,这是从切线空间到世界空间的过渡矩阵,而由过渡矩阵和坐标变换的关系可知,
[
T
x
B
x
N
x
T
y
目录
序号 内容 ① HTTP定义 ② URL详解 ③ HTTP请求 ④ HTTP响应 ① HTTP定义 1、概述 HTTP 全称是 HyperText Transfer Protocal (超文本传输协议),从 1990 年开始就在 WWW 上广泛应用,是现今在 WWW 上应用最多的协议,HTTP 是应用层协议,当你上网浏览网页的时候,浏览器和 web 服务器之间就会通过 HTTP 在 Internet 上进行数据的发送和接收。HTTP 是一个基于请求/响应模式的、无状态的协议。即我们通常所说的 Request/Response
2、特点 支持客户端/服务器模式
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快
灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记
无连接:无连接的含义是限制每次链接只处理一个请求。服务器处理完哭护的请求,并收到客户的应答后,即断开链接,采用这种方式可以节省传输时间
无状态:HTTP 协议是无状态协议。无状态是指协议对于事物处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能会导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快
**
② URl详解 ** URL(Uniform Resource Locator)是统一资源定位符的简称,有时候也被俗称为网页地址(网址),如同是网络上的门牌,是因特网上标准的资源的地址。HTTP 服务器的默认端口是 80,这种情况下端口号可以省略,如果使用了别的端口,必须指明。
结构: **
③ HTTP请求 ** HTTP 的请求报文分为三个部分:请求行、请求头、请求体。
1、请求行 请求行(Request line)分为三个部分:请求方法、请求地址和协议版本.
常见的请求方法 功能 GET 向指定的资源发出“显示”请求,使用 GET 方法应该只用在读取数据上,而不应该用于产生“副作用”的操作中 POST 指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求文本中。这个请求可能会创建新的资源或者修改现有资源,或两者皆有。 PUT 向指定资源位置上传其最新内容 DELETE 请求服务器删除 Request-URI 所标识的资源 2、请求头 请求头可用于传递一些附加信息,格式为:键: 值,注意冒号后面有一个空格: 请求体 请求体(又叫请求正文)是 post 请求方式中的请求参数,以 key = value 形式进行存储,多个请求参数之间用&连接,如果请求当中请求体,那么在请求头当中的 Content-Length 属性记录的就是该请求体的长度。
问题1:
问题描述:UE4找不到游戏模块
UE4 the game module’fps’could not be found
解决方案:
重新编译一遍C++项目,通过C++项目启动UE4生成游戏模块,为了防止生成失效可以启动uproject文件再关闭C++启动项目
问题2:
问题描述:打包失败,游戏模块dll路径拒绝访问,代码重新生成失败
解决方案:
设置代码项目为启动端,只点生成,打包不要用uproject启动打包,用C++项目启动打包就不会出现问题了
问题3:
问题描述:int和int32有区别吗?
解决方案:
并没有区别,UE4命名规范用的int32
问题4
问题描述:UE4无法新建C++项目
解决方案:
1.检测新建项目路径是否有中文
2.UE4版本脱离了启动端是离线版本,请使用在线版本开发C++项目
问题5:
问题描述:UE4开发安卓程序需要什么环境
解决方案:
需要安卓环境,分别是SDK、NDK、ANT、JDK
问题6:
问题描述:UE4插件安装容易发生打包失败
解决方案:尽量不要使用插件
问题7:
问题描述:IOS开发,蓝图可以打包,C++不能
解决方案:一般都是xcode的锅,可以尝试降低xcode版本
问题8:
问题描述:UE4 IOS项目开发远程打包失败
解决方案:检测xcode有没有设置为默认指定路径 命令:sudo xcode-select -s 你的Xcode安装路径/Contents/Developer
问题8.1:
问题描述:Unable to clean target while hot-reloading. Close the editor and try again.
解决方案:删除save文件重新生成
问题9:
问题描述:iOS 关闭强制使用https
解决方案:IOS->Extra PList Data写入NSAppTransportSecurity NSAllowsArbitraryLoads 问题10:
问题描述:虚幻报错LogPlayLevel: Compiling with non-standard Xcode (xcode-select): /Library/Developer/CommandLineTools/
1.列名含有大写问题
①比如:列名为customerCode
②sql语句:SELECT * FROM table_name WHERE “customerCode”=’FreshFreshSHOP’;
③备注:列名加双引号可以区分大小写,不加默认小写;值只能用单引号
2.外网连接postgresql
①执行命令:cd /etc/postgresql/10/main(由于版本不同,自己进入etc后一级一级进入)
②修改postgresql.conf:命令(sudo vim postgresql.conf)
③修改pg_hba.conf:命令(sudo vim pg_hba.conf)
④重启postgresql:sudo service postgresql restart
⑤继续执行命令:su postgres ,输入密码后执行:psql,然后执行:alter role postgres with password ‘1234’
⑥外网连接:
介绍:本文讲述链路状态路由协议OSPF的前朝趣事,记录了武状元从官场小白到最终朝廷内外通吃的官场高手奋斗历程。
黄振邦,又名雪庵居士,自幼好武,勤学苦练,皇天不负有心人,于清高宗乾隆五十九年,公元1794年摘得武状元桂冠。武状元受乾隆爷加封后,便坐骑红马,衣锦还乡,乡人见武状元,一一道贺,武状元也抱拳感谢父老相亲一直的照顾之恩,心中暗誓“明日入朝为官,一定要秉公执法,还浑浊已久之清政朗朗乾坤!”。翌日,武状元拜别妻儿双亲,赴朝为官。
初入官场之时,武状元刚正不阿,正气凌然,甚是得罪朝中诸多权贵,好在乾隆圣明,惜之才华与忠心,遂时刻保护着武状元,但明枪易躲,暗箭难防,终被他人手握把柄诬陷构罪,乾隆爷念其前功,饶其罪,但当年皇帝恩宠不再。
其妻责其过于耿直,武状元痛定思痛,遂决心不再出淤泥而不染,须融入朝中官场圈,否则寸步难行,与妻子商量制定出三步走计划:
第一步,打入朝中一个关系圈,取得圈中所有人脉关系资源;
第二步,获得朝中其它圈子人脉关系资源;
第三步,获得朝堂之外人脉关系资源;
第一步:投靠朝中一个关系圈,取得圈中所有人脉关系资源
目前朝中有多个圈子,有如日中天之中堂和大人之黄金圈,也有阅微草堂纪晓岚纪先生之书香圈,其中和大人之黄金圈属当今朝廷最热之圈,和大人又是御前第一大红人,武状元决定投奔和大人,打入和大人之黄金圈。
怎么才能打入和大人之黄金圈呢?和大人身居要职,不是想见就能见到,喔,对了,见不到和大人,可以先去打听打听和府家下人嘛!说曹操来曹操就来,武状元在去和府途中,正好碰见和府大管家刘全,武状元随即上前问候刘大总管,自我介绍道“在下武状元黄振邦,好色贪财,想投靠到和大人门下”,刘全冷不防一怔,心里暗想“此时正是老爷用人之际,此人好色贪财,同我们和府是一路人”,于是扣手对武状元说“兄弟,借一步说话”。
两人遂来到宜春院和府VIP包间,刘全轻声对武状元说“兄弟来投奔和府,我很高兴,但是有几个不成文规矩,还往兄弟体谅:
规矩一:和府圈内人不能直接拜访联系,否则太过招摇,只能依靠圈内最亲近兄弟与他人取得联系;
规矩二:和府圈内每个人都有帮人打点办事的价码,明码标价,童叟无欺;
规矩三:进了和府后大家就是拴在一根绳子上的蚂蚱,新入成员需要向组织表忠心,最佳方法是亮家 底钱财人脉等关键私人信息,新加入成员所有家底信息会发布给圈内所有兄弟;
规矩四:每个人既享有使用人脉关系资源之权利,也有介绍同道之能人入圈之义务;
武状元二说不说,随即将所有家底信息,包括家中有100两白银,有8个拜把子兄弟等写在一张白纸上递给刘全,同样刘全也把所有家底信息,包括圈内其它兄弟家底信息也一一写在白纸上递给武状元。刘全说“兄弟,我们算知根知底了,从今往后,你就是和府圈中一员了,我会将你的所有信息都通报给圈中其他兄弟,告诉他们你是我兄弟,以后万一有事找你相帮时,通过我找你需要白银50两”,武状元哈哈大笑,“兄弟,真乃性情中人,爽快,我也会将你的所有信息都通告给我将来可能认识的其它有意加盟和府大家庭的同道之人,告诉他们你是我兄弟,万一以后他们有事找你相帮时,通过我找你需要白银50两”。
通过刘全,武状元最终融入了和府关系圈,得到了和府圈内完整详细的关系网,包括每一个成员帮人办事的价格,武状元根据这张关系图,算出圈内每一个成员帮人打点办事的最划算开销花费,并将这些宝贵信息存于床下密码箱,其中宝贵信息中写道可以通过刘全请和大人出面办事,开销打点需要白银2000两。
公元1796年,武状元老父被奸人陷害含冤入狱,审后判之斩立决,即刻押往东门菜市场行刑。危急时刻,武状元得知中堂和大人能救老父,立刻打开密码箱,知道可以通过刘全找到和大人帮忙,总共需白银2000两,其中50两为先前约定的武状元找到刘全帮忙的价码,剩余1950两是刘全最终找到和大人帮忙需要沿途打点的所有费用。和大人乃好财之人,欣然接受贿赂之物,立刻书亲笔信交予大管家刘全,刘全快马加鞭至菜市场,高呼”刀下留人,和大人有话”,武状元老父终得以获救。
第二步:获得朝中其它关系圈人脉资源
武状元自知自己混圈子能力有限,无法做到朝廷所有圈子通吃,万一哪天有急事需要纪晓岚纪先生帮忙办事怎么办?纪先生与和大人分属不同圈子之人,怎么才能得到纪先生圈内人脉资源呢?
苦思冥想数日不得解,某日,刘全突然向武状元通报和府新加入成员信息,武状元仔细一看,此人履历光鲜,八面玲珑,混圈子能力极高,在朝廷多个圈子混迹如鱼得水,当前跟随纪先生,但是为了将来仕途,也打算投靠和大人,为消除和大人圈内人戒心,遂向和大人圈内通报纪先生关系网内所有成员替人办事之价格信息,武状元有一事不解,“为什么不将纪先生圈内详细人员网信息一并通报给我们呢?”,刘全笑道“兄弟入圈不久,可能还不了解规矩,那些人虽然八面玲珑,混迹多个圈子,风光无限,但是朝廷私下一直有不成文规矩:不能向其它圈子透露本圈子内部成员详细信息,只能是圈内成员打点办事的价格,你别问那么多了,先记下这些信息吧!”,武状元赶紧将这些重要信息一一记录,以防将来不便之需,至此武状元第二步计划完美解决。
第三步:获得朝外关系圈人脉资源
获得朝中所有圈子人脉资源,按理说武状元可以高枕无忧,但武状元并非凡夫俗子,看问题视野更开阔,心里沉思”万一哪天需要洋大人办事怎么办?”
朝廷毕竟是朝廷,乃卧虎藏龙之处,各个圈子能人辈出,或多或少有与洋大人打过交道之能人,此类能人年轻之时都曾留过洋,混迹欧美官场,他们也会主动向朝廷各个圈子通报洋人打点办事价格信息,武状元甚是高兴,妻子此时却泼一冷水“你先不要这么得意,和大人圈内都是好财之人,才疏学浅,没有人和洋人打过交道啊?”武状元微微一笑,”贤妻不懂,和大人圈子虽没人和洋人打过交道,但是混迹朝中多个圈子的人会知道朝中和洋人打交道能人的资源信息,他们会向我们通报能人打点办事的价格信息,并且和洋人打交道的人会向朝中所有圈子发布洋人办事价码信息,我们到时只需利用人脉资源找到朝中和洋人打交道的能人即可,再由他联系洋大人办事。
至此,朝廷内外,所有人脉资源关系都已纳入囊中,从此武状元官运亨通,平步青云,好不快哉!
– – – – – – – – – – – – – – – – 华丽丽的分割线– – – – – – — – – – – – – –
演员客串表: 混迹多个圈子之能人——区域边界路由器ABR;
和洋大人交往之人——自治系统边界路由器ASBR;
武状元——区域内部路由器
兄弟刘全——武状元邻居路由器
故事术语: 圈内——区域内
其它圈子——区域间
朝廷外——其它自治系统
初次见面自我介绍(好色贪财)——能力喜好协商,喜好能力不一致,便不为成为朋友;
亮家底知根知底——邻居路由器间数据库同步
亮家底后通报到对方的办事报价50两——链路花费值
圈内完整的人脉关系图——区域内所有完整的数据库信息
第一章 计算机视觉概述和历史背景
课时1 计算机视觉概述
计算机视觉:针对视觉数据的研究。
关键是如何用算法来开发可以利用和理解的数据,视觉数据存在的问题是它们很难理解,有时把视觉数据称为“互联网的暗物质”,它们构成了网络上传输的大部分数据。
根据YouTube的一个统计实例:大概每秒钟,有长达5小时的数据内容会被上传到YouTube,所以通过人工给每个视频标上注释、分类是非常困难甚至不可能的,计算机视觉是解决这种问题的重要技术,它能够对照片进行标签、分类,处理视频的每一帧。
计算机视觉是一个与很多领域紧密关联的学科,它涉及到比如说工程、物理、生物等许多不同的领域:
对于CS231n这么课程,它专注于一类特定的算法,围绕神经网络,特别是卷积神经网络,并将其应用于各种视觉识别任务。
课时2 计算机视觉历史背景
视觉的历史可以追溯到很久以前,动物拥有视觉的开端:
如今,视觉成为了最重要的感知系统,人类的大脑皮层中有几乎一半的神经元与视觉有关,这项最重要的感知系统可以使人们生存、工作、运动等等,视觉对人们真的至关重要。
以上谈到了人类的视觉,那么人类让计算机获得视觉的历史又是怎么样的呢?
现在知道的最早的相机追溯到17世纪文艺复兴时期的暗箱,这是一种通过小孔成像的相机,这和动物早期的眼睛非常相似,通过小孔接收光线,后面的平板手机信息并且投影成像。
同时,生物学家开始研究视觉的机理,最具影响力并且启发了计算机视觉的一项研究是在五六十年代,休伯尔和威泽尔使用电生理学的研究,他们提出了“哺乳动物的视觉处理机制是怎样的”,通过观察何种刺激会引起视觉皮层神经的激烈反应,他们发现猫的大脑的初级视觉皮层有各种各样的细胞,其中最重要的是当它们朝着某个特定方向运动时,对面向边缘产生回应的细胞。
他们发现视觉处理是始于视觉世界的简单结构,面向边缘,沿着视觉处理的途径的移动信息也在变化,大脑建立了复杂的视觉信息,直到它可以识别更为复杂的视觉世界。
计算机视觉的历史是从60年代开始,从Larry Roberts的计算机视觉的第一篇博士论文开始。
1966年,一个如今非常著名的MIT暑期项目“Summer Vision Project”,它试图有效的使用暑期工作时间来构建视觉系统的重要组成部分,五十年来,计算机视觉领域已经从哪个夏季项目发展成为全球数千名研究人员的领域,并且仍然处理一些最根本的问题,这个领域已经成长为人工智能领域最重要和发展最快的领域之一。
70年代后期David Marr撰写的一本非常有影响力的书,内容包括了他是如何理解计算机视觉和应该如何开发可以使计算机识别世界的算法,他指出了为了拍摄一幅图像并获得视觉世界的最终全面3D表现必须经历的几个过程,如下图所示:
这是一个非常理想化的思想过程,也是一个非常直观化的方式并考虑如何解构视觉信息。
70年代另一个重要的开创性问题:如何越过简单的块状世界并开始识别或表示现实世界的对象?
一个被称为“广义圆柱体”,一个被称为“图形结构”,他们的基本思想是每个对象都是由简单的几何图形单位组成,所以任何一种表示方法是将物体的复杂结构简约成一个集合体。
80年代David lowe思考的如何重建或识别由简单的物体结构组成的视觉空间,它尝试识别剃须刀,通过线和边缘进行构建,其中大部分是直线之间的组合。
从60年代到80年代,考虑的问题是计算机视觉的任务是什么,要解决物体识别的问题非常难。所以,当思考解决视觉问题过程中出现的问题时,另一个重要的问题产生:如果识别目标太难,首先要做的是目标分割。
这个任务就是把一张图片中的像素点归类到有意义的区域,可能不知道这些像素点组合到一起是一个人形,但可以把属于人的像素点从背景中抠出来,这个过程就叫作图像分割。
下面是Malik和Jianbo shi完成的用一个算法对图像进行分割:
还有一个重要的研究是由Paul Viola和Michael Jones完成的,使用AdaBoost算法进行实时面部检测,在这个研究后不久推出了第一个能在数码相机中实现实时面部检测的数码相机,所以这是从基础科学研究到实际应用的一个快速转化。
关于如何做到更好的目标识别,是可以继续研究的领域,,所以在90年代末和21世纪的前几年,一个重要的思想方法就是基于特征的目标识别。由David Lowe完成的叫做SIFT特征,思路是匹配整个目标。
通过观察目标的某些部分、某些特征,它们往往能够在变化中具有表现性和不变性,所以目标识别的首要任务是在目标上确认这些关键的特征,然后把这些特征与相似的目标进行匹配,它比匹配整个目标要容易的多。例如,上图中一个stop标识中的SIFT特征与另一个stop标识中的SIFT特征相匹配。
有些工作是把这些特征放在一起以后,研究如何在实际图片中比较合理地设计人体姿态和辨认人体姿态,这方面一个工作被称为“方向梯度直方图”,另一个被称为“可变部件模型”。
所以,从60年代、70年代、80年代一直到21世纪,图片的质量随着互联网的发展,计算机视觉领域也能拥有更好的数据了,直到21世纪早期,才开始真正拥有标注的数据集能够衡量在目标识别方面取得的成果,其实一个最著名的数据集叫做PASCAL Visual Challenge。
与此同时,提出了一个重要的问题:是否具备了识别真是世界中的每一个物体的能力或者说大部分物体。这个问题也是由机器学习中的一个现象驱动:大部分的机器学习算法,无论是图模型还是SVM、AdaBoost都可能会在训练过程中过拟合。因此,有这两方面的动力,一是单纯想识别自然界中的万物,二是要回归机器学习克服瓶颈—过拟合问题,开始开展了一个ImageNet的项目,汇集所有能找到的图片,组建一个尽可能大的数据集。
这是当时AI领域最大的数据集,将目标检测算法的发展推到了一个新的高度,尤其重要的是如何推动基准测试的进展。
下面是ImageNet挑战赛的从2010到2015的图像分类结果:
横轴表示年份,纵轴表示比赛结果的错误率,可以看到错误率正在稳步下降。可以看到图中2012的错误率下降的非常显著,这一年的算法是一种卷积神经网络模型,这也将是这门课程学习的重点,深入研究什么是卷积神经网络模型,也就是现在被熟知的深度学习。
课时3 CS321n课程概述
CS321n将聚焦于视觉识别问题,第一个主要问题就是图像分类问题:让算法接收一张图作为输入,从固定的类别集合中选出该图像所属的类别。这个基本的分类器在很多地方都有不同的应用。
在CS231n课程中,将讨论一些其他的视觉识别问题,它们都建立在专门为图像分类而开发的各种工具之上,一些和图像分类的问题,比如目标检测或图像摘要生成。
图像分类关注的是大图整体,目标检测则告诉你物体具体出现在图片的哪个位置以及物体之间的联系是什么,图像摘要是当给到一幅图像,需要生成一段句子来描述这幅图像。
CNN,卷积神经网络只是深度学习架构的一种,但是它的成功是压倒性的,成为了目标识别的重要工具。回到ImageNet挑战赛中,2012年Krizhevsky和他的导师提出了卷积神经网络,并夺得了冠军;而在这之前,一直都是特征+支持向量机的结构,一种分层结构;而在这之后,获得冠军的算法都是卷积神经网络。
然而,卷积神经网络并不是一夜之间就成功的,事实上,这些算法可以追溯到更早的时候,与卷积神经网络有关的其中一项基础性工作是由Yann LeCun和他的伙伴于90年代完成的,1998年他们利用卷积神经网络进行数字识别。
所有既然这些算法在90年代就很突出,为什么到最近几年才变得这么流行呢?从数学的角度来说,有很重要的两点引起了深度学习架构的复兴,一个是摩尔定律,计算能力在变得越来越高;另一个是数据,算法需要大量的数据,需要给它们提供非常多的带标签的图像和像素,以便能最终取得更好的效果,有了大数据集,可以实现更强大的模型。
在计算机视觉领域,正尝试着制造一个拥有和人类一样视觉能力的机器,这样可以利用这些视觉系统可以实现很多惊奇的事情,但是当继续在该领域深入的时候,仍然有着大量的挑战和问题亟待解决,比如对整个照片进行密集标记、感知分组、使能够确定每个像素点的归属,这些仍是研究中的问题,所以需要持续不断地改进算法,从而做到更好。
与简单的“在物体上贴标签”比起来,我们往往希望深入地理解图片中的人们在做什么、各个物体之间的关系是什么,于是我们开始探究物体之间的联系,这是一个被称为视觉基因组的项目。
计算机视觉领域的一个愿景即是“看图说故事”,人类的生物视觉系统是非常强大的,看到一张图片,就能够描述图片的内容,并且只需不到一秒种的时间,如果能够让计算机也能做的同样的事情,那毋庸置疑是一项重大的突破;如果要实现真实深刻的图像理解,如今的计算机视觉算法仍然有很长的路要走。
计算机视觉能让世界变得更加美好,它还可以被应用到类似医学诊断、自动驾驶、机器人或者和这些完全版不同的领域。
安全研究人员了解到,大多数流传出去的数恶意软件LokiBot原来都是原始版本的修改版本。
2015年以来,LokiBot就通过从多种流行的网络浏览器、FTP、电子邮件客户端,以及PuTTY等IT管理工具中获取凭证,从而窃取用户的密码和加密货币钱包。
最初的LokiBot是由一个网名叫“lokistov”,又名“Carter”的人开发和销售,价格为300美元,但是后来暗网上很多其他黑客也开始销售同样的恶意软件,价格则相对低得多(一般能低至80美元)。
人们认为,LokiBot的源代码已经被泄漏,使得其他人可以将其编译为各种版本。
不过,Twitter上一个名为“d00rt”的研究人员发现,有些人在没有访问LokiBot源代码的情况下就能对其最初版本进行少量修改(补丁),从而让其他黑客可以定义他们自己的自定义域来接收那些窃取来的数据。
黑客正在积极散播“被劫持”版本的LokiBot 研究人员发现,这款恶意软件所在的C&C服务器位置,也就是被窃取的数据本该被发送到的位置,已经被改为被存储到5个不同的位置——其中四个使用3DES算法加密,还有一个使用简单的XOR算法加密。
该恶意软件有一个名为“Decrypt3DESstring”的功能,可以被用来解密所有加密字符串,以及获取C&C服务器的URL。
研究人员分析了新版LokiBot并且与原始版本进行了比较,发现新版本中的Decrypt3DESstring函数已经被修改,使它总是返回受XOR保护的字符串值,而不是返回受3DES保护的字符串值。
“在所有新版的LokiBot中,3DES保护的URL总是相同的。”研究人员说道。
“另外,这些URL从来没被使用过。Decrypt3DESstring会返回一个解密3DES算法的缓冲器。当然这应该是理想状态,但如前所述,实际上每次调用Decrypt3DESstring时,都会返回解密或加密XOR的URL。”
这些更改使得任何拥有新版本LokiBot的人都能用简单的HEX编辑器来编辑程序,并且添加他们自定义的URL来接收被盗的数据。
解密函数还被用于获取令恶意软件在系统上持久化所需要的注册表值,但由于在修改后,解密函数只会返回URL,所以在设备重新启动后,修改后版本的LokiBot是无法重新启动的。
但是,目前尚不清楚为什么初始版本LokiBot的开发者也将同样的C&C服务器URL,存储在用安全性较低的XOR算法加密过的字符串中,即便这是没有任何必要的。
据悉,目前以超低价格被广泛散布的多种LokiBot版本,也被某些黑客以同样的方式做了修改。
同时,LokiBot的原作者已经发布了新的2.0版本,并且正在多个论坛上在线销售。
要了解更多关于新版本LokiBot的细节,可以阅读发布在GitHub上的研究文章:
https://github.com/d00rt/hijacked_lokibot_version/blob/master/doc/LokiBot_hijacked_2018.pdf
原始图像 裁剪图像 # -*- coding: utf-8 -*- """ Created on Mon Jul 9 11:38:19 2018 @author: guokai_liu """ import numpy as np import matplotlib.pyplot as plt import cv2 filename = 'Yuna2.jpg' def crop_figure(fn,kw=100,kh=100,sx=50,sy=50): # assgn saving name sn = fn.split('.')[0] # read image img = cv2.imread(fn) # set parameters f_h, f_w,f_c = img.shape k_w = kw k_h = kh s_x = sx s_y = sy # get output numbers of rows and columns n_y = (f_h-k_w)//s_y n_x = (f_w-k_h)//s_x # begin points for rows and columns c_x = [i+s_x*i for i in range(n_x)] c_y = [i+s_y*i for i in range(n_y)] # crop images for idx_y, y in enumerate(c_y): for idx_x,x in enumerate(c_x): crop_img = img[y:y+k_h,x:x+k_w] cv2.