點擊上方“AI算法與圖像處理”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達

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