国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Inhaltsverzeichnis
基于PHP的一種Cache回調(diào)與自動觸發(fā)技術(shù)
Heim Backend-Entwicklung PHP-Tutorial 基于PHP的一種Cache回調(diào)與自動觸發(fā)技術(shù)_PHP教程

基于PHP的一種Cache回調(diào)與自動觸發(fā)技術(shù)_PHP教程

Jul 13, 2016 am 10:12 AM
Technologie

基于PHP的一種Cache回調(diào)與自動觸發(fā)技術(shù)

背景

在PHP中使用Memcache或者Redis時(shí),我們一般都會對Memcache和Redis封裝一下,單獨(dú)完成寫一個(gè)Cache類,作為Memcache活著Redis的代理,且一般為單例模式。在業(yè)務(wù)代碼中,使用Cache類時(shí),操作的基本的示例代碼如下

// cache 的 key
$key = 'this is key';
$expire = 60;// 超時(shí)時(shí)間

// cache 的實(shí)例
$cache = Wk_Cache::instance();
$data = $cache->fetch($key);

// 判斷data
if(empty($data)){
    // 如果為空,調(diào)用db方法
    $db = new Wk_DB();
    $data = $db->getXXX();
    $cache->store($key, $data, $expire);
}
// 處理$data相關(guān)數(shù)據(jù)
return $data;

基本流程為
第一步,先組裝查詢key,到Cache查詢Value,如果存在,繼續(xù)處理,進(jìn)入第三步;如果不存在,進(jìn)入第二步
第二步,根據(jù)請求,到DB中,查詢相關(guān)數(shù)據(jù),如果數(shù)據(jù)存在,把數(shù)據(jù)放到Cache中
第三步,處理cache或者db中返回的數(shù)據(jù)

問題

上述流程基本上會出現(xiàn)在每次調(diào)用Cache的部分,先cache查詢,沒有的話調(diào)用DB或者第三方接口,獲取數(shù)據(jù),再次存入Cache,繼續(xù)數(shù)據(jù)處理。多次調(diào)用,既是一種問題,應(yīng)該把這種查詢方式封裝到更底層的方法內(nèi)。而不是每次重復(fù)這樣的邏輯,除了封裝的問題外,還有其他問題,我們統(tǒng)一列舉下

第一:從設(shè)計(jì)角度來說 重復(fù)代碼,需要更底層邏輯封裝。
第二:key的組裝,麻煩繁瑣,實(shí)際情況,可能會把各種參數(shù)組裝進(jìn)去,維護(hù)的時(shí)候,不敢修改。
第三:設(shè)置的expire超時(shí)時(shí)間,會分散在各處邏輯代碼中,最終很難統(tǒng)計(jì)Cache緩存時(shí)間的情況。
第四:由于要把cache->store方法放到調(diào)用db之后執(zhí)行,如果db后,還有其他邏輯處理,有可能會忘掉把數(shù)據(jù)放入cache,導(dǎo)致數(shù)據(jù)。
第五:在高并發(fā)系統(tǒng)中,cache失效那一刻,會有大量請求直接穿透到后方,導(dǎo)致DB或者第三方接口壓力陡升,響應(yīng)變慢,進(jìn)一步影響系統(tǒng)穩(wěn)定性,這一現(xiàn)象為“Dogpile”。

以上問題中,最簡單的為2,3種,對于expire超時(shí)時(shí)間分散的問題,我們可以通過統(tǒng)一配置文件來解決,比如我們可以創(chuàng)建這樣的一個(gè)配置文件。

