การจัดประเภทรูปภาพ Tensorflow 2.0: ติดตั้ง โหลดข้อมูล สร้างและฝึกอบรมโมเดล

เผยแพร่แล้ว: 2020-04-21

การจัดประเภทรูปภาพเป็นหมวดหมู่ของการจดจำรูปแบบ จำแนกภาพตามความสัมพันธ์ระหว่างพิกเซลที่อยู่ใกล้เคียง กล่าวอีกนัยหนึ่งคือใช้ข้อมูลตามบริบทเพื่อจัดระเบียบรูปภาพและค่อนข้างเป็นที่นิยมในเทคโนโลยีต่างๆ เป็นหัวข้อที่โดดเด่นใน Deep Learning และหากคุณกำลังเรียนรู้เกี่ยวกับเรื่องนี้ คุณจะต้องชอบบทความนี้อย่างแน่นอน

ที่นี่ เราจะดำเนินการจัดประเภทรูปภาพ TensorFlow เราจะสร้างแบบจำลอง ฝึกฝน และปรับปรุงความแม่นยำในการจำแนกรูปภาพของกระบองเพชร TensorFlow เป็นแพลตฟอร์มการเรียนรู้ของเครื่องโอเพนซอร์สและผลิตภัณฑ์ของ Google

มาเริ่มกันเลย.

สารบัญ

ติดตั้ง TensorFlow 2.0

ขั้นแรก คุณจะต้องติดตั้ง TensorFlow บน Google Colab คุณสามารถติดตั้งผ่าน pip:

!pip ติดตั้ง tensorflow-gpu==2.0.0-alpha0

จากนั้นเราจะตรวจสอบการติดตั้ง:

นำเข้าเทนเซอร์โฟลว์เป็น tf

พิมพ์ (tf.__ รุ่น)

# เอาต์พุต: 2.0.0-alpha0

แหล่งที่มา

เรียนรู้: 5 โครงการ TensorFlow ยอดนิยมสำหรับผู้เริ่มต้น

โหลดข้อมูล

หลังจากการตรวจสอบแล้ว เราสามารถโหลดข้อมูลโดยใช้ tf.data.dataset เราจะสร้างตัวแยกประเภทที่กำหนดว่ารูปภาพมีแคคตัสหรือไม่ ต้นกระบองเพชรต้องเป็นแนวเสา เราสามารถใช้ชุดข้อมูล Cactus Aerial Photos เพื่อจุดประสงค์นี้ได้ ตอนนี้ เราจะโหลดพาธของไฟล์พร้อมกับป้ายกำกับ:

train_csv = pd.read_csv('data/train.csv')

# เติมชื่อไฟล์ภาพในรถไฟ / ด้วยเส้นทางที่เกี่ยวข้อง

filenames = ['train/' + fname สำหรับ fname ใน train_csv['id'].tolist()]

labels = train_csv['has_cactus'].tolist()

train_filenames, val_filenames, train_labels, val_labels =

train_test_split (ชื่อไฟล์

ฉลาก

train_size=0.9,

random_state=42)

เมื่อเรามีป้ายกำกับและชื่อไฟล์แล้ว เราก็พร้อมที่จะสร้างอ็อบเจ็กต์ tf.data.Dataset:

train_data = tf.data.Dataset.from_tensor_slices (

(tf.constant(train_filenames), tf.constant(train_labels))

)

val_data = tf.data.Dataset.from_tensor_slices (

(tf.constant(val_filenames), tf.constant(val_labels))

)

แหล่งที่มา

ในขณะนี้ ชุดข้อมูลของเราไม่มีภาพจริง มีเพียงชื่อไฟล์เท่านั้น เราต้องการฟังก์ชันเพื่อโหลดรูปภาพที่จำเป็นและประมวลผลเพื่อให้เราสามารถจดจำรูปภาพของ TensorFlow ได้

IMAGE_SIZE = 96 # ขนาดรูปภาพขั้นต่ำสำหรับใช้กับ MobileNetV2

BATCH_SIZE = 32

# ฟังก์ชั่นในการโหลดและประมวลผลล่วงหน้าแต่ละภาพ

def _parse_fn(ชื่อไฟล์, ป้ายกำกับ):

img = tf.io.read_file(img)

img = tf.image.decode_jpeg(img)

img = (tf.cast(img, tf.float32)/127.5) – 1

img = tf.image.resize (img, (IMAGE_SIZE, IMAGE_SIZE))

ส่งคืน img, label

