repo นี้ประกอบด้วยการใช้งาน PyTorch ของอัลกอริธึม Deep Dream (:link: blog โดย Mordvintstev และคณะ)
ได้รับการรองรับอย่างเต็มที่สำหรับการใช้ บรรทัดคำสั่ง และ Jupyter Notebook !
และมันจะให้พลังแก่คุณในการสร้างภาพที่ดูประหลาดและหลอนเหล่านี้:
ไม่เลวใช่มั้ย?
ฉันขอแนะนำให้คุณเริ่มต้นด้วยสมุดบันทึก Jupyter ที่ฉันสร้างขึ้น!
หมายเหตุ: มันค่อนข้างใหญ่ ~10 MB ดังนั้นอาจต้องใช้ความพยายามสองสามครั้งในการโหลดลงในเบราว์เซอร์ที่นี่บน GitHub
โดยสรุป อัลกอริธึมจะเพิ่มการเปิดใช้งานเลเยอร์เครือข่ายที่เลือกให้สูงสุดโดยทำการ ไล่ระดับขึ้น
ดังนั้นจากภาพที่ป้อนเข้าเหมือนกับภาพด้านซ้ายหลังจาก "ฝัน" เราจะได้ภาพทางด้านขวา:
ใครจะบอกว่าโครงข่ายประสาทเทียมมีความคิดสร้างสรรค์นี้ซ่อนอยู่ภายใน? -
repos Deep Dream ดั้งเดิมส่วนใหญ่เขียนด้วย Caffe และ repos ที่เขียนด้วย PyTorch มักจะอ่านและทำความเข้าใจได้ยาก repo นี้เป็นความพยายามในการสร้าง repo DeepDream ที่สะอาดที่สุด ที่ฉันรู้จัก + มันเขียนด้วย PyTorch!
นี่คือตัวอย่างบางส่วนที่คุณสามารถสร้างได้โดยใช้โค้ดนี้!
ด้วยการใช้เลเยอร์ที่ตื้นกว่าของโครงข่ายประสาทเทียม คุณจะได้รูปแบบระดับล่าง (ขอบ วงกลม สี ฯลฯ) เป็นผลลัพธ์:
ที่นี่ 2 ภาพแรกมาจาก ResNet50 และภาพสุดท้ายมาจาก GoogLeNet (ทั้งคู่ได้รับการฝึกฝนบน ImageNet)
ด้วยการใช้เลเยอร์เครือข่ายที่ลึกขึ้น คุณจะได้รูปแบบในระดับที่สูงขึ้น (ตา จมูก หัวสัตว์):
อันที่ 1 และ 3 ถูกสร้างขึ้นโดยใช้ VGG 16 (ImageNet) และอันกลางโดยใช้ ResNet50 ที่ได้รับการฝึกล่วงหน้าบน Places 365
หากเราเก็บพารามิเตอร์อื่นๆ ทั้งหมดไว้เหมือนเดิม แต่เราสลับน้ำหนักที่ฝึกไว้แล้ว เราจะได้สิ่งเหล่านี้:
ซ้าย: ResNet50-ImageNet (เราสามารถเห็นคุณสมบัติของสัตว์เพิ่มเติมได้) ขวา: ResNet50-Places365 (สิ่งที่มนุษย์สร้างขึ้น ฯลฯ)
ความฝันเกิดขึ้นกับความละเอียดของภาพหลายภาพซ้อนกัน "แนวตั้ง" (เราเรียกสิ่งนี้ว่า ปิรามิดภาพ )
จากซ้ายไปขวาพารามิเตอร์เดียวที่เปลี่ยนแปลงคือขนาดปิรามิด (จากซ้ายไปขวา: 3, 7, 9 ระดับ)
การเล่นด้วยอัตราส่วนปิรามิดนั้นให้ผลที่คล้ายกัน/เกี่ยวข้องกัน แนวคิดพื้นฐานก็คือพื้นที่สัมพัทธ์ของภาพที่เซลล์ประสาทที่อยู่ลึกกว่าสามารถปรับเปลี่ยนและ "มองเห็น" (ที่เรียกว่า ลานรับสัญญาณ ของเน็ต) จะเพิ่มขึ้น และเราจะใหญ่ขึ้นเรื่อยๆ ลักษณะเหมือนตาโผล่ออกมา (จากซ้ายไปขวา: 1.1, 1.5, 1.8):
หมายเหตุ: คุณสามารถดูพารามิเตอร์ที่ใช้ในการสร้างภาพเหล่านี้ที่เข้ารหัสเป็นชื่อไฟล์ได้!
อย่าลืมตรวจสอบสมุดบันทึก Jupyter! ฉันได้อธิบายเรื่องนี้อย่างละเอียดแล้ว
นี่คือตัวอย่างเพิ่มเติมบางส่วนที่คุณสามารถสร้างได้โดยใช้โค้ดนี้
แนวคิดก็คือว่าไม่ว่าเครือข่ายจะฝันอะไรก็ตาม เพียงแค่ป้อนกลับเข้าไปในอินพุตของมัน และใช้การแปลงทางเรขาคณิต
หากเราใช้เฉพาะการซูมกลางเราจะได้สิ่งนี้:
การใช้การซูมจากส่วนกลางและในเวลาเดียวกันให้หมุน 3 องศาต่อเฟรมจะได้ผลลัพธ์ดังนี้:
สุดท้ายหากเราทำการแปลง่ายๆ (5 px ต่อเฟรมจากซ้ายบนไปขวาล่าง):
หวังว่าสิ่งเหล่านี้จะไม่ทำให้สมองของคุณพัง - มันให้ความรู้สึกเหมือนเว็บ 1.0 ในช่วงต้นปี 2000 ทนกับฉัน.
แทนที่จะป้อนเอาต์พุตกลับไปยังอินพุต เราเพียงแค่ใช้อัลกอริธึมต่อเฟรมและใช้การผสมผสานเชิงเส้น:
การผสมเชิงเส้นเพียงรวมเฟรมปัจจุบันกับเฟรมสุดท้ายเพื่อลดการสั่นไหว (ในที่นี้ฉันใช้ 0.85)
หมายเหตุ: ฉันสร้างภาพ/GIF ของ deepdream ทั้งหมด เครดิตสำหรับศิลปินภาพต้นฉบับระบุไว้ด้านล่าง
git clone https://github.com/gordicaleksa/pytorch-deepdream
cd path_to_repo
conda env create
จากไดเรกทอรีโครงการ (ซึ่งจะสร้างสภาพแวดล้อม conda ใหม่)activate pytorch-deepdream
(สำหรับการเรียกใช้สคริปต์จากคอนโซลของคุณหรือตั้งค่าล่ามใน IDE ของคุณ)แค่นั้นแหละ! ควรทำงานนอกกรอบเมื่อเรียกใช้ไฟล์ Environmental.yml ซึ่งเกี่ยวข้องกับการพึ่งพา
หมายเหตุ: หากคุณต้องการใช้ฟังก์ชันวิดีโอที่ฉันมี คุณจะต้องมี ffmpeg ในเส้นทางระบบของคุณ
แพ็คเกจ PyTorch pip จะมาพร้อมกับ CUDA/cuDNN บางเวอร์ชันด้วย แต่ขอแนะนำอย่างยิ่งให้คุณติดตั้ง CUDA ทั่วทั้งระบบไว้ล่วงหน้า ส่วนใหญ่เป็นเพราะไดรเวอร์ GPU ฉันยังแนะนำให้ใช้ตัวติดตั้ง Miniconda เป็นวิธีหนึ่งในการรับ conda บนระบบของคุณ ปฏิบัติตามจุดที่ 1 และ 2 ของการตั้งค่านี้ และใช้ Miniconda และ CUDA/cuDNN เวอร์ชันล่าสุดสำหรับระบบของคุณ
เพียงเรียกใช้ jupyter notebook
จากคอนโซล Anaconda ของคุณ จากนั้นมันจะเปิดเซสชันในเบราว์เซอร์เริ่มต้นของคุณ
เปิด The Annotated DeepDream.ipynb
แล้วคุณพร้อมที่จะเล่นแล้ว!
หมายเหตุ: หากคุณได้รับ DLL load failed while importing win32api: The specified module could not be found
เพียงทำการ pip uninstall pywin32
จากนั้น pip install pywin32
หรือ conda install pywin32
ควรแก้ไข!
คุณเพียงแค่ต้องเชื่อมโยงสภาพแวดล้อม Python ที่คุณสร้างขึ้นในส่วนการตั้งค่า
นำทางไปยัง/เปิดใช้งาน env ของคุณหากคุณใช้ Anaconda (และฉันหวังว่าคุณจะใช้) และคุณสามารถใช้คำสั่งที่ฉันลิงก์ด้านล่างได้
เคล็ดลับ: วางรูปภาพ/วิดีโอของคุณไว้ในไดเร็กทอรี data/input/
จากนั้นคุณสามารถอ้างอิงไฟล์ของคุณ (รูปภาพ/วิดีโอ) ด้วยชื่อไฟล์เหล่านั้น แทนที่จะใช้เส้นทางสัมพัทธ์/สัมพัทธ์
หากต้องการสร้าง อิมเมจ Deep Dream แบบคงที่ ให้รันคำสั่งต่อไปนี้:
python deepdream.py --input <img_name> --img_width 600
สิ่งนี้จะใช้การตั้งค่าเริ่มต้น แต่คุณจะได้รับผลลัพธ์ที่มีความหมายทันทีที่บันทึกไปที่:
data/out-images/VGG16_EXPERIMENTAL_IMAGENET/
หมายเหตุ: ไดเร็กทอรีเอาต์พุตจะเปลี่ยนไปตามรุ่นและน้ำหนักที่ฝึกไว้ล่วงหน้าที่คุณใช้
หากต้องการรับวิดีโอ Ouroboros 30 เฟรมที่แกะกล่อง ให้ทำดังนี้:
python deepdream.py --input <img_name> --create_ouroboros --ouroboros_length 30
มันจะดัมพ์เฟรมกลางไปที่ data/out-videos/VGG16_EXPERIMENTAL_IMAGENET/
และจะบันทึกวิดีโอสุดท้ายไปที่ data/out-videos
หากต้องการสร้าง วิดีโอ Deep Dream ให้รันคำสั่งนี้:
python deepdream.py --input <mp4 video name>
มันจะดัมพ์เฟรมกลางไปที่ data/out-videos/tmp_out
และจะบันทึกวิดีโอสุดท้ายไปที่ data/out-videos
สนุกกับการเล่นกับโปรเจ็กต์นี้! นี่คือผลลัพธ์เพิ่มเติมที่สวยงามบางส่วน:
GPU ที่มีขนาด 2+ GB ก็เพียงพอแล้ว
คุณจะสามารถสร้างภาพ DeepDream, Ouroboros และ DeepDream วิดีโอได้
หากคุณไม่มี GPU โค้ดจะทำงานบน CPU โดยอัตโนมัติ แต่จะช้ากว่าเล็กน้อย (โดยเฉพาะสำหรับวิดีโอ)
หากคุณมีปัญหาในการทำความเข้าใจ DeepDream ฉันได้จัดทำภาพรวมของอัลกอริทึมในวิดีโอนี้:
และ Jupyter Notebook ที่ฉันสร้างก็เป็นจุดเริ่มต้นที่ดีที่สุด!
ฉันพบว่า repos เหล่านี้มีประโยชน์ (ในขณะที่พัฒนาอันนี้):
ฉันพบภาพที่ฉันใช้ที่นี่:
ตอนนี้รูปภาพอื่นๆ เป็นแบบคลาสสิกแล้วในโลกของ NST และ DeepDream
โมเดลที่ได้รับการฝึกล่วงหน้าของ Places 365 มาจาก repo ที่ยอดเยี่ยมนี้
หากคุณพบว่าโค้ดนี้มีประโยชน์สำหรับการวิจัยของคุณ โปรดอ้างอิงข้อมูลต่อไปนี้:
@misc{Gordić2020DeepDream,
author = {Gordić, Aleksa},
title = {pytorch-deepdream},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/gordicaleksa/pytorch-deepdream}},
}
หากคุณต้องการมีเนื้อหาที่เกี่ยวข้องกับ AI ในชีวิตของคุณมากขึ้น ลองพิจารณา: