介紹
原始變壓器的引入為當前的大語言模型鋪平了道路。同樣,在引入變壓器模型之後,引入了視覺變壓器(VIT)。就像變形金剛在理解文本和生成響應的文本中表現出色一樣,視覺變壓器模型也被開發出來理解圖像並提供給定圖像的信息。這些導致視覺語言模型,在理解圖像方面表現出色。微軟已經向前邁出了一步,並引入了一個模型,該模型能夠僅使用單個模型執行許多視覺任務。在本指南中,我們將查看Microsoft發布的名為Florence-2的模型,旨在解決許多不同的視覺任務。
學習目標
- 介紹佛羅倫薩-2,一種視覺語言模型。
- 了解訓練佛羅倫薩-2的數據。
- 了解佛羅倫薩-2家族中的不同型號。
- 了解如何下載佛羅倫薩-2。
- 編寫代碼以使用Florence-2執行不同的計算機視覺任務。
本文作為數據科學博客馬拉鬆的一部分發表。
目錄
- 什麼是佛羅倫薩-2?
- 與佛羅倫薩-2的圖像字幕
- 佛羅倫薩-2的對象檢測
- 佛羅倫薩-2分割
- 常見問題
什麼是佛羅倫薩-2?
Florence-2是Microsoft團隊開發的視覺語言模型(VLM)。佛羅倫薩-2有兩種尺寸。一個是0.23B版本,另一個是0.77b版本。這些低尺寸使每個人都可以輕鬆地在CPU本身上運行這些模型。創建了佛羅倫薩-2,請記住一個模型可以解決所有問題。對佛羅倫薩-2進行了訓練,可以解決不同的任務,包括對象檢測,對象分割,圖像字幕(甚至生成詳細的字幕),短語分割,OCR(光學字符識別)以及這些組合。
Florence-2 Vision語言模型在FLD 5B數據集上進行了培訓。該FLD-5B是由Microsoft團隊創建的數據集。該數據集在約1.26億張圖像上包含約54億個文本註釋。其中包括13億個文本區域註釋,5億個文本註釋和36億條文本短語區域註釋。 Florence-2接受文本說明和圖像輸入,為OCR,對象檢測或圖像字幕等任務生成文本結果。
該體系結構包含一個視覺編碼器,然後是變壓器編碼器解碼器塊,為了損失,它們可以使用標準損耗函數,即交叉熵損失。 Florence-2模型執行了三種類型的區域檢測:用於對象檢測的框表示,OCR文本檢測的四框表示以及用於分割任務的多邊形表示。
與佛羅倫薩-2的圖像字幕
圖像字幕是一項視覺語言任務,在給定圖像的情況下,深度學習模型將輸出有關圖像的標題。根據模型經過的培訓,該標題可以簡短或詳細。執行這些任務的模型經過巨大的圖像字幕培訓,它們在其中學習如何輸出文本,給定圖像。他們訓練的數據越多,他們就越擅長描述圖像。
下載和安裝
我們將首先下載和安裝一些我們需要運行佛羅倫薩視覺模型的庫。
!
- 變形金剛: HuggingFace的Transformers庫為您可以下載的不同任務提供了各種深度學習模型。
- 加速: HuggingFace的加速庫可以改善通過GPU服務模型時的模型推理時間。
- Flash_attn: Flash注意力庫實現了比原始庫更快的關注算法,並且在佛羅倫薩-2模型中使用。
- EINOPS:愛因斯坦操作簡化了代表矩陣乘法並在佛羅倫薩-2模型中實現的。
下載佛羅倫薩-2型號
現在,我們需要下載Florence-2模型。為此,我們將使用以下代碼。
從變形金剛導入自動化處理器AutomodelforCausAllm model_id ='Microsoft/Florence-2-large-ft' model = automodelforcausallm.from_pretrate(model_id,trust_remote_code = true).eval()。 cuda() processor = autopersesor.from_pretrataining(model_id,trust_remote_code = true,device_map =“ cuda”)
- 我們首先導入AutomodelForCausAllm和AutoPeroCessor。
- 然後,我們將模型名稱存儲在model_name變量中。在這裡,我們將與Florence-2大調節模型一起工作。
- 然後,我們通過調用.from_pretaining()函數賦予其模型名稱並設置trust_remote_code = true來創建一個AutoModelforCausAllm的實例,這將從HF存儲庫中下載該模型。
- 然後,我們通過調用.eval()來將此模型設置為評估模型,並通過調用.cuda()函數將其發送到GPU。
- 然後,我們通過調用.from_pretaining()並給出模型名稱並將Device_map設置為CUDA來創建一個自動處理器的實例。
Autopersestor與自動訓練器非常相似。但是,自動傳動器類涉及文本和文本令牌化。而自動處理器則處理文本和圖像令牌化,因為佛羅倫薩-2處理圖像數據,我們與自動處理者合作。
現在,讓我們拍攝圖像:
從PIL導入圖像 image = image.open(“/content/beach.jpg”)
在這裡,我們拍了一張海灘照片。
生成標題
現在,我們將將這張圖像提供給Florence-2 Vision語言模型,並要求它生成標題。
提示=“ <catchion>” 輸入=處理器(text =提示,images = image,return_tensors =“ pt”)。 to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 結果= processor.post_process_generation(text_generations, 任務=提示,image_size =(image.width,image.height)) 打印(結果[提示])</catchion>
- 我們首先創建提示。
- 然後,我們將提示和圖像同時給處理器類,然後返回Pytorch傳感器。我們將它們提供給GPU,因為該模型位於GPU中並將其存儲在變量輸入中。
- 輸入變量包含input_ids,即令牌ID和圖像的像素值。
- 然後,我們調用模型的生成函數並給出輸入ID,即圖像像素值。我們將最大生成的令牌設置為512將採樣保留為false,並將生成的令牌存儲在生成的_ids中。
- 然後,我們調用處理器的.batch_decode函數將其授予生成的_ids,並將skip_special_tokens flag設置為false。這將是一個列表,因此我們需要列表的第一個元素。
- 最後,我們通過調用.post_process_generated並將其生成的文本,任務類型和image_size作為元組來進行後處理。
運行代碼並看到上面的輸出圖片,我們看到該模型為圖像生成了標題“雨傘和休息室在海灘上的雨傘和休息室”。上面的圖像標題非常短。
提供提示
我們可以通過提供其他提示來邁出下一步,例如
嘗試此操作的代碼可以在下面看到:
提示=“ <lated_caption>” 輸入=處理器(text =提示,images = image,return_tensors =“ pt”)。 to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 結果= processor.post_process_generation(text_generations, 任務=提示,image_size =(image.width,image.height)) 打印(結果[提示])</lated_caption>
提示=“ <more_detailed_caption>” 輸入=處理器(text =提示,images = image,return_tensors =“ pt”)。 to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 結果= processor.post_process_generation(text_generations, 任務=提示,image_size =(image.width,image.height)) 打印(結果[提示])</more_detailed_caption>
在這裡,我們使用了
佛羅倫薩-2的對象檢測
對象檢測是計算機視覺中著名的任務之一。它處理給定圖像的找到一些對象。在對象檢測中,該模型標識圖像並提供對象周圍邊界框的X和Y坐標。 Florence-2 Vision語言模型非常能夠檢測給定圖像的對象。
讓我們使用以下圖像嘗試一下:
image = image.open(“/content/van.jpg”)
在這裡,我們有一張明亮的橙色麵包車的圖像,背景中有一棟白色的建築物。
為佛羅倫薩-2視覺語言模型提供圖像
現在,讓我們將此圖像提供給佛羅倫薩-2視覺語言模型。
提示=“ <od>” 輸入=處理器(text =提示,images = image,return_tensors =“ pt”)。 to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 結果= processor.post_process_generation(text_generations, 任務=提示,image_size =(image.width,image.height)) </od>
對象檢測的過程與我們剛剛完成的圖像字幕任務非常相似。這裡唯一的區別是,我們將提示更改為
輸出存儲在變量命名結果中。可變結果是格式{:{'bboxes':[x1,y1,x2,y2],…],'labels':['label1','label1','label2',…]}}}。因此,佛羅倫薩-2視覺模型可為每個標籤坐標框,y contings for每個對象,該對像是為每個對象的協調,該對象可檢測到該圖像。
在圖像上繪製界限
現在,我們將使用我們擁有的坐標在圖像上繪製這些邊界框。
導入matplotlib.pyplot作為PLT 導入matplotlib.patches作為補丁 圖,ax = plt.subplots() ax.Imshow(圖像) 對於bbox,在zip中標記(結果[提示] ['bboxes'],結果[提示] ['labels']): x1,y1,x2,y2 = bbox rect_box = patches.trectangle((x1,y1),x2-x1,y2-y1,lineWidth = 1, edgecolor ='r',faceColor ='none') ax.add_patch(rect_box) plt.text(x1,y1,label,color ='white',fontsize = 8,bbox = dict(faceColor ='red',alpha = 0.5)) ax.axis('off') plt.show()
- 為了繪製圖像周圍的矩形邊界框,我們與matplotlib庫一起工作。
- 我們首先創建一個圖形和一個軸,然後顯示給佛羅倫薩-2視覺語言模型的圖像。
- 在這裡,模型輸出的邊界框是包含x,y坐標的列表,在最終輸出中,有一個邊界框的列表,即每個標籤都有其自己的邊界框。
- 因此,我們迭代邊界框的列表。
- 然後,我們打開邊界框的X和Y坐標。
- 然後,我們與最後一步中解開包裝的坐標一起繪製矩形。
- 最後,我們將其修補為當前顯示的圖像。
- 我們甚至需要在邊界框中添加標籤,以說明邊界框包含什麼對象。
- 最後,我們卸下軸。
運行此代碼並查看圖片,我們看到我們為其提供的範圍圖像生成了許多界限框。我們看到該模型已檢測到麵包車,窗戶和車輪,並能夠為每個標籤提供正確的坐標。
標題為短語接地
接下來,我們將執行一個名為“標題為“短語接地”的任務”,佛羅倫薩-2模型支持。該模型的作用是給定圖像和標題,短語接地的任務是找到給定標題中的名詞短語中提到的每個 /最相關的實體 /對象。
我們可以使用以下代碼來查看此任務:
提示=“ <catchion_to_phrase_grounding>一輛橙色的貨車停在白色建築物前” task_type =“ <catchion_to_phrase_grounding>” 輸入=處理器(text =提示,images = image,return_tensors =“ pt”)。 to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 結果= processor.post_process_generation(text_generations, 任務= task_type,image_size =(image.width,image.height)) </catchion_to_phrase_grounding></catchion_to_phrase_grounding>
在此提示,我們將其提供“
導入matplotlib.pyplot作為PLT 導入matplotlib.patches作為補丁 圖,ax = plt.subplots() ax.Imshow(圖像) 對於bbox,在zip中標記(結果[task_type] ['bboxes'],結果[task_type] ['labels']): x1,y1,x2,y2 = bbox rect_box = patches.trectangle((x1,y1),x2-x1,y2-y1,lineWidth = 1, edgecolor ='r',faceColor ='none') ax.add_patch(rect_box) plt.text(x1,y1,label,color ='white',fontsize = 8,bbox = dict(faceColor ='red',alpha = 0.5)) ax.axis('off') plt.show()
在這裡,我們看到佛羅倫薩-2視覺語言模型能夠從中提取兩個實體。一個是橙色的麵包車,另一輛是白色的建築。然後,佛羅倫薩-2為每個實體生成了邊界框。這樣,給定標題,該模型可以從給定的字幕中提取相關實體/對象,並能夠為這些對像生成相應的邊界框。
佛羅倫薩-2分割
分割是一個過程,在其中拍攝圖像,並為圖像的多個部分生成掩模。每個掩碼是一個對象。分割是對象檢測的下一個階段。在對象檢測中,我們僅找到圖像的位置並生成邊界框。但是在分割中,我們沒有生成一個矩形邊界框,而是生成一個將處於對象形狀的掩碼,因此就像為該對象創建掩碼一樣。這很有幫助,因為我們不僅知道對象的位置,而且甚至知道對象的形狀。幸運的是,佛羅倫薩-2視覺語言模型支持細分。
對圖像進行分割
我們將嘗試對我們的麵包車形象進行細分。
提示=“ <refering_expression_segentation>兩個黑色輪胎” task_type =“ <refering_expression_sementation>” 輸入=處理器(text =提示,images = image,return_tensors =“ pt”)。 to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 結果= processor.post_process_generation(text_generations, 任務= task_type,image_size =(image.width,image.height)) </refering_expression_sementation></refering_expression_segentation>
- 在這裡,該過程類似於圖像字幕和對象檢測任務。我們首先提供提示。
- 這裡的提示為“
兩個黑色輪胎”,其中該任務為分割。 - 分割將基於提供的文本輸入,在這裡是“兩個黑色輪胎”。
- 因此,Florence-2模型將嘗試生成與此文本輸入密切相關的面具和所提供的圖像。
在這裡,結果變量將為格式{:{'polygons':[[[[[polygon]],…],'labels':[[“”,“”,…]}}},其中每個對象/掩碼由多邊形列表表示。每個對象/掩碼列表。
創建口罩並覆蓋實際圖像
現在,我們將創建這些蒙版並在實際圖像上疊加它們,以便我們可以更好地可視化。
導入副本 導入numpy作為NP 來自ipython.display導入顯示 從PIL導入圖像,ImageDraw,ImageFont output_image = copy.deepcopy(圖像) res =結果[task_type] draw = imagedraw.draw(output_image) 比例= 1 對於多邊形,在zip中標記(res ['polygons'],res ['labels']): fill_color =“藍色” 多邊形中的_polygon: _polygon = np.Array(_polygon).Reshape(-1,2) 如果Len(_polygon)<p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/174502929770135.png?x-oss-process=image/resize,p_40" class="lazy" alt="如何使用Florence -2 -Analytics Vidhya執行計算機視覺任務" ></p><h4 id="解釋">解釋</h4>
- 在這裡,我們首先從PIL庫中導入各種工具進行圖像處理。
- 我們在新變量中創建圖像的深層副本,並將鍵“
”的值存儲。 - 接下來,我們通過調用.draw()方法創建ImageDraw實例並給出實際映像的副本來加載圖像。
- 接下來,我們迭代多邊形和標籤值的拉鍊。
- 對於每個多邊形,我們用名稱_polygon迭代單個多邊形並重塑它。 _polygon現在是一個高維列表。
- 我們知道_polygon必須至少有3個側面,以便可以連接。因此,我們檢查了此有效性條件,以查看_polygon列表至少有3個列表項目。
- 最後,我們通過調用.polygon()方法並將其授予_polygon,在實際圖像的副本上繪製此_polygon。除此之外,我們甚至還給它帶有輪廓顏色和填充顏色。
- 如果Florence-2 Vision語言模型為這些多邊形生成標籤,那麼我們甚至可以通過調用.text()函數並將其列為標籤來將此文本繪製在實際圖像的副本上。
- 最後,在繪製了佛羅倫薩-2模型生成的所有多邊形之後,我們通過調用Ipython庫的顯示功能來輸出圖像。
Florence-2 Vision語言模型成功地理解了我們對“兩個黑色輪胎”的查詢,並推斷出圖像包含一輛帶有可見黑色輪胎的車輛。該模型生成了這些輪胎的多邊形表示,並用藍色掩蓋。由於Microsoft團隊策劃了強大的培訓數據,該模型在各種計算機視覺任務上都表現出色。
結論
Florence-2是Microsoft團隊從頭開始創建和訓練的視覺語言模型。與其他視覺語言模型不同,Florence-2執行各種計算機視覺任務,包括對象檢測,圖像字幕,短語對象檢測,OCR,細分和這些組合。在本指南中,我們研究瞭如何下載Florence-2大型模型以及如何使用Florence-2更改提示執行不同的計算機視覺任務。
關鍵要點
- Florence-2型號有兩種尺寸。一個是基本變體,它是20億個參數版本,另一個是大型變體,是7億參數版本。
- Microsoft Team在FLD 5B數據集中培訓了Florence-2模型,該模型是一個圖像數據集,其中包含Microsoft Team創建的不同圖像任務。
- Florence-2接受圖像以及提示輸入。提示定義了佛羅倫薩-2視覺模型應執行的任務類型的情況。
- 每個任務都會生成不同的輸出,所有這些輸出都是以文本格式生成的。
- Florence-2是具有MIT許可證的開源模型,因此可以使用商業應用程序。
常見問題
Q1。什麼是佛羅倫薩-2?A. Florence-2是由Microsoft團隊開發的視覺語言模型,並以兩種尺寸(0.23B參數和0.7B參數版本)發布。
Q2。自動處理器與自動訓練器有何不同?答:自動訪問器只能處理將文本轉換為令牌的文本數據。另一方面,多模式模型的自動處理前處理器數據甚至包括圖像數據。
Q3。什麼是FLD-5B?A. FLD-5B是由Microsoft團隊策劃的圖像數據集。它包含約54億張圖像字幕的1.26億張圖像。
Q4。佛羅倫薩-2模型輸出什麼?A. Florence-2模型根據給定的輸入圖像和輸入文本輸出文本。該文本可以是簡單的圖像字幕,也可以是界框,如果任務是對象檢測或分割,則可以坐標。
Q5。 Florence-2開源嗎?答:是的。 Florence-2是根據MIT許可發布的,因此使其成為開源,並且無需使用HuggingFace進行身份驗證即可使用此模型。
本文所示的媒體不由Analytics Vidhya擁有,並由作者酌情使用。
以上是如何使用Florence -2 -Analytics Vidhya執行計算機視覺任務的詳細內容。更多資訊請關注PHP中文網其他相關文章!
![[帶AI的吉卜力風格圖像]介紹如何使用Chatgpt和版權創建免費圖像](https://img.php.cn/upload/article/001/242/473/174707263295098.jpg?x-oss-process=image/resize,p_40)
OpenAI發布的最新模型GPT-4o,不僅能生成文本,還具備圖像生成功能,引發廣泛關注。其中最受矚目的功能便是“吉卜力風格插畫”的生成。只需將照片上傳至ChatGPT,並給出簡單的指令,即可生成宛如吉卜力工作室作品般夢幻的圖像。本文將詳細解讀實際操作流程、效果感受,以及需要注意的錯誤和版權問題。 OpenAI發布的最新模型“o3”詳情請點擊此處⬇️ OpenAI o3(ChatGPT o3)詳解:特性、定價體系及o4-mini介紹 吉卜力風格文章的英文版請點擊此處⬇️ 利用ChatGPT創作吉

作為一種新的交流方法,在地方政府中使用和引入Chatgpt引起了人們的關注。儘管這種趨勢在廣泛的領域正在發展,但一些地方政府拒絕使用Chatgpt。 在本文中,我們將介紹地方政府中ChatGPT實施的示例。我們將通過各種改革實例,包括支持文件創建和與公民對話,從而探索如何通過各種改革實例來實現地方政府服務的質量和效率提高。 不僅旨在減少員工工作量並改善公民的便利性的地方政府官員,而且都對高級用例感興趣。

您是否聽說過一個名為“福卡斯提示系統”的框架?諸如ChatGpt之類的語言模型非常出色,但是適當的提示對於發揮其潛力至關重要。福卡(Fukatsu)提示是旨在提高輸出準確性的最受歡迎的提示技術之一。 本文解釋了福卡式風格提示的原理和特徵,包括特定的用法方法和示例。此外,我們還引入了其他眾所周知的及時模板和有用的技術來及時設計,因此,根據這些設計,我們將介紹C。

CHATGPT搜索:使用創新的AI搜索引擎有效獲取最新信息! 在本文中,我們將徹底解釋OpenAI提供的新的ChatGpt功能“ ChatGpt搜索”。讓我們仔細研究一下功能,用法以及該工具如何根據實時網絡信息和直觀的易用性來幫助您提高信息收集效率。 chatgpt搜索提供了一種對話互動搜索體驗,該體驗在舒適,隱藏的環境中回答用戶問題,以隱藏廣告

信息爆炸的現代社會,創作出令人信服的文章並非易事。如何在有限的時間和精力內,發揮創造力,撰寫出吸引讀者的文章,需要高超的技巧和豐富的經驗。 這時,作為革命性的寫作輔助工具,ChatGPT 備受矚目。 ChatGPT 利用龐大的數據訓練出的語言生成模型,能夠生成自然流暢、精煉的文章。 本文將介紹如何有效利用 ChatGPT,高效創作高質量文章的技巧。我們將逐步講解使用 ChatGPT 的寫作流程,並結合具體案例,詳細闡述其優缺點、適用場景以及安全使用注意事項。 ChatGPT 將成為作家克服各種障礙,

使用AI創建圖表的有效指南 視覺材料對於有效傳達信息至關重要,但是創建它需要大量時間和精力。但是,由於AI技術(例如Chatgpt和dall-e 3)的興起,圖表創建過程正在發生巨大變化。本文使用這些尖端工具提供了有關有效而有吸引力的圖創建方法的詳細說明。它涵蓋了從想法到完成的所有內容,並包含大量信息,可用於創建圖表,從可以使用的特定步驟,提示,插件和API以及如何使用圖像一代AI“ dall-e 3.”)

解锁ChatGPT Plus:费用、支付方式及升级指南 全球瞩目的顶尖生成式AI,ChatGPT已广泛应用于日常生活和商业领域。虽然ChatGPT基本免费,但付费版ChatGPT Plus提供多种增值服务,例如插件、图像识别等,显著提升工作效率。本文将详细解读ChatGPT Plus的收费标准、支付方式及升级流程。 OpenAI最新图像生成技术“GPT-4o图像生成”详情请点击: GPT-4o图像生成详解:使用方法、提示词示例、商业应用及与其他AI的差异 目录 ChatGPT Plus费用 Ch

如何使用Chatgpt簡化您的設計工作並提高創造力 本文將詳細說明如何使用ChatGpt創建設計。我們將介紹在各個設計領域中使用Chatgpt的示例,例如思想,文本生成和網頁設計。我們還將介紹可以幫助您提高各種創意作品的效率和質量(例如圖形設計,插圖和徽標設計)的效率和質量。請看一下AI如何大大擴展您的設計可能性。 目錄 chatgpt:設計創建的強大工具


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver CS6
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器