“test"=>array( // namespace,方便分組
             "keys"=> array(
                 “good”=>array(		// 定義的key,此key非最終入cache的key,入key需要和params組裝成唯一的key
                     "timeout"=>600,	// 此處定義超時(shí)時(shí)間
                     "params"=>array("epid"=>1,"num"=>1),	// 通過這種方法,描述需要傳遞參數(shù),用于組裝最終入cache的key
                     "desc"=>"描述"
                     ), 
                "top_test"=>array(	// 定義的key,此key非最終入cache的key,入key需要和params組裝成唯一的key
                     "timeout"=>60,	// 此處定義超時(shí)時(shí)間
                     "ttl"=>10,	// 自動觸發(fā)時(shí)間
                     "params"=>array('site_id'=>1,'boutique'=>1,'offset'=>1,'rows'=> 1,'uid'=>1,'tag_id'=>1,'type'=>1),	// 通過這種方法,描述需要傳遞參數(shù),用于組裝最終入cache的key
                     "desc"=>"描述",
                     "author"=>"ugg",
                     ), 

)
)

如上所示,通過一個(gè)算法,我們可以把site_top_feeds和params組裝成唯一的入庫key,組裝后的key,大概是這樣site_top_feeds_site_id=12&boutique=1&offset=0&rows=20&uid=&tag_id=0&type=2通過這種方式,我們避免工人自己組裝key,從而杜絕第二種問題,同時(shí)在這個(gè)配置文件中,我們也設(shè)置了timeout,這樣調(diào)用store時(shí),我們可以直接從配置文件中讀取,從而避免第三個(gè)問題。經(jīng)過如上修改后,我們的cache方法,也做了適當(dāng)?shù)恼{(diào)整,調(diào)用示例如下。

$siteid = 121;
$seminal = 1;
$tag_id = 12;
$tag_id = 22;

$data =  fetch(‘site_top_feeds’,array('site_id'=>$siteid,'boutique'=>$seminal, 'offset'=>"0", 'rows' => "20", 'uid' =>null,’tag_id’=>$tag_id,’type'=>$type),'feed');
if(empty($data)){
// db相關(guān)操作
$db = new Wk_DB();
    $data = $db->getTopFeeds($site_id,$seminal,0,20,null,$tag_id,$type);
//  $data數(shù)據(jù)其他處理邏輯 這里
……

$cache->store(‘site_top_feeds’,$data,array(‘site_id'=>$siteid,'boutique'=>$seminal, 'offset'=>"0", 'rows' => "20", 'uid' =>null,’tag_id’=>$tag_id,’type'=>$type),'feed');
}

通過以上方案,我沒看到,timeout超時(shí)時(shí)間沒有了,key的組裝也沒有了,對于外層調(diào)用是透明的了。但是我們通過配置文件可以知道site_top_feeds的timeout是多少,通過封裝的算法,知道組裝的key是什么樣的。
這種方式,并沒有解決第一和第四的問題,封裝性;要想完成封裝性,第一件事情要做的就是回調(diào)函數(shù),作為校本語言,PHP并沒有完善的函數(shù)指針概念,當(dāng)然要想執(zhí)行一個(gè)函數(shù)其實(shí)也不需要指針。PHP支持回調(diào)函數(shù)的方法有兩種call_user_func,call_user_func_array。
但是,我做了兩個(gè)例子,發(fā)現(xiàn)上述方法,執(zhí)行效率比原生方法,相差很多

native:0.0097959041595459s
call_user_func:0.028249025344849s
call_user_func_array:0.046605110168457s

例子代碼如下:

$s = microtime(true);
for($i=0; $i< 10000 ; ++$i){
    $a = new a();
    $data = $a->aaa($array, $array, $array);
    $data = a::bbb($array, $array, $array);
}
$e = microtime(true);
echo "native:".($e-$s)."s\n";

$s = microtime(true);
for($i=0; $i< 10000 ; ++$i){
    $a = new a();
    $data = call_user_func(array($a,'aaa'),$array,$array,$array);
    $data = call_user_func(array('a','bbb'),$array,$array,$array);
}
$e = microtime(true);
echo "call_user_func:".($e-$s)."s\n";

$s = microtime(true);
for($i=0; $i< 10000 ; ++$i){
    $a = new a();
    $data = call_user_func_array(array($a,'aaa'),array(&$array,&$array,&$array));
    $data = call_user_func_array(array('a','bbb'),array(&$array,&$array,&$array));
}
$e = microtime(true);
echo “call_user_func_array:".($e-$s)."s\n";

在PHP中,知道一個(gè)對象和方法,其實(shí)調(diào)用方法很簡單,比如上面的例子

$a = new a();
$data = $a->aaa($array, $array, $array);
$obj = $a;
$func = ‘a(chǎn)aa’;
$params = array($array,$array,$array);
$obj->$func($params[0],$params[1],$params[2]);	// 通過這種方式可以直接執(zhí)行

這種方式的執(zhí)行性能怎么樣,經(jīng)過我們對比測試發(fā)現(xiàn)

native:0.0092940330505371s
call_user_func:0.028635025024414s
call_user_func_array:0.048038959503174s
my_callback:0.11308288574219s

在加入大量方法策略驗(yàn)證中,性能損耗比較低,時(shí)間消耗僅是原生方法的1.25倍左右,遠(yuǎn)小于call_user_func的3倍多,call_user_func_array的5倍多,具體封裝后的代碼

switch(count($params)){
                case 0: $result = $obj->{$func}();break;
                case 1: $result = $obj->{$func}($params[0]);break;
                case 2: $result = $obj->{$func}($params[0],$params[1]);break;
                case 3: $result = $obj->{$func}($params[0],$params[1],$params[2]);break;
                case 4: $result = $obj->{$func}($params[0],$params[1],$params[2],$params[3]);break;
                case 5: $result = $obj->{$func}($params[0],$params[1],$params[2],$params[3],$params[4]);break;
                case 6: $result = $obj->{$func}($params[0],$params[1],$params[2],$params[3],$params[4],$params[5]);break;
                case 7: $result = $obj->{$func}($params[0],$params[1],$params[2],$params[3],$params[4],$params[5],$params[6]);break;
                default: $result = call_user_func_array(array($obj, $func), $params);  break;
            }   

在使用這種方法之前,考慮過使用create_function來創(chuàng)建匿名函數(shù),執(zhí)行函數(shù)回調(diào),經(jīng)過測試create_function只能創(chuàng)造全局函數(shù),不能創(chuàng)建類函數(shù)和對象函數(shù),遂放棄。


完成以上準(zhǔn)備工作后,就可以使用回調(diào)機(jī)制了,再次調(diào)用的業(yè)務(wù)代碼

….
// 相關(guān)變量賦值
$db = new Wk_DB();
$callback['obj'] = $db;
            $callback['func'] = 'getTopFeeds';
            $callback['params'] = array('site_id'=>$siteid,'boutique'=>$seminal, 'offset'=>"0", 'rows' => "20", 'uid' =>null,'tag_id'=>$tag_id,'type'=>$type);

            $top_feed_list = $cache->smart_fetch('site_top_feeds',$callback,'feed');

使用以上方法實(shí)現(xiàn)對cache調(diào)用的封裝,同時(shí)保證性能的高效,從而解決第一和第四個(gè)問題。

至此已經(jīng)完成前四個(gè)問題,從而實(shí)現(xiàn)Cache的封裝,并有效的避免了上面提到的第二,第三,第四個(gè)問題。但是對于第五個(gè)問題,dogpile問題,并沒有解決,針對這種問題,最好的方式是在cache即將失效前,有一個(gè)進(jìn)程主動觸發(fā)db操作,獲取DB數(shù)據(jù)放入Cache中,而其他進(jìn)程正常從Cache中獲取數(shù)據(jù)(因?yàn)榇藭r(shí)cache并未失效);好在有Redis緩存,我們可以使用Redis的兩個(gè)特性很好解決這個(gè)問題,先介紹下這兩個(gè)接口
TTL方法:以秒為單位,返回給定 key 的剩余生存時(shí)間 (TTL, time to live),當(dāng) key 不存在時(shí),返回 -2 。當(dāng) key 存在但沒有設(shè)置剩余生存時(shí)間時(shí),返回 -1 。否則,以秒為單位,返回 key 的剩余生存時(shí)間。很明顯,通過這個(gè)方法,我們很容易知道key的還剩下的生存時(shí)間,通過這個(gè)方法,可以在key過期前做點(diǎn)事情,但是光有這個(gè)方法還不行,我們需要確保只有進(jìn)程執(zhí)行,而不是所有的進(jìn)程都做,正好用到下面這個(gè)方法。
SETNX方法:將 key 的值設(shè)為 value ,當(dāng)且僅當(dāng) key 不存在。若給定的 key 已經(jīng)存在,則SETNX 不做任何動作。SETNX 是『SET if Not eXists』(如果不存在,則 SET) 的簡寫。返回值:設(shè)置成功,返回 1 。設(shè)置失敗,返回 0 。通過這個(gè)方法,模擬分布式加鎖,保證只有一個(gè)進(jìn)程做執(zhí)行,而其他的進(jìn)程正常處理。結(jié)合以上Redis方法的特性,解決第五種的問題的,實(shí)例代碼。

…
// 變量初始化
$key = “this is key”;
$expiration = 600; 
$recalculate_at = 100;
$lock_length = 20;
$data = $cache->fetch($key); 
$ttl = $cache->redis->ttl($key); 
if($recalculate_at>=$ttl&&$r->setnx("lock:".$key,true)){ 
$r->expire(“l(fā)ock:”.$key, $lock_length);
$db = new Wk_DB();
  $data = $db->getXXX();
  $cache->store($key, $expiration, $value);
}

解決方案

好了,關(guān)鍵核心代碼如下
1:function回調(diào)部分代碼

public static function callback($callback){
        // 安全檢查
        if(!isset($callback['obj']) || !isset($callback['func'])
            || !isset($callback['params']) || !is_array($callback['params'])){
            throw new Exception("CallBack Array Error");
        }   
        // 利用反射,判斷對象和函數(shù)是否存在
        $obj = $callback['obj'];
        $func = $callback['func'];
        $params = $callback['params'];
        // 方法判斷        
        $method = new ReflectionMethod($obj,$func);
        if(!$method){
            throw new Exception("CallBack Obj Not Find func");
        }   

        // 方法屬性判斷
        if (!($method->isPublic() || $method->isStatic())) {
            throw new Exception("CallBack Obj func Error");
        }   

        // 參數(shù)個(gè)數(shù)判斷(不進(jìn)行逐項(xiàng)檢測)
        $paramsNum = $method->getNumberOfParameters();
        if($paramsNum < count($params)){
            throw new Exception("CallBack Obj Params Error");
        }   

        // 6個(gè)參數(shù)以內(nèi),逐個(gè)調(diào)用,超過6個(gè),直接調(diào)用call_user_func_array
        $result = false;
        // 判斷靜態(tài)類方法
        if(!is_object($obj) && $method->isStatic()){
            switch(count($params)){
                case 0: $result = $obj::{$func}();break;
		case 1: $result = $obj::{$func}($params[0]);break;
                case 2: $result = $obj::{$func}($params[0],$params[1]);break;
                case 3: $result = $obj::{$func}($params[0],$params[1],$params[2]);break;
                case 4: $result = $obj::{$func}($params[0],$params[1],$params[2],$params[3]);break;
                case 5: $result = $obj::{$func}($params[0],$params[1],$params[2],$params[3],$params[4]);break;
                case 6: $result = $obj::{$func}($params[0],$params[1],$params[2],$params[3],$params[4],$params[5]);break;
                case 7: $result = $obj::{$func}($params[0],$params[1],$params[2],$params[3],$params[4],$params[5],$params[6]);break;
                default: $result = call_user_func_array(array($obj, $func), $params);  break;
            }
        }else{
            switch(count($params)){
                case 0: $result = $obj->{$func}();break;
                case 1: $result = $obj->{$func}($params[0]);break;
                case 2: $result = $obj->{$func}($params[0],$params[1]);break;
                case 3: $result = $obj->{$func}($params[0],$params[1],$params[2]);break;
                case 4: $result = $obj->{$func}($params[0],$params[1],$params[2],$params[3]);break;
                case 5: $result = $obj->{$func}($params[0],$params[1],$params[2],$params[3],$params[4]);break;
                case 6: $result = $obj->{$func}($params[0],$params[1],$params[2],$params[3],$params[4],$params[5]);break;
                case 7: $result = $obj->{$func}($params[0],$params[1],$params[2],$params[3],$params[4],$params[5],$params[6]);break;
                default: $result = call_user_func_array(array($obj, $func), $params);  break;
            }
        }

2:自動觸發(fā)回調(diào)機(jī)制

public function smart_fetch($key,$callback,$namespace="wk") {
	key = $prefix.$key.$suffix;
        $result = $this->_redis->get($key);

        $bttl = false;
        // ttl狀態(tài)判斷(注意冷啟動)
        if(!empty($ttl)){
            // 獲得過期時(shí)間
            $rttl = $this->_redis->ttl($key);
            if($rttl > 0 && $ttl >= $rttl &&
                $this->_redis->setnx("lock".$key,true)){
                // 設(shè)置超時(shí)時(shí)間(超時(shí)時(shí)間3秒)
                $this->_redis->expire("lock".$key,3);
                $bttl = true;
            }
        }
	// 如何返回值不存在,調(diào)用回調(diào)函數(shù),獲取數(shù)值,并保持?jǐn)?shù)據(jù)庫
        if($bttl || !$result || (isset($CONFIG['FLUSH']) && !empty($CONFIG['FLUSH']))){
            // 重新調(diào)整參數(shù)
            $callbackparams = array();
            foreach($params as $k=>$value){
                $callbackparams[] = $value;
            }
            $callback['params'] = $callbackparams;
            $result = Wk_Common::callback($callback);
            $expire = $key_config["timeout"];
            // 存儲數(shù)據(jù)
            $status = $this->_redis->setex($key, $expire, $result);
            $result=$this->_redis->get($key);
        }

        // 刪除鎖
        if($bttl){
            $this->_redis->delete("lock".$key);
        }
        return $result;
    }

至此,我們使用腳本語言特性,通過user_call_func_array方法補(bǔ)齊所有函數(shù)回調(diào)機(jī)制,從而實(shí)現(xiàn)對Cache的封裝,通過配置文件定義組裝key的規(guī)則和每個(gè)key的超時(shí)時(shí)間,再通過Redis的ttl和setnx特性,保證只有一個(gè)進(jìn)程執(zhí)行DB操作,從而很好避免dogpile問題,實(shí)現(xiàn)cache自動觸發(fā),保證cache持續(xù)存在數(shù)據(jù),并且有效減少DB的訪問次數(shù),提高性能。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/925224.htmlTechArticle基于PHP的一種Cache回調(diào)與自動觸發(fā)技術(shù) 背景 在PHP中使用Memcache或者Redis時(shí),我們一般都會對Memcache和Redis封裝一下,單獨(dú)完成寫一個(gè)Cache類,...
Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
DualBEV: BEVFormer und BEVDet4D deutlich übertreffen, ?ffnen Sie das Buch! DualBEV: BEVFormer und BEVDet4D deutlich übertreffen, ?ffnen Sie das Buch! Mar 21, 2024 pm 05:21 PM

In diesem Artikel wird das Problem der genauen Erkennung von Objekten aus verschiedenen Blickwinkeln (z. B. Perspektive und Vogelperspektive) beim autonomen Fahren untersucht, insbesondere wie die Transformation von Merkmalen aus der Perspektive (PV) in den Raum aus der Vogelperspektive (BEV) effektiv ist implementiert über das Modul Visual Transformation (VT). Bestehende Methoden lassen sich grob in zwei Strategien unterteilen: 2D-zu-3D- und 3D-zu-2D-Konvertierung. 2D-zu-3D-Methoden verbessern dichte 2D-Merkmale durch die Vorhersage von Tiefenwahrscheinlichkeiten, aber die inh?rente Unsicherheit von Tiefenvorhersagen, insbesondere in entfernten Regionen, kann zu Ungenauigkeiten führen. W?hrend 3D-zu-2D-Methoden normalerweise 3D-Abfragen verwenden, um 2D-Features abzutasten und die Aufmerksamkeitsgewichte der Korrespondenz zwischen 3D- und 2D-Features über einen Transformer zu lernen, erh?ht sich die Rechen- und Bereitstellungszeit.

Beherrschen Sie die Koordinatensystemkonvertierung wirklich? Multisensorik-Themen, die für das autonome Fahren unverzichtbar sind Beherrschen Sie die Koordinatensystemkonvertierung wirklich? Multisensorik-Themen, die für das autonome Fahren unverzichtbar sind Oct 12, 2023 am 11:21 AM

Der erste Pilot- und Schlüsselartikel stellt haupts?chlich mehrere h?ufig verwendete Koordinatensysteme in der autonomen Fahrtechnologie vor und erl?utert, wie die Korrelation und Konvertierung zwischen ihnen abgeschlossen und schlie?lich ein einheitliches Umgebungsmodell erstellt werden kann. Der Schwerpunkt liegt hier auf dem Verst?ndnis der Umrechnung vom Fahrzeug in den starren Kamerak?rper (externe Parameter), der Kamera-in-Bild-Konvertierung (interne Parameter) und der Bild-in-Pixel-Einheitenkonvertierung. Die Konvertierung von 3D in 2D führt zu entsprechenden Verzerrungen, Verschiebungen usw. Wichtige Punkte: Das Fahrzeugkoordinatensystem und das Kamerak?rperkoordinatensystem müssen neu geschrieben werden: Das Ebenenkoordinatensystem und das Pixelkoordinatensystem. Schwierigkeit: Sowohl die Entzerrung als auch die Verzerrungsaddition müssen auf der Bildebene kompensiert werden. 2. Einführung Insgesamt gibt es vier visuelle Systeme Koordinatensystem: Pixelebenenkoordinatensystem (u, v), Bildkoordinatensystem (x, y), Kamerakoordinatensystem () und Weltkoordinatensystem (). Es gibt eine Beziehung zwischen jedem Koordinatensystem,

Das Stable Diffusion 3-Papier wird endlich ver?ffentlicht und die architektonischen Details werden enthüllt. Wird es helfen, Sora zu reproduzieren? Das Stable Diffusion 3-Papier wird endlich ver?ffentlicht und die architektonischen Details werden enthüllt. Wird es helfen, Sora zu reproduzieren? Mar 06, 2024 pm 05:34 PM

Der Artikel von StableDiffusion3 ist endlich da! Dieses Modell wurde vor zwei Wochen ver?ffentlicht und verwendet die gleiche DiT-Architektur (DiffusionTransformer) wie Sora. Nach seiner Ver?ffentlichung sorgte es für gro?es Aufsehen. Im Vergleich zur Vorg?ngerversion wurde die Qualit?t der von StableDiffusion3 generierten Bilder erheblich verbessert. Es unterstützt jetzt Eingabeaufforderungen mit mehreren Themen, und der Textschreibeffekt wurde ebenfalls verbessert, und es werden keine verstümmelten Zeichen mehr angezeigt. StabilityAI wies darauf hin, dass es sich bei StableDiffusion3 um eine Reihe von Modellen mit Parametergr??en von 800 M bis 8 B handelt. Durch diesen Parameterbereich kann das Modell direkt auf vielen tragbaren Ger?ten ausgeführt werden, wodurch der Einsatz von KI deutlich reduziert wird

Dieser Artikel reicht aus, um etwas über autonomes Fahren und Flugbahnvorhersage zu lesen! Dieser Artikel reicht aus, um etwas über autonomes Fahren und Flugbahnvorhersage zu lesen! Feb 28, 2024 pm 07:20 PM

Die Trajektorienvorhersage spielt eine wichtige Rolle beim autonomen Fahren. Unter autonomer Fahrtrajektorienvorhersage versteht man die Vorhersage der zukünftigen Fahrtrajektorie des Fahrzeugs durch die Analyse verschiedener Daten w?hrend des Fahrvorgangs. Als Kernmodul des autonomen Fahrens ist die Qualit?t der Trajektorienvorhersage von entscheidender Bedeutung für die nachgelagerte Planungssteuerung. Die Trajektorienvorhersageaufgabe verfügt über einen umfangreichen Technologie-Stack und erfordert Vertrautheit mit der dynamischen/statischen Wahrnehmung des autonomen Fahrens, hochpr?zisen Karten, Fahrspurlinien, F?higkeiten in der neuronalen Netzwerkarchitektur (CNN&GNN&Transformer) usw. Der Einstieg ist sehr schwierig! Viele Fans hoffen, so schnell wie m?glich mit der Flugbahnvorhersage beginnen zu k?nnen und Fallstricke zu vermeiden. Heute werde ich eine Bestandsaufnahme einiger h?ufiger Probleme und einführender Lernmethoden für die Flugbahnvorhersage machen! Einführungsbezogenes Wissen 1. Sind die Vorschaupapiere in Ordnung? A: Schauen Sie sich zuerst die Umfrage an, S

Rezension! Tiefe Modellfusion (LLM/Basismodell/Verbundlernen/Feinabstimmung usw.) Rezension! Tiefe Modellfusion (LLM/Basismodell/Verbundlernen/Feinabstimmung usw.) Apr 18, 2024 pm 09:43 PM

Am 23. September wurde das Papier ?DeepModelFusion:ASurvey“ von der National University of Defense Technology, JD.com und dem Beijing Institute of Technology ver?ffentlicht. Deep Model Fusion/Merging ist eine neue Technologie, die die Parameter oder Vorhersagen mehrerer Deep-Learning-Modelle in einem einzigen Modell kombiniert. Es kombiniert die F?higkeiten verschiedener Modelle, um die Verzerrungen und Fehler einzelner Modelle zu kompensieren und so eine bessere Leistung zu erzielen. Die tiefe Modellfusion bei gro? angelegten Deep-Learning-Modellen (wie LLM und Basismodellen) steht vor einigen Herausforderungen, darunter hohe Rechenkosten, hochdimensionaler Parameterraum, Interferenzen zwischen verschiedenen heterogenen Modellen usw. Dieser Artikel unterteilt bestehende Methoden zur Tiefenmodellfusion in vier Kategorien: (1) ?Musterverbindung“, die L?sungen im Gewichtsraum über einen verlustreduzierenden Pfad verbindet, um eine bessere anf?ngliche Modellfusion zu erzielen

Das erste Weltmodell zur Erzeugung autonomer Fahrszenen mit mehreren Ansichten | DrivingDiffusion: Neue Ideen für BEV-Daten und Simulation Das erste Weltmodell zur Erzeugung autonomer Fahrszenen mit mehreren Ansichten | DrivingDiffusion: Neue Ideen für BEV-Daten und Simulation Oct 23, 2023 am 11:13 AM

Einige pers?nliche Gedanken des Autors Im Bereich des autonomen Fahrens sind mit der Entwicklung BEV-basierter Teilaufgaben/End-to-End-L?sungen hochwertige Multi-View-Trainingsdaten und der entsprechende Aufbau von Simulationsszenen immer wichtiger geworden. Als Reaktion auf die Schwachstellen aktueller Aufgaben kann ?hohe Qualit?t“ in drei Aspekte zerlegt werden: Long-Tail-Szenarien in verschiedenen Dimensionen: z. B. Nahbereichsfahrzeuge in Hindernisdaten und pr?zise Kurswinkel beim Schneiden von Autos sowie Spurliniendaten . Szenen wie Kurven mit unterschiedlichen Krümmungen oder Rampen/Zusammenführungen/Zusammenführungen, die schwer zu erfassen sind. Diese basieren h?ufig auf der Sammlung gro?er Datenmengen und komplexen Data-Mining-Strategien, die kostspielig sind. Echter 3D-Wert – hochkonsistentes Bild: Die aktuelle BEV-Datenerfassung wird h?ufig durch Fehler bei der Sensorinstallation/-kalibrierung, hochpr?zisen Karten und dem Rekonstruktionsalgorithmus selbst beeintr?chtigt. das hat mich dazu geführt

GSLAM |. Eine allgemeine SLAM-Architektur und ein Benchmark GSLAM |. Eine allgemeine SLAM-Architektur und ein Benchmark Oct 20, 2023 am 11:37 AM

Pl?tzlich wurde ein 19 Jahre altes Papier namens GSLAM: A General SLAM Framework and Benchmark mit offenem Quellcode entdeckt: https://github.com/zdzhaoyong/GSLAM Gehen Sie direkt zum Volltext und spüren Sie die Qualit?t dieser Arbeit~1 Zusammenfassung der SLAM-Technologie hat in letzter Zeit viele Erfolge erzielt und die Aufmerksamkeit vieler High-Tech-Unternehmen auf sich gezogen. Es bleibt jedoch eine Frage, wie eine Schnittstelle zu bestehenden oder neuen Algorithmen hergestellt werden kann, um ein Benchmarking hinsichtlich Geschwindigkeit, Robustheit und Portabilit?t effizient durchzuführen. In diesem Artikel wird eine neue SLAM-Plattform namens GSLAM vorgeschlagen, die nicht nur Evaluierungsfunktionen bietet, sondern Forschern auch eine nützliche M?glichkeit bietet, schnell ihre eigenen SLAM-Systeme zu entwickeln.

Mehr als nur 3D-Gau?! Aktueller überblick über modernste 3D-Rekonstruktionstechniken Mehr als nur 3D-Gau?! Aktueller überblick über modernste 3D-Rekonstruktionstechniken Jun 02, 2024 pm 06:57 PM

Oben geschrieben & Nach pers?nlichem Verst?ndnis des Autors ist die bildbasierte 3D-Rekonstruktion eine anspruchsvolle Aufgabe, bei der aus einer Reihe von Eingabebildern auf die 3D-Form eines Objekts oder einer Szene geschlossen werden muss. Lernbasierte Methoden haben wegen ihrer F?higkeit, 3D-Formen direkt abzusch?tzen, Aufmerksamkeit erregt. Dieser übersichtsartikel konzentriert sich auf modernste 3D-Rekonstruktionstechniken, einschlie?lich der Generierung neuartiger, unsichtbarer Ansichten. Es wird ein überblick über die jüngsten Entwicklungen bei Gau?schen Splash-Methoden gegeben, einschlie?lich Eingabetypen, Modellstrukturen, Ausgabedarstellungen und Trainingsstrategien. Auch ungel?ste Herausforderungen und zukünftige Ausrichtungen werden besprochen. Angesichts der rasanten Fortschritte auf diesem Gebiet und der zahlreichen M?glichkeiten zur Verbesserung der 3D-Rekonstruktionsmethoden scheint eine gründliche Untersuchung des Algorithmus von entscheidender Bedeutung zu sein. Daher bietet diese Studie einen umfassenden überblick über die jüngsten Fortschritte in der Gau?schen Streuung. (Wischen Sie mit dem Daumen nach oben

See all articles