
ทุกครั้งที่ผมถ่ายรูปสัตว์ตัวเล็กๆ ที่ลอยอยู่กลางความมืดตอนดำน้ำ blackwater ผมจะเจอปัญหาเดิมซ้ำๆ
เอารูปไปถาม Google Lens — มันตอบมาแบบกว้างๆ บางทีก็มองผิดไปเลย แม้โดยรวมจะถูกบ่อยกว่าผิด แต่พอเป็นสัตว์จำพวกแพลงก์ตรอนที่หน้าตาแปลกประหลาดแบบ blackwater มันแทบไม่มีข้อมูลให้ดึงมาตอบเลย
เอารูปไปโพสใน iNaturalist เพื่อให้คนช่วยยืนยันชนิด (community identification) — แม่นยำกว่าก็จริง แต่ต้องรอ ต้องมีคนเก่งผ่านมาเห็นแล้วช่วยตอบ ซึ่งสำหรับสัตว์ blackwater ที่ข้อมูลในระบบมีน้อยมากอยู่แล้ว บางทีรอเป็นวันๆ ก็ไม่มีคนตอบ
ผมเป็นคนที่หลงรักเรื่องแพลงก์ตรอนมานาน วันหนึ่งก็เกิดความคิดขึ้นมาว่า — ในเมื่อมีความรู้ด้าน software development อยู่แล้ว ทำไมไม่เอาความรู้นี้มาทำอะไรสักอย่างเล่นๆ ดูล่ะ
นั่นคือจุดเริ่มต้นของ OceanLens
🧩 จับข้อดีของสองระบบที่มีอยู่แล้วมารวมกัน
ไอเดียตั้งต้นไม่ได้ซับซ้อนเลย — ผมมองว่า Google Lens มีจุดแข็งเรื่องความเร็ว ตอบได้ทันทีไม่ต้องรอใคร ส่วน iNaturalist มีจุดแข็งเรื่องความแม่นยำเพราะมีคนจริงช่วยตรวจ ถ้าเอาจุดแข็งทั้งสองมารวมกัน — ให้ AI ตอบได้เร็วแบบ Google Lens แต่ฝึกมาให้แม่นยำเฉพาะทางแบบที่ผู้เชี่ยวชาญด้าน plankton จะตอบ — มันก็ควรจะเป็นเครื่องมือที่ตอบโจทย์นักดำน้ำ blackwater ได้ดีกว่าทั้งสองระบบรวมกัน
ตอนแรกผมตั้งใจทำแค่ระบบระบุชนิดแพลงก์ตรอนสำหรับนักดำน้ำ blackwater โดยเฉพาะ แต่พอเริ่มลงมือทำไปเรื่อยๆ ก็คิดว่า — ในเมื่อโครงสร้างพื้นฐานมันรองรับได้อยู่แล้ว ทำไมไม่ขยายให้ครอบคลุมสัตว์ทะเลทั้งหมดไปเลยล่ะ
ผมเลยวาง roadmap การพัฒนาออกมาเป็นเฟส แบ่งตาม taxonomy (กลุ่มอนุกรมวิธาน) — เริ่มจาก Phase 1 ที่โฟกัสกลุ่ม blackwater และ pelagic (สัตว์ที่ล่องลอยในทะเลเปิด) ก่อน เช่น Hydrozoa, Ctenophora, Nudibranchia แบบ pelagic, Stomatopoda ตัวอ่อน, Polychaeta ไปจนถึงสิ่งมีชีวิตขนาดจิ๋วอย่าง Radiolaria — ตอนนี้สะสมข้อมูลภาพไปแล้วกว่า 100,000 ภาพในเฟสนี้ ก่อนจะขยายไป Phase 2 ที่เป็นกลุ่มใหญ่ขึ้นอย่างปลากระดูกแข็ง ปลากระดูกอ่อน (ฉลาม กระเบน) และสุดท้าย Phase 3 ที่จะทำโหมดสลับระหว่าง blackwater กับแนวปะการังกลางวัน
แต่การมีฐานข้อมูลภาพอย่างเดียวไม่พอ — หัวใจจริงๆ ของ OceanLens อยู่ที่การสอน AI ให้ "ตัดสินใจ" อย่างฉลาด และนี่คือส่วนที่ยากที่สุดในทั้งโปรเจกต์
🔬 จาก POC ในโฟลเดอร์คอมพิวเตอร์ ถึงระบบ RAG เต็มรูปแบบ
ผมเริ่มจากอะไรง่ายที่สุดก่อน — เขียน script ทดสอบไอเดีย (Proof of Concept) โดยเอารูปสัตว์ทะเลไปวางไว้ในโฟลเดอร์บนคอมพิวเตอร์ แล้วเขียนโค้ดให้ AI แบบ LLM (Large Language Model) ที่อ่านภาพได้ มาวิเคราะห์รูปเหล่านั้น
จากจุดนั้น ผมค่อยๆ ใส่เทคนิคที่ซับซ้อนขึ้นเข้าไป โดยเฉพาะการสร้าง vector database (ฐานข้อมูลที่เก็บข้อมูลในรูปแบบตัวเลขที่ใช้วัดความคล้ายคลึงกันได้) ผ่านเทคนิคที่เรียกว่า RAG (Retrieval-Augmented Generation) — แทนที่จะให้ AI ตอบจากความรู้ที่มันมีในตัวเพียงอย่างเดียว ระบบจะค้นหาภาพและข้อมูลที่ใกล้เคียงที่สุดจากฐานข้อมูลที่เราสร้างไว้ก่อน แล้วให้ AI ใช้ข้อมูลนั้นมาช่วยตัดสินใจตอบ
ตัวทดสอบที่ผมเลือกใช้ฝึกปรับ prompt ตัวแรกๆ คือไฮโดรมีดูซ่า (hydromedusa, ตัวอ่อนระยะมีดูซ่าของกลุ่ม Hydrozoa) ชื่อ Liriope tetraphylla — ผมปรับไปเรื่อยๆ จนมันเลิก "หลอน" (hallucinate, การที่ AI ตอบมั่นใจแต่ผิด) แล้วตอบ phylum ได้ถูกก่อน จากนั้นค่อยๆ ไล่ลงไปที่ระดับ genus, family, species ตามลำดับ
นอกจากข้อมูลภาพ ผมยังใส่ข้อมูลด้าน marine biology และ zoology ลงไปในระบบด้วย เพื่อให้ AI มี "ความรู้พื้นฐาน" ติดตัว ไม่ใช่แค่จดจำภาพอย่างเดียว — ผลคือแม้ฐานข้อมูลภาพจะไม่มีรูปสัตว์ตัวนั้นโดยตรง AI ก็ยังสามารถตอบได้ในระดับ phylum, family, หรือ genus จากความรู้ทางชีววิทยาที่มันมี โดยไม่เดาชื่อสปีชีส์มั่วๆ ออกมา
แต่ถึงจะมีทั้งฐานข้อมูลภาพและความรู้ทางชีววิทยาแล้ว ปัญหาที่ตามมาคือ — แล้วเมื่อไหร่ AI ควรเชื่อฐานข้อมูล เมื่อไหร่ควรเชื่อสิ่งที่มันเห็นในภาพ? นี่คือคำถามที่ใช้เวลาแก้นานที่สุด
🤖 บทเรียนจาก AI ที่ "หลอนซ้ำๆ" — สี่เวอร์ชันกว่าจะเจอจุดที่พอดี
นี่คือส่วนที่ผมคิดว่าน่าเล่าที่สุดในทั้งโปรเจกต์ — เพราะกว่าจะมาถึงระบบที่ใช้งานได้จริงตอนนี้ ผมต้องผ่านความล้มเหลวมาทั้งหมด 3 รอบ
เวอร์ชันแรก (V1) — เชื่อฐานข้อมูล 100%
แนวคิดแรกง่ายมาก คือให้ AI ค้นหาสิ่งที่หน้าตาคล้ายที่สุดในฐานข้อมูล แล้วตอบออกมาตรงๆ วิธีนี้เร็วและให้ผลสม่ำเสมอ — จนกว่าจะเจอสัตว์ที่ไม่มีอยู่ในฐานข้อมูลเลย เมื่อนั้นระบบจะ "ยัดเยียด" คำตอบที่ใกล้เคียงที่สุดออกมาด้วยความมั่นใจ ทั้งที่มันผิด — ปัญหานี้เกิดซ้ำๆ เพราะโลกของ blackwater diving เต็มไปด้วยสัตว์ที่หายากและไม่มีใครบันทึกไว้มาก่อน
เวอร์ชันที่สอง (V2) — ให้สิทธิ์ AI เถียงฐานข้อมูล
เพื่อแก้ปัญหาของ V1 ผมให้สิทธิ์ AI ใช้การวิเคราะห์ภาพ (vision) อย่างเป็นอิสระมากขึ้น และมีสิทธิ์ปฏิเสธคำตอบจากฐานข้อมูลได้ถ้าเห็นว่าขัดแย้งกับสิ่งที่มันมองเห็นในภาพ วิธีนี้ช่วยกรณีตัวอ่อนที่ไม่เคยเจอมาก่อนได้ดีขึ้น แต่กลับสร้างปัญหาใหม่ที่ผมเรียกเล่นๆ ว่า "ความก้าวร้าวทางวิชาการ" — เช่น เมื่อฐานข้อมูลยืนยันชัดเจนจากภาพอ้างอิงหลายใบว่านี่คือหอย (Mollusca) แต่ AI กลับเห็นโครงสร้างใสๆ คล้ายปีกบนตัวอ่อน แล้วเถียงว่ามันคือหนอนริบบิ้น (Nemertea) ทั้งที่หลักฐานจากฐานข้อมูลแน่นกว่ามาก — AI มั่นใจในสิ่งที่ตัวเองมองเห็นเกินไป จนกล้าเถียงข้อมูลที่ถูกต้องกว่า
เวอร์ชันที่สาม (V3) — กฎเหนือสัญชาตญาณ
บทเรียนจาก V1 และ V2 ทำให้ผมรู้ว่าทั้งสองทางสุด (เชื่อฐานข้อมูลอย่างเดียว vs ให้ AI ตัดสินใจอย่างเดียว) ไม่ใช่คำตอบ ผมจึงออกแบบลำดับความสำคัญที่เข้มงวดขึ้นมา กำหนดชัดเจนว่าสถานการณ์ไหนฐานข้อมูลชนะ สถานการณ์ไหนการมองเห็นของ AI ชนะ — เมื่อฐานข้อมูลมั่นใจสูง ให้ถือว่า phylum หรือ class ที่ระบุมาเป็นข้อเท็จจริง แล้วให้ AI ตีความสิ่งที่เห็นในภาพให้สอดคล้องกับกรอบนั้นแทนที่จะเถียงข้ามไปเลย แต่ก็ยังเปิดช่องให้ AI เสริมรายละเอียดที่ฐานข้อมูลไม่มีได้ เช่น ถ้าฐานข้อมูลบอกว่าเป็น Mollusca แต่ AI เห็นว่าน่าจะอยู่ในระยะตัวอ่อน ก็ให้เสริมข้อมูลระยะชีวิตได้โดยไม่ไปแก้ phylum ที่ยืนยันแล้ว และที่สำคัญคือถ้าเจอความขัดแย้งทางกายวิภาคที่ชัดเจนเกินจะมองข้าม AI ต้องกล้าตอบว่า "ไม่รู้จัก" เพราะคำตอบที่ซื่อสัตย์ว่าไม่รู้ ดีกว่าคำตอบผิดที่มั่นใจเกินจริง
แนวทางนี้แก้ปัญหาของ V1 และ V2 ได้สำหรับสัตว์ที่มีอยู่ในฐานข้อมูลอยู่แล้ว แต่ยังมีจุดบอดเหลืออยู่หนึ่งจุด — เมื่อสัตว์ตัวนั้นไม่มีอยู่ในฐานข้อมูลเลยจริงๆ ระบบก็ยังไม่มีทางรู้ตัว มันยังคืนคำตอบที่ใกล้เคียงที่สุด (แต่ผิด) ออกมาด้วยความมั่นใจระดับหนึ่งอยู่ดี
เวอร์ชันปัจจุบัน (V3.5) — ด่านกรองก่อนตัดสิน
จุดบอดสุดท้ายนี้คือสิ่งที่ V3.5 มาแก้ — ผมเพิ่มด่านกรองความคล้ายคลึงเข้าไปก่อนที่จะเริ่มตัดสินใจอะไรเลย ระบบจะถามตัวเองก่อนเสมอว่า ตัวเลือกที่ใกล้เคียงที่สุดจากฐานข้อมูลตอนนี้ผ่านเกณฑ์ความคล้ายคลึงขั้นต่ำหรือเปล่า ถ้าไม่มีตัวเลือกไหนผ่านเกณฑ์เลย ระบบจะรู้ตัวทันทีว่ากำลังเจอสิ่งที่ไม่รู้จักจริงๆ — บีบให้ AI ต้องตอบ Unknown สำหรับ genus/species แทนที่จะเดามั่วๆ ออกมา
ในหน้าแอป ผู้ใช้จะเห็นสถานะนี้ในชื่อที่ฟังดูน่าตื่นเต้นกว่าคำว่า "ไม่พบข้อมูล" — เรียกว่า "Uncharted Waters" (ดินแดนที่ยังไม่มีแผนที่) ซึ่งสื่อถึงความหมายที่ตรงกับความจริงมากกว่า เพราะสัตว์ตัวนั้นอาจจะเป็นสิ่งที่หายากมากจนยังไม่มีใครบันทึกภาพไว้ในระบบใดเลยก็ได้
นอกจากนี้ V3.5 ยังเพิ่มผลวิเคราะห์ที่ลึกขึ้นกว่าแค่ชื่อสปีชีส์ — มีส่วน "สายตานักดำน้ำ" (บันทึกพฤติกรรมและจุดสังเกตเมื่อเจอสัตว์ตัวนี้), "เทคนิคถ่ายภาพ" (มุมเข้าและการจัดแสงที่เหมาะ), และ "สถานะการอนุรักษ์" — เปลี่ยนข้อมูลทางวิทยาศาสตร์ดิบๆ ให้กลายเป็น insight ที่ช่างภาพใต้น้ำเอาไปใช้ได้จริงในสนาม ไม่ใช่แค่รู้ชื่อแล้วจบ
ความล้มเหลวสามรอบนี้สอนผมเรื่องหนึ่งที่ชัดเจนมาก — การทำให้ AI "ฉลาด" ไม่ใช่เรื่องยากที่สุด แต่การทำให้ AI "รู้ว่าตัวเองไม่รู้" ต่างหากที่ยากกว่ามาก
🧑💻 ทีมเล็กๆ ที่ใหญ่ได้เพราะเครือข่ายคนรักทะเล
ในส่วนของการพัฒนาโค้ดทั้งหมด ผมทำคนเดียวตั้งแต่ต้นจนถึงตอนนี้ แต่สิ่งที่ทำให้ระบบนี้มีข้อมูลภาพมากพอจะฝึก AI ได้ มาจากเครือข่ายคนรักทะเลที่ผมรู้จัก — ผมขอภาพตั้งต้นจากช่างภาพต่างประเทศที่เชี่ยวชาญด้าน plankton โดยเฉพาะ รวมกับเพื่อนช่างภาพชาวไทยที่ถ่าย blackwater มานาน และภาพจากคอลเลกชันส่วนตัวของผมเองที่สะสมมาตลอดหลายปีของการดำน้ำ
นี่คือจุดที่ทำให้ผมรู้สึกว่า OceanLens ไม่ใช่แค่โปรเจกต์ส่วนตัว แต่เป็นผลรวมของคนที่หลงใหลในโลกใต้น้ำที่ยินดีแบ่งปันความรู้และภาพถ่ายเพื่อให้เครื่องมือนี้ฉลาดขึ้นไปด้วยกัน
🚀 จากของเล่นส่วนตัว สู่เครื่องมือสำหรับคนทำงานวิจัยจริง
ตอนนี้ OceanLens เปิดให้ใช้งานฟรีที่ oceanlens.app และจะค่อยๆ พัฒนาต่อไปตาม roadmap ที่วางไว้ — เป้าหมายต่อไปที่ผมตั้งใจไว้คือการเปิด Marine Vision API ให้นักศึกษาหรือคนที่ทำงานด้าน marine biology สามารถเรียกใช้งานระบบระบุชนิดนี้ผ่าน API ได้โดยตรง สำหรับประมวลผลภาพจำนวนมากในงานวิจัยหรือภาคสนาม โดยวางแผนเป็นรูปแบบสมาชิกรายเดือนสำหรับ tier นี้ในอนาคต
จุดเริ่มต้นของเรื่องนี้ไม่มีอะไรซับซ้อน — แค่ความรำคาญเล็กๆ จากการที่เครื่องมือที่มีอยู่ในตลาดใช้กับ blackwater ไม่ได้เลย กับความรักในเรื่องแพลงก์ตรอนที่มีมานาน แต่พอลงมือทำจริงๆ มันกลับกลายเป็นบทเรียนเรื่องการออกแบบ AI ให้ "รู้ขีดจำกัดของตัวเอง" ซึ่งยากกว่าที่คิดไว้มาก
ถ้าใครเป็นนักดำน้ำ blackwater ที่เจอสัตว์ประหลาดๆ แล้วไม่รู้ว่าคืออะไร ลองเอาไปถาม OceanLens ดูได้ครับ — และถ้าระบบตอบว่า "Uncharted Waters" ก็อาจจะเป็นไปได้ว่าคุณเจอสัตว์ที่ยังไม่มีใครบันทึกภาพไว้ในระบบใดในโลกเลยก็ได้
📌 ลองใช้งานได้ที่ oceanlens.app