成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

5行代碼,快速實(shí)現(xiàn)圖像分割,代碼逐行詳解,手把手教你處理圖像

新聞 人工智能
圖像分割,作為計(jì)算機(jī)視覺的基礎(chǔ),是圖像理解的重要組成部分,也是圖像處理的難點(diǎn)之一。

 本文經(jīng)AI新媒體量子位(公眾號(hào)ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。

圖像分割,作為計(jì)算機(jī)視覺的基礎(chǔ),是圖像理解的重要組成部分,也是圖像處理的難點(diǎn)之一。

那么,如何優(yōu)雅且體面的圖像分割?

5行代碼、分分鐘實(shí)現(xiàn)的庫(kù)——PixelLib,了解一下。

5行代碼,快速實(shí)現(xiàn)圖像分割,代碼逐行詳解,手把手教你處理圖像

當(dāng)然,如此好用的項(xiàng)目,開源是必須的。

為什么要用到圖像分割?

雖然計(jì)算機(jī)視覺研究工作者,會(huì)經(jīng)常接觸圖像分割的問題,但是我們還是需要對(duì)其做下“贅述”(方便初學(xué)者)。

我們都知道每個(gè)圖像都是有一組像素值組成。簡(jiǎn)單來說,圖像分割就是在像素級(jí)上,對(duì)圖像進(jìn)行分類的任務(wù)。

圖像分割中使用的一些“獨(dú)門秘技”,使它可以處理一些關(guān)鍵的計(jì)算機(jī)視覺任務(wù)。主要分為2類:

  • 語義分割:就是把圖像中每個(gè)像素賦予一個(gè)類別標(biāo)簽,用不同的顏色來表示。
  • 實(shí)例分割:它不需要對(duì)每個(gè)像素進(jìn)行標(biāo)記,它只需要找到感興趣物體的邊緣輪廓就行。

它的身影也經(jīng)常會(huì)出現(xiàn)在比較重要的場(chǎng)景中:

  • 無人駕駛汽車視覺系統(tǒng),可以有效的理解道路場(chǎng)景。
  • 醫(yī)療圖像分割,可以幫助醫(yī)生進(jìn)行診斷測(cè)試。
  • 衛(wèi)星圖像分析,等等。

所以,圖像分割技術(shù)的應(yīng)用還是非常重要的。

接下來,我們就直奔主題,開始了解一下PixelLib,這個(gè)神奇又好用的庫(kù)。

快速安裝PixelLib

PixelLib這個(gè)庫(kù)可以非常簡(jiǎn)單的實(shí)現(xiàn)圖像分割——5行代碼就可以實(shí)現(xiàn)語義分割和實(shí)例分割。

老規(guī)矩,先介紹一下安裝環(huán)境

安裝最新版本的TensorFlow、Pillow、OpenCV-Python、scikit-image和PixelLib:

  1. pip3 install tensorflow  
  2. pip3 install pillow  
  3. pip3 install opencv-python  
  4. pip3 install scikit-image  
  5. pip3 install pixellib  

PixelLib實(shí)現(xiàn)語義分割

PixelLib在執(zhí)行語義分割任務(wù)時(shí),采用的是Deeplabv3+框架,以及在pascalvoc上預(yù)訓(xùn)練的Xception模型。

用在pascalvoc上預(yù)訓(xùn)練的Xception模型執(zhí)行語義分割:

  1. import pixellib  
  2. from pixellib.semantic import semantic_segmentation  
  3. segment_image = semantic_segmentation()  
  4. segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)  
  5. segment_image.segmentAsPascalvoc(“path_to_image”, output_image_name = “path_to_output_image”)  

讓我們看一下每行代碼:

  1. import pixellib  
  2. from pixellib.semantic import semantic_segmentation  
  3.  
  4. #created an instance of semantic segmentation class  
  5. segment_image = semantic_segmentation()  

用于執(zhí)行語義分割的類,是從pixellib導(dǎo)入的,創(chuàng)建了一個(gè)類的實(shí)例。

  1. segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)  

調(diào)用函數(shù)來加載在pascal voc上訓(xùn)練的xception模型(xception模型可以從文末傳送門鏈接處下載)。

  1. segment_image.segmentAsPascalvoc(“path_to_image”, output_image_name = “path_to_output_image”)  

這是對(duì)圖像進(jìn)行分割的代碼行,這個(gè)函數(shù)包含了兩個(gè)參數(shù):

  • path_to_image:圖像被分割的路徑。
  • path_to_output_image:保存輸出圖像的路徑,圖像將被保存在你當(dāng)前的工作目錄中。

