การจัดประเภทรูปภาพ 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+ โครงการหลักและความช่วยเหลือด้านงานกับบริษัทชั้นนำ