Notifications
Clear all

iMaterialist (Fashion) 2019 —- ได้เวลาให้ AI วิเคราะห์แฟชั่น และทำความรู้จัก Segmentation Model

28 ข้อความ
2 Users
11 Likes
48.8 K Views
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 399
Topic starter  

บทความหลักที่อธิบายปัญหา รวมทั้งโปรแกรมทั้งหมดฉบับสมบูรณ์ดูได้ที่นี่ครับ

https://www.kaggle.com/pednoi/image-segmentation

 

มีคำถามอะไรเพิ่มเติมสามารถโพสต์ถามข้างล่างได้เลยครับผม

UPDATE (2020): ในส่วนล่างของบทความเราได้พูดคุยกับคุณ cc8 และได้แนะนำ segmentation model ที่ดีมากๆ อีกโมเดลหนึ่งชื่อว่า U-Net ครับผม

This topic was modified 5 years ago 4 times by The Neural Engineer
This topic was modified 4 years ago by The Neural Engineer

   
อ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 399
Topic starter  

ตัวอย่างเพิ่มเติมการใช้ Mask-RCNN กับปัญหา Wheat Detection (ตรวจจับรวงข้าว) https://www.kaggle.com/ipythonx/keras-global-wheat-detection-with-mask-rcnn/

----

เพิ่มเติมเรื่อง Segmentation

Introduction to Image Segmentation by Jeremy Jordan ครับ ละเอียดดีมาก

https://www.jeremyjordan.me/semantic-segmentation/

แล้วก็ Implementation ของ loss functions ต่างๆ ใน TF/Keras

https://lars76.github.io/neural-networks/object-detection/losses-for-segmentation/

ณ เดือน 8 2019 , Kaggle นั้นมี Segmentation Competitions ถึง 4 การแข่งขันพร้อมๆ กัน อาทิเช่น

ทำ segmentation ของ จุดผิดปกติในปอดคนเราว่าป่วยอยู่หรือไม่

หาจุดที่เหล็กขึ้นสนิม

detect เมฆบนฟ้าใน 4 รูปแบบเพื่อทำความเข้าใจความเชื่อมโยงระหว่างเมฆ อุณหภูมิ และภาวะโลกร้อน

เราจะมาเซอร์เวย์การแข่งขันนี้เหล่านี้กันในอนาคตครับ

This post was modified 5 years ago by The Neural Engineer
This post was modified 4 years ago by The Neural Engineer

   
ตอบกลับอ้างอิง
CC8
 CC8
(@cc8)
Active Member
เข้าร่วมเมื่อ: 4 years ago
ข้อความ: 11
 

เนื่องด้วยผมสนใจปัญหาด้าน multiclass image segmentation คล้ายกับงานที่ทางเว็บไซต์ได้นำเสนอใน Workshop : iFashion 2019 — ได้เวลาให้ AI วิเคราะห์แฟชั่นด้วย Keras Mask-RCNN  โดยผมมีคำถามเกี่ยวกับการ Prepare Dataset ของปัญหา multiclass image segmentation ซึ่งผมมีข้อมูลรูปภาพ และส่วนของ Mask แต่ไม่รู้วิธีการทำ label ที่มีส่วนของ class และ mask ดังนั้นจึงอยากให้ช่วยแนะนำวิธีการเตรียม dataset ให้เป็นไฟล์ เช่นเดียวกับไฟล์ label_description.json , ไฟล์ train.csv (ที่มีข้อมูลของ imageId, EncodedPixel, Hight, Width, class), และไฟล์ sample_submission.csv เหมือนใน workshop หรือ แนะนำวิธีการอื่น ๆ เพื่อจัดการกับข้อมูลครับ


   
ตอบกลับอ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 399
Topic starter  

สวัสดีครับคุณ @cc8 เพื่อความเข้าใจ รบกวนเล่าเพิ่มเติม (หรือแปะรูปตัวอย่าง) ในส่วนนี้ได้ไหมครับ

แต่ไม่รู้วิธีการทำ label ที่มีส่วนของ class และ mask

และคุณ @cc8 ทำปัญหาด้านใดอยู่ และมีข้อมูลในปัจจุบันอย่างไรครับ? (เข้าใจว่ามีแต่ jpg?)


   
ตอบกลับอ้างอิง
CC8
 CC8
(@cc8)
Active Member
เข้าร่วมเมื่อ: 4 years ago
ข้อความ: 11
 

สวัสดีครับคุณ @neural-engineer ผมทำปัญหาด้าน image segmentation  ปัจจุบันผมมีข้อมูล ที่เป็นภาพ DICOM file และภาพ mask (png file) ที่ได้จาการเตรียมจาก DICOM structure contour คล้ายกับที่แสดง ดังภาพ

[img] [/img]

(ซ้าย)ภาพ DICOM file ที่จะเป็น input (ขวา) ภาพแสดง DICOM structure contour ที่ใช้เตรียม mask ที่แสดงด้านล่าง

[img] [/img]

ภาพ mask ที่จะใช้ train ส่วนของ tumor

