关于jquery的基础知识

========================================jquery基础=================================================================
    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
+++++++++++++++++++++++++++++++++++++++++++环境搭建++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
jQuery 只是一个库,不需要特别的安装,只需要我们在页面 <head> 标签内中通过 script 标签脚本引入 jQuery 库即可。
实例:
<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
    <title>环境搭建</title>
</head> 
<body>
    <script type="text/javascript"> alert($) </script>
</body>
</html>
+++++++++++++++++++++++++++++++++++++++简单的实例+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>第一个简单的jQuery程序</title>
    <style type="text/css">
        div{
            padding:8px 0px;
            font-size:12px;
            text-align:center;
            border:solid 1px #888;
        }
    </style>
    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
    <script type="text/javascript">
            $(document).ready(function() {
                    $("div").html("您好!通过慕课网学习jQuery才是最佳的途径。");
            });
    </script>
</head>
<body>
    <div></div>
</body>
</html>
+++++++++++++++++++++++++++++++++++++++++++++jQuery对象与DOM对象++++++++++++++++++++++++++++++++++++++++++++++++++
<!DOCTYPE html>
<html>


<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title></title>
    <script src="http://code.jquery.com/jquery-1.11.3.js"></script>
    
    <!-- 使用JS原生语法 -->
    <script type="text/javascript">
        window.onmousemove = function(){
            // 通过原生JS语法获取id为imooc1的元素p
var p = document.getElementById('imooc1');
            // 将元素p在html中内容改变
p.innerHTML = 'P1:您好!通过慕课网学习jQuery才是最佳的途径';
            // 将元素p的内容颜色改为红色
p.style.color = 'red';
    }
    </script>
    
    <!-- 使用jQuery语法 -->
    <script type="text/javascript">
        $(document).ready(function() {
            /**
             * 通过jQuery语法获取id为imooc2的元素获得一个jQuery对象
             * 调用该对象的html()方法进行更改内容
             * 调用该对象的css()方法进行更改颜色样式
             */   
            var $p = $('#imooc2');
            $p.html('P2:您好!通过慕课网学习jQuery才是最佳的途径').css('color','red');
        });
    </script>
    
</head>
<body>
    <p id="imooc1"></p>
    <p id="imooc2"></p>
</body>
</html>
++++++++++++++++++++++++++++++++++++++++++++++++jQuery对象转化成DOM对象+++++++++++++++++++++++++++++++++++++++++++
,jQuery是一个类数组对象,DOM对象就是一个单独的DOM元素。
<!DOCTYPE html>
<html>


<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title></title>
    <script src="http://code.jquery.com/jquery-1.11.3.js"></script>
</head>


<body>
<div>元素一</div>
<div>元素二</div>
<div>元素三</div>
    
    <script type="text/javascript">
var $div = $('div'); //jQuery对象
//? div = ?
 
  
        var div1 = $div.get(0); 
//var div1 = $div.[0]; 
        
               var div2 = $div.get(1); 
               var div3 = $div.get(2);
div1.style.color = 'red'; //操作dom对象的属性
            div2.style.color = 'blue'; //操作dom对象的属性
                div3.style.color = 'yellow'; //操作dom对象的属性
    </script>
    
</body>


</html>
++++++++++++++++++++++++++++++++++++++DOM对象转化成jQuery对象+++++++++++++++++++++++++++++++++++++++++++++++++++++
通过$(dom)方法将普通的dom对象加工成jQuery对象之后,我们就可以调用jQuery的方法了
如果传递给$(DOM)函数的参数是一个DOM对象,jQuery方法会把这个DOM对象给包装成一个新的jQuery对象
<!DOCTYPE html>
<html>


<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title></title>
    <script src="http://code.jquery.com/jquery-1.11.3.js"></script>
</head>


<body>
<div>元素一</div>
<div>元素二</div>
<div>元素三</div>


    <script type="text/javascript">


    var div = document.getElementsByTagName('div'); //dom对象
            
   //将dom节点div转化为$div的jquery对象
            // $div =  ?
             var $div = $(div);
