บทความแนะนำ Neural Architectures ที่สำคัญ  

  RSS
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

รู้จัก EfficientNet โมเดลที่แข็งแกร่งที่สุดในปฐพีบน Computer Vision 2019

เพื่อนๆ ที่รู้ประวัติของ Deep Learning นั้น ทราบดีว่างานพลิกโลกเหล่านี้มีต้นกำเนิดจาก AlexNet บน ที่เอาชนะคู่แข่งบนปัญหา Computer Vision ได้ขาดลอย (ดูประวัติฉบับเต็มได้ที่่นี่ครับ https://thaikeras.com/2018/rise-of-dl/)

ถัดจาก AlexNet ก็มีโมเดล “Deep Learning” ชื่อดังกำเนิดอีกมากมาย ที่ดังมากๆ ก็คือ Inception จากทีม Google, ResNet จากทีม Microsoft หรือ ResNeXt จากทีม Facebook เป็นต้น ใน Kaggle เองโมเดลเหล่านี้ก็ยังเป็น “กระดูกสันหลังสำคัญของแชมเปี้ยน” ของแต่ละการแข่งขัน

ขึ้นชื่อว่า “Deep” Model เพื่อนๆ อาจพอเดากันได้ว่าโมเดลที่คิดค้นออกมาช่วงหลังๆ มักจะมีความลึกขึ้นเรื่อยๆ จากเดิม Network ความยาว 7 ชั้นบน AlexNet มาเป็น หลายสิบชั้นบน Inception และหลักร้อยชั้นบน ResNet

ปรากฏการณ์เหล่านี้ทำให้บางช่วงเวลา นักวิจัย วิศวกรทั้งหลายเข้าใจไปว่า “ความลึก” คือกุญแจสำคัญของความสำเร็จของ Neural Networks

อย่างไรก็ดีมีนักวิจัยบางกลุ่มพบว่า เราอาจไม่ต้องเพิ่มความสามารถของโมเดลจากการเพิ่ม “ความลึกเท่านั้น” แต่เรายังสามารถ “เพิ่มความกว้าง” (จำนวน convolution filters) ของแต่ละชั้นก็ทำให้โมเดลมีประสิทธิภาพที่เพิ่มขึ้นได้ จึงคิดค้นโมเดลอย่าง “Wide ResNet” ( https://arxiv.org/pdf/1605.07146v3.pdf) ที่เน้นความกว้างแทนความยาวและมีประสิทธิภาพใกล้เคียงกับ ResNet ได้

มาถึงจุดนี้เพื่อนๆ อาจเริ่มสงสัยว่า Deep Learning Model ควรจะกว้างหรือควรจะยาวกันแน่? และถ้าความกว้างคือคำตอบ เราควรจะเปลี่ยนเป็น Wide Learning แทน Deep Learning ไหม (อันนี้ผมคิดเอง :D)

เข้าเรื่อง EfficientNet กันสักทีครับ นั่นคือ สดๆ ร้อนๆ ในเดือนพฤษภาคมที่ผ่านมา ปี 2019 ของเรานี่เอง ทางทีม Google ก็ได้ส่งโมเดลที่ปฏิวัติวงการ Image Recognition ซึ่งก็คือ “EfficientNet” นี่เองครับ โดย EfficientNet นั้นจะมีตั้งขนาดเล็กคือ B0 B1 ไปจนถึงโมเดลขนาดยักษ์นั่นคือ B6 B7 ซึ่งชนะโมเดลอื่นๆ ทั้งหมดในปัจจุบันอย่างขาดกระจุย (ดูภาพประกอบครับ)

ก่อนอื่น EfficientNet มีที่มาอย่างไร ??

EfficientNet ( https://arxiv.org/abs/1905.11946) นั้นถูกคิดโดย 1 ในนักวิจัยระดับสุดยอดของวงการในทีม Google ที่มีนามว่า Quoc V. Le (ถ้าใครทราบว่าอ่านออกเสียงชื่อพี่เค้าอย่างไร รบกวนบอกแอดมินด้วยครับ 55) ที่ขบคิดปัญหาที่เราเกริ่นข้างต้นว่า โมเดลที่มีประสิทธิภาพจริงๆ ควรจะ “Deep” หรือ “Wide” กันแน่? ในที่สุด Q. Le และทีมงานอีกคนที่ชื่อ Mingxing Tan ก็ถึงบางอ้อครับ “โมเดลที่ดีที่สุดควรจะทั้ง Deep และ Wide ในระดับที่เหมาะสม” และเปลี่ยนมุมมองใหม่ว่า

(1) เอา computational resource เป็นตัวตั้งต้น

(2) ควรค่อยๆ scale ทั้งความ Deep และ Wide ไปพร้อมๆ กันตามทรัพยากรที่มี ถ้ามีน้อยก็ Deep และ Wide น้อยๆ (ตั้งชื่อว่า B0) และถ้าทรัพยากรเยอะก็เพิ่มสเกล Deep และ Wide ไปเรื่อยๆ (B1 B2 … B7)

 

โดยทีมงานทั้งสองได้ประยุกต์ใช้ AutoML หรือสุดยอดงานของ Google อีกหนึ่งงาน ที่ช่วยพิจารณาการเพิ่มสเกลที่ประสิทธิภาพสูงสุด โดย Google ถึงกับเคลมว่าในทรัพยากรที่จำกัดบางช่วงนั้น EfficientNet นั้นทรงพลัง (เร็วและเล็ก) กว่า state-of-the-art ปัจจุบันนับ 10 เท่า!! จากกราฟเทียบประสิทธิภาพเพื่อนๆ จะเห็นว่า B0-B7 โมเดลให้ความแม่นยำกว่าโมเดลในไซส์เดียวกันมากๆ อาทิเช่น โมเดล B2 ซึ่งมี Parameters ราว 10 ล้านให้ความแม่นยำกว่า SOTA ไซส์เดียวกันคือ NASNet-A หลายช่วงตัว และให้ความแม่นยำสูสีกับ Inception-ResNetV2 ที่มี parameters มากกว่า 6 เท่า!!

 

(เพื่อนๆ ที่อยากทราบว่า state-of-the-art คืออะไร อ่านได้ที่นี่ครับ : https://thaikeras.com/community/main-forum/%E0%B8%84%E0%B9%89%E0%B8%99%E0%B8%87%E0%B8%B2%E0%B8%99%E0%B8%9E%E0%B8%A3%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B9%82%E0%B8%84%E0%B9%89%E0%B8%94%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%94%E0%B8%B5%E0%B8%97%E0%B8%B5/ )

 

บทความนี้เราเพียงแนะนำให้เพื่อนๆ รู้จัก EfficientNet ระดับผิวเท่านั้น อดใจรออีกไม่นาน ทีมงานจะพาเพื่อนๆ ลองใช้งาน Keras EfficientNet กันจริงๆ ในภาคต่อของปัญหา “ตรวจจับเบาหวานในดวงตา” ครับ ซึ่ง EfficientNet นี้นับว่าเป็นกุญแจสำคัญของผู้เข้าแข่งขันระดับท้อปหลายๆ ทีมบนการแข่งขันนี้ทีเดียวครับ

 

ถ้าเห็นว่าบทความมีประโยชน์ พิจารณา Like & Share เพื่อเป็นกำลังใจให้ทีมงานหน่อยนะคร้าบ

อ้างอิง
Posted : 28/08/2019 10:47 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

สำหรับการใช้ EfficientNet บน Keras นั้นสามารถ copy จากสุดยอด Github นี้ได้เลยครับ

https://github.com/qubvel/efficientnet

โดย Github นี้ล่าสุดปี 2020 ได้ update weight ที่เรียกว่า ‘noisy-students’ ซึ่งมีความแม่นยำยิ่งกว่า ‘imagenet’ ไปอีกขั้นหนึ่งด้วยครับ ตัวอย่างการติดตั้งและใช้งาน EfficientNet ดังกล่าวภาคปฏิบัติสามารถดูได้จาก Workshop iMet2019 ซึ่งเป็นการใช้ EfficientNet ในการระบุ tags สิ่งของนับแสนชิ้นในพิพิธภัณฑ์ระดับโลกครับ

https://www.kaggle.com/pednoi/deep-learning-imet-collection-2019

This post was modified 6 months ago by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 01/03/2020 2:49 pm
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

ไดอะแกรมความเหนือชั้นของ Noisy Student weights

รายละเอียดเพิ่มเติม

https://harangdev.github.io/papers/9/

ตอบกลับอ้างอิง
Posted : 01/03/2020 2:57 pm
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

รู้จักกับ Transformer

https://thaikeras.com/2018/transfer-learning-nlp/

http://bit.ly/thaikeras-medium-transformer

 

ตอบกลับอ้างอิง
Posted : 26/04/2020 4:58 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

FixEfficientNet -- เพิ่มประสิทธิภาพของ EfficientNet ขึ้นไปอีกขั้น จากทีม FB-AI

https://github.com/facebookresearch/FixRes

ตอบกลับอ้างอิง
Posted : 11/06/2020 5:52 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine
รู้จัก U-Net สำหรับงาน Segmentation บน medical images
เราได้แนะนำ U-Net กับคุณ cc8 ที่ประยุกต์ใช้งาน Segmentation ด้านสมองที่กระทู้นี้ครับ 
 
 
ตอบกลับอ้างอิง
Posted : 16/06/2020 12:27 am
Share:

Please Login or Register