昇思學習打卡-8-計算機視覺/FCN圖像語義分割

目錄

  • FCN介紹
  • FCN所用的技術
  • 訓練數據的可視化
  • 模型訓練
  • 模型推理
  • FCN的優點和不足
    • 優點
    • 不足

FCN介紹

FCN主要用于圖像分割領域,是一種端到端的分割方法,是深度學習應用在圖像語義分割的開山之作。通過進行像素級的預測直接得出與原圖大小相等的label map。因FCN丟棄全連接層替換為全卷積層,網絡所有層均為卷積層,故稱為全卷積網絡。

FCN所用的技術

全卷積神經網絡主要使用以下三種技術:

  • 卷積化(Convolutional)
  • 上采樣(Upsample)
  • 跳躍結構(Skip Layer)
    跳躍結構利用上采樣技巧對最后一層的特征圖進行上采樣,得到原圖大小的分割是步長為32像素的預測,稱之為FCN-32s。由于最后一層的特征圖太小,損失過多細節,采用skips結構將更具有全局信息的最后一層預測和更淺層的預測結合,使預測結果獲取更多的局部細節。將底層(stride 32)的預測(FCN-32s)進行2倍的上采樣得到原尺寸的圖像,并與從pool4層(stride 16)進行的預測融合起來(相加),這一部分的網絡被稱為FCN-16s。隨后將這一部分的預測再進行一次2倍的上采樣并與從pool3層得到的預測融合起來,這一部分的網絡被稱為FCN-8s。 Skips結構將深層的全局信息與淺層的局部信息相結合。

訓練數據的可視化

import numpy as np
import matplotlib.pyplot as pltplt.figure(figsize=(16, 8))# 對訓練集中的數據進行展示
for i in range(1, 9):plt.subplot(2, 4, i)show_data = next(dataset.create_dict_iterator())show_images = show_data["data"].asnumpy()show_images = np.clip(show_images, 0, 1)
# 將圖片轉換HWC格式后進行展示plt.imshow(show_images[0].transpose(1, 2, 0))plt.axis("off")plt.subplots_adjust(wspace=0.05, hspace=0)
plt.show()

在這里插入圖片描述

模型訓練

import mindspore
from mindspore import Tensor
import mindspore.nn as nn
from mindspore.train import ModelCheckpoint, CheckpointConfig, LossMonitor, TimeMonitor, Modeldevice_target = "Ascend"
mindspore.set_context(mode=mindspore.PYNATIVE_MODE, device_target=device_target)train_batch_size = 4
num_classes = 21
# 初始化模型結構
net = FCN8s(n_class=21)
# 導入vgg16預訓練參數
load_vgg16()
# 計算學習率
min_lr = 0.0005
base_lr = 0.05
train_epochs = 1
iters_per_epoch = dataset.get_dataset_size()
total_step = iters_per_epoch * train_epochslr_scheduler = mindspore.nn.cosine_decay_lr(min_lr,base_lr,total_step,iters_per_epoch,decay_epoch=2)
lr = Tensor(lr_scheduler[-1])# 定義損失函數
loss = nn.CrossEntropyLoss(ignore_index=255)
# 定義優化器
optimizer = nn.Momentum(params=net.trainable_params(), learning_rate=lr, momentum=0.9, weight_decay=0.0001)
# 定義loss_scale
scale_factor = 4
scale_window = 3000
loss_scale_manager = ms.amp.DynamicLossScaleManager(scale_factor, scale_window)
# 初始化模型
if device_target == "Ascend":model = Model(net, loss_fn=loss, optimizer=optimizer, loss_scale_manager=loss_scale_manager, metrics={"pixel accuracy": PixelAccuracy(), "mean pixel accuracy": PixelAccuracyClass(), "mean IoU": MeanIntersectionOverUnion(), "frequency weighted IoU": FrequencyWeightedIntersectionOverUnion()})
else:model = Model(net, loss_fn=loss, optimizer=optimizer, metrics={"pixel accuracy": PixelAccuracy(), "mean pixel accuracy": PixelAccuracyClass(), "mean IoU": MeanIntersectionOverUnion(), "frequency weighted IoU": FrequencyWeightedIntersectionOverUnion()})# 設置ckpt文件保存的參數
time_callback = TimeMonitor(data_size=iters_per_epoch)
loss_callback = LossMonitor()
callbacks = [time_callback, loss_callback]
save_steps = 330
keep_checkpoint_max = 5
config_ckpt = CheckpointConfig(save_checkpoint_steps=10,keep_checkpoint_max=keep_checkpoint_max)
ckpt_callback = ModelCheckpoint(prefix="FCN8s",directory="./ckpt",config=config_ckpt)
callbacks.append(ckpt_callback)
model.train(train_epochs, dataset, callbacks=callbacks)

在這里插入圖片描述

模型推理

import cv2
import matplotlib.pyplot as pltnet = FCN8s(n_class=num_classes)
# 設置超參
ckpt_file = "FCN8s.ckpt"
param_dict = load_checkpoint(ckpt_file)
load_param_into_net(net, param_dict)
eval_batch_size = 4
img_lst = []
mask_lst = []
res_lst = []
# 推理效果展示(上方為輸入圖片,下方為推理效果圖片)
plt.figure(figsize=(8, 5))
show_data = next(dataset_eval.create_dict_iterator())
show_images = show_data["data"].asnumpy()
mask_images = show_data["label"].reshape([4, 512, 512])
show_images = np.clip(show_images, 0, 1)
for i in range(eval_batch_size):img_lst.append(show_images[i])mask_lst.append(mask_images[i])
res = net(show_data["data"]).asnumpy().argmax(axis=1)
for i in range(eval_batch_size):plt.subplot(2, 4, i + 1)plt.imshow(img_lst[i].transpose(1, 2, 0))plt.axis("off")plt.subplots_adjust(wspace=0.05, hspace=0.02)plt.subplot(2, 4, i + 5)plt.imshow(res[i])plt.axis("off")plt.subplots_adjust(wspace=0.05, hspace=0.02)
plt.show()

在這里插入圖片描述

FCN的優點和不足

除了文中提到的FCN的優缺點,我還了解到以下優缺點:

優點

  • 端到端的像素級分類:FCN能夠實現從圖像到像素級的端到端語義分割。
  • 保留空間信息:FCN通過卷積層和上采樣操作保留了圖像的重要空間信息,有助于提高分割精度。
  • 魯棒性:FCN對圖像的旋轉、平移等變化具有較強的魯棒性。
  • 廣泛性:FCN適用于各種類型的圖像分割任務,包括彩色圖像、灰度圖像和多光譜圖像等。

不足

  • 訓練復雜性:FCN可能需要多次訓練和微調才能獲得較好的性能,例如FCN-32s、FCN-16s和FCN-8s的逐步訓練。
  • 計算量大:FCN需要進行大量的卷積運算和參數學習,導致計算量大,訓練時間長。
  • 對噪聲敏感:FCN可能對噪聲和圖像中的無關信息較為敏感,容易受到干擾。
  • 數據需求量大:FCN的訓練通常需要大量的標注數據,這在某些領域可能是一個挑戰。

此章節學習到此結束,感謝昇思平臺。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44407.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C++基礎】初識C++(2)--引用、const、inline、nullptr

目錄 一、引用 1.1 引用的概念和定義 1.2 引用的特性 1.3引用的使用 1.4 const引用 1.5 指針和引用的關系 二、inline 三、nullptr 一、引用 1.1 引用的概念和定義 引?不是新定義?個變量,?是給已存在變量取了?個別名,編譯器不會為引?…

微軟的人工智能語音生成器在測試中達到與人類同等水平

微軟公司開發了一種新的神經編解碼語言模型 Vall-E,在自然度、語音魯棒性和說話者相似性方面都超越了以前的成果。它是同類產品中第一個在兩個流行基準測試中達到人類同等水平的產品,而且顯然非常逼真,以至于微軟不打算向公眾開放。 VALL-E …

Node.js 模塊系統

Node.js 模塊系統 Node.js 的模塊系統是其核心特性之一,它允許開發者將代碼組織成可重用的模塊。這種系統促進了代碼的模塊化,使得大型應用程序的構建和管理變得更加容易。本文將深入探討 Node.js 的模塊系統,包括其工作原理、如何創建和使用模塊,以及模塊系統的優勢和局限…

【每日一練】python類和對象現實舉例詳細講解

""" 本節課程目的: 1.掌握類描述現實世界實物思想 2.掌握類和對象的關系 3.理解什么事面向對象 """ #比如設計一個鬧鐘,在這里就新建一個類 class Clock:idNone #鬧鐘的序列號,也就是類的屬性priceNone #鬧…

Git最常用操作速查表

Git常用操作 文章目錄 Git常用操作1. 克隆/拉取2. 分支操作1. 查看分支2. 創建分支3. 切換到分支4. 刪除分支5. 刪除遠程分支6. 推送分支到遠程 3. 暫存庫操作4. Git團隊規范1. 原則2. 分支設計3. commit備注一般規范 1. 克隆/拉取 git clone xxx 從遠程倉庫克隆 git rebase…

【開源之美】:WinMerge Files

一、引言 強大的windows端文件比較工具,跟Beyond Compare相比,更為強大。但是這里我們推薦他的原因,不僅是因為作為一個使用的工具,主要是因為他開源,可以通過調試優秀的源代碼,進一步的提升C項目設計和編…

Alternative to Receptive field in Transformers and what factors impact it