var $first = $div.first(); //找到第一个div元素
$first.css('color', 'red'); //给第一个元素设置颜色              var $div = $(div);
            var $last =$div.last();
            $last.css('color','red');




    </script>


</body>


</html>
++++++++++++++++++++++++++++++++++++id选择器++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$( "#id" )
 注意:
id是唯一的,每个id值在一个页面中只能使用一次。如果多个元素分配了相同的id,将只匹配该id选择集合的第一个DOM元 素。但这种行为不应该发生;有超过一个元素的页面使用相同的id是无效的
 <script type="text/javascript">
    //通过jQuery直接传入id
    //id的唯一,只选择到了第一个匹配的id为imooc的div节点
        $(document).ready(function(){
            $('#imooc').css("border", "3px solid red");
        })
        .css("border", "3px solid red");
    </script>
+++++++++++++++++++++++++++++++++++++类选择器+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$( ".class" )
类选择器,相对id选择器来说,效率相对会低一点,但是优势就是可以多选
内置循环处理
 $('.imooc').css("border", "3px solid red");
+++++++++++++++++++++++++++++++++++元素选择器+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 <script type="text/javascript">
    //通过jQuery直接传入标签名p
    //标签是可以多个的,所以得到的同样也是一个合集
  $('p').css("border", "3px solid red");
    </script>     
+++++++++++++++++++++++++++++++++++++++++++++++++全选择器(*选择器)++++++++++++++++++++++++++++++++++++++++++++++
在CSS中,经常会在第一行写下这样一段样式


* {padding: 0; margin: 0;}


$( "*" )
++++++++++++++++++++++++++++++++++++++层级选择器++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++==+
在代码编辑器中第37行填写相应代码


 $('div > p')
在代码编辑器中第43行填写相应代码


$('div p')
在代码编辑器中第62行填写相应代码


$(".prev + div")
在代码编辑器中第68行填写相应代码


$(".prev ~ div")
$( "parent > child" ) 
子选择器:选择所有指定“parent”元素中指定的"child"的直接子元素。


$("ancestor descendant")
后代选择器:选择给定的祖先元素的所有后代元素, 一个元素的后代可能是该元素的一个孩子,孙子,曾孙等


$("prev + next")
相邻兄弟选择器:选择所有紧接在“prev”元素后的“next”元素


$("prev ~ siblings")
一般兄弟选择器:匹配“prev”元素之后的所有 兄弟元素。具有相同的父元素,并匹配过滤“siblings”选择器
<!DOCTYPE html>
<html>


<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title></title>
    <link rel="stylesheet" href="imooc.css" type="text/css">
    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
</head>


<body>
    <h2>子选择器与后代选择器</h2>
    <div class="left">
        <div class="aaron">
            <p>div下的第一个p元素</p>
        </div>
        <div class="aaron">
            <p>div下的第一个p元素</p>
        </div>
    </div>
    <div class="right">
        <div class="imooc">
            <article>
                <p>div下的article下的p元素</p>
            </article>
        </div>
        <div class="imooc">
            <article>
               <p>div下的article下的p元素</p>
            </article>
        </div>
    </div>


    <script type="text/javascript">
        //子选择器
        //$('div > p') 选择所有div元素里面的第一个子元素P
    $('div > p').css("border", "1px groove red");
    </script>


    <script type="text/javascript">
        //后代选择器
        //$('div  p') 选择所有div元素里面的p元素
      $('div p').css("border", "1px groove red");
   </script>




    <h2>相邻兄弟选择器与一般兄弟选择器</h2>
    <div class="bottom">
        <div>兄弟节点div, +~选择器不能向前选择</div>
        <span class="prev">选择器span元素</span>
        <div>span后第一个兄弟节点div</div>
        <div>兄弟节点div
           <div class="small">子元素div</div>
        </div>
       <span>兄弟节点span,不可选</span>
        <div>兄弟节点div</div>
    </div>


    <script type="text/javascript">
       //相邻兄弟选择器
        //选取prev后面的第一个的div兄弟节点
    $('.prev +div').css("border", "3px groove blue");
    </script>


    <script type="text/javascript">
        //一般相邻选择器
       //选取prev后面的所有的div兄弟节点
       $('.prev ~div').css("border", "3px groove blue");
    </script>