接下來,上圖,實(shí)戰(zhàn)

圖像文件命名為:sample1.jpg,如下圖所示。

5行代碼,快速實(shí)現(xiàn)圖像分割,代碼逐行詳解,手把手教你處理圖像

執(zhí)行代碼如下:

  1. import pixellib  
  2. from pixellib.semantic import semantic_segmentation  
  3. segment_image = semantic_segmentation()  
  4. segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)  
  5. segment_image.segmentAsPascalvoc(“sample1.jpg”, output_image_name = “image_new.jpg”)  
5行代碼,快速實(shí)現(xiàn)圖像分割,代碼逐行詳解,手把手教你處理圖像

可以看到,在執(zhí)行代碼后,保存的圖像中,所有對(duì)象都被分割了。

也可以對(duì)代碼稍作修改,獲取一張帶有目標(biāo)對(duì)象分段重疊(segmentation overlay)的圖像。

  1. segment_image.segmentAsPascalvoc(“sample1.jpg”, output_image_name = “image_new.jpg”, overlay = True)  

添加了一個(gè)額外的參數(shù),并設(shè)置為True,就生成了帶有分段疊加的圖像。

5行代碼,快速實(shí)現(xiàn)圖像分割,代碼逐行詳解,手把手教你處理圖像

可以通過修改下面的代碼,來檢查執(zhí)行分割所需的推理時(shí)間。

  1. import pixellib  
  2. from pixellib.semantic import semantic_segmentation  
  3. import time  
  4. segment_image = semantic_segmentation()  
  5. segment_image.load_pascalvoc_model(“pascal.h5”)  
  6. start = time.time()  
  7. segment_image.segmentAsPascalvoc(“sample1.jpg”, output_image_name= “image_new.jpg”)  
  8. end = time.time()  
  9. print(f”Inference Time: {end-start:.2f}seconds”)  

輸出如下:

  1. Inference Time: 8.19seconds  

可以看到,在圖像上執(zhí)行語義分割,只用了8.19秒。

這個(gè)xception模型是用pascalvoc數(shù)據(jù)集訓(xùn)練的,有20個(gè)常用對(duì)象類別。

對(duì)象及其相應(yīng)的color map如下所示:

5行代碼,快速實(shí)現(xiàn)圖像分割,代碼逐行詳解,手把手教你處理圖像

PixelLib實(shí)現(xiàn)實(shí)例分割

雖然語義分割的結(jié)果看起來還不錯(cuò),但在圖像分割的某些特定任務(wù)上,可能就不太理想。

在語義分割中,相同類別的對(duì)象被賦予相同的colormap,因此語義分割可能無法提供特別充分的圖像信息。

于是,便誕生了實(shí)例分割——同一類別的對(duì)象被賦予不同的colormap。

PixelLib在執(zhí)行實(shí)例分割時(shí),基于的框架是Mask RCNN,代碼如下:

  1. import pixellib  
  2. from pixellib.instance import instance_segmentation  
  3. segment_image = instance_segmentation()  
  4. segment_image.load_model(“mask_rcnn_coco.h5”)  
  5. segment_image.segmentImage(“path_to_image”, output_image_name = “output_image_path”)  

同樣,我們先來拆解一下每行代碼。

  1. import pixellib  
  2. from pixellib.instance import instance_segmentation  
  3. segment_image = instance_segmentation()  

導(dǎo)入了用于執(zhí)行實(shí)例分割的類,創(chuàng)建了該類的一個(gè)實(shí)例。

  1. segment_image.load_model(“mask_rcnn_coco.h5”)  

這是加載 Mask RCNN 模型來執(zhí)行實(shí)例分割的代碼(Mask RCNN模型可以從文末傳送門鏈接處下載)。

  1. segment_image.segmentImage(“path_to_image”, output_image_name = “output_image_path”) 

這是對(duì)圖像進(jìn)行實(shí)例分割的代碼,它需要兩個(gè)參數(shù):

  • path_to_image:模型所要預(yù)測(cè)圖像的路徑。
  • output_image_name:保存分割結(jié)果的路徑,將被保存在當(dāng)前的工作目錄中。

上圖,實(shí)戰(zhàn)第二彈!

圖像文件命名為:sample2.jpg,如下圖所示。

5行代碼,快速實(shí)現(xiàn)圖像分割,代碼逐行詳解,手把手教你處理圖像

執(zhí)行代碼如下:

  1. import pixellib  
  2. from pixellib.instance import instance_segmentation  
  3. segment_image = instance_segmentation()  
  4. segment_image.load_model(“mask_rcnn_coco.h5”)  
  5. segment_image.segmentImage(“sample2.jpg”, output_image_name = “image_new.jpg”)  