題意:Transformer中感受野的替代概念及其影響因素 問題背景: I have two transformer networks. One with 3 heads per attention and 15 layers in total and second one with 5 heads per layer and 30 layers in total. Given an arbitrary set of d…

什么是數據模型?數據模型與數據治理有什么關系?

在企業數據治理的廣闊領域中,首要且關鍵的一步是明確溝通數據治理的需求。這包括對企業所持有的數據種類、數據存儲位置、以及當前數據管理的具體情況有一個清晰的了解和記錄。了解企業的數據資產是制定有效數據治理策略的基礎。企業需要識別和盤點所有類型的數據資…

AIGC產品經理學習路徑

基礎篇(課時 2 ) AIGC 行業視角 AIGC 的行業發展演進:傳統模型/深度學習/大模型 AIGC 的產品設計演進:AI Embedded / AI Copilot / AI Agen AIGC 的行業產業全景圖 AIGC 的產品應用全景圖 AIGC 職業視角 AI 產品經理/ AIGC…

2974.最小數字游戲

1.題目描述 你有一個下標從 0 開始、長度為 偶數 的整數數組 nums ,同時還有一個空數組 arr 。Alice 和 Bob 決定玩一個游戲,游戲中每一輪 Alice 和 Bob 都會各自執行一次操作。游戲規則如下: 每一輪,Alice 先從 nums 中移除一個 …

Spring MVC 全面指南:從入門到精通的詳細解析

引言: Spring MVC,作為Spring框架的一個重要模塊,為構建Web應用提供了強大的功能和靈活性。無論是初學者還是有一定經驗的開發者,掌握Spring MVC都將顯著提升你的Web開發技能。本文旨在為初學者提供一個全面且易于理解的學習路徑…

數據建設實踐之大數據平臺(五)安裝hive

安裝hive 上傳安裝包到/opt/software目錄并解壓 [bigdata@node101 software]$ tar -zxvf hive-3.1.3-with-spark-3.3.1.tar.gz -C /opt/services [bigdata@node101 services]$ mv apache-hive-3.1.3-bin apache-hive-3.1.3 配置環境變量 export JAVA_HOME=/opt/services…

Debezium系列之:驗證mysql、mariadb等兼容mysql協議數據庫賬號權限

Debezium系列之:驗證mysql、mariadb等兼容mysql協議數據庫賬號權限 一、數據庫需要開啟binlog二、創建賬號和賬號需要賦予的權限三、賬號具有權限查看日志信息四、驗證賬號權限五、驗證賬號能否執行show master status六、驗證數據庫是否開啟binlog一、數據庫需要開啟binlog …

實驗9 存儲過程與函數的創建管理實驗

一、實驗目的: 理解存儲過程和函數的概念。掌握創建存儲過程和函數的方法。掌握執行存儲過程和函數的方法。掌握游標的定義、使用方法。 二、實驗內容 1.某超市的食品管理的數據庫的Food表,Food表的定義如表所示, Food表的定義…

【進階篇-Day8:JAVA中遞歸、異常的介紹】

目錄 1、遞歸的介紹和使用1.1 遞歸的介紹1.2 案例案例一:案例二:案例三:案例四: 1.3 總結 2、異常的介紹和使用2.1 異常的介紹:(1)能夠看懂異常(2)異常的體系接口和分類&…

Go語言map并發安全,互斥鎖和讀寫鎖誰更優?

并發編程是 Go 語言的一大特色,合理地使用鎖對于保證數據一致性和提高程序性能至關重要。 在處理并發控制時,sync.Mutex(互斥鎖)和 sync.RWMutex(讀寫鎖)是兩個常用的工具。理解它們各自的優劣及擅長的場景…

蘋果入局,AI手機或將實現“真智能”?

【潮汐商業評論/原創】 “AI應用智能手機不就是現在的AI手機。” 當被問到現階段對AI手機的看法時,John如是說。“術業有專攻,那么多APP在做AI功能,下載用就是了,也用不著現在換個AI手機啊。” 對于AI手機,或許大多…

上海市計算機學會競賽平臺2023年1月月賽丙組積木染色(二)

題目描述 𝑛n 塊積木排成一排,需要給每塊積木染色,顏色有 𝑚m 種。請問有多少種方法,從第二塊積木開始統計,恰有 𝑝p 塊積木與前一塊積木顏色不同? 輸入格式 三個整數分別表示 &a…

Windows安裝和使用Doccano標注工具

簡介 開源鏈接:GitHub - doccano/doccano: Open source annotation tool for machine learning practitioners. Open source annotation tool for machine learning practitioners. Doccano是一款開源的文本標注工具,由人工智能公司Hironsan開發并在G…

【算法】代碼隨想錄之數組

文章目錄 前言 一、二分查找法(LeetCode--704) 二、移除元素(LeetCode--27) 三、有序數組的平方(LeetCode--977) 四、長度最小的子數組(LeetCode--209) 五、螺旋矩陣II&#x…