</body>


</html>
++++++++++++++++++++++++++++++++++++++++++++基本筛选选择器++++++++++++++++++++++++++++++++++++++++++++++++++++++++
找到第一个div
$(".div:first")


    //找到最后一个div
$(".div:last")


   //:even 选择所引值为偶数的元素,从 0 开始计数
$(".div:even")
    //:odd 选择所引值为奇数的元素,从 0 开始计数


$(".div:odd")
<div class="aaron">
            <p>:eq(2)</p>
        </div>


$(".aaron:eq(2)")
//:gt 选择匹配集合中所有索引值大于给定index参数的元素


$(".aaron:gt(3)")


 //:lt 选择匹配集合中所有索引值小于给定index参数的元素
    //与:gt相反
$(".aaron:lt(2)")
//:not 选择所有元素去除不匹配给定的选择器的元素
        //选取所有input中,没有checked属性的p元素,赋予颜色


$("input:not(:checked) + p")
+++++++++++++++++++++++++++++++++++++++++++++++内容筛选选择器+++++++++++++++++++++++++++++++++++++++++++++++++++++
注意事项:


:contains与:has都有查找的意思,但是contains查找包含“指定文本”的元素,has查找包含“指定元素”的元素
如果:contains匹配的文本包含在元素的子元素中,同样认为是符合条件的。
:parent与:empty是相反的,两者所涉及的子元素,包括文本节点
        //查找所有class='div'中DOM元素中包含"contains"的元素节点
       


$(".div:contains(':contains')")
  //查找所有class='div'中DOM元素中包含"span"的元素节点


$(".div:has(span)")
  //选择所有a元素,找到对应的父元素


$("a:parent")
//找到a元素下面的所有空节点(没有子元素)


$("a:empty")
++++++++++++++++++++++++++++++++++++++++++可见性筛选选择器+++++++++++++++++++++++++++++++++++++++++++++++++++
:hidden选择器,不仅仅包含样式是display="none"的元素,还包括隐藏表单、visibility等等
$('#div3:hidden')$('#div3:visible')
+++++++++++++++++++++++++++++++++++++++++++属性筛选选择器+++++++++++++++++++++++++++++++++++++++++++++
         //查找所有div中,属性name=p1的div元素


 $('div[name=p1]')
    //查找所有div中,有属性p2的div元素


$('div[p2]')
//查找所有div中,有属性name中的值只包含一个连字符“-”的div元素


$('div[name|="-"]')
        //查找所有div中,有属性name中的值包含一个连字符“空”的div元素
 $('div[name~="a"]')
 //查找所有div中,属性name的值是用imooc开头的


$('div[name^=imooc]')
//查找所有div中,属性name的值是用imooc结尾的


$('div[name$=imooc]')
 //查找所有div中,有属性name中的值包含一个test字符串的div元素


$('div[name*="test"]')
//查找所有div中,有属性testattr中的值没有包含"true"的div


$('div[testattr!="true"]')
 
在这么多属性选择器中[attr="value"]和[attr*="value"]是最实用的


[attr="value"]能帮我们定位不同类型的元素,特别是表单form元素的操作,比如说input[type="text"],input [type="checkbox"]等
[attr*="value"]能在网站中帮助我们匹配不同类型的文件
+++++++++++++++++++++++++++++++++++++++子元素筛选选择器+++++++++++++++++++++++++++++++++++++++++++++++++++
     //查找所有class="first-div"下的a元素,只取第一个
        //针对所有父级下的第一个