ภาพประกอบจาก https://github.com/KeremTurgutlu/dicom-contour/blob/master/tutorial.ipynb

ปัญหาของผมคือผมต้องการ prepare dataset  ในส่วนของ label ที่มีอยู่สองส่วน คล้ายกับที่ทางบอร์ดได้อธิบายไว้ใน work shop ได้แก่

  • ส่วนของ class ที่ประกอบไปด้วย category เป็นประเภทของส่วนที่ต้องการ segmentation เช่น tumor, brain, eye …
  • ส่วนของ mask ที่จะบอกว่าวัตถุคลาสต่าง ๆ ประกอบได้ด้วย pixel ไหนบ้าง

ซึ่งจากที่อ่านใน work shop ในขั้นตอน 2.4 Prepare Dataset ผมเห็นข้อมูลในส่วน ไฟล์ label_desscriptions.json , ไฟล์ train.csv (ที่มีข้อมูลของ imageId, EncodedPixel, Hight, Width, class), และไฟล์ sample_submission.csv

ผมเข้าใจว่าข้อมูลในลักษณะของผมสามารถเตรียมให้เป็นของมูลแบบใน work shop ก่อนจึงจะสามารถใช้เทรนโมเดลได้ จึงอยากรบกวนให้ช่วยอธิบายการเตรียมข้อมูลในลักษณะของผมหน่อยครับว่าจะต้องเตรียมข้อมูลอย่างไร เพื่อที่จะใช้เทรนโมเดลครับ

This post was modified 4 years ago by CC8

   
ตอบกลับอ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 399
Topic starter  

ขอบคุณคุณ @cc8 สำหรับข้อมูลเพิ่มเติมครับ

ตามที่คุณ cc8 เล่ามาแสดงว่าใน dicom 1 รูป เราอาจจะมี contour structure หลายรูป (หลายชนิด contour) ถูกต้องไหมครับ? ในไฟล์ label_descriptions.json นี้เราสามารถพิมพ์เขียนแบบ manual ได้เลยครับ เพราะหลักๆ คือการนิยาม class (ชนิดของ contour) เข้าใจว่ามีไม่กี่ประเภท ดังนั้นเราน่าจะสามารถพิมพ์เองได้ภายในเวลาอันสั้น

ส่วนใน train.csv นั้น จะมีอยู่ 1 column ที่ต้องเขียนฟังก์ชันนั่นคือ EncodedPixels ที่ใช้วิธี rle (run-length encoding) ซึ่งเป็นการเข้ารหัส mask แบบกระชับเพื่อประหยัดพื้นที่ครับ ซึ่งกรณีที่คุณ cc8 มี mask อยู่แล้วสามารถเรียกใช้ function mask2rle ได้เลยครับ ซึ่งสามารถ copy function ตาม kernel นี้ครับ

https://www.kaggle.com/paulorzp/rle-functions-run-lenght-encode-decode

เมื่อได้ rle แล้วเพื่อความชัวร์ ลองแปลง rle ที่ได้กลับเป็น mask แล้วลอง visualize ดูอีกครั้งเพื่อ recheck ความถูกต้องครับ เช่นตัวอย่างจาก kernel นี้ก็ได้ครับ

https://www.kaggle.com/titericz/building-and-visualizing-masks

สำหรับ columns อื่นๆ ใน train.csv เช่น height/width ก็เป็นเพียงขนาดของรูป หรือ class ซึ่งก็เป็นตามประเภทของ contour ซึ่งเราสามารถกำหนดได้ตามข้อมูลที่เรามีอยู่แล้ว

This post was modified 4 years ago 2 times by The Neural Engineer

   
ตอบกลับอ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 399
Topic starter  

ในการวนลูปสร้าง train.csv จาก file รูปที่เรามีทั้งหมดนั้น เราอาจใช้โมดูล glob ซึ่งจะช่วยในการ browse path ทั้งหมดได้ง่ายๆ เลยครับ ซึ่งในรูป contour structure ของแต่ละรูปควรจะมีชื่อ label ของ contour นั้นๆ กำกับอยู่ เช่น ถ้ารูปปกติชื่อ pic1.dcm รูปที่แสดง contour อาจจะชื่อ pic1_label1.dcm เป็นต้น ซึ่งแสดงคร่าวๆ ดัง pseudo code นี้ครับ

import glob
paths = glob.glob(DIR_DICOM+“*.dcm”)

class_list, h_list, w_list = [],[], []
rle_list = []
for path in paths:
    if normal_picture: continue

    img = read_dcm(path)  
    height, width = img.shape
    if ‘label1’ in path:
        class = label1
    elif .... : #all labels
    
    rle = mask2rle(....)

    class_list.append(class)
    h_list.append(height)
    w_list.append(width)
    rle_list.append(rle)


train_df = pd.DataFrame({"EncodedPixels": rle_list, "label": class_list, "width": w_list, "height": h_list})
train_df.to_csv('train.csv')

 

This post was modified 4 years ago by The Neural Engineer

   
ตอบกลับอ้างอิง
Page 1 / 4
Share: