看看

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>目录</title>
    <style type="text/css">
        /*初始化*/
        html,body,header,div,ul,li,dl,dd,p,input,iframe{
            padding: 0px;
            margin: 0px;
        }
        li{
            list-style-type: none;
        }
        input{
            outline: none;
        }
        @font-face {
            font-family: 'iconfont';  /* project id 666160 */
            src: url('//at.alicdn.com/t/font_666160_a4uzukifqztlc8fr.eot');
            src: url('//at.alicdn.com/t/font_666160_a4uzukifqztlc8fr.eot?#iefix') format('embedded-opentype'),
            url('//at.alicdn.com/t/font_666160_a4uzukifqztlc8fr.woff') format('woff'),
            url('//at.alicdn.com/t/font_666160_a4uzukifqztlc8fr.ttf') format('truetype'),
            url('//at.alicdn.com/t/font_666160_a4uzukifqztlc8fr.svg#iconfont') format('svg');
        }
        /*去除float  clear=both display:table 但是会生成bfc 设置了父元素,子元素也会有。所以最好设置的范围最小 */
        /*bfc 会是上下边距重叠*/
        .clearFix::after{
            content: '';
            display: table;
            clear: both;
        }
        a{
            text-decoration: none;
            cursor: pointer;
        }
    </style><!--  初始化,基本  -->
    <style type="text/css">

        html,body{
            height: 100%;
            font-family: Microsoft Yahei,Lato,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Verdana,Tahoma,sans-serif!important;
        }
        div{

        }
        /*--table布局,只要设置table-cell的一个宽度就可以自适应*/
        body{
            font-family: Microsoft Yahei,Lato,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Verdana,Tahoma,sans-serif!important;
        }
        ::-webkit-scrollbar
        {
            width: 2px;
            height: 2px;
            background-color: #F5F5F5;
        }

        /*定义滚动条轨道 内阴影+圆角*/
        ::-webkit-scrollbar-track
        {
            -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
            border-radius: 10px;
            background-color: #FFF;
        }

        /*定义滑块 内阴影+圆角*/
        ::-webkit-scrollbar-thumb
        {
            border-radius: 10px;
            -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
            background-color: #4499ee;
        }
        .table{
            display: table;
            box-sizing: border-box;
            width: 100%;
            height: 100%;
            padding: 5px;
            overflow-wrap: break-word;
            font-size: 16px;
        }
        .left{
            box-sizing: border-box;
            width: 50px;
            height: 100%;
            display: table-cell;
            padding: 2px 0px;
            position: relative;
            text-align: left;
            border-radius:10px;
            border-bottom-right-radius: 0px;
            background-color:#333;
            white-space: nowrap;
            transition: all 0.1s;
            transition-timing-function: ease-in-out;
        }
        .left:hover{
            width: 200px;
            text-align: center;
        }
        .searchBox .search{
            border: none;
        }
        .searchBox input{
            box-sizing: border-box;
            text-align:center;
            height:40px;
            border-top-left-radius: 10px;
            border-top-right-radius: 10px;
            border:1px solid #c8cccf;
            margin-top: -2px;
            color:#6a6f77;
            -web-kit-appearance:none;
            -moz-appearance: none;
            display:block;
            outline:none;
            padding:0 1em;
            text-decoration:none;
            width:100%;

        }
        .searchIndex{
            position: absolute;
            top: 40px;
            bottom:2px;
            width:100%;
            box-sizing: border-box;
            border: none;
            overflow-x: hidden;
            overflow-y: scroll;
        }
        ul{
            margin: 5px 2%;
        }
        ul li{
            color:#ccc;
            margin-bottom: 5px;
            cursor: pointer;
        }
        li a{
            color: inherit;
            display: inline-block;
            text-align: inherit;
            text-overflow: ellipsis;
            width: 100%;
        }
        li:hover{
            color: #fff;
        }
        .mark{
            width: 95%;
            left: 2.5%;
            border: 1px solid red;
            box-sizing: border-box;
            position: absolute;
            top: 0px;
            display: none;
            transition: all 1s;
            transition-timing-function: ease-in-out;
        }
        .right{
            display: table-cell;
            position: relative;
            box-sizing: border-box;
            height: 100%;
            border: 1px solid grey;
            border-top-right-radius: 10px;
            border-top-left-radius: 10px;
            border-bottom-right-radius: 10px;
            overflow: hidden;
        }
        .right .content{
            position: absolute;
            top:0px;
            bottom: 40px;
            width: 100%;
            border-top-right-radius: 10px;
            border-top-left-radius: 10px;/*要重写,不然还是会出错*/
            box-sizing: border-box;
        }
        iframe{
            height: 100%;
            width: 100%;
            border: none;
            overflow-y: scroll;
        }

        .right .edit{
            position: absolute;
            bottom:0px;
            width: 100%;
            height: 40px;
            box-sizing: border-box;
            border: 1px solid grey;
            border-left: none;
            border-bottom-right-radius: 10px;
        }
        .edit ul{
            height: 100%;
        }
        .edit li{
            float: left;
            height: 100%;
            padding: 5px 20px;
        }
        .edit li span{
            line-height: 100%;
            height: 20px;
            box-sizing: border-box;
        }
        .edit li input{
            height: 25px;
        }
        .edit li button{
            text-align: center;
            display: inline-block;
            width: 60px;
            height: 30px;
            line-height:1;
        }
        .editDiv{
            display: none;
            position: absolute;
            top:0%;
            bottom: 0%;
            width: 100%;
            box-sizing: border-box;
            border-top-right-radius: 10px;
            border-top-left-radius: 10px;
            background-color: #00bb50;
            z-index: 100;
        }
        .editDiv textarea{
            width: 100%;
            height: 100%;
            font-size: 16px;
            border: none;
            box-sizing: border-box;
        }
        .editModule{
            width: 40px;
            position: absolute;
            right: 1px;
            top:100px;
            background-color: grey;
            text-align: left;
            white-space: nowrap;
            transition: all 0.5s;
            transition-timing-function: ease-in-out;
        }
        .editModule:hover{
            width: 100px;
            text-align: center;
        }
        .editModule span{
            display: block;
            border: 1px solid #6a6f77;
        }
        .editModule ul{
            height: 300px;
        }
        .editModule li{
           padding: 10px auto;
        }
    </style>