$('.first-div a:first-child')
    //查找所有class="first-div"下的a元素,只取最后一个
        //针对所有父级下的最后一个
        //如果只有一个元素的话,last也是第一个元素
$('.first-div a:last-child')
        //查找所有class="first-div"下的a元素,如果只有一个子元素的情况
$('.first-div a:only-child')
//查找所有class="last-div"下的a元素,选择第二个


$('.last-div a:nth-child(2)')
  //查找所有class="last-div"下的a元素,选择第倒数第二个


$('.last-div a:nth-last-child(2)')
+++++++++++++++++++++++++++++++++++++++++表单元素选择器++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  //查找所有 input, textarea, select 和 button 元素
        //:input 选择器基本上选择所有表单控件


$(':input')
   //匹配所有input元素中类型为text的input元素


$('input:text')
//匹配所有input元素中类型为password的input元素


$('input:password')
     //匹配所有input元素中的单选按钮,并选中


$('input:radio')
        //匹配所有input元素中的复选按钮,并选中


$('input:checkbox')
 //匹配所有input元素中的提交的按钮,修改背景颜色


$('input:submit')
     //匹配所有input元素中的图像类型的元素,修改背景颜色


$('input:image')
//匹配所有input元素中类型为按钮的元素


$('input:button')
     //匹配所有input元素中类型为file的元素


$('input:file')
+++++++++++++++++++++++++++++++++++++++表单对象属性筛选选择器+++++++++++++++++++++++++++++++++++++++++++++++++++++
  //查找所有input所有可用的(未被禁用的元素)input元素


 $('input:enabled')
 //查找所有input所有不可用的(被禁用的元素)input元素


$('input:disabled')
 //查找所有input所有勾选的元素(单选框,复选框)
         //删除这个勾选的元素


$('input:checked')
例子:
  <script type="text/javascript">
         //查找所有input所有勾选的元素(单选框,复选框)
         //删除这个勾选的元素
        $('input:checked').removeAttr('checked')
    </script>
   //查找所有option元素中,有selected属性被选中的选项
         //删除这个选中的元素


$('option:selected')
+++++++++++++++++++++++++++++++++++++++++++++++练习题+++++++++++++++++++++++++++++++++++++++++++++++++
:has() 选择元素其中至少包含指定选择器匹配的一个种元素,匹配的是元素\
:input         选择所有 input, textarea, select 和 button 元素.
:contains() 选择所有包含指定文本的元素
:contains()选择器中括号内的文字,可为纯文本,或用引号包围
:text() 选择所有类型为text的input元素
even: 选择所引值为偶数的元素,从 0 开始计数
odd: 选择所引值为奇数的元素,从 0 开始计数
eq: 在匹配的集合中选择索引值为index的元素
因为jQuery合集是从0开始索引的,所以eq(1)就是第二个元素
lt() 选择匹配集合中所有索引值小于给定index参数的元素
这里应该lt(2)
匹配所有勾选的元素 选择所有可用的元素 获取 select 元素中所有被选中的元素 选择所有禁用的元素 
看正确答案


A:checked
B:enabled
D:selected
E:disabled
+++++++++++++++++++++++++++++++++++++++特殊选择器this+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
this,表示当前的上下文对象是一个html对象,可以调用html对象所拥有的属性和方法。
$(this),代表的上下文对象是一个jquery的上下文对象,可以调用jQuery的方法和属性值。
+++++++++++++++++++++++++++++++++++++++++++++.attr()与.removeAttr()+++++++++++++++++++++++++++++++++++++++++++++++
attr()有4个表达式


attr(传入属性名):获取属性的值
attr(属性名, 属性值):设置属性的值
attr(属性名,函数值):设置属性的函数值
attr(attributes):给指定元素设置多个属性值,即:{属性名一: “属性值一” , 属性名二: “属性值二” , … … }
removeAttr()删除方法


.removeAttr( attributeName ) : 为匹配的元素集合中的每个元素中移除一个属性(attribute)
优点:


