點(diǎn)擊上方“AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)

FiftyOne是一個(gè)開源的可視化數(shù)據(jù)集分析工具,最近添加了Jupyter notebook支持,該功能是我實(shí)現(xiàn)的,并且是其技術(shù)主管。- FiftyOne:http://fiftyone.ai/
完成后,我著手撰寫一篇文章,描述此功能的重要性——為什么自動(dòng)屏幕截圖非常適合與他人共享你的視覺發(fā)現(xiàn),為什么將代碼及其通常的視覺輸出放在一個(gè)地方對(duì)于CV / ML如此重要,以及如何在notebook使用FiftyOne 可以開啟notebook為CV / ML工程師和研究人員建立的更多范例。本文希望做到所有這些事情,但從本質(zhì)上講,當(dāng)我了解科學(xué)notebook的歷史時(shí),它也朝著另一個(gè)方向發(fā)展。從科學(xué)研究本身開始的歷史。FiftyOne希望以此為基礎(chǔ)。CV / ML社區(qū)需要比Jupyter Notebook更多的東西來進(jìn)行視覺研究和分析。
本文的最后一部分是在notebook中使用FiftyOne的分步指南,可幫助你發(fā)現(xiàn)可視數(shù)據(jù)集的問題。整個(gè)部分也可以通過Google的Colab找到。- Google’s Colab:https://colab.research.google.com/github/voxel51/fiftyone-examples/blob/master/examples/digging_into_coco.ipynb
我們將看到如何用很少的代碼行來確認(rèn)圖像檢測(cè)模型的常見故障模式并識(shí)別注釋錯(cuò)誤,同時(shí)在每一步的結(jié)果可視化的同時(shí)。但是在此之前,我會(huì)解釋為什么CV / ML社區(qū)需要比Jupyter Notebook更多的東西來進(jìn)行視覺研究和分析。科學(xué)狀態(tài)
科學(xué)論文的協(xié)同效率已經(jīng)到達(dá)了瓶頸。
2018年4月,《大西洋》發(fā)表了一篇文章,宣布我們所知道的科學(xué)論文已經(jīng)過時(shí)。實(shí)際上,這可能只是一個(gè)故意的預(yù)測(cè),或者至少是互聯(lián)網(wǎng)毫不客氣的一種夸張說法。但是它勾勒出的科學(xué)出版歷史是無可爭(zhēng)議的。- 文章地址:https://www.theatlantic.com/science/archive/2018/04/the-scientific-paper-is-obsolete/556676/
在科學(xué)論文創(chuàng)建近400年之后,其協(xié)作效率已達(dá)到瓶頸。大量的科研人員在闡述該文章時(shí)取得了穩(wěn)定的進(jìn)步。現(xiàn)在已不適合時(shí)代?,F(xiàn)在,成百上千的研究人員在一個(gè)領(lǐng)域發(fā)表論文,而不是幾十人。結(jié)果往往不再是手工計(jì)算,而是由計(jì)算機(jī)、軟件和曾經(jīng)難以理解的數(shù)據(jù)集來計(jì)算。由于這種論文發(fā)表的規(guī)模,可重復(fù)性現(xiàn)在比以往任何時(shí)候都變得更加重要。但通常情況下,為使研究人員能夠重現(xiàn)自己的研究成果而采取的措施是不夠的。通常情況下,提供的代碼和數(shù)據(jù)是不完整的,如果提供了代碼和數(shù)據(jù),并且使用豐富的動(dòng)態(tài)可視化語(yǔ)言描述復(fù)雜思想,這種動(dòng)態(tài)可視化語(yǔ)言是用抽象的語(yǔ)言和簡(jiǎn)化的靜態(tài)圖表來描述的。共享研究的方式與完成研究的方式不再匹配。Wolfram的圍墻花園
現(xiàn)代研究的計(jì)算復(fù)雜性和規(guī)模一直是科學(xué)進(jìn)步和技術(shù)創(chuàng)新的福音。與科學(xué)研究論文的頑固形式(即PDF)并列在一起,幾十年來,這也是一個(gè)公認(rèn)的問題。不過,一個(gè)解決方案已經(jīng)存在了數(shù)十年。一種以相同方式甚至相同形式完成研究并共享的解決方案。該解決方案誕生于1988年,當(dāng)時(shí)由史蒂芬·沃爾夫拉姆(Steven Wolfram)創(chuàng)立的沃爾夫拉姆研究中心(Wolfram Research)發(fā)布了Mathematica,成為了計(jì)算的“notebook” 。該界面由西奧多·格雷(Theodore Gray)牽頭,由早期的蘋果代碼編輯器提供了信息,并且部分由史蒂夫·喬布斯(Steve Jobs)協(xié)助制定。Wolfram Mathematica的版本1,于1988年發(fā)布。由Stephen Wolfram Blog提供。三十多年來,Mathematica一直在增加它可以為你解答的問題,可以可視化數(shù)據(jù)的數(shù)字方式以及可以使用的數(shù)據(jù)量。但是,自推出的第一個(gè)十年以來,增長(zhǎng)一直很緩慢。許可證價(jià)格昂貴,發(fā)布商不想使用它們,而Mathematica支持的功能始于Wolfram Research。這是一個(gè)美麗而功能強(qiáng)大的圍墻花園(Walled Garden)。Python,Jupyter
隨著Mathematica繼續(xù)朝著追求完美的方向前進(jìn),2001年初,物理學(xué)專業(yè)的研究生FernandoPérez發(fā)現(xiàn)自己對(duì)自己的研究能力已經(jīng)感到厭倦,即使Mathematica任其支配也是如此。在《大西洋彼岸一書中,他迷上了新的編程語(yǔ)言Python,并在另外兩名研究生的幫助下開始了一個(gè)名為IPython的項(xiàng)目,即 Jupyter 項(xiàng)目的基礎(chǔ)。Jupyter并非在“技術(shù)層面”上而是在“社會(huì)層面”上勝過Mathematica。
如今,Jupyter Notebook電腦的核心是Jupyter Notebook電腦。像Mathematica一樣*,* Jupyter Notebook鼓勵(lì)科學(xué)探索。但是與Mathematica不同*,它是任何人都可以貢獻(xiàn)的開源項(xiàng)目。Jupyter并非在“技術(shù)層面”上而是在“社會(huì)層面”上勝過Mathematica*,正如諾貝爾獎(jiǎng)獲得者Paul Romer所指出的那樣。Jupyter Notebooks的形式由活躍的開發(fā)人員和用戶社區(qū)決定。計(jì)算機(jī)視覺領(lǐng)域完全屬于科學(xué)研究領(lǐng)域。多年來,學(xué)術(shù)界和行業(yè)研究人員都在Jupyter Notebook電腦中發(fā)現(xiàn)了難以置信的價(jià)值。單個(gè)數(shù)據(jù)片段通常是圖像和視頻本身,需要對(duì)其進(jìn)行查看和觀看。notebook電腦提供了。可共享的可視化需要共享。notebook電腦提供了。Jupyter的開放生態(tài)系統(tǒng)允許開發(fā)人員輕松添加任何缺失的集成。TensorBoard可以嵌入Jupyter Notebook中,用于對(duì)象檢測(cè)實(shí)驗(yàn)。像matplotlib和opencv這樣的軟件包可用于顯示需要檢查的圖像和視頻。在訓(xùn)練機(jī)器學(xué)習(xí)模型時(shí),類似tensorboard的軟件包會(huì)提供示例可視化,將圖像檢查擴(kuò)展到實(shí)驗(yàn)跟蹤的范圍內(nèi)。matplotlib,opencv,tensorboard,和其他無數(shù)Python包與可視化功能都可以在Jupyter Notebook電腦中使用。理解數(shù)據(jù)質(zhì)量需要對(duì)數(shù)據(jù)趨勢(shì)有深刻的了解。
但是,在CV / ML中,使用Jupyter Notebook時(shí)仍然存在一個(gè)明顯的問題。數(shù)據(jù)質(zhì)量對(duì)于構(gòu)建出色的模型至關(guān)重要。要了解數(shù)據(jù)質(zhì)量,就需要對(duì)數(shù)據(jù)趨勢(shì)進(jìn)行明智的了解。僅僅看一個(gè)甚至十幾個(gè)圖像幾乎總是不足以了解模型的性能和故障模式。此外,在ground truth或gold standard標(biāo)簽中識(shí)別可能只在1,000張甚至100,000張圖像中出現(xiàn)的單個(gè)錯(cuò)誤,需要對(duì)數(shù)據(jù)集進(jìn)行快速切片和切割,以縮小問題范圍。從根本上說,目前還缺乏能夠自然地處理notebook中可視化數(shù)據(jù)集的工具來解決這類問題。FiftyOne和Jupyter
“ FiftyOne是什么?”。這是一個(gè)開放源代碼的CV / ML項(xiàng)目,希望解決工業(yè)和學(xué)術(shù)界的CV / ML研究人員面臨的許多實(shí)際問題和工具問題。這是我寫這篇文章的原因,也是我認(rèn)為計(jì)算notebook的歷史包含寶貴經(jīng)驗(yàn)的原因。作為FiftyOne的開發(fā)人員,我很欣賞它所鼓勵(lì)的研究質(zhì)量以及所允許的協(xié)作。我同意,最好在一個(gè)開放的論壇中取得最好的進(jìn)展。讓機(jī)器為我們做出智能和自動(dòng)化決策的機(jī)會(huì)促使我們進(jìn)行了大量的人工工作。
前面概述的notebook和科學(xué)出版的簡(jiǎn)要?dú)v史與當(dāng)今機(jī)器學(xué)習(xí)面臨的許多問題平行。具體而言,在計(jì)算機(jī)視覺領(lǐng)域。計(jì)算機(jī)視覺模型試圖對(duì)我們這個(gè)世界上非結(jié)構(gòu)化的,即圖像和視頻進(jìn)行觀察和決策。在過去的十年中,為了追求訓(xùn)練和理解這些模型的性能,數(shù)以千計(jì)的圖像中的大型數(shù)據(jù)集已被數(shù)千名工人不完全注釋。讓機(jī)器為我們做出智能和自動(dòng)化決策的機(jī)會(huì)促使我們進(jìn)行了大量的人工工作。事實(shí)證明,最近在無需監(jiān)督而又費(fèi)力的人工標(biāo)注工作(例如OpenAI的CLIP)的計(jì)算機(jī)視覺任務(wù)的更無監(jiān)督的方法上的努力取得了豐碩的成果。但是性能仍然遠(yuǎn)遠(yuǎn)不夠完美。而且,理解模型性能總是需要針對(duì)可信的、真實(shí)值或黃金標(biāo)準(zhǔn)數(shù)據(jù)進(jìn)行手動(dòng)驗(yàn)證。畢竟,這些模型并不是被送到樹林里去操作和推斷的。模型正被嵌入我們的日常生活中,它們的表現(xiàn)質(zhì)量可能會(huì)產(chǎn)生生死攸關(guān)的后果。我們用來分析計(jì)算機(jī)視覺模型的方法和工具的質(zhì)量,應(yīng)該與用于構(gòu)建它們的方法和工具的質(zhì)量相匹配。
因此,可以肯定的是,我們用來分析計(jì)算機(jī)視覺模型的方法和工具的質(zhì)量應(yīng)該與用于構(gòu)建模型的方法和工具的質(zhì)量相匹配。而累積的,協(xié)作的和漸進(jìn)的問題解決仍至關(guān)重要。建立開放標(biāo)準(zhǔn),使CV / ML社區(qū)不僅是在模型上,而且是在數(shù)據(jù)集上,以增量方式協(xié)同工作,這可能是在現(xiàn)代計(jì)算機(jī)視覺科學(xué)領(lǐng)域建立信任和進(jìn)步的唯一可行方法。FiftyOne希望能夠建立這種信任和進(jìn)步。以下是FiftyOne當(dāng)前功能的一個(gè)小示例,重點(diǎn)是演示基本的API和UX,這些API和UX可以在Jupyter Notebook中高效地回答有關(guān)其數(shù)據(jù)集和模型的問題。與FiftyOne一起挖掘COCO
按照此Colab Notebook中的說明進(jìn)行操作:https://colab.research.google.com/github/voxel51/fiftyone-examples/blob/master/examples/digging_into_coco.ipynbnotebook電腦提供了一種方便的方式來分析視覺數(shù)據(jù)集。代碼和可視化可以位于同一個(gè)地方,這正是CV / ML經(jīng)常需要的地方??紤]到這一點(diǎn),能夠在視覺數(shù)據(jù)集中發(fā)現(xiàn)問題是改進(jìn)它們的第一步。本節(jié)將引導(dǎo)我們深入挖掘圖像數(shù)據(jù)集中問題的每個(gè)“步驟”(即notebook單元)。我鼓勵(lì)你進(jìn)入Colab Notebook并親自體驗(yàn):https://colab.research.google.com/github/voxel51/fiftyone-examples/blob/master/examples/digging_into_coco.ipynb首先,我們需要使用pip安裝fiftyone軟件包。接下來,我們可以下載并加載我們的數(shù)據(jù)集。我們將使用COCO-2017驗(yàn)證拆分。我們還花點(diǎn)時(shí)間使用FiftyOne App可視化真實(shí)值檢測(cè)標(biāo)簽。以下代碼將為我們完成所有這些工作。import fiftyone as fo
import fiftyone.zoo as foz
dataset = foz.load_zoo_dataset("coco-2017", split="validation")
session = fo.launch_app(dataset)
具有真實(shí)值檢測(cè)功能的COCO-2017。我們已經(jīng)加載了驗(yàn)證數(shù)據(jù)集COCO-2017,現(xiàn)在讓我們下載并加載模型并將其應(yīng)用于驗(yàn)證數(shù)據(jù)集。我們將使用來自FiftyOne model zoo的預(yù)訓(xùn)練模型faster-rcnn-resnet50-fpn-coco-torch。讓我們將預(yù)測(cè)應(yīng)用于新的標(biāo)簽字段predictions,并將應(yīng)用范圍限制到置信度大于或等于0.6的檢測(cè)。- FiftyOne Model zoo:https://voxel51.com/docs/fiftyone/user_guide/model_zoo/index.html
model = foz.load_zoo_model("faster-rcnn-resnet50-fpn-coco-torch")
dataset.apply_model(model, label_field="predictions", confidence_thresh=0.6)
讓我們專注于與車輛檢測(cè)有關(guān)的問題,并在真實(shí)值標(biāo)簽和我們的預(yù)測(cè)中考慮所有公共汽車,小汽車和卡車車輛,并忽略任何其他檢測(cè)。以下內(nèi)容將我們的數(shù)據(jù)集過濾到僅包含我們的車輛檢測(cè)數(shù)據(jù)的視圖,并在App中呈現(xiàn)該視圖。from fiftyone import ViewField as F
vehicle_labels = ["bus","car", "truck"]
only_vehicles = F("label").is_in(vehicle_labels)
vehicles = (
dataset
.filter_labels("predictions", only_vehicles, only_matches=True)
.filter_labels("ground_truth", only_vehicles, only_matches=True)
)
session.view = vehicles
僅使用車輛真實(shí)值情況和預(yù)測(cè)的檢測(cè)結(jié)果進(jìn)行的COCO-2017驗(yàn)證。現(xiàn)在我們有了預(yù)測(cè),我們可以評(píng)估模型了。我們將使用FiftyOne提供的使用COCO評(píng)估方法的實(shí)用方法evaluate_detections()。from fiftyone.utils.eval import evaluate_detections
evaluate_detections(vehicles, "predictions", gt_field="ground_truth", iou=0.75)
evaluate_detections()已將有關(guān)評(píng)估的各種數(shù)據(jù)填充到我們的數(shù)據(jù)集中。值得注意的是有關(guān)哪些預(yù)測(cè)與真實(shí)值框不匹配的信息。下面的數(shù)據(jù)集視圖使我們僅查看那些不匹配的預(yù)測(cè)。我們也將按照置信值以降序排序。filter_vehicles = F("ground_truth_eval.matches.0_75.gt_id") == -1
unmatched_vehicles = (
vehicles
.filter_labels("predictions", filter_vehicles, only_matches=True)
.sort_by(F("predictions.detections").map(F("confidence")).max(), reverse=True)
)
session.view = unmatched_vehicles
如果你正在使用本演示中的notebook版本,則將看到做出不匹配預(yù)測(cè)的最常見原因是標(biāo)簽不匹配。這并不奇怪,因?yàn)樗羞@三個(gè)類都在超類vehicle中??ㄜ嚭推囋谌斯ぷ⑨尯湍P皖A(yù)測(cè)中常常混淆。但是,除了容易混淆之外,讓我們來看一下我們的預(yù)測(cè)視圖中的前兩個(gè)示例。圖片右側(cè)的截?cái)嗥嚨倪吙蛱?。預(yù)測(cè)要準(zhǔn)確得多,但沒有達(dá)到IoU閾值。來自COCO 2017檢測(cè)數(shù)據(jù)集的原始圖像。- COCO 2017檢測(cè)數(shù)據(jù)集:https://cocodataset.org/#detection-2017
上面的圖片中發(fā)現(xiàn)的第一個(gè)樣本有一個(gè)注解錯(cuò)誤。圖像右側(cè)的截?cái)嗥嚨恼鎸?shí)值邊界框(粉紅色)太小。預(yù)測(cè)(黃色)更為準(zhǔn)確,但未達(dá)到IoU閾值。樹木陰影下的汽車預(yù)測(cè)箱是正確的,但沒有在真實(shí)情況中標(biāo)出。在我們不匹配的預(yù)測(cè)視圖中找到的第二個(gè)樣本包含另一種注釋錯(cuò)誤。實(shí)際上,這是一個(gè)更為嚴(yán)重的問題。圖像中正確預(yù)測(cè)的邊界框(黃色)沒有相應(yīng)的真實(shí)性。在樹蔭下的汽車根本沒有標(biāo)注。手動(dòng)解決這些錯(cuò)誤超出了本示例的范圍,因?yàn)樗枰艽蟮姆答伝芈?。FiftyOne致力于使反饋回路成為可能(且高效),但現(xiàn)在讓我們集中討論如何回答有關(guān)模型性能的問題,并確認(rèn)我們的模型確實(shí)經(jīng)?;煜财?、小汽車和卡車。我們將通過重新評(píng)估合并到單個(gè)vehicle標(biāo)簽中的公共汽車,小汽車和卡車的預(yù)測(cè)來做到這一點(diǎn)。下面的代碼創(chuàng)建了這樣一個(gè)視圖,將視圖克隆到一個(gè)單獨(dú)的數(shù)據(jù)集中,這樣我們將獲得單獨(dú)的評(píng)估結(jié)果,并評(píng)估合并的標(biāo)簽。vehicle_labels = {
label: "vehicle" for label in ["bus","car", "truck"]
}
merged_vehicles_dataset = (
vehicles
.map_labels("ground_truth", vehicle_labels)
.map_labels("predictions", vehicle_labels)
.exclude_fields(["tp_iou_0_75", "fp_iou_0_75", "fn_iou_0_75"])
.clone("merged_vehicles_dataset")
)
evaluate_detections(
merged_vehicles_dataset, "predictions", gt_field="ground_truth", iou=0.75)
session.dataset = merged_vehicles_dataset
僅包含從車輛視圖克隆的合并車輛的數(shù)據(jù)集。現(xiàn)在,我們獲得了原始分割的公交車,汽車和卡車檢測(cè)以及合并檢測(cè)的評(píng)估結(jié)果?,F(xiàn)在,我們可以簡(jiǎn)單地比較原始評(píng)估中的真陽(yáng)性數(shù)與合并評(píng)估中的真陽(yáng)性數(shù)。original_tp_count = vehicles.sum("tp_iou_0_75")
merged_tp_count = merged_vehicles_dataset.sum("tp_iou_0_75")
print("Original Vehicles True Positives: %d" % original_tp_count)
print("Merged Vehicles True Positives: %d" % merged_tp_count)
我們可以看到,在合并公共汽車、汽車和卡車標(biāo)簽之前,有1431個(gè)真陽(yáng)性。將三種標(biāo)簽合并在一起產(chǎn)生了1515個(gè)真陽(yáng)性結(jié)果。Original Vehicles True Positives: 1431
Merged Vehicles True Positives: 1515
我們能夠證實(shí)我們的假設(shè)!盡管很明顯。但是,我們現(xiàn)在有了以數(shù)據(jù)為基礎(chǔ)的理解,可以了解此模型的常見故障模式?,F(xiàn)在,整個(gè)實(shí)驗(yàn)可以與其他人共享。在notebook中,以下內(nèi)容將截屏最后一個(gè)活動(dòng)的App窗口,因此其他人可以靜態(tài)查看所有輸出。session.freeze() # Screenshot the active App window for sharing
總結(jié)
notebook電腦已成為執(zhí)行和共享數(shù)據(jù)科學(xué)的流行媒體,尤其是在計(jì)算機(jī)視覺領(lǐng)域。但是,從歷史上看,使用視覺數(shù)據(jù)集一直是一個(gè)挑戰(zhàn),我們希望通過像FiftyOne這樣的開放工具來應(yīng)對(duì)這一挑戰(zhàn)。notebook革命在很大程度上仍處于起步階段,并將繼續(xù)發(fā)展并成為在社區(qū)中執(zhí)行和交流ML項(xiàng)目的更有說服力的工具,這在一定程度上歸功于FiftyOne!感謝你的關(guān)注!該FiftyOne項(xiàng)目上可以在GitHub上找到,即下方鏈接。- https://github.com/voxel51/fiftyone
請(qǐng)注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱
下載1:何愷明頂會(huì)分享
在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析
下載2:終身受益的編程指南:Google編程風(fēng)格指南
在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):c++,即可下載。歷經(jīng)十年考驗(yàn),最權(quán)威的編程規(guī)范!
在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):CVPR,即可下載1467篇CVPR 2020論文 和 CVPR 2021 最新論文
點(diǎn)亮
,告訴大家你也在看