<style>
.reveal .slides {
text-align: left;
font-size:30px;
}
</style>
<!-- .slide: data-background="https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg" -->
# 人工智慧報告
### 水下影像還原與評估方式
#### 00957101 林一
---
<!-- .slide: data-background="https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg" -->
## 實驗說明
* 實驗動機
* 實驗目的
* 分析問題
* 設計解決方案
---
<!-- .slide: data-background="https://images.unsplash.com/photo-1576707948881-b485713fbad7" -->
### 實驗動機
在潛水、游泳時,會想拍攝關於水中的照片,
但拍攝出來的照片總是呈現藍綠色,
不但觀感不好還十分模糊。
如果能完成
水下影像還原的程式,
是不是就能看到觀感更好的照片呢?
----
### 實驗目的
利用深度學習方法,對水下拍攝的影像進行還原和增強,以改善影像品質、還原真實色彩並提升細節清晰度。
----
### 分析問題
在水中拍攝的影像,會受到光線衰減、水中雜質、海水吸收與散射等物理光學效應的影響,導致拍攝的圖片有以下問題:
1. 圖片模糊、不清晰
2. 顏色偏移:不同波長的色光衰減率不同。
3. 顏色失真:波長越長的色光,可能被海水完全吸收。
使得水下拍攝的影像,基本會呈現藍綠色的樣子,難以觀察與研究。
----
### 設計解決方案
| 問題 | 目的 | 方案 |
| -------- | -------- | -------- |
| 如何還原影像? | 實驗目的 | CNN模型 |
| 如何判斷影像還原的成效? | 如何修正演算法 | 色板分析 |
| 如何應用? | 隨時可以使用 | Google插件|
---
## 實驗步驟
1. 找到水下影像還原的 CNN 模型
2. 在測試影像中放入色板,透過 fasterRCNN 抓取色板
3. 分析色板資料
4. 不斷修改 dataset 與參數,改進影像還原模型
5. 在Google chrome中,以 Google 插件加以應用
----
### <font color="black">程式架構</font>
<!-- .slide: style="background-color: white; text-align: center; padding: 30px;" -->
```flow
st=>start: 水下影像還原
op1=>operation: fasterRCNN (抓取色板)
op2=>operation: ColorAnalysis (校正與分析色板)
op3=>operation: 應用Google插件
para=>parallel: waternet (影像還原)
e=>end: 顯示還原數據
e2=>end: 還原網路上的圖片
st->para
para(path1, right )->op3->e2
para(path2, bottom)->op1->op2->e
```
---
### 1. 找到水下影像還原的 CNN 模型
 
* Paper:Li, Chongyi, et al. "An underwater image enhancement benchmark dataset and beyond." IEEE Transactions on Image Processing 29 (2019): 4376-4389.
* Github:tnwei/waternet
----
<!-- .slide: style="background-color: white; text-align: center; padding: 30px;" -->
#### <font color="black">訓練過程</font>
```flow=
st=>123
op=>operation: VGG19:判斷模型 → perceptual_loss
op2=>operation: mse, ssim, psnr
op3=>operation: 評估生成圖與真實的差異
para=>parallel: WaterNet:生成模型 → 水體分割、精煉、組合(wb,gc,he)
para(path1, bottom)->op->op3
para(path2, right )->op2->op3
```
<font color="black">Datasets:水下照片、真實(還原)照片</font>
評估指標包括 "mse"、"ssim"、"psnr" 和 "perceptual_loss"。
----
#### WaterNet 網路
* ConfidenceMapGenerator
* Refiner
* WaterNet
```python
def __init__(self):
super().__init__()
self.cmg = ConfidenceMapGenerator()
self.wb_refiner = Refiner()
self.ce_refiner = Refiner()
self.gc_refiner = Refiner()
def forward(self, x, wb, ce, gc):
wb_cm, ce_cm, gc_cm = self.cmg(x, wb, ce, gc) #分割
refined_wb = self.wb_refiner(x, wb) # 精煉
refined_ce = self.ce_refiner(x, ce)
refined_gc = self.gc_refiner(x, gc)
return ( # 組合
torch.mul(refined_wb, wb_cm)
+ torch.mul(refined_ce, ce_cm)
+ torch.mul(refined_gc, gc_cm)
)
```
----