# รัน _parse_fn ทับแต่ละตัวอย่างในชุดข้อมูล train และ val

# สับเปลี่ยนและสร้างแบตช์

train_data = (train_data.map (_parse_fn)

.shuffle(บัฟเฟอร์_size=10000)

.batch (BATCH_SIZE)

)

val_data = (val_data.map (_parse_fn)

.shuffle(บัฟเฟอร์_size=10000)

.batch (BATCH_SIZE)

)

แหล่งที่มา

การสร้างแบบจำลอง

ในตัวอย่างการจัดหมวดหมู่รูปภาพ TensorFlow เราจะสร้างแบบจำลองการเรียนรู้การถ่ายโอน โมเดลเหล่านี้ทำงานได้รวดเร็วเนื่องจากสามารถใช้โมเดลการจำแนกรูปภาพที่มีอยู่ซึ่งผ่านการฝึกอบรมมาก่อน พวกเขาต้องฝึกชั้นบนของเครือข่ายใหม่เท่านั้นเนื่องจากเลเยอร์นี้ระบุคลาสของรูปภาพที่ต้องการ

เราจะใช้ Keras API ของ TensorFlow 2.0 เพื่อสร้างแบบจำลองการจัดประเภทรูปภาพของเรา และเพื่อจุดประสงค์ในการเรียนรู้การถ่ายโอน เราจะใช้ MobileNetV2 เป็นตัวตรวจจับแอตทริบิวต์ เป็นเวอร์ชันที่สองของ MobileNet และเป็นผลิตภัณฑ์ของ Google น้ำหนักเบากว่ารุ่นอื่นๆ เช่น Inception และ ResNet และสามารถทำงานบนอุปกรณ์พกพาได้ เราจะโหลดโมเดลนี้บน ImageNet ตรึงน้ำหนัก เพิ่มส่วนหัวของการจัดหมวดหมู่และเรียกใช้โดยไม่มีเลเยอร์บนสุด

IMG_SHAPE = (IMAGE_SIZE, IMAGE_SIZE, 3)

# โมเดลฝึกหัดด้วย MobileNetV2

base_model = tf.keras.applications.MobileNetV2(

input_shape=IMG_SHAPE,

include_top=เท็จ,

น้ำหนัก = 'imagenet'

)

# ตรึงตุ้มน้ำหนักแบบจำลองล่วงหน้า

base_model.trainable = เท็จ

# หัวหน้าการจำแนกประเภทฝึกได้

maxpool_layer = tf.keras.layers.GlobalMaxPooling2D()

Predict_layer = tf.keras.layers.Dense (1, การเปิดใช้งาน = 'sigmoid')

# หัวการจำแนกชั้นพร้อมตัวตรวจจับคุณสมบัติ

รุ่น = tf.keras.Sequential([

base_model,

maxpool_layer,

คำทำนาย_เลเยอร์

])

learning_rate = 0.0001

#รวบรวมโมเดล

model.compile(optimizer=tf.keras.optimizers.Adam(lr=learning_rate),

การสูญเสีย='binary_crossentropy',

เมตริก=['ความแม่นยำ']

)

แหล่งที่มา

คุณควรใช้เครื่องมือเพิ่มประสิทธิภาพ TensorFlow หากคุณกำลังจะฝึกโมเดล tf.keras เครื่องมือเพิ่มประสิทธิภาพใน tf.keras.optimizers และ tf.train APIs ทำงานร่วมกันใน tf.keras.optimizers ของ TensorFlow 2.0 ใน TensorFlow 2.0 เครื่องมือเพิ่มประสิทธิภาพดั้งเดิมจำนวนมากของ tf.keras ได้รับการอัปเกรดและการเปลี่ยนเพื่อประสิทธิภาพที่ดีขึ้น ช่วยให้เราสามารถใช้เครื่องมือเพิ่มประสิทธิภาพได้โดยไม่กระทบต่อประสิทธิภาพและประหยัดเวลาด้วย

อ่าน: บทแนะนำการตรวจจับวัตถุ TensorFlow สำหรับผู้เริ่มต้น

เรียนรู้ หลักสูตรวิทยาศาสตร์ข้อมูล จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

การฝึกโมเดล

หลังจากที่เราสร้างแบบจำลองแล้ว เราก็สามารถสอนมันได้ tf.keras API ของ TensorFlow 2.0 รองรับ tf.data API ดังนั้นคุณต้องใช้อ็อบเจ็กต์ tf.data.Dataset เพื่อจุดประสงค์นี้ มันสามารถดำเนินการฝึกอบรมได้อย่างมีประสิทธิภาพ และเราไม่ต้องประนีประนอมกับประสิทธิภาพการทำงาน