5行代碼,快速實(shí)現(xiàn)圖像分割,代碼逐行詳解,手把手教你處理圖像

上圖便是保存到目錄的圖片,現(xiàn)在可以看到語義分割和實(shí)例分割之間的明顯區(qū)別——在實(shí)例分割中,同一類別的所有對(duì)象,都被賦予了不同的colormap。

若是想用邊界框(bounding box)來實(shí)現(xiàn)分割,可以對(duì)代碼稍作修改:

  1. segment_image.segmentImage(“sample2.jpg”, output_image_name = “image_new.jpg”, show_bboxes = True)  

這樣,就可以得到一個(gè)包含分割蒙版和邊界框的保存圖像。

5行代碼,快速實(shí)現(xiàn)圖像分割,代碼逐行詳解,手把手教你處理圖像

同樣的,也可以通過代碼查詢實(shí)例分割的推理時(shí)間:

  1. import pixellib  
  2. from pixellib.instance import instance_segmentation  
  3. import time  
  4. segment_image = instance_segmentation()  
  5. segment_image.load_model(“mask_rcnn_coco.h5”)  
  6. start = time.time()  
  7. segment_image.segmentImage(“former.jpg”, output_image_name= “image_new.jpg”)  
  8. end = time.time()  
  9. print(f”Inference Time: {end-start:.2f}seconds”)  

輸出結(jié)果如下:

  1. Inference Time: 12.55 seconds  

可以看到,在圖像上執(zhí)行實(shí)例分割,需要12.55秒的時(shí)間。

最后,奉上項(xiàng)目、模型下載地址,快去試試吧~

傳送門

PixelLib項(xiàng)目地址:
https://github.com/ayoolaolafenwa/PixelLib

xception模型下載地址:
https://github.com/bonlime/keras-deeplab-v3-plus/releases/download/1.1/deeplabv3_xception_tf_dim_ordering_tf_kernels.h5

Mask RCNN模型下載地址:
https://github.com/matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5

 

 

責(zé)任編輯:張燕妮 來源: 量子位
相關(guān)推薦

2017-10-29 21:43:25

人臉識(shí)別

2021-11-09 06:55:03

水印圖像開發(fā)

2021-09-26 16:08:23

CC++clang_forma

2019-07-06 10:18:07

人工智能

2024-01-26 08:16:48

Exporter開源cprobe

2016-04-27 09:49:16

用戶模型產(chǎn)品總結(jié)

2023-04-26 12:46:43

DockerSpringKubernetes

2020-08-12 09:07:53

Python開發(fā)爬蟲

2021-11-24 16:02:57

鴻蒙HarmonyOS應(yīng)用

2011-01-06 10:39:25

.NET程序打包

2009-11-09 14:57:37

WCF上傳文件

2020-08-25 18:30:57

PythonOpenCV圖像處理

2010-04-29 09:49:26

代碼提示SQL Server

2023-09-16 18:48:28

代碼邏輯

2017-10-27 10:29:35

人臉識(shí)別UbuntuPython

2021-07-14 09:00:00

JavaFX開發(fā)應(yīng)用

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機(jī)

2025-05-07 00:31:30

2011-04-21 10:32:44

MySQL雙機(jī)同步
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品久久午夜夜伦鲁鲁 | a成人| 91免费观看视频 | 粉嫩av在线| 欧美日韩在线免费观看 | 国产精品久久久久久久三级 | 亚洲性视频| 四虎影院新网址 | 中文字幕在线播放第一页 | 国产精品久久久亚洲 | 久久久精彩视频 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 性网址| 天天干com| 国产美女黄色片 | 精品久久久久久久久久久院品网 | 精品久久av| 亚洲视频一区在线 | 成人免费区一区二区三区 | 国产精品美女在线观看 | 欧美日韩高清免费 | 欧美日韩专区 | 国产精品污www一区二区三区 | 亚洲国产成人精品女人久久久野战 | 日韩免费视频一区二区 | 欧美精品久久 | 黑人精品欧美一区二区蜜桃 | 久久久激情 | av日日操| 亚洲乱码一区二区三区在线观看 | 波波电影院一区二区三区 | 福利视频一区 | 久久成| 精品久久精品 | 久久久久久久久综合 | 伊人激情综合网 | 亚洲一区二区免费 | 亚洲欧美视频一区二区 | 亚洲国产精品日本 | 国产一区二区不卡 | 中文字幕在线剧情 |