</head>
<body>
<div class="table">
<div class="left">
    <div class="searchBox">
        <div class="search">
            <input type="search" placeholder="搜索一下"><!-- placeholder在获得焦点时会消失 -->
        </div>
    </div>
    <div class="searchIndex" id="searchIndex">
        <ul>
            <li><a href="javascript:routing1('http://www.baidu.com')">百度一下</a></li>
            <li><a href="javascript:routing1('http://www.w3school.com.cn/html/index.asp')">W3School</a></li>
            <li><a href="javascript:routing1('http://nodejs.cn/api/')">NodeJs</a></li>
            <hr>
        </ul>
        <ul>
            <li><a href="javascript:routing('h1')">第一个</a></li>
            <li><a href="javascript:routing('h2')">第二个</a></li>
            <li><a href="javascript:routing('h3')">第三个分发</a></li>
            <li><a href="javascript:routing('h4')">第四个我仍然想</a></li>
            <li><a href="javascript:routing('xiaomi')">第五个政治</a></li>
            <li><a href="javascript:routing('test')">第六个安慰安慰而为</a></li>
        </ul>
        <div class="mark" id="searchIndexMark"></div><!--用于红色标记-->
    </div>
</div>
<div class="right">
    <div  class="content" id="content" >
        <iframe src="http://www.baidu.com" id="iframe" name="iframe"></iframe>
        <div class="editDiv" id="editDiv">
            <textarea id="editDivPre"></textarea>
            <div class="editModule" id="editModule">
                <span>模板</span>
                <ul>
                    <li data-attribute="hs">列表</li>
                    <li data-attribute="dm">代码</li>
                    <li data-attribute="qt">注意事项</li>
                    <li data-attribute="qt">相关链接</li>
                </ul>
            </div>
        </div>
    </div >
    <div class="edit">
        <ul>
            <li>
                <span>目录</span><input type="text">
                <button οnclick="editAdd()" id="btAdd">添加</button>
            </li>
            <li>
                <button οnclick="editAlter()" id="btAlter">修改</button>
            </li>
            <li>
                <button οnclick="editOpen()" id="btOpen" disabled>打开</button>
            </li>
            <li>
                <button οnclick="editDelete()" id="btDel">删除</button>
            </li>
            <li>
                <button οnclick="editFin()" id="btFin" disabled>提交</button>
            </li>
        </ul>
    </div>