num_epochs = 30

steps_per_epoch = รอบ (num_train)//BATCH_SIZE

val_steps = 20

model.fit(train_data.repeat(),

ยุค=num_epochs,

steps_per_epoch = steps_per_epoch,

validation_data=val_data.repeat(),

validation_steps=val_steps)

แหล่งที่มา

หลังจากผ่านไป 30 ยุค ความแม่นยำของโมเดลจะเพิ่มขึ้นอย่างมาก แต่เราสามารถปรับปรุงเพิ่มเติมได้อีก จำได้ไหมว่าเราพูดถึงการแช่แข็งน้ำหนักระหว่างการโอนย้ายการเรียนรู้ ตอนนี้เราได้ฝึกหัวหน้าการจัดหมวดหมู่แล้ว เราสามารถยกเลิกการตรึงเลเยอร์เหล่านั้นและปรับแต่งชุดข้อมูลของเราเพิ่มเติมได้:

# ยกเลิกการตรึง MobileNetV2 . ทุกชั้น

base_model.trainable = True

# ตรึงเลเยอร์ใหม่จนเป็นเลเยอร์ที่เราต้องการปรับแต่ง

สำหรับเลเยอร์ใน base_model.layers[:100]:

layer.trainable = เท็จ

# ใช้อัตราการเรียนรู้ที่ต่ำกว่า

lr_finetune = learning_rate / 10

# คอมไพล์โมเดลใหม่

model.compile(loss='binary_crossentropy',

เครื่องมือเพิ่มประสิทธิภาพ = tf.keras.optimizers.Adam(lr=lr_finetune),

metrics=['ความถูกต้อง'])

# เพิ่มระยะการฝึกอบรมสำหรับการปรับแต่ง

fine_tune_epochs = 30

Total_epochs = num_epochs + fine_tune_epochs

# ปรับแต่งรุ่น

# หมายเหตุ: ตั้งค่า initial_epoch เพื่อเริ่มการฝึกหลังจาก epoch 30 ตั้งแต่เรา

#อบรมมาแล้ว 30 ยุค

model.fit(train_data.repeat(),

steps_per_epoch = steps_per_epoch,

ยุค=total_epochs,

initial_epoch = num_epochs,

validation_data=val_data.repeat(),

validation_steps=val_steps)

แหล่งที่มา

30 ยุคต่อมา ความแม่นยำของแบบจำลองดีขึ้นอีก ด้วยยุคที่มากขึ้น เราเห็นการปรับปรุงในความแม่นยำของแบบจำลองมากขึ้น ตอนนี้ เรามีโมเดลการรู้จำภาพ TensorFlow ที่เหมาะสม ซึ่งสามารถจดจำกระบองเพชรแบบเสาในภาพได้อย่างแม่นยำ

อ่านเพิ่มเติม: แนวคิดโครงการ Tensorflow สำหรับผู้เริ่มต้น

เรียนรู้เพิ่มเติมเกี่ยวกับการจัดประเภทรูปภาพ TensorFlow

API ที่ใช้งานได้สูงของ TensorFlow และความสามารถของ TensorFlow ทำให้เป็นเทคโนโลยีที่ทรงพลังสำหรับโปรแกรมเมอร์ทุกคน API ระดับสูงยังช่วยขจัดความซับซ้อนทั่วไป ทำให้ใช้งานได้ง่ายขึ้น

คุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ TensorFlow การจัดประเภทรูปภาพ และหัวข้อที่เกี่ยวข้องหรือไม่? จากนั้นเราขอแนะนำให้คุณ ตรวจสอบประกาศนียบัตร PG ของ IIIT-B และ upGrad ในการเรียนรู้ด้วยเครื่องและ AI ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 450 ชั่วโมง กรณีศึกษาและการมอบหมายมากกว่า 30 กรณี สถานะศิษย์เก่า IIIT-B 5+ โครงการหลักและความช่วยเหลือด้านงานกับบริษัทชั้นนำ

หลักสูตรการเรียนรู้ของเครื่อง | เรียนออนไลน์ IIIT บังกาลอร์‎

PG DIPLOMA ในการเรียนรู้ของเครื่องและ AI ด้วยการอัพเกรดและ IIIT บังกาลอร์
ลงทะเบียนเลย