----
#### 與原圖的比較
| 原圖 | 還原 |
| -------- | -------- |
|  |  |
---
### 2. 在測試影像中放入色板,透過 fasterRCNN 抓取色板

----
<!-- .slide: style="background-color: white; text-align: center; padding: 30px;" -->
#### <font color="black">抓取色板的過程</font>
```flow
st=>start: 抓取色板
e=>end: 色板分析
op=>operation: 標籤 Label Studio
op1=>operation: 訓練fasterRCNN
op2=>operation: 分析色板顏色
cond=>condition: 是否正確
cond2=>condition: 是否正確
para=>parallel: 標注更多資料
para2=>parallel: 修正
st->op(right)->op1(right)->cond
cond(yes)->e
cond(no)->para
para(path2)->op
```
---
### 3. 分析色板資料
 
----
<!-- .slide: style="background-color: white; text-align: center; padding: 30px;" -->
#### <font color="black">分析色版的過程</font>
```flow
st=>start: 分析色板
op1=>operation: 抓取角點
op2=>operation: 透視校正
op3=>operation: 提取色板裡的各色塊
op4=>operation: 分析色塊顏色:delta_e, 色彩通道差距
e=>end: 輸出結果
st->op1->op2->op3->op4->e
```
----
#### 抓取角點 與 透視校正

----
#### 校正

----
 
----
#### 數據分析
 
* 圖片:視覺化數據
* 文字:用 excel 紀錄
----
有了評估還原的方法後,就可以改進影像還原模型
---
### 4. 不斷修改 dataset 與參數,改進影像還原模型
 
* 水下场景数据集 Underwater Datasets
* An Underwater Image Enhancement Benchmark Dataset and Beyond
----
#### 改進前後的比較
| 模型 | 改進前 | 改進後 |
| -------- | -------- | -------- |
| 還原圖 | |  |
| 色塊色差 | | |
| 平均deleta | 64.44 | 63.71 |
----
#### 與其他 CNN 模型做比較
| 模型 | WaterNet (raw-890) | neural-colorization (G-pth) |
| -------- | -------- | -------- |
| 還原圖 | | |
| 色塊色差 | | |
| 平均deleta | 63.71 | 62.55 |
---
### 5. 在Google chrome中,以 Google 插件加以應用

----
<!-- .slide: style="background-color: white; text-align: center; padding: 30px;" -->
```flow
st=>start: 網路的水下影像還原
op1=>operation: 前端:google插件
op2=>operation: 傳送靜態的圖片 url
op3=>operation: 後端:從 url 下載圖片並使用waternet還原
op4=>operation: 回傳 base64 字串
e=>end: 解碼並顯示還原圖片
st->op1->op2->op3->op4->e
```
----
#### 前端:google插件

----
#### 後端:

----
#### 新視窗:顯示還原圖片

----
#### 資料的傳輸
```python
# 接收 POST 請求後,進行圖片處理
# 從 server/temp.jpg 讀入
# 將設定好的參數輸入至特定的 processing python file
# 輸出至 server/temp.jpg
# return server/temp.jpg 的 base64 字串
# input json
# {
# "url": "IMAGE_URL",
# "option": "PROCESSING OPTION"
# }
# output json
# {
# "img_data": "BASE64",
# "width": "IMAGE_WIDTH",
# "height": "IMAGE_HEIGHT"
# }
```
----
{"title":"人工智慧報告","breaks":true,"slideOptions":"{\"transition\":\"fade;\"}","contributors":"[{\"id\":\"d1ce5988-a8d9-47ae-a71f-dd518d97057f\",\"add\":7815,\"del\":1338}]"}