</div>
</div>
</body>
<script>
    var xmlhttp;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    var Ele={
        leftIframe:document.getElementById("iframe"),//内嵌iframe
        editDiv:document.getElementById("editDiv"),//编辑DIV
        editDivPre:document.getElementById("editDivPre"),//编辑textarea
        //leftFrameInnerEle:document.getElementById("iframe").contentWindow.document,//iframe内容,这个不随时更新
        searchIndexUl :document.getElementById("searchIndex").getElementsByTagName("ul"),//搜索索引ul 是集合
        searchIndexMark:document.getElementById("searchIndexMark"),//索引部分Mark
        btAdd:document.getElementById("btAdd"),
        btAlter:document.getElementById("btAlter"),
        btDel:document.getElementById("btDel"),
        btFin:document.getElementById("btFin"),
        btOpen:document.getElementById("btOpen"),
        editModule:document.getElementById("editModule")
    }
    var Config={

    }
    var V={
        btOpenValue:"",//编辑器内容
        src:"",//在编辑按钮时,保存被编辑对应的
        srcClick:"",//每次点击了索引li都会保存起来
        srcInnerText:"",//在编辑按钮时,保存被编辑对应的
        srcClickInnerText:"",//每次点击了索引li都会保存起来
        selectionStart:0//textarea 光标位置
    }
    function routing1(path,value){
        console.groupCollapsed(arguments.callee.name+"函数在执行")
        console.log("path:"+path)
        console.groupEnd()
        if(value!=undefined){
            path=path+"/s?wd="+value;
        }
       Ele.leftIframe.setAttribute("src",path);//会让iframe刷新
    }
    function routing(path,value){//value是post字符串key=value&key1=value1
        console.groupCollapsed(arguments.callee.name+"函数在执行")
        console.log("path:"+path)
        console.log("value:"+value)
        console.groupEnd()
        var xhr= xmlhttp;
        xhr.open("post",path,true);
        xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
        xhr.onreadystatechange=function(){
            if(xhr.readyState==4&&xhr.status==200){
              Ele.leftIframe.setAttribute("src",path);//会让iframe刷新 // console.log(xhr.responseText)
                //对Left的编辑区内容和按钮设置
                Ele.editDiv.style.display="none";//关闭editDiv
                Ele.btOpen.innerHTML="打开";
                Ele.btOpen.disabled=false;//可以点击
                Ele.btAlter.disabled=false;//可以点击
                Ele.btFin.disabled=true;//不可以点击
                V.btOpenValue= Ele.editDivPre.value;//保存起来原来编辑内容
                V.srcClick=path;
            }
        };
        xhr.send(value)//post方法将发送的参数写在这里 //xhr.send(null);//get方法下使用这个发送Ajax请求
    }
    function editAdd(){
        Ele.editDiv.style.display="inline-block";
        var textStr="/*创建于"+new Date()+"*/"+"\n"
        Ele.editDivPre.value=textStr;
        var indexStart=Ele.editDivPre.value.length;
        Ele.editDivPre.selectionStart=indexStart;
        Ele.editDivPre.selectionEnd=indexStart;
        V.selectionStart=indexStart;
        Ele.editDivPre.focus();//必须放在对改元素修改的后面
    }
    function editAlter(){
        Ele.editDivPre.value=Ele.leftIframe.contentWindow.document.getElementsByTagName("html")[0].outerHTML;//内容要实时更新,不要保存到变量那里
        Ele.editDiv.style.display="inline-block";//打开editDiv
        var indexStart=Ele.editDivPre.value.indexOf("<body>")+6;
        console.log("进编辑器查找到body:"+indexStart)
        Ele.editDivPre.selectionStart=indexStart;
        Ele.editDivPre.selectionEnd=indexStart;
        V.selectionStart=indexStart;
        Ele.editDivPre.focus();//必须放在对改元素修改的后面
        Ele.btOpen.innerHTML="关闭";
        Ele.btOpen.disabled=false;//可以点击
        Ele.btAlter.disabled=true;//不可以点击
        Ele.btFin.disabled=false;//可以点击

        V.btOpenValue=Ele.editDivPre.value;//保存起来
        V.src= V.srcClick;//保存变量,上次点击保存对的src
        V.srcInnerText= V.srcClickInnerText;//保存变量,上次点击保存对的li的文本
        console.log("修改按钮,对应-->src:"+V.src+"标题:"+V.srcInnerText);

    }
    function editDelete(){

    }
    function editFin(){
        var path=V.src;//在编辑按钮触发时保存该src,用于提交的时候正确提交
        console.log("提交按钮,对应-->src:"+V.src+"标题:"+V.srcInnerText)
        var value=Ele.editDivPre.value;
        V.btOpenValue=value;//保存起来
        value=encodeURIComponent(value);
        value="write="+value;
        routing(path,value);
        Ele.editDiv.style.display="none";//关闭editDiv
        Ele.btOpen.innerHTML="打开";
        Ele.btOpen.disabled=false;//可以点击
        Ele.btAlter.disabled=false;//可以点击
        Ele.btFin.disabled=true;//不可以点击
    }
    function editOpen(){
        if(Ele.btOpen.innerHTML=="打开"){
            Ele.editDiv.style.display="inline-block";//打开editDiv
            Ele.btOpen.innerHTML="关闭";
            Ele.btOpen.disabled=false;//可以点击
            Ele.btAlter.disabled=true;//不可以点击
            Ele.btFin.disabled=false;//可以点击
            Ele.editDivPre.value=V.btOpenValue;//赋值
            console.log("打开按钮,对应-->src:"+V.src+"标题:"+V.srcInnerText)
        }else{
            Ele.editDiv.style.display="none";//打开editDiv
            Ele.btOpen.innerHTML="打开";
            Ele.btOpen.disabled=false;//可以点击
            Ele.btAlter.disabled=false;//可以点击
            Ele.btFin.disabled=true;//不可以点击
            V.btOpenValue=Ele.editDivPre.value;//保存
            console.log("关闭按钮,对应-->src:"+V.src+"标题:"+V.srcInnerText)
        }
    }
    (function init(){
        //设置搜索索引 li的点击事件
        (function() {
            var ulLength=Ele.searchIndexUl.length;
            function clickFun(e){
                var mark=Ele.searchIndexMark;
                var LiHeight=e.target.parentNode.clientHeight;//宽度,对于非嵌入style的获取方式
                var liTop=e.target.parentNode.offsetTop;
                V.srcClickInnerText=e.target.innerText;
                mark.style.height=LiHeight+2+"px";//增加border的宽度
                mark.style.display="inline-block";
                mark.style.top=(liTop-1)+"px";//消除border的宽度
            }
            var searchUls=Ele.searchIndexUl;
            for(var i=0;i<ulLength;i++){
                var lis=searchUls[i].getElementsByTagName("li");
                for(var j=0;j<lis.length;j++){
                    lis[j].addEventListener("click",clickFun,false);
                }
            }
        }());
        //设置editModule的li的点击事件
        (function(){
            function clickFun(e){
                var ele= e.target;
                var dataAttribute=ele.getAttribute("data-attribute");
                var textStr=Ele.editDivPre.value;
                var inset="";
                console.log("--->"+dataAttribute+"<");
                switch (dataAttribute){
                    case "hs":{
                          inset="<ul><br><li></li></ul>";
                          break;
                    }
                    case "dm":{
                        inset="dmdmdmdmmdmdmd";
                        break;
                    }
                    default:{
                        inset="<ul>\n\t<li>gggg</li>\n</ul>"
                    }
                }
                var subStr1=textStr.substring(0, V.selectionStart);
                var subStr2=textStr.substring(V.selectionStart,textStr.length);
                setTimeout(function(){
                    V.selectionStart=Ele.editDivPre.selectionStart+5;
                    Ele.editDivPre.selectionStart= V.selectionStart; //选中区域左边界
                    Ele.editDivPre.selectionEnd= V.selectionStart; //选中区域右边界
                    //Ele.editDivPre.focus();
                },1000)
                Ele.editDivPre.value=subStr1+inset+subStr2;//一定要先修改好内容,再设置光标
                Ele.editDivPre.selectionStart= V.selectionStart; //选中区域左边界
                Ele.editDivPre.selectionEnd= V.selectionStart+inset.length; //选中区域右边界
                Ele.editDivPre.focus();
                console.log( Ele.editDivPre.selectionStart+'---'+Ele.editDivPre.selectionEnd)

            }
            var mdUl=Ele.editModule.getElementsByTagName("ul");
            for(var i=0;i<mdUl.length;i++){
                var lis=mdUl[i].getElementsByTagName("li");
                for(var j=0;j<lis.length;j++){
                    lis[j].addEventListener("click",clickFun,false);
                }
            }
        })();
        (function(){
            Ele.editDivPre.addEventListener("click",function(e) {
                V.selectionStart=e.target.selectionStart;
                console.log( V.selectionStart)
            });//点击区域,获得光标位置
            Ele.editDivPre.addEventListener("input",function(e) {
                V.selectionStart=e.target.selectionStart;
                console.log( V.selectionStart)
            })
        })()
    })()

</script>
</html>
  • 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
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、付费专栏及课程。

余额充值