attr、removeAttr都是jQuery为了属性操作封装的,直接在一个 jQuery 对象上调用该方法,很容易对属性进行操作,也 不需要去特意的理解浏览器的属性名不同的问题
获取Attribute就需要用attr,获取Property就需要用prop
+++++++++++++++++++++++++++++++++++++++++++++++html()及.text()++++++++++++++++++++++++++++++++++++++++++++++++++++
.html()方法 


获取集合中第一个匹配元素的HTML内容 或 设置每一个匹配元素的html内容,具体有3种用法:


.html() 不传入值,就是获取集合中第一个匹配元素的HTML内容
.html( htmlString )  设置每一个匹配元素的html内容
.html( function(index, oldhtml) ) 用来返回设置HTML内容的一个函数
.text()方法


得到匹配元素集合中每个元素的文本内容结合,包括他们的后代,或设置匹配元素集合中每个元素的文本内容为指定的文本内容。,具体有3种用法:


.text() 得到匹配元素集合中每个元素的合并文本,包括他们的后代
.text( textString ) 用于设置匹配元素内容的文本
.text( function(index, text) ) 用来返回设置文本内容的一个函数
注意事项:


.htm()方法内部使用的是DOM的innerHTML属性来处理的,所以在设置与获取上需要注意的一个最重要的问题,这个操作是针对整个HTML内容(不仅仅只是文本内容)
注意事项:


.text()结果返回一个字符串,包含所有匹配元素的合并文本
.html与.text的异同:


.html与.text的方法操作是一样,只是在具体针对处理对象不同
.html处理的是元素内容,.text处理的是文本内容
.html只能使用在HTML文档中,.text 在XML 和 HTML 文档中都能使用
如果处理的对象只有一个子文本节点,那么html处理的结果与text是一样的
火狐不支持innerText属性,用了类似的textContent属性,.text()方法综合了2个属性的支持,所以可以兼容所有浏览器


    <script type="text/javascript">
        //显示出html方法获取到的内容
        //.html()是整个html文档结构
        $('p:first').text( $(".first-div").html() ) 
    </script>
 <script type="text/javascript">
        //显示出text方法获取到的内容
        //.text()是文本内容的合集
        $('p:last').text( $(".first-div").text() ) 
    </script>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++.val()+++++++++++++++++++++++++++++++++++++++++++++++++++++
.val()方法


.val()无参数,获取匹配的元素集合中第一个元素的当前值
.val( value ),设置匹配的元素集合中每个元素的值
.val( function ) ,一个用来返回设置值的函数
 注意事项:


通过.val()处理select元素, 当没有选择项被选中,它返回null
.val()方法多用来设置表单的字段的值
如果select元素有multiple(多选)属性,并且至少一个选择项被选中, .val()方法返回一个数组,这个数组包含每个选 中选择项 的值
.html(),.text()和.val()的差异总结:  


.html(),.text(),.val()三种方法都是用来读取选定元素的内容;只不过.html()是用来读取元素的html内容(包括html标 签),.text()用来读取元素的纯文本内容,包括其后代元素,.val()是用来读取表单元素的"value"值。其中.html() 和.text()方法不能使用在表单元素上,而.val()只能使用在表单元素上;另外.html()方法使用在多个元素上时,只读取第 一个元素;.val()方法和.html()相同,如果其应用在多个元素上时,只能读取第一个表单元素的"value"值,但是.text() 和他们不一样,如果.text()应用在多个元素上时,将会读取所有选中元素的文本内容。
.html(htmlString),.text(textString)和.val(value)三种方法都是用来替换选中元素的内容,如果三个方法同时运用在 多个元素上时,那么将会替换所有选中元素的内容。
.html(),.text(),.val()都可以使用回调函数的返回值来动态的改变多个元素的内容。
++++++++++++++++++++++++++++++++++++++++++++++增加样式.addClass()+++++++++++++++++++++++++++++++++++++++++++++++++
.addClass( className )方法


