原文:End-to-End Deep Learning for Self-Driving Cars
翻譯:KK4SBB
在最近的一款汽車應(yīng)用產(chǎn)品中嘀粱,我們用卷積神經(jīng)網(wǎng)絡(luò)(CNNs)將車前部攝像頭捕捉到的原始像素圖映射為汽車的方向操控命令锋叨。這種強(qiáng)大的端到端技術(shù)意味著,只需要人們提供少量的訓(xùn)練數(shù)據(jù)薄湿,系統(tǒng)就能自動(dòng)學(xué)會(huì)駕駛技術(shù)豺瘤,無論有沒有車道標(biāo)志線,無論是在普通公路還是高速公路听诸。這套系統(tǒng)還可以工作在視線不清晰的區(qū)域坐求,比如停車場(chǎng)或者崎嶇的道路上。
圖1:行駛中的NVIDIA自動(dòng)駕駛汽車
我們?cè)O(shè)計(jì)的這套端到端學(xué)習(xí)系統(tǒng)使用了NVIDIA DevBox晌梨,用Torch 7進(jìn)行訓(xùn)練桥嗤。一臺(tái)?NVIDIA DRIVE PX?自動(dòng)駕駛汽車計(jì)算機(jī)用于判斷汽車行駛的方向,工作時(shí)它每秒需要處理30幀的數(shù)據(jù)仔蝌,同樣使用Torch 7處理泛领。這套系統(tǒng)經(jīng)過訓(xùn)練,自動(dòng)學(xué)會(huì)了方向操縱指令的表達(dá)盒粮,比如檢測(cè)有效道路的特征讼油,輸入的訓(xùn)練信號(hào)僅僅只是人工操控方向盤的角度辰晕。我們并沒有直接訓(xùn)練這個(gè)系統(tǒng)來識(shí)別道路邊界等特征。相反的,不同于直接人工將問題拆解倍阐,比如拆解成車道標(biāo)記檢測(cè)使套、線路規(guī)劃、車輛控制等子任務(wù)匙握,我們的端到端系統(tǒng)同時(shí)能優(yōu)化所有的操縱過程。
我們相信應(yīng)用端到端的學(xué)習(xí)方法能取得更好的效果半等,系統(tǒng)也將變得更小巧切距。效果更好是因?yàn)閮?nèi)部組件自動(dòng)地對(duì)系統(tǒng)全局性能做了優(yōu)化蔚叨,而不只是優(yōu)化人們選擇的條件標(biāo)準(zhǔn),比如車道檢查。這類可解釋的標(biāo)準(zhǔn)雖然易于人的理解灸异,但并不能保證系統(tǒng)處于全局最優(yōu)狀態(tài)逻淌。更小巧的系統(tǒng)是因?yàn)檎麄€(gè)系統(tǒng)學(xué)習(xí)用最少的處理步驟來解決問題。
這篇文章是基于NVIDIA的論文《End to End Learning for Self-Driving Cars》疟暖。具體細(xì)節(jié)可以參考論文原文俐巴。
卷積神經(jīng)網(wǎng)絡(luò)處理視覺數(shù)據(jù)
卷積神經(jīng)網(wǎng)絡(luò)模型[1]顛覆了計(jì)算機(jī)模式識(shí)別領(lǐng)域[2]。在CNNs被廣泛應(yīng)用前,大多數(shù)的識(shí)別任務(wù)都是先經(jīng)過人工特征提取步驟亡鼠,然后用分類器判斷举哟。CNNs的重大突破在于它能自動(dòng)地從訓(xùn)練樣本中學(xué)習(xí)特征。由于卷積運(yùn)算能夠捕捉圖像的二維屬性迅矛,CNN方法在圖像識(shí)別任務(wù)上尤其顯得強(qiáng)大妨猩。用卷積核掃描整張圖片之后,需要學(xué)習(xí)的參數(shù)比原來大大減少诬乞。
盡管CNNs模型已經(jīng)被商業(yè)化使用了二十多年[3]册赛,但直到近些年才被大規(guī)模地應(yīng)用,這主要是因?yàn)閮身?xiàng)重要的突破震嫉。首先森瘪,大規(guī)模的人工標(biāo)注數(shù)據(jù)集很容易獲取,比如ImageNet大規(guī)模視覺識(shí)別挑戰(zhàn)(ILSVRC)[4]票堵,這些數(shù)據(jù)可以作為訓(xùn)練集和驗(yàn)證集扼睬。其次,CNN學(xué)習(xí)算法現(xiàn)在能夠在大規(guī)模并行圖形處理單元(GPUs)上運(yùn)行悴势,極大地提高了學(xué)習(xí)效率和預(yù)測(cè)能力窗宇。
我們這里所講述的CNNs模型不局限于基本的模式識(shí)別。我們開發(fā)了一套系統(tǒng)特纤,可以學(xué)習(xí)自動(dòng)駕駛汽車的整個(gè)工作流程军俊。這個(gè)項(xiàng)目的基礎(chǔ)工作十年前在國防高級(jí)研究項(xiàng)目機(jī)構(gòu)(Defense Advanced Research Projects Agency,DARPA )的自動(dòng)化車輛項(xiàng)目中就已經(jīng)完成捧存,這個(gè)項(xiàng)目被稱為DAVE[5]粪躬,此項(xiàng)目中一輛微縮的遙控車行駛通過擺放了障礙物的小路。DAVE使用在了類似環(huán)境下采集的若干個(gè)小時(shí)的人工駕駛數(shù)據(jù)進(jìn)行訓(xùn)練昔穴,但環(huán)境并不完全相同镰官。訓(xùn)練數(shù)據(jù)包括兩臺(tái)攝像機(jī)采集的視頻數(shù)據(jù)和人操控方向的命令。
在許多方面吗货,DAVE的靈感都來自于Pomerleau開創(chuàng)性的工作[6]泳唠,Pomerleau在1989年用神經(jīng)網(wǎng)絡(luò)搭建了一套自動(dòng)駕駛系統(tǒng)(Autonomous Land Vehicle in a Neural Network,ALVINN)宙搬。ALVINN是DAVE的先驅(qū)產(chǎn)品笨腥,它首次證實(shí)了端到端訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型終將在某一天能夠操控汽車行駛在公路上。DAVE展示了端到端的學(xué)習(xí)潛能勇垛,而且它還用來證明DARPA Learning Applied to Ground Robots 項(xiàng)目的啟動(dòng)抄肖,但是DAVE的性能不足夠可靠共啃,在非公路環(huán)境下不能完全替代多模塊方式的駕駛翻斟。(在復(fù)雜環(huán)境下芦圾,DAVE在碰撞之間的平均距離約有20米哟沫。)
大約在一年之前我們開始重新著力于提升原始版DAVE的性能,構(gòu)建一套能夠在公路上駕駛的強(qiáng)健系統(tǒng)电禀。這項(xiàng)工作的初始動(dòng)機(jī)是為了避免識(shí)別特定的人工設(shè)計(jì)特征標(biāo)志扣甲,比如車道標(biāo)記、隔離護(hù)欄和其它車輛币砂,也避免基于這些觀察到的特征指定一套“如果……那么……否則……”的規(guī)則系統(tǒng)建峭。我們很高興能夠分享這一新的努力的初步結(jié)果,即DAVE-2决摧。
DAVE-2系統(tǒng)
圖2展示了DAVE-2系統(tǒng)的訓(xùn)練數(shù)據(jù)采集模塊的塊狀示意圖亿蒸。數(shù)據(jù)采集車的擋風(fēng)玻璃后面固定了三臺(tái)攝像機(jī),在攝像機(jī)采集視頻數(shù)據(jù)的同時(shí)掌桩,此系統(tǒng)也記錄駕駛員操控方向盤的偏轉(zhuǎn)角度边锁。方向控制命令是從汽車的控制網(wǎng)絡(luò)(Controller Area Network,CAN)總線獲取波岛。為了使我們的系統(tǒng)能夠獨(dú)立于汽車的幾何尺寸茅坛,我們用1/r來表示方向控制命令,其中r是以米為單位的轉(zhuǎn)彎半徑则拷。我們使用1/r而不是r的目的是防止在直線行駛時(shí)出現(xiàn)奇點(diǎn)(直線行駛的轉(zhuǎn)彎半徑無限大)贡蓖。左轉(zhuǎn)彎的1/r值為負(fù)數(shù),右轉(zhuǎn)彎的值為正數(shù)煌茬。
訓(xùn)練數(shù)據(jù)包括從視頻中采樣得到的單幀視頻斥铺,以及對(duì)應(yīng)的方向控制命令(1/r)。只用駕駛員操作的數(shù)據(jù)訓(xùn)練遠(yuǎn)遠(yuǎn)不夠坛善;網(wǎng)絡(luò)模型還需要學(xué)習(xí)如何糾正錯(cuò)誤的操作晾蜘,否則汽車就會(huì)慢慢偏離公路了。于是浑吟,訓(xùn)練數(shù)據(jù)額外補(bǔ)充了大量圖像笙纤,包括汽車從車道中心的各種偏移和轉(zhuǎn)彎。
兩個(gè)特定的偏離中心的圖像可以從左和右兩臺(tái)相機(jī)得到组力。攝像機(jī)之間的其它偏離以及所有的旋轉(zhuǎn)都靠臨近攝像機(jī)的視角變換來仿真省容。精確的視角轉(zhuǎn)換需要具備3D場(chǎng)景的知識(shí),而我們卻不具備這些知識(shí)燎字,因此我們假設(shè)所有低于地平線的點(diǎn)都在地平面上腥椒,所有地平線以上的點(diǎn)都在無限遠(yuǎn)處,以此來近似地估計(jì)視角變換候衍。在平坦的地區(qū)這種方法沒問題笼蛛,但是對(duì)于更完整的渲染,會(huì)造成地面上物體的扭曲蛉鹿,比如汽車滨砍、樹木和建筑等。幸運(yùn)的是這些扭曲對(duì)網(wǎng)絡(luò)模型訓(xùn)練并無大礙。方向控制會(huì)根據(jù)變換后的圖像迅速得到修正惋戏,使得汽車能在兩秒之內(nèi)回到正確的位置和方向领追。
圖3是我們的訓(xùn)練系統(tǒng)。圖像輸入到CNN網(wǎng)絡(luò)計(jì)算方向控制命令响逢。預(yù)測(cè)的方向控制命令與理想的控制命令相比較绒窑,然后調(diào)整CNN模型的權(quán)值使得預(yù)測(cè)值盡可能接近理想值。權(quán)值調(diào)整是由機(jī)器學(xué)習(xí)庫Torch 7的后向傳播算法完成舔亭。
圖3:訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型
訓(xùn)練完成后些膨,模型可以用中心的單個(gè)攝像機(jī)數(shù)據(jù)生成方向控制命令。圖4顯示了這個(gè)過程钦铺。
圖4:訓(xùn)練得到的模型可以用正前方的單個(gè)攝像機(jī)的數(shù)據(jù)生成方向控制命令订雾。
數(shù)據(jù)采集
訓(xùn)練數(shù)據(jù)是在各種路段和不同燈光和天氣條件下采集得到的。我們?cè)谛聺晌髦葜胁坎杉值缆访鏀?shù)據(jù)职抡,在伊利諾伊葬燎、密歇根、賓夕法尼亞和紐約州采集高速公路的數(shù)據(jù)缚甩。其它道路類別包括兩車道道路(有車道標(biāo)志或者沒有標(biāo)志)谱净,路邊有車停放的居民區(qū)道路,隧道和不平整道路擅威。采集數(shù)據(jù)時(shí)的天氣狀況有晴天壕探、多云、霧天郊丛、雪天和雨天李请,白天和晚上都有。在某些情況下厉熟,太陽接近地平線导盅,導(dǎo)致有路面反射的光線和擋風(fēng)玻璃的散射。
我們采集數(shù)據(jù)的車輛是2016款 Lincoln MKZ揍瑟,或者2013款Ford Focus白翻,后者攝像頭的安放位置與前者相似。我們的系統(tǒng)不依賴與任何的汽車制造商或是型號(hào)绢片。我們要求駕駛員盡可能地集中注意力滤馍。截止2016年3月28日,共采集了72小時(shí)的行駛數(shù)據(jù)底循。
網(wǎng)絡(luò)結(jié)構(gòu)
我們訓(xùn)練網(wǎng)絡(luò)的權(quán)重值巢株,使得網(wǎng)絡(luò)模型輸出的方向控制命令與人工駕駛或者調(diào)整后的控制命令的均方誤差最小。圖5是網(wǎng)絡(luò)的結(jié)構(gòu)圖熙涤,一共包括九層阁苞,包括一個(gè)歸一化層困檩,五個(gè)卷積層和三個(gè)全連接層。輸入圖像被映射到Y(jié)UV平面那槽,然后傳入網(wǎng)絡(luò)窗看。
圖5:CNN結(jié)構(gòu)。這個(gè)網(wǎng)絡(luò)有大約2700萬個(gè)連接和25萬個(gè)參數(shù)倦炒。
網(wǎng)絡(luò)的第一層對(duì)輸入圖像做歸一化。歸一化層是硬編碼的软瞎,在學(xué)習(xí)過程中不會(huì)變化逢唤。在網(wǎng)絡(luò)模型中進(jìn)行歸一化可以使得歸一化過程根據(jù)網(wǎng)絡(luò)結(jié)構(gòu)調(diào)整,而且能用GPU加速處理過程涤浇。
卷積層是用來提取特征的鳖藕,它是根據(jù)一些列參數(shù)實(shí)驗(yàn)的結(jié)果憑經(jīng)驗(yàn)選擇的。然后我們對(duì)前三個(gè)卷積層使用了strided卷積只锭,其中stride是2x2著恩,卷積核是5x5,后兩層選用了unstrided卷積蜻展,卷積核是3x3喉誊。
在五層卷積之后又接了三個(gè)全連接層,最后輸出一個(gè)控制數(shù)字纵顾,即轉(zhuǎn)彎半徑的倒數(shù)伍茄。全連接層的設(shè)計(jì)意圖是作為方向控制器,但是我們發(fā)現(xiàn)用端到端的方式訓(xùn)練系統(tǒng)施逾,網(wǎng)絡(luò)模型的特征提取器和控制器這兩部分很難明確地區(qū)分開來敷矫。
訓(xùn)練細(xì)節(jié)
數(shù)據(jù)選擇
訓(xùn)練神經(jīng)網(wǎng)絡(luò)的第一步就是選擇使用視頻的哪些幀。我們采集的數(shù)據(jù)標(biāo)記了道路類型汉额、天氣條件曹仗、駕駛員行為(保持車道行駛、更換車道蠕搜、轉(zhuǎn)彎等等)等標(biāo)簽怎茫。用CNN訓(xùn)練保持車道的行駛,我們就只挑選駕駛員保持同一車道行駛的數(shù)據(jù)讥脐,拋棄剩余部分遭居。然后我們以10FPS對(duì)視頻降采樣,因?yàn)橛酶卟蓸勇实玫降膱D像相似度非常高旬渠,并不能帶來很多有用的信息俱萍。為了消除直線行駛的偏置,很大一部分訓(xùn)練圖像包含了有弧度的道路告丢。
數(shù)據(jù)補(bǔ)充
選定最終的圖像集之后枪蘑,我們?nèi)斯ぬ砑恿艘恍┢坪托D(zhuǎn)來補(bǔ)充數(shù)據(jù)损谦,教會(huì)網(wǎng)絡(luò)如何修復(fù)較差的姿勢(shì)和視角。調(diào)整的幅度按照正態(tài)分布隨機(jī)選取岳颇。分布的均值為零照捡,標(biāo)準(zhǔn)差是駕駛員操作數(shù)據(jù)的標(biāo)準(zhǔn)差的兩倍。人工補(bǔ)充的數(shù)據(jù)隨著幅度的增加確實(shí)會(huì)引入一些不理想的因素(正如我們之前提到的)话侧。
仿真
在上路測(cè)試訓(xùn)練得到的CNN之前栗精,我們首先仿真測(cè)試網(wǎng)絡(luò)的性能。圖6是簡化的仿真系統(tǒng)瞻鹏,圖7是交互式仿真器的界面截圖悲立。
圖6:駕駛仿真器的示意圖。
仿真器采用預(yù)先用數(shù)據(jù)采集車的前置攝像機(jī)錄制的視頻數(shù)據(jù)新博,然后根據(jù)圖像用CNN模型預(yù)測(cè)操控命令薪夕。這些錄制視頻的時(shí)間軸與駕駛員操控命令的時(shí)間軸保持一致。
由于駕駛員不總是將車輛保持在車道的中心赫悄,我們必須人工校準(zhǔn)車道的中心原献,因?yàn)樗c模擬器所采用的視頻的每一幀都關(guān)聯(lián)。我們把這個(gè)姿態(tài)稱為“對(duì)照數(shù)據(jù)”埂淮。
模擬器對(duì)原始圖像做了變形來模仿車輛偏離對(duì)照姿態(tài)姑隅。請(qǐng)注意,這種變形也包括了駕駛員行駛路徑與對(duì)照數(shù)據(jù)之間的任何差異同诫。圖像變形的方法在前幾節(jié)已經(jīng)介紹過了粤策。
模擬器讀取保存的測(cè)試視頻,以及與拍攝視頻同步記錄的方向控制命令误窖。該模擬器發(fā)送所選擇的測(cè)試視頻的第一幀叮盘,針對(duì)任何偏離對(duì)照數(shù)據(jù)的情況做修正,然后輸入到訓(xùn)練好的CNN模型霹俺,模型輸出一條操控指令柔吼。模型輸出的命令與存儲(chǔ)的駕駛員操控命令一起被送入車輛的動(dòng)態(tài)模型,更新仿真車輛的位置和方向丙唧。
圖7:模擬器交互模式的截圖愈魏。右側(cè)是操縱性能的文字描述評(píng)價(jià)。左側(cè)綠色區(qū)域是由于視角變換導(dǎo)致的不可見區(qū)域想际。地平線下方明亮的矩形區(qū)域就是傳入CNN模型的圖像培漏。
接著,模擬器調(diào)整測(cè)試視頻的下一幀圖像胡本,使得所呈現(xiàn)的圖像如同是CNN模型輸出的操縱命令所控制的結(jié)果牌柄。新的圖像又被傳回CNN模型,重復(fù)處理過程侧甫。
模擬器記錄車輛偏離距離(車輛偏離車道中心的距離)珊佣,偏航角度和仿真車輛的行駛距離蹋宦。當(dāng)偏離中心的距離超過一米時(shí),就會(huì)觸發(fā)虛擬人的干預(yù)咒锻,仿真車輛的位置和方向就會(huì)重置成原視頻對(duì)應(yīng)幀的對(duì)照數(shù)據(jù)冷冗。
評(píng)測(cè)
我們分兩步來評(píng)測(cè)我們的網(wǎng)絡(luò)模型:首先是仿真測(cè)試,接著是上路測(cè)試惑艇。
在仿真階段蒿辙,我們使用了在新澤西州蒙茅斯縣錄制的視頻數(shù)據(jù),總共大約持續(xù)三個(gè)小時(shí)滨巴,行駛了100英里须板。測(cè)試數(shù)據(jù)在各種燈光和天氣條件下采集,包括了高速公路兢卵、普通公路和居民區(qū)道路。
我們通過計(jì)算虛擬人干預(yù)車輛行駛的次數(shù)來估計(jì)網(wǎng)絡(luò)模型能夠自動(dòng)駕駛汽車的時(shí)間段占比绪颖。我們假設(shè)在現(xiàn)實(shí)情況下發(fā)生一次人工干預(yù)需要六秒:這個(gè)時(shí)間包括駕駛員接管操縱車輛秽荤、糾正車輛位置、重新進(jìn)入自動(dòng)駕駛模式柠横。我們是這樣計(jì)算自動(dòng)駕駛比例的窃款,把人工干預(yù)的次數(shù)乘以六秒,除以總的模擬時(shí)間牍氛,然后與1相減:
因此晨继,如果觸發(fā)了100次干預(yù)耗時(shí)600秒,自動(dòng)駕駛的比例為
上路測(cè)試
當(dāng)網(wǎng)絡(luò)模型訓(xùn)練得到較好的性能之后搬俊,我們把它加載到測(cè)試車輛的DRIVE PX上紊扬,進(jìn)行上路測(cè)試。我們用車輛自動(dòng)駕駛的時(shí)間比例來衡量性能唉擂。這個(gè)時(shí)間不包括變換車道和轉(zhuǎn)彎餐屎。以我們位于霍姆德爾的辦公室到大西洋高地的一趟普通行程為例,大約有98%的時(shí)間保持自動(dòng)駕駛玩祟。我們也在花園州際公路(一條有坡度的多車道高速公路)上完成了10英里的自動(dòng)駕駛腹缩。
視頻:https://youtu.be/NJU9ULQUwng(自備云梯)
CNN模型內(nèi)部狀態(tài)可視化
圖8和圖9分別展示了兩張不同輸入圖片在前兩層網(wǎng)絡(luò)的激活狀態(tài),分別是在土路上和森林里空扎。在土路的例子中藏鹊,特征圖片清晰地勾畫出路的邊界,而在森林的例子中夾雜了大量噪音转锈,CNN模型從圖中找不到有用的信息
這表明CNN自動(dòng)學(xué)會(huì)了識(shí)別有用的道路特征盘寡,只提供人工操控方向的角度作為訓(xùn)練信號(hào)。我們從未直接訓(xùn)練模型來識(shí)別道路邊界黑忱。
圖8:CNN模型眼中的土路宴抚。上方:由攝像機(jī)輸入CNN模型的圖像勒魔。左下:第一層特征映射的激活狀態(tài)。右下:第二層特征映射的激活狀態(tài)菇曲。
圖9:沒有路的圖片示例冠绢。前兩層特征映射幾乎都是噪聲,CNN模型無法從圖片中識(shí)別出有用的特征常潮。
總結(jié)
我們的經(jīng)驗(yàn)表明弟胀,神經(jīng)網(wǎng)絡(luò)能學(xué)習(xí)完整的保持車道駕駛的任務(wù),而不需要人工將任務(wù)分解為道路和車道檢測(cè)喊式、語義抽象孵户、道路規(guī)劃和控制。從不到一百小時(shí)的少量訓(xùn)練數(shù)據(jù)就足以訓(xùn)練在各種條件下操控車輛岔留,比如在高速公路夏哭、普通公路和居民區(qū)道路,以及晴天献联、多云和雨天等天氣狀況竖配。CNN模型可以從非常稀疏的訓(xùn)練信號(hào)(只有方向控制命令)中學(xué)到有意義的道路特征。
例如里逆,系統(tǒng)不需要標(biāo)注數(shù)據(jù)就學(xué)會(huì)了識(shí)別道路邊界进胯。
還需要做大量工作來提升網(wǎng)絡(luò)模型的健壯性,尋找驗(yàn)證系統(tǒng)健壯性的方法原押,以及提升網(wǎng)絡(luò)內(nèi)部狀態(tài)可視化的程度胁镐。
參考文獻(xiàn)
Y. LeCun, B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard, and L. D. Jackel. Backprop- agation applied to handwritten zip code recognition. Neural Computation, 1(4):541–551, Winter 1989. URL:http://yann.lecun.org/exdb/publis/pdf/lecun-89e.pdf.
Alex Krizhevsky, Ilya Sutskever, and Geoffrey E. Hinton. Imagenet classification with deep convolutional neural networks. In F. Pereira, C. J. C. Burges, L. Bottou, and K. Q. Weinberger, editors, Advances in Neural Information Processing Systems 25, pages 1097–1105. Curran Associates, Inc., 2012. URL:?http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf.
L. D. Jackel, D. Sharman, Stenard C. E., Strom B. I., , and D Zuckert. Optical character recognition for self-service banking. AT&T Technical Journal, 74(1):16–24, 1995.
Large scale visual recognition challenge (ILSVRC). URL:?http://www.image-net.org/challenges/LSVRC/.
Net-Scale Technologies, Inc. Autonomous off-road vehicle control using end-to-end learning, July 2004. Final technical report. URL:?http://net-scale.com/doc/net-scale-dave-report.pdf.
Dean A. Pomerleau. ALVINN, an autonomous land vehicle in a neural network. Technical report, Carnegie Mellon University, 1989. URL:?http://repository.cmu.edu/cgi/viewcontent. cgi?article=2874&context=compsci.
Danwei Wang and Feng Qi. Trajectory planning for a four-wheel-steering vehicle. In Proceedings of the 2001 IEEE International Conference on Robotics & Automation, May 21–26 2001. URL:http://www.ntu.edu.sg/home/edwwang/confpapers/wdwicar01.pdf.