.addClass( className ) : 为每个匹配元素所要增加的一个或多个样式名
.addClass( function(index, currentClass) ) : 这个函数返回一个或更多用空格隔开的要增加的样式名
注意事项:


.addClass()方法不会替换一个样式类名。它只是简单的添加一个样式类名到元素上
简单的描述下:在p元素增加一个newClass的样式


<p class="orgClass">
$("p").addClass("newClass")
    .right div {
        width: 100px;
        height: 90px;
        padding: 5px;
        margin: 5px;
        float: left;
        border: 1px solid #ccc;
    }
+++++++++++++++++++++++++++++++++++++++++++++切换样式.toggleClass()+++++++++++++++++++++++++++++++++++++++++++++++
.toggleClass( className ):在匹配的元素集合中的每个元素上用来切换的一个或多个(用空格隔开)样式类名
.toggleClass( className, switch ):一个布尔值,用于判断样式是否应该被添加或移除
.toggleClass( [switch ] ):一个用来判断样式类添加还是移除的 布尔值
.toggleClass( function(index, class, switch) [, switch ] ):用来返回在匹配的元素集合中的每个元素上用来切换的样式类名的一个函数。接收元素的索引位置和元素旧的样式类作为参数
</div>
    <script type="text/javascript">
    //给所有的tr元素加一个class="c"的样式
    $("#table tr").toggleClass("c");
    </script>
    <script type="text/javascript">
    //给所有的偶数tr元素切换class="c"的样式
    //所有基数的样式保留,偶数的被删除
    $("#table tr:odd").toggleClass("c");
    </script>
    <script type="text/javascript">
    //第二个参数判断样式类是否应该被添加或删除
    //true,那么这个样式类将被添加;
    //false,那么这个样式类将被移除
    //所有的奇数tr元素,应该都保留class="c"样式
    $("#table tr:even").toggleClass("c", true); //这个操作没有变化,因为样式已经是存在的
++++++++++++++++++++++++++++++++++++++++++++++++样式操作.css()+++++++++++++++++++++++++++++++++++++++=++++++++++++
<script type="text/javascript">
//background-color:blue; => rgb(0, 0, 255)
//颜色都会转化成统一的rgb标示
$('p:eq(0)').text( $('.first').css("background-color") )

    </script>


<script type="text/javascript">
//字体大小都会转化成统px大小 em=>px
$('p:eq(1)').text( $('.first').css("font-size"))
    </script>


<script type="text/javascript">
//获取尺寸,传入CSS属性组成的一个数组
//{width: "60px", height: "60px"}
var value = $('.first').css(['width','height']);
//因为获取的是一个对象,取到对应的值
$('p:eq(2)').text( 'widht:' + value.width +  ' height:' +value.height )
    </script>


</br></br></br>
<h3>设置css属性</h3>
<div class="fourth">设置颜色设置文字尺寸</div>
    <div class="fifth">设置颜色设置文字尺寸</div>
    <div class="sixth">通过回调设置新的值</div>
    <div class="seventh">同时设置多少个样式</div>


<script type="text/javascript">
//多种写法设置颜色
$('.fourth').css("background-color","red")
$('.fifth').css("backgroundColor","yellow")
    </script>


<script type="text/javascript">
//多种写法设置字体大小
$('.fourth').css("font-size","15px")
$('.fifth').css("fontSize","0.9em")
    </script>




<script type="text/javascript">
//获取到指定元素的宽度,在回调返回宽度值
//通过处理这个value,重新设置新的宽度
$('.sixth').css("width",function(index,value){
            //value带单位,先分解
            value = value.split('px');
            //返回一个新的值,在原有的值上,增加50px
            return (Number(value[0]) + 50) + value[1];
        })
    </script>


<script type="text/javascript">
//合并设置,通过对象传设置多个样式
$('.seventh').css({
            'font-size'        :"15px",
            "background-color" :"#40E0D0",
            "border"           :"1px solid red"
